Войти
Nebula CommunityФорум

Шейдеры и рендерпафы (shaders && renderpaths) практика использования (комментарии)

#0
17:49, 10 мая 2007

Шейдеры и рендерпафы (shaders && renderpaths) практика использования (комментарии)

Это сообщение сгенерировано автоматически.


#1
17:49, 10 мая 2007

Скуповатая статья :). Практики использования в статье не нашёл. Жалко что на примере DX7 renderpath, там интересного мало.
Позволю себе дополнить.

1. Раздел <Shaders>. Описаные здесь материалы, в контексте раздела являються просто логическими идентификаторами, с привязкой к .fx файлам.  Аттрибут file указывает где находяться все техники, которые будут использованы для отрисовки даного материала.
Все описаные в разделе <Shaders> материалы могут быть назначены узлам графа сцены, которые являються обьектами класса nMaterialNode или производных от nMaterialNode классов.  nMaterialNode обьекты будут отсортированы  и сгрупированы по ИД материала перед отрисовкой.

2. Рендер таргет.
Вот так вот декларируеться рендер таргет: 

 
<RenderTarget name="SkyScene" format="X8R8G8B8" relSize="1.0" /> 

Имя, формат, относительный размер. 1.0 соответсвует текущему разрешению фронт буфера/экрана.

3. Section - секции, не обладают  какими-либо атрибутами. По-сути, предназначены для разделения разных шагов ренедерига. Пример -  секция  "default" - отрисовка сцены, секция "reflection" - упрощённая отрисовка отраженний. Важное замечание - секции отрисовываютья в том порядке в котором они прописаны в renderpath, как и pass, phase, и sequence.

4. Pass - проходы. Обладают таким важным атрибутом как RenderTarget. При определении Pass, можно указать куда будет выпольняться рендеринг.
Так же у Pass  есть атрибуты shader и technique. Насколько я понял, в Pass-технике,  как правило устанавливаються FFP render states, общие для всех техник в Pass. 
То есть, если мы знаем, что в техниках текущего Pass , не будет использоваться альфа тест то в технике tPass1 пишем

 
AlphaTestEnable   = False;

и в техниках внутри пасса уже не меняем этот стэйт.

Если установлен аттрибут drawQuad , то будет отрисован квад с применением .Pass-техники.
Пример

 
<Pass name="compose" shader="compose" technique="tCompose" drawQuad="Yes">
  <Texture name="DiffMap0" value="Scene" /> 
  <Float4 name="MatDiffuse" variable="Balance" /> 
  <Float4 name="MatAmbient" variable="Luminance" /> 
  <Float name="Intensity0" variable="Saturation" /> 
  </Pass>

В этом Pass, техника  tCompose делает пост-процессинг отрисованой сцены (рендер таргет "Scene"),  результат выводиться квадом.


5. Phase  - фазы. Опять же логическая единица, для дробления Pass. Есть атрибуты shader и technique. На уровне фазы можно указать тип сортировки узлов, модель освещения.

6.Sequence - ну и последовательности. Собственно, здесь определяестся, с использованием какой техники, в текущей фазе, будет отрисован материал. И будет ли отрисован вобще.

Если возникают вопросы, какие атрибуты доступны на конкретном уровне, то их всех можно найти в файле nebula2\code\nebula2\src\renderpath\nrpxmlparser.cc.

Nebula CommunityФорум

Тема в архиве.