В этом уроке вы узнаете, как создать эффект анимированной каустики в реальном времени, используя графический движок Unity3D . Несмотря на то, что эта статья посвящена Unity, эти принципы могут быть применены и к другому программному обеспечению.
Что такое каустика?
Если вы наблюдательны, то, возможно, заметили танцующие световые узоры на дне бассейнов летом. Эти световые явления известны в индустрии компьютерной графики как каустики. Каустика вызвана схождением преломленного света в волнах на поверхности воды. Если поверхность воды достаточно спокойная, с небольшими волнами, эти световые узоры более заметны. Это означает, что это явление также может наблюдаться в озерах и море, если вода прозрачная и нет слишком сильных волн на воде.
Расчет этих преломлений света — трудоемкий процесс, особенно если вы делаете графику в реальном времени, поэтому обычной практикой является использование предварительно рассчитанных текстур каустики. Программное обеспечение Caustics Generator можно использовать для создания текстур каустики, которые могут быть мозаичными и зацикленными, что идеально подходит для создания графики в реальном времени.
Как использовать текстуры каустики?
Основной принцип текстурирования каустики заключается в том, что вы проецируете плоскую текстуру света по одной координате на геометрию вашей сцены.
Вы можете встроить этот процесс проецирования света в обычное наложение текстуры ваших объектов, если вы знакомы с программированием пользовательских шейдеров. Стандартный шейдер в Unity включает слот текстуры под названием Emission. Что он делает, так это добавляет световое излучение к поверхности с помощью текстуры, то есть он осветляет базовую текстуру объекта на основе текстуры излучения. Чем белее текстура излучения, тем ярче будет основная текстура.
Текстурирование излучения в UV-координатах с использованием стандартного шейдера Unity
Проблема со слотом Emissive стандартного шейдера в Unity заключается в том, что он на самом деле предназначен не для проецирования, а для обычного текстурирования с использованием UV-координат объекта. Благодаря тому, что Unity предоставляет фактический исходный код для своих шейдеров, мы, тем не менее, можем изменить их код и создать собственный шейдер, который выполняет эту работу и обеспечивает параллельную проекцию в мировом пространстве.
Создание проецирования шейдера в эмиссии
Базовое текстурирование объектов с использованием стандартного шейдера в Unity выполняется в файле с именем UnityStandardCore.cginc. Есть две функции, которые выполняют текстурирование; FragForwardBase () и fragDeferred (). Первый используется, когда ваша камера настроен на использование прямого пути рендеринга, а последний — когда вы используете путь отложенного рендеринга.
Модификация, которую мы собираемся внести в эмиссионную часть шейдера, одинакова для обоих методов рендеринга. Мы собираемся немного изменить вызов Emission () в этих функциях.
Анимация и направление света
Последняя недостающая часть всего текстурирования каустики заключается в том, что нам нужно анимировать текстуру каустики из-за постоянного колебания поверхности воды. Если мы не анимируем текстуру, она будет выглядеть слишком статичной и неестественной. Программное обеспечение Caustics Generator создает последовательность анимированных кадров, которые можно использовать для этой цели.
Мы выполняем анимацию текстуры, добавляя сценарий в Unity к одному из объектов, использующих материал с нашим новым шейдером.
Итог
Текстурирование Caustics обеспечивает последний штрих ко всему рендерингу воды и является обязательным для каждой современной симуляции воды. В этой статье предлагается способ его реализации, который не увеличивает дополнительных затрат на конвейер рендеринга. Пакет, содержащий полностью модифицированные стандартные шейдеры для Unity 5, можно скачать по ссылке ниже. Вы можете свободно использовать этот код в своих собственных проектах Unity. Код в этой статье и модификации стандартных шейдеров Unity предоставляются без лицензии (Public Domain).
Дополнительная информация
Скачать полный код шейдера каустики Сылка
Скачайте с официального сайта: Caustics Generator
Статья взята из сайта
Дополнительная информация о каустике
Ещё один урок о каустике