Водные шейдеры Вода - очень сложный шейдер в Сорсе: она анимированная, отражающая, мутная, искажающая отражение и использует бамп, поэтому нужно знать определенные правила и ограничения по размещению воды, и какую воду использовать в разных случаях. “Дорогая” вода Этот тип воды выглядит лучше всего, но он более ресурсоемок. Такой шейдер будет все отражать, искажать отражения и делать мутным все, что под водой, и воспроизводить анимацию бампа. С одной стороны результаты будут фотореалистичными,а с другой - слишком медленными в комплексных сценах. “Быстрая” вода В ситуациях, когда требуется более простое решение в плане воды(чтобы уменьшить затрату ресурсов системы), может быть использована “быстрая” вода. Она не отражает окружающего пространства, что делает менее реалистичной, но более быстродейственной. Качественная вода будет проигрывать быстрой на видеокартах без поддержки возможностей, нужных для ее правильного рендеринга. Она также будет уступать быстрой воде, если пользователь поставит в настройках плохое качество воды. Создание водного материала Водные материалы делятся на два типа: под водой и над ней. Свойства подводного материала определяются в свойствах надводного. Материал над водой определяет, как будет выглядеть вода, когда на нее смотрят, не находясь в воде, а второй материал - когда игрок под водой. Каждый из материалов может иметь свои свойства. Обычно цвета водных материалов связаны между собой: изменяя свойства одного из материалов, вы можете также изменить мутность воды, степень отражаемости, искажения отражений, цвет воды. Параметры водного материала $abovewater (0,1) Является ли материал надводным. $bottommaterial (имя материала) Обязательно для заполнения. Имя подводного материала. У него должен быть отключен параметр $reflecttexture, он имеет свои собственные параметры отображения, также у него должен быть отключен параметр $abovewater. $bumpframe (целое число) Для анимированных текстур здесь указывается кадр, с которого начнется анимация. $bumpmap (имя материала) Имя бампа воды. Напомню, что бамп используется в dx8, а нормалмапы для dx9, и нужно выбрать что-нибудь одно из них, чтобы результат был удовлетворительным. %compilewater(0,1) Требуется для компиляторов. $envmap (имя материала) Материал для environment map (только для быстрой воды или воды, которая только искажает отражения). Поставьте здесь значение “env_cubemap”, чтобы использовать cubemap`ы карты. $fogcolor { R, G, B } Цвет непрозрачности воды, рекомендуется согласовывать его с цветом подводного материала. $fogenable (0,1) Включить/выключить мутность воды. $fogend (любое число) Расстояние в юнитах(дюймах) от игрока, после которого мутность пропадает. $fogstart (любое число) Расстояние в юнитах(дюймах) от игрока, после которого мутность начинается. Примечание: Лучше всего поставить "0.0", чтобы работало правильно. $forcecheap (0,1) Делает воду быстрой, несмотря на установки ентити water_lod_control. Если включить, $reflecttexture и $refracttexture будут игнорироваться. Отражения будут браться из $envmap, а искажения отражений станут темными, как мутность воды. $forceexpensive (0,1) Делает воду качественной, несмотря на установки ентити water_lod_control $normalmap (имя материала) Указывается имя normal map для воды. Доступно только в dx9. $reflectamount (любое число) Величина дальности отражения - чем больше величина, тем дальше мир виден в отражениях. $reflectentities (0,1) Включает отражение ентитей, если не включить, они не будут отражаться. $reflecttexture (имя материала) Текстура для отражений. Для отражения в реальном времени используйте “_rt_WaterRefraction”. $reflecttint { R, G, B } Цвет отражений реального времени и environment map. $refractamount (любое число) Величина искажения отражений - чем она больше, тем кривее будут отражения. $refracttexture (имя материала) Текстура для искаженных отражений. Для искажения в реальном времени используйте “_rt_WaterRefraction”. $refracttint { R, G, B } Цвет икаженного отражения. Примечание: Рекомендуется поставить белый цвет или что-нибудь близкое к белому, чтобы искажения работали правильно в dx9. $surfaceprop "water" Используется системой имитации физики, чтобы определить объект как воду. %tooltexture (имя материала) Указывает имя текстуры для использования в Хаммере. WaterLOD proxy Объединяет свойства ентити water_lod_control на карте и свойства, указанные в параметрах материала воды. Обязательно укажите этот параметр, иначе LOD-механизм будет работать неправильно.
Источник: http://cs-mapping.com.ua/articles/water/ |