True Unity Voxel Renderer
Здравствуйте! спасибо, что заглянули в мою игру!
Что это за программа?
Эта игра/моделирование/инструмент используется для рендеринга изображений «вокселей» с трассировкой пути, а воксели в основном представляют собой просто кубы... Как видно здесь:
Зачем я это сделал?
Я создал этот инструмент, чтобы узнать, как визуализируются воксели. И поскольку в Интернете буквально нет руководств, объясняющих, как это сделать в Unity, мне пришлось сначала провести небольшое исследование.
Теперь я объясню, как я это сделал:
Хорошо, первое, что мне нужно было сделать, это сделать простую сферическую излучатель лучей (не трассировщик лучей или трассировщик путей, а излучатель лучей). Лучевой кастер в основном просто выпускает кучу лучей для каждого пикселя и проверяет, пересекается ли луч с чем-то, и если да, то он рисует цвет для этого пикселя. Сначала я создал простую сферу:
Самый простой объект для рендеринга с помощью генератора лучей — это сфера, но это было не то, что мне нужно! Я хотел использовать вокселы raycast, но проверить, пересекает ли луч воксель, гораздо сложнее, чем проверить, пересекает ли луч сферу. После долгих исследований я наткнулся на этот веб-сайт, который объяснил мне это: https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-box-intersection.
После множества проб и ошибок у меня наконец получилось:
Теперь пришло время перейти к трассировке лучей для вокселей (еще не трассировке их путей, котораяпотом). При трассировке лучей объекта вы в основном говорите лучу отскакивать/отражаться от поверхности, на которую он попадает, что затем создает красивые отражения! После еще нескольких исследований я наткнулся на статью, в которой объясняется, как создать простой шейдер трассировки лучей сферы в Unity: http://three-eyed-games.com/2018/05/03/gpu-ray-tracing-in-unity. -часть-1/
После проб и ошибок я получил следующее:
Но, как вы можете видеть, отражения были сферическими, это было вызвано отражением луча от вокселя, как если бы он был сферой, поэтому дурацкие нормали были рассчитаны неправильно! Оказывается, в сети очень мало информации о вычислении нормалей вокселя.... Но после долгих исследований я нашел статью, которая вселила в меня немного надежды ;), это была статья: https://blog. johnnovak.net/2016/10/22/the-nim-raytracer-project-part-4-calculating-box-normals/ Но после попытки реализовать его в единстве он все еще не работал! ;(
Прошло несколько дней. Но тут меня вдруг осенило! Все, что мне нужно было сделать, это проверить, какая ось переменной попадания луча float3 была целым числом, потому что это подсказывало бы мне, в какую грань куба он попал. Алгоритм выглядел так:
Теперь, прежде чем вы скажете мне, что неразумно иметь так много операторов if в шейдере, я, очевидно, оптимизировал его позже, это просто старый снимок экрана, лол. Но теперь, когда я смог правильно рассчитать нормали, я получил следующее:
что привело к идеальным отражениям вокселей, как можно увидеть здесь:
Была ошибка, из-за которой воксели отображались в неправильном порядке:
Но я быстро это исправил:
Следующим шагом было превращение этого трассировщика лучей в трассировщик пути. У меня это тоже получилось с помощью этой статьи: http://three-eyed-games.com/2018/05/12/gpu-path. -tracing-in-unity-part-2/ и эта формула:
Результаты можно увидеть в этом видео на YouTube:
После создания сцены в Unity, в которой пользователь мог изменять некоторые переменные для экспериментов, я получил то, что имею сегодня:
Как скачать True Unity Voxel Renderer через торрент
Всего несколько простых шагов:
- Устанавливаем программу μTorrent, через которую мы будем скачивать торренты
- Выбираем и скачиваем подходящий торрент-файл репака True Unity Voxel Renderer
- Двойным кликом открываем скаченный файл, программа μTorrent запустится автоматически и предложит выбрать место для сохранения дистрибутива.
- После того как репак скачается, запускайте его. Начнется установка и... это все, приятной игры!