Основные RI вопросы:
Что такое RenderMan?
Какие входные данные используются в RenderMan совместимых рендерерах?
Как применить готовый шейдер в своей сцене?
Как оптимизировать скорость рендеринга?
Реализации:
Что такое BMRT?
RenderDotC – Что это такое?
Возможно ли совместное использование PRMan вместе с BMRT?
SLC – открытый ли это формат?
Разное:
Где достать бесплатные шейдеры?
С помошью чего экспортировать сцену из какого либо приложения в RenderMan?
Как использовать BMRT из MTOR?
AL (Animation Language). Что это такое?
Как сделать поверхность маскирующей?
Как добиться, чтобы в сцене были объекты, созданные в PaintEffect?
Как создать «нормальное» стекло, используя Slim?
Можно ли при помощи SL назначать материалы и соответственно текстуры на
определенные фейсы, а не на целые объекты?
Что делать, если Alfred постояно выводит сообшение "no huntgroup match(XXX|XXX)"?
Терминология:
SL = Shading Language
PRMan = Pixar's PhotoRealistic RenderMan product
BMRT = Blue Moon Rendering Tools
Основные RI Вопросы:
Что такое RenderMan?
Это стандарт описания трехмерных данных для их последующей визуализации (в
FAQ по Рендерману написано:"это стандартный интерфейс между программами моделирования
и рендеринга для создания фотореалистичного качественного изображения.").
Также наиболее часто под этим под словом RenderMan "скрывается" продукт
осушествляющий рендериг из RI, то есть реализация фирмы Pixar "Pixar's PhotoRealistic
RenderMan product", сокращенно PRMan. Главный бинарный файл так и называется
- prman.exe. К нему прилагается ряд вспомогательных, но не менее важных: компилятора
шейдеров (shader.exe), конвертера в формат PRMan текстур (txmake.exe) и т.д.
RenderMan стандарт используется с 1987 года многими известными продакшен хаусами,
поэтому о нем и говорят, как о стандарте в современном мире рендеринга.
Какие входные данные используются в RenderMan совместимых рендерерах?
В RenderMan совместимых рендерерах используются файлы с расширением *.rib;
в них описывается сцена и делаются ссылки на шейдеры, используемые в этой сцене.
Шейдеры имеют расширение *.sl в аски-формате(исходный текст) и *.slo – PRMan,
*.slc – BMRT, *.dll – RenderDotC – в двоичном, то есть откомпилированные.
Как применить готовый шейдер в своей сцене?
Во-первых, нужно почитать документацию к тому рендереру, с которым ты собираешься
их применять. Для примера возьмем BMRT.
Существует две ситуации - есть файл example.sl или example.slс.
Если это файл example.sl – то это исходный текст шейдера. Для применения нужно
скомпилировать данный шейдер командой
slc.exe example.sl
Получится файл example.slс который будет являтся готовым файлом шейдера
для BMRT, если же у вас в распоряжении был только файл example.slс, то считайте
его уже готовым шейдером просто без наличия исходного кода.
Далее можно рендерить сцену, в которой используется Surface/Displacement/etc.
"example"
Скомпиллированные шейдеры можно использовать в пакетах, подключаюшихся к программам
моделинга и анимации.
MaxMan (3DS Max) для подключения и управления параметрами шейдера создает таблицы
параметров. Процедура подключения описана в документации.
В *TOR (Компонент програмного комлекса – RAT – RenderMan Artistic Tools, для
пакетов Maya - MTOR и Power Animator - ATOR) для подключения шейдеров используется
Slim.
Как оптимизировать скорость рендринга? Просчет простой сцены (48000 полигонов)
занимает (Dual Celeron 533, 256 RAM) достаточно большее время... И что «лучше»
и что «быстрее»: BMRT или PRMan?
1. Сцена достаточно простая для того, чтобы выигрыш производительности
при использовании PRMan был ощутимыми по отношению к другим программам рендеринга.
То есть для того, чтобы заметить увеличение производительности, нужно использовать
хотя бы один из этих компонентов:
гораздо большие сцены
просчет в высокое разрешение (начиная с 1K)
также применять NURBS или Patch поверхности, которые PRMan может обсчитывать
с гораздо большей производительностью
применение эффектов Motion Blur и Depth of Field
применение дисплэйсмента
большое количество текстур
ну и самое главное нужно рендерить именно анимацию, а не статические изображения,
используя при этом сетевой рендеринг с заранее скопироваными (можно конечно и
не копировать) на локальные машины текстурами
2. Для того, что бы использовать два или более процессора, в PRMan нужно
использовать сетевой рендринг (даже если компьютер всего один), при этом на этом
компьютере нужно увеличить количество запускаемых процессов редеринга до количества
имеющихся процессоров.
3. Научитесь настраивать общие настройки сцены, такие как samples, filtering,
shadingrate, gridsize, texturememory, bucketsize и т.д. Дополнительная информация
по этому поводу – например, в file://%RMANTREE%/html/Toolkit/AppNotes/appnote.3.html
4. При простом просчете поверхностей BMRT медленней чем PRMan, в 4-5
раз. Разница уменьшается до приблизительно двух раз при задачах, содержащих просчет
теней и отражений (при условии необходимости достижения приблизительно одинакового
качества) т.к BMRT для этого использует трассировку лучей, а PRMan осуществляет
множественные дополнительные просчеты геометрии с различных точек с последующим
преобразованием в текстурные карты.
Реализации:
Что такое BMRT ?
Автор Larry Gritz. BMRT (Blue Moon Rendering Tools) – RenderMan совместимый
рендерер. Он поддерживает рейтрейсинг и радиосити, объемный свет, полную реализацию
Shading Language, шейдеры объема и экрана (imager), дисплейсмент и другие расширенные
возможности. Он также поставляется вместе с пакетом для просмотра RIB в реальном
времени (используя OpenGL). BMRT работает на SGI, Linux, Solaris, FreeBSD, Windows
95/98/NT, DEC (OSF и Alpha Linux). Подробное описание на http://www.bmrt.org .
RenderDotC – Что это такое?
RenderDotC (RDC), пишет Rick Lamont из Dot C Software. Это RenderMan совместимый
REYES рендерер для Windows 95/NT, SGI и Linux. Не вычисляет рейтрейсинг и радиосити.
По функциональности похож на PRMan –немного медленней, но быстрей чем BMRT. Более
полная информация доступна на http://www.dotcsw.com/
Возможно ли совместное использование PRM an вместе с BMRT? Так чтобы всю
геометрию рендерил PRMan, а рэй трейсинг, радиосити - BMRT? Возможно ли под NT
вызывать BMRT *из-под* Prman'а в качестве rayserver'а?
Использование PRMan вместе с BMRT в таком ключе возможно. Это описано в документации
к BMRT, а также на в Advanced RenderMan:Beyond the Companion - Siggraph 1999 Course
25, и Siggraph 1998 Course 11 (Их можно скачать с http://www.renderman.org). Но
эта задача не из легких, так как нужно располагать и BMRT и PRMan под одну платформу.
Проблема в том, что этой платформой не может быть WinNT.
Суть в том, что пока в комплекте с BMRT/Win32 не поставляется очень нужная
библиотека для совместного рендеринга. Это связано с проблемой портации BMRT с
Unix на систему Windows. BMRT поставляется практически под все доступные Unix
ситсемы. Следовательно, для решения поставленной задачи нужно использовать PrMan
под соответсвуюшию Unix систему (например Linux или FreeBSD).
Или же остается старый проверенный способ. Использовать BMRT там, где этотого
требует ситуация, а для остальных элементов сцены использовать PRMan, а затем
делать компоузинг в пакете, которым вы располагаете (Например AE, DF, Shake).
В сложившившийся ситуации с портингом BMRT под NT, возможно, виноват занимающийся
этим человек –«Wave» , который – по его собственному признанию – в NT не разбирается
и это его первая программа для неё. Поэтому реализация всего «динамического»,
что уже есть в BMRT под другими платформами – DSO шейдеров и соответсвенно
rayserver.dso – отложено на некоторое время.
SLC – открытый ли это формат?
SLC - закрытый приватный формат шейдеров, скомпиллированных в байт код для
непосредственного рендеринга в BMRT. Аналогом в PRMan является формат SLO. Формат
меняется от версии к версии и совместимость не гарантируется.
Для использования формата из своих программ рекомендуется поставляемая вместе
с BMRT библиотека libslcarg.lib, для использования которой в Delphi я сделал оболочку
slcargwrap.dll (доступна на моем
сайте в сорцах).
Вкратце, все. Еще раз, формат SLC/SLO это бинарный формат, который редактировать
не рекомендуется, и используются эти файлы исключительно в процессе рендеринга.
Различные:
Где достать бесплатные шейдеры?
http://www.renderman.org
http://www.bmrt.org
Далее по ссылкам.
С помошью чего экспортировать сцену из какого либо приложения в RenderMan?.
Предположим из 3DS Max?
Для генерации *.rib и шейдеров используются MTOR(Maya), MaxMan(3DS Max) и т.д
Как использовать BMRT из MTOR)?
Если речь идет об использовании MTOR + BMRT - RenderMan то:
1. Проверьте, что BMRT установлен корректно (В основном это касается переменных
окружения)
2. В директории %RATTREE%\bin
сделай фаил slimBmrtRender.bat, который должен содержать следующий текст:
-------------------
rendrib %1
sho -dspy slim -dspyfile %2 %2
rm -f %2
-------------------
3. В той же директории сделай файл slcmtor.bat (спасибо JinnDOS), который должен
содержать:
------------------
slc -I%1 %2
------------------
4. В директории %RATTREE%\etc
зайди в slim.ini и добавь строку следуюшего содержания:
------------------
LoadExtension slim [file join $templates bmrt.slim]
------------------
5. В директории %RATTREE%\lib\slim
создайте файл bmrt.slim, в который скопируйте следующий текст:
## --------------------------------------------------------
#
# bmrt.slim
#
#
slim 1 extensions pixardb {
extensions pixar pxsl {
template color BMRTReflections {
label "BMRT Reflections"
description "Collects coherent ray traced reflections. Also you should specify BMRT's slc as your secondary shader compiler."
parameter float Kr {
description "Multiplier for reflections."
detail varying
subtype slider
range {0 2 .01}
default .25
}
parameter color reflFilter {
label "Reflection Filter"
default {1 1 1}
}
parameter color cResult {
display hidden
access output
detail varying
default {1 1 1}
}
RSLFunction {
void
pxslBMRTReflections(
float Kr;
color reflFilter;
output color cResult;)
{
extern point P;
extern vector I;
extern normal N;
normal Nf = faceforward(normalize(N), I);
vector IN = normalize(I);
vector Rdir;
Rdir = reflect (IN, Nf);
Rdir = normalize(Rdir);
color ev;
if (Kr > 0.001) {
ev = Kr * trace(P, Rdir);
} else {
ev = 0;
}
cResult = (reflFilter * ev);
}
}
}
template color BMRTRefractions {
label "BMRT Refractions"
description "Refractions. Just choose appropriate settings for the Refraction effects. Also you should specify BMRT's slc as your secondary shader compiler."
parameter float IOR {
label "Refraction Index"
description "The relative index of refraction."
subtype slider
range {0 2 .01}
default 1.3
}
parameter float Kt {
description "Multiplier for refraction."
detail varying
subtype slider
range {0 2 .01}
default 1.0
}
parameter color refrFilter {
label "Refraction Filter"
detail varying
default {1 1 1}
}
parameter color cResult {
display hidden
access output
detail varying
default {1 1 1}
}
RSLFunction {
void
pxslBMRTRefractions(
uniform float IOR;
float Kt;
color refrFilter;
output color cResult;)
{
extern point P;
extern vector I;
extern normal N;
normal Nf = faceforward(normalize(N), I);
vector IN = normalize(I);
float eta;
if (I.N < 0) {eta = 1.0/IOR;}
else {eta = IOR;}
vector Tdir;
Tdir = refract(IN, Nf, eta);
Tdir = normalize(Tdir);
color ev;
if (Kt > 0.001) {ev = Kt * trace(P, Tdir);}
else {ev = 0;}
cResult = (refrFilter * ev);
}
}
}
}
}
После этого когда вы запустите Slim в нем появятся два новых два новых color
элемента:
· BMRT Reflections
· BMRT Refractions
Которые можно добавлять в AdditiveFX в качестве канала поверх основного материала.
Вариантов масса, тэмплыйт примитивный и даже не использует fresnel но на его основе
можно сделать что нибудь более продвинутое.
6. В Maya загрузите MTOR. Зайдите в RenderMan / Workspace Editor где
в закладке Resource Locations / torShaders вместо /rmanshader руками
напиши прямой путь (на пример) :/Projects/TestBMRT/rmanshader тоже сделай и для
текстур (которые туда и складируй (которые должны быть tif-ами)) потом нажмите
на Apply. В директории вашего Maya проекта при этом появиться файл RATworkspace.ws
который очень важен и удалять его не следует так как иначе придется пункт 6
придется повторить заново.
7. Зайдите RenderMan - Slim – Preferences где в закладке Misc
проверь что бы Full Paths была выключена (то есть чек бокс должен быть
выключен) а в закладке Expert включите
Expert Menus , в строке Secondary Compiler введите slcmtor.bat
%I %f
а в строке Render напишите slimBmrtRender.bat %f %i
8. Зайдите в RenderMan - RenderMan Globals
Display Server выбери framebuffer
Spool - Job Setup - Renderer поставь в положение custom
Spool - Job Setup - Custom в строке Renderer пропиши rendrib
9. Собсвенно все.
Что это такое AL (Animation Language)?
Автор Steve May из Ohio State University. Animation Language (язык анимации)
– это menv (система анимации, используемая студией Pixar) в «миниатюре», это скриптовый
язык анимации. Имеет возможность как программирования с помощью скриптовых функций,
так и настройки анимации с помощью GUI. Работает под Linux и UNIX платформах,
реализация под NT отсутствует. Больше информации доступно на:
http://www.cgrg.ohio-state.edu/~smay/AL
Как сделать поверхность маскируешей? То есть, что бы поверхность
стала, скажем так, абсолютно черной и при этом также прозрачной для альфа канала?.
Для это в RenderMan сушествует специальный параметр поверхности "matte".
Нужно что бы в поле этой поверхности была строка "matte 1"(без кавычек).
Вы может это сделать "руками" или с помошью вашей програмыы или скрипта
и т.д. Или если же вы используете
В Mtor (Maya) нужно в палитре Slim нужно завести RibBox со следующей строчкой
внутри и назначить его нужной вам поверхности:
---------
matte 1
---------
В пакете MaxMan (3DS Max) нужно использовать параметр объекта matte который
нужно включить.
Как добиться того, чтобы в сцене были объекты, созданные в PaintEffect ?
Что сделать, чтобы RenderMan их "увидел" или для него есть аналогичные
шейдеры?
Нет, это невозможно, по крайней мере сейчас. Paint Effects - это вообще 2.5D
технология, накладывающаяся после рендеринга. Поэтому она не может переводиться
MTOR'ом в RIB. Единственный путь - это использование композитига.
Как создать «нормальное» стекло используя Slim ?
Если коротко, то сушествует некоторая вероятность того, что все ниже написаное
имеет некотурую ценность
Все что вы должны сделать...
Неправильно:
CI = Opacity * (Ambient Color + Difuse Color + Specular Color)
Правильно:
CI = Opacity * (Ambient Color + Difuse Color) + Specular Color
Изменения в темплэйтах slim:
Shadingmodels.slim
Plastic:
CI = SurfaceOpacity * (SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf))) + SpecularColor
* Ks * specular(Nf,V,Roughness);
FresnelPlastic:
CI = SurfaceOpacity * (Ka * SurfaceColor * ambient()) + env;
Metal:
CI = SurfaceOpacity * SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf)) + Ks *
specular(Nf,-normalize(I),Roughness);
Jewel:
CI = SurfaceOpacity * ( Incandescence + SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf)))
+ cSpec * Ks * jewel(P, Nf, V, Roughness);
Blin:
CI = OI * SurfaceColor * (Ia + Id + Itr + Incandescence) + Isr;
Gooch:
CI = SurfaceOpacity * ((Ka*ambient() + Kd*Cgooch) + specularcolor * Ks * specular(Nf,-normalize(I),roughness));
Velvet:
CI = SurfaceOpacity * SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf)) + shiny;
LgNaa.slim
ThinPlastic:
CI = SurfaceOpacity * (SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf) + Kt*diffuse(-Nf)))+
Ks * specular(Nf, -normalize(I), roughness);
Ceramic:
CI = SurfaceOpacity * (SurfaceColor * (Ka*ambient() + Kd * diffuse(Nf)))+ Ks
* Glossy(Nf, -normalize(I), roughness, sharpness);
BrushedMetal:
CI = SurfaceOpacity * SurfaceColor * (Ka*ambient() + Kd*diffuse(Nf)) + Ks*spec;
Можно ли при помощи SL назначать материалы и соответственно текстуры на
определенные фейсы а не на целые объекты? То есть как сделать так, чтобы на фейс
№1 можно было бы положить текстуру "1".... а на 2 и 3 текстуру "2"...
То есть фейс является идентификатором... И также немаловажное условие - использование
Maya UV параметров для полигонов...
Maya UV -> передаются текстурные координаты -> можно это фейс отделить
и куда-нибудь в уголок (в UV editor) оттащить -> у него UV будут, скажем, от
(0,0) до (0.1,0.1) -> в коде шейдера это дело анализировать:
----------------
ss = (s < 0.1)? 1: 0;
tt = (t < 0.1)? 1: 0;
----------------
ну и все, дальше по этим условиям подставлять нужную карту:
----------------
mapval = (ss*tt==1)? color texture (colorMap1, s, t): color texture (colorMap2,
s, t);
-----------------
Это что касается частного решения задачи. В общем же в RSL нет обобщенного
метода обращения к энному полигону, поэтому написать так, что у энного полигона
- такая текстура, а у остальных - другая - не получится. Если же очень хочется
сделать это придется разделить модель на части ну и назначить каждой из этих частей
соответствующий шейдер.
Что делать, если Alfred постояно выводит сообшение "no huntgroup
match(XXX|XXX)" ?
В версии Alfred под NT существует некоторое количество недоработок, связаных
с работой GUI а также с процессом инсталяции… Как правило пользователь пытается
отрендрить свой «первый» кадр из Mtor. При нажатии кнопки Render запускается
процесс парсинга и всплывает окно Alfred (Если оно у вас появилось, есть повод
и порадоваться, более ранние беты этого продукта могли просто не появлятся
на экране). В строке сообшений Alfred появляется лаконичное собшение такого вида
– "no huntgroup match(XXX|XXX)". И, как правило, все именно так и есть,
то есть по мнению Alfred нет соответствующего сервера, чтобы запустить задачу
(pixarRender, pixarNRM, pixarMTOR, pixarATOR), и все это из-за некоррекного
конфигурационного файла диспачеринга file://%RATTREE%\etc\alfred.schedule. Некорректное
содержание этого файла может быть по трем причинам:
· некорректно прошла инсталяция RAT (в некоторых версиях для Win платформы)
· вы сами настроили систему таким образом. Например, выключили все компьютеры
из списка доступного для рендеринга и т.д.
· за вас это сделал Alfred GUI, то есть вы хотели добавить новую или/и
переименовать уже существушую /группу компьтеров для рендринга / пользователя
/ временную группу/, а вместо этого Afred GUI умудрился удалить уже существуюшие.
Настоятельно рекомендую разобраться в формате данного файла настроек и редактировать
его вручную в текстовом редакторе, по крайне мере ближайшее время до устранения
разработчиками подобных неожиданностей
Во втором и третьем случаях из директории %RATTREE%\etc\oldSchedules\ нужно
скопировать предыдущий файл конфигурации.
В первом же – и наиболее распространенном - нужно заново создать файл настройки,
вот фрагмент текста который вы должны вставить в файл file://%RATTREE%\etc\alfred.schedule
(Расмотрена универсальная конфигурация для одного локального компьютера):
--------------------------
#
# Конфигурационный файл для однопроцессорного и отдельно взятого локального
компьютера...
# Дальнейшие изменения лежат на вашей совести...
#
set Enabled all
set Crew(all) {everyone Renders always 1}
set TimeGrp(always) 10080
set TimeGrp(never) {0 10080}
set TimeGrp(not-weekday) {1980 600 840 600 840 600 840 600 840 600 840 600
300}
set TimeGrp(weekdays) {0 1980 600 840 600 840 600 840 600 840 600 840 600}
set TimeGrp(weekends) 1440
set UserGrp(everyone) *
set SrvrGrp(Renders) *
set Service(MyComp) {127.0.0.1 1 { pixarRender pixarNRM pixarMTOR } 1}
## --- Ограничения задаются при помощи различных имен тагов;
## используйте -1 для 'неограниченого' количества
## формат: set alfLimit(tagname) {global local [опции для
## отдельно взятого клиента]}
## для примера: set alfLimit(intensive) {-1 1 octane:2}
set alfLimit(ator) {-1 1}
set alfLimit(intensive) {-1 1}
set alfLimit(mtor) {-1 1}
set alfLimit(netrender) {-1 8}
set alfLimit(txmake) {-1 2}
set alfServerPing(default) {Alfping tcp %h 2 2}
set alfServerPing(nrmserver) {Alfping nrm %h 2 1.25 0}
set alfServerPing(pixarATOR) {Alfping nrm? %h 2 1.25 0}
set alfServerPing(pixarMTOR) {Alfping nrm? %h 2 1.25 0}
set alfServerPing(pixarNRM) {Alfping nrm %h 2 1.25 0}
set alfServerPing(pixarRAT) {Alfping nrm? %h 2 1.25 0}
set alfServerPing(pixarRender) {Alfping nrm? %h 2 1.25 0}
--------------------------
|