ShadingLanguage

Shading Language – это язык программирования для описания вариаций цвета или шейдинга на поверхностях. Программы, написанные на этом языке, называются шейдерами. Шейдеры бывают четырех типов: surface (шейдер поверхности, вычисляющий цвет/прозрачность), light (шейдер источника света, вычисляющий интенсивность источника), displacement (шейдер, изменяющий геометрию) и volume (шейдер описывающий атмосферные эффекты, такие как туман или дым).


Примечание перевода – это не полный список, но наиболее распространённый.



Проще говоря, когда PRman рендерит пиксел, он выпускает луч из этого пиксела, и где луч пересекает поверхность, рендер вызывает соответствующие шейдера для вычисления цвета пиксела. И так этот процесс повторяется для каждого пиксела.


Шейдеры работают с набором данных из сцены, называемым глобальными переменными, которые содержат определенную информацию, такую как точка пересечения луча с поверхностью или положение камеры. Естественно, такие переменные могут содержать в себе разные значения для разных точек поверхности. Большинство процессов в шейдинге сводится к трансформации глобальных переменных в цветные узоры.


Диаграмма слева показывает процесс, происходящий после испускания луча в точку поверхности. Обратите внимание на глобальные переменные (P, N, и.т.д.) и на их направления.


Структура шейдера



где


тип_шейдера: surface, light, displacement или volume.


имя_шейдера: допускаются только букво-цифровые символы и символ подчеркивания (A-Z, a-z, 0–9, _); пробелы не допустимы, чуствительно к регистру.


тип_параметра: float, color, string, point, vector или normal.


имя_параметра: теже правила, что и в имя_шейдера.


значение_по_умолчанию: обязательное значение по умолчанию для параметра, может быть переопределено в RIB коде, должно соответствовать тип_параметра.


тип_переменной: float, color, string, point, vector или normal.


имя_переменной: теже правила, что и в имя_шейдера.


значение_переменной: значение, которое вы присваиваете переменной; должно соответствовать тип_переменной.


оператор_основного_кода: это основная часть шейдера, где и происходят все вычисления.


комментарий: игнорируется шейдером, так что вы можете оставлять там свои замечания.


код_возврата_значения: это то, зачем написан шейдер – чтобы вернуть вычисленное значение рендеру.


Пробелы, табуляции и разрывы строки опциональны; используются только для того чтобы структура программы легко читалась.


Сохранение и использование шейдера


Имя файла с шейдером должно называться точно также, как и сам шейдер, плюс расширение “.sl”. Например, если Ваш шейдер назван myshader, то сохраните его в файле, названным myshader.sl. После того, как Вы сохранили Ваш шейдер, Вы должны откомпилировать его в объектный файл перед тем как Вы сможете его использовать. Так что если Вы только что создали myshader.sl, Вы можете откомпилировать его, написав shader myshader.sl в командной оболочке (Будьте уверены что у вас в системной переменной PATH прописан путь к %RMANTREE%\bin, (прим. пер.)). В этом случае, программа сгенерирует объектный файл, названный myshader.slo.


Написание хороших шейдеров


  • Соберите как можно больше исходного материала (например фотографии или даже сами объекты).
  • Модифицируйте существующие шейдеры.
  • Вам не надо анализировать всё; свободно используйте карты текстур в ваших методах.
  • Не пробуйте решить все в вашем шейдере. Сложные задачи шейдинга могут иногда быть очень просто решены с помощью моделинга/анимации/композинга.
  • Будьте внимательны с антиалиазингом текстур, особенно в анимации.