Давайте рассмотрим несложный пример. Откроем простой RIB с шариком, с которым мы экспериментировали на протяжение всей нашей главы, и настроим в нем величину ShadingRate (файл на диске под именем shadingrate025.rib):

Display ‘‘RenderMan’’ "framebuffer” “rgb”

Format 256 192 1 ShadingRate 0.25 Translate 0 0 2.7650300856 WorldBegin TransformBegin LightSource “ambientlight” 500 “lightcolor” [0.051 0.051 0.051]

LightSource “distantlight" 501 “from” [1 1.5 -1] “to” [0 0 0]

LightSource “distantlight” 502 "lightcolor” [0.2 0.2 0.2]

“from” [-1.3 -1.2 -1.0] “to” [000]

TransformEnd Surface "plastic”

Sphere 1 -1 1 360 WorldEnd

Напускаем prman на этот файл и получаем в результате:

Для продвинутых. В этом примере вы использовали ShadingRate, равный 0.25, то есть 4 вызова шейдера для каждого пикселя. По умолчанию, если величину ShadingRate в сцене не указывать, то она будет выставлена в 0.5. Большинство экспортеров трехмерной сцены в RIB( и SLIM в их числе) специально выставляют ShadingRate - об этом следует помнить, особенно в процессе работы в SLIM’e (выставляющем по умолчанию 5.0), если вам вдруг начнет казаться, что качество картинки в окне предварительного просмотра что-то не очень высокое.

Изменяем значение ShadingRate (файл на диске shadingrate64.rib):

Display “RenderMan” “framebuffer” “rgb”

Format 256 192 1 ShadingRate 64 Translate 0 0 2.7650300856 WorldBegin TransformBegin LightSource “ambientlight” 500

“lightcolor” [0.051 0.051 0.051]

LightSource “distantlight” 501 “from” [1 1.5 -1] “to” [0 0 0]

LightSource “distantlight” 502 “lightcolor” [0.2 0.2 0.2]

“from” [-1.3 -1.2 -1.0] “to” [0 0 0]

TransformEnd Surface “plastic”

Sphere 1 -1 1 360 WorldEnd

После рендеринга видим:

Рендеринг закончился гораздо быстрее, но качество результата оставляет желать лучшего: шейдер вызывался один раз на 64 пикселя, и теперь вы видим границы между сэмплами. Существует простой способ сгладить эти неприятные грани, добавив в RIB-файл где-нибудь рядом с ShadingRate строку

Shadinglnterpolation “smooth”

Prman после этого будет интерполировать значения соседних шейдинг сэмплов, и наш шарик вновь станет гладким. Но на примере с текстурой из файла будет очевидно, что изображение текстуры от этого четче не стало, а всего лишь «размазалось» ло поверхности.

Для продвинутых. Как понять, насколько быстрее закончился рендеринг? Можно посидеть над компьютером с секундомером или песочными часами в руках или написать скрипт, который будет отсчитывать время за вас. А можно вставить в RIB опцию вывода статистики:

Option “statistics” “endofframe” [1]

или

Option "statistics” “endofframe” [2]

в зависимости от того, насколько детальная информация вас интересует. Для наших двух примеров оказывается, что количество сэмплов, которое prman создал в процессе рендеринга для каждой из сцен, равняется 1030 для первой сцены и всего лишь 56 - для второй. Экономия памяти составила 1 мегабайт; экономия времени - несколько раз {поскольку картинка маленькая и простая, то сосчитать точно количество раз сложно даже с такой статистикой - для второй сцены она показала 0 секунд).


⇐ вернуться назад | | далее ⇒