У меня есть бесконечное гексагональное дно, созданное путем тесселяции точечной сетки в паре тесселяционных шейдеров:
Обратите внимание, что это плоский каркас - «тени» - это трюк освещения:
Теперь я хотел бы, чтобы это казалось толстым, преломляющим стеклом, но я не уверен, как поступить.
Первое, что пришло в голову, это
- установить униформу, содержащую запрашиваемую «толщину» блоков
- При расчете освещения используйте закон Снелла, чтобы рассчитать длину оптического пути, который луч прошел бы через шестнадцатеричный блок, если бы он был на самом деле таким же толстым, как говорит форма "толщины", и суммировать альфа по этой длине. Это даст прозрачность, но не учитывает такие вещи, как внутреннее отражение / МДП и т. Д.
Я еще не пробовал, поэтому не уверен, каким будет визуальный результат.
В конечном счете, для этого конкретного уровня, я пытаюсь получить тот стеклянный, шестиугольный вид пола, который используется в Tron: Legacy во время битвы за диск. ( См. Это изображение для примера .)
Предложения?
Ответы:
В этой статье в GPU Gems подробно рассматривается преломление, которое может дать довольно хорошие результаты.
В самом простом смысле
В следующем листинге показан шейдер, демонстрирующий этот подход
Следующие изображения иллюстрируют эти три шага
В той же статье есть более продвинутые методы, которые могут придать гораздо более привлекательный вид
Для аналогичного эффекта в Unity, вы можете взглянуть на вики-страницу The Refraction Shader
источник
Я возьму изображение, которое вы показали, в качестве примера того, как я представляю эффект. Алгоритм, о котором я могу думать, прост:
Что касается рефракционного шейдера, то для имитации стекла вы можете сделать
Я просто подумал об этой идее, поэтому я не проверял ее. Я уверен, что это требует больше работы, может быть, я сделаю, как только вернусь с работы.
источник