VolumeShaders

Глобальная переменнаяТипСодержит в себе
EpointПозиция камеры R
PpointRay origin R
IvectorНаправление луча R
CicolorЦвет луча RW
OicolorПрозрачность луча RW

Шейдер объема – это последний шейдер, вызываемый рендерером перед «попаданием» луча в камеру.
В нем вы можете изменить цвет и прозрачность, полученные от последнего вызванного шейдера поверхности,
до того, как они «отпечатались» в пиксель. Для того, чтобы увидеть результат действия шейдера объема,
вам нужно поместить на задний план поверхность и привязать к ней шейдер объема следующим вызовом из RIB: Atmosphere [volume shader].




Ray marching


В широко используемом методе шейдинга объема под названием “ray marcher” вы
движетесь по лучу от камеры маленькими шагами и собираете значения текстуры в пространстве на пути.
Естественно, чем меньше шаг, тем качественней и медленнее будет рендеринг.



Функция illuminance берет значение света, который светит в точке pos,
в направлении (0, 1, 0) и раскрытом на 180° (PI радиан); мы используем ее
здесь, чтобы собрать значения света в каждом шаге.


Приведём более сложный пример использования данного метода для создания задымленной области:




Как вы наверняка заметили, ray marching работает медленно. Если вы рендерите только объем,
то можно ускорить процесс рендеринга понижением PixelSamples до 1 (без антиалиасинга) и
увеличением ShadingRate для объекта-объема. Так как дым размытый, вы можете
рендерить изображение с меньшим разрешением и растянуть его позже.


Есть возможность усложнить шейдер для создания самозатенения. Идея в том, чтобы
отследить луч из текущей точки к каждому источнику света в сцене, и затем двигаться
вдоль этого луча, чтобы посчитать, сколько света проходит через дым к этой точке.
Вы можете также дым «сделать твердым» и превратить его в виртуальную поверхность – гипертекстуру.
Оба эти эффекта очень тяжелы для просчета, и предназначены, в основном, для опытных пользователей.
Так что мы оставим его за пределами данной лекции. Если вам интересны эти и другие
техники рендеринга объемов, вы можете прочитать о них в книге Advanced Renderman: Creating CGI for Motion Pictures by Anthony Apodaca and Larry Gritz.