Render.ru

к самым профи :-))

#1
Можно при помощи RI задать поверхность математической формулой
например x*x + y*y + z*z -1=0 или x*x/y+ y*sqrt(y) + sin(z+y) -1=0, и визуализировать эту поверхность?
ОЧЕНЬ интересно.



За самом деле надо визуализировать более сложную поверхность, которой по умолчанию не сущ., в отличие гиперболоида и параболоида.



В techref.pdf к энтропийке читал, что есть полигоны, сплайны (control points), quadrics (параболоиды, торы ...), и процедурныые примитивы. Последние ктонть пробовал юзать?

и еще в файле ri.h есть строчка void RiProcedural (RtPointer data, RtBound bound, RtProcSubdivFunc subdivfunc, RtProcFreeFunc freefunc); - можт это оно?
 
#3
Процедурные примитивы там вроде как только самые простые - типа сферы, цилиндра, тора, куба итд итп.
Если нужно вот прямо так формулу ввести и получить результат, то это либо Houdini - там есть IsoSurface SOP(кажется так назывался), либо какой-нть специализированный софт типа Graphing Calculator(если кто увидит "пофиксенную" версию - свистните плс....а то он $60 стоит 8-[ o ] ).
 
#4
Да Joss, так и называется, в точку.
Это уже делал, но в гудини можно получить только приближенные фигуры с очень маленькой точностью, худини выдает, согласно уравнению, полигональную поверхность, но при нужном количество полигонов любая видюха садится, а рендер виснет, т. к. поверхность состоит из множества маленьких кусочков. (Наример поверхность, визуализацию которой дает плагин к АЕ KPT4 frax4d).

Почитал мануалы с рм, а также некоторые *.с и *.h файлы.
Павильно, ли я понял что:
1. в кипе файлов *.с и *.h специальным образом задаются типы поверхностей и способ их визуалзации?
Нашел там алгоритмы для патчей, полигонов, а также какие-то слова по поводу, что:
2. любой желающий может задать свой тип поверхности, скомпилировать свои файлы в *.sli и генерит любые рибы, подключая нужные библиотеки.

фиг знает, можт 13 октября ктонть подскажет :)))
 
#5
Компилить то можно, только в *.sli то зачем?
Можно написать на Си програмку используя функции из библиотеки librib.lib,
по какому нить алгоритму вычислить точки поверхности и правильно подставить их в вызов соответствующей функции. Потом можно назначить материал, создать источники света, настроить камеру и т.д. для каждого фрейма.

Потом, слинковав с нужными библиотеками, получить исполняемй модуль, который будет выдавать в stdout чистый rib. Его можно направить на вход PRMan-a и отрендерить. Этот подход описывался в RenderMan Companion и в Examples, что идут с PRMan-ом.

Но ведь есть Maya, mtor. У Майи есть API, mel наконец. При знании матаппарата и некотором копании в доке, можно написать скрипт или плугин с человеческим интерфейсом и генерить поверхности непосредственно в моделере.
Для примера, на Highend-е был скрипт FunctionCurve, строящий кривые по уравнению.
 
#6
Пара вариантов
Сделать 2 исо
1 - с маленьким division и установленым Display Flag
(для манипуляций во вьюпорте)
2 - с division поболе и установленым Render Flag
(будет генериться только для (и во время) рендера)
Кстати division можно завязать на дистанцию до камеры.

Или сохранить Hi Res как bgeo и использовать Bounded File режим.
для сопа использующего LoRes.
Вконце концов можно (если мат точность не так критична)
установить флаг Geometry as subdivision (а там еще много вариантов есть)
для модели c MiddleRes.
Для маниаков можно ипользовать LoRes модель с прицепленым дисплейсом
который будет додисплейсивать лорес до хайреза.
(Ну тоесть не не P = P + Чототама * Nn а внаглую P = Мое Уравнение)
Но тут придется конечно писать решатель этих самых уравнений.
(смутно себе представляю)
Или ваще написать VolumeISO шейдер использующий принцип
hippertexture и реймарша. На мой взгляд самый приемлимый
(и легко реализуемый) вариант.
 
#7
В общем, если не пользоваться Mel или Houdini и делать всё ручками, то путей я вижу 3:

1. Писать процедурный геометрический DSO
2. Писать генератор рибов, который будет генерить геометрию необходимой плотности по уравнениям
3. Писать displacement shader, который будет делать P=нужное уравнение.

Как говорится, все работы хороши, выбирай на вкус.

> 2. любой желающий может задать свой тип поверхности,
> скомпилировать свои файлы в *.sli и генерит любые рибы,
> подключая нужные библиотеки.

SLI тут ни при чём. Это формат Slim'а.

> фиг знает, можт 13 октября ктонть подскажет :)))

Так что там будет 13 числа? :)
 
#8
"худини выдает, согласно уравнению, полигональную поверхность, но при нужном количество полигонов любая видюха садится, а рендер виснет, т. к. поверхность состоит из множества маленьких кусочков."

Естественно, а как ещё можно описать произвольную поверхность? Нурбами? сомневаюсь, ибо у нурбов достаточно ограниченные топологические возможности...остаются полигоны....другое дело, что SideFX, в общем, мог бы потрудиться и оптимизировать всё это(ну например резать всё, что не во вьюпорте, а остаток сэмплить по полной), правда тоже задача нетривиальная...

1. Не совсем так....все эти .c просто-напросто выдают простой риб, который потом и рендерится. Просто вместо вбивания руками "Display ля-ля-тополя" вы можете написать нечто типа(псевдокод):
for i in range(10)
{
RiDisplay ( "outfile_" + i );
}
и получить в рибе:

Display "outfile_1"
Display "outfile_2"
Display "outfile_3", ну итд итп...

2. Э-э-э...это ихде там такие слова? Может имелись в виду DSO, а не SLI, поскольку SLI - это вроде как язык описания параметров компилированных шейдеров для Glimpse и Slim(я могу ошибаться, но вроде так - Kidd?)
К тому же сделать любой тип поверсти....хмм.....в Renderman'е нету такого понятия - "некая абстрактная поверхность". Есть полигоны, сабдивы, нурбы, кривые....то есть нельзя взять, и вдруг придумать свою собственную поверхность.
Однако можно взять и нагенерить в каком-нть сишнике гигантский риб, который PRMan должен проглотить - он же умеет оперировать с большими объёмами данных....ну то есть гнать данные не из пакета моделирования, а прямо рибгеном их генерить.....

PS: А что случится 13-го октября?
 
#9
С большим кол-вом полигонов боюсь ПРман не справится - не любит он много мелкой геометрии.

ЗЫ. 13 октября, гворят, будет очередная Виагра
 
#10
Если полигоны 4-угольные, то он их все равно рендерит как бикубик патчи, так что разницы особой нет...
 
#11
Более того если они треугольные он их все равно рендерит как патчи :) Именно про это я и говорю - прман не любит большое кол-во отдельной геометрии.
 
#12
Если поверхность действительно такая, что нурбсами ее никак, но известен алгоритм сэмплирования и разбиения на кучу мелких патчей - полигонов или бикубиков - (а формула - как раз такой алгоритм и есть) - RiProcedural - самое то. Почитай RiSpec3.2, там все подробно. По сути это примерно то же самое, что писать С-шный код с ri.h и libribout, только он будет исполняться "на лету", не забивая винт громадными рибами.
 
#13
Ну-у-у....ну можно сделать нечто среднее по плотности и сделать его сабдивом......только ета.....квадранглы придётся генерить..... ;)
Вообще - что за задача-то такая, для которой нужно отрендерить _точную_ поверхность?
 
#14
> Вообще - что за задача-то такая, для которой нужно
> отрендерить _точную_ поверхность?

Не знаю, как в данном случае (подозреваю, что не всё так плохо), но в научной визуализации всё именно так и есть - нужно именно то, что говорит формула. Ну или, как вариант - именно так, как показал долбанный спектрофотометр (пример из реальной университетской жизни :)
 
#15
Огромное спасибо всем за ответы.

Конечно, обычной геметрией, поверхность их нескольких тысяч кусочков не построишь (она процедурная, с итерациями)

Дисплейстментом тож не получилось.
Задача получить Точную поверхность, которую выдает долбанный не спектрофотометр, а другой прибор, но это тоже из реальной университетской жизни (физфак 4к:))).
А кроме того вот такое: http://astronomy.swin.edu.au/~pbourke/fractals/quaternionjulia/
Такие поверхности строят разнывет проги, (povray, у меня есть код проги на си, котороая тоже это делает), но надо в 3d.
Эту фрактальную поверхность выдает плагин к АfterEffects KPT5 frax4d, он строит, например, 240*320 полигончиков и рендерит их, сдледовательно:

для таких вещей надо писать генератор рибов,
который будет генерить геометрию необходимой
под рендер плотности, по уравнениям, т. е. по
полигончику на пикселу отрендеренной картинки
и непосредственно при рендере. ртфм :)))


Кстати, как 13 октября - воскресенье, а семинары обычно в субботу!?
 
#16
анрил.....что я помню из доки по pov-ray, так это то, что эти самые обалденные фракталы - суть проекция из четырёхмерного пространства на трёхмерное.....всего-то.... ;)

И, насколько я понимаю, принцип рендера таких объектов - как раз гипертекстурный, то есть это не совсем реальная геометрия.....
 
#18
ухты, это ж кстати и есть фрактальная поверхность, у меня правда другая, но все равно, спасибо за линк!
 
#19
Jinn - а ты попробуй, обьяви майский cloth сабдивом и порендери его...у меня в своё время получалось нечто вроде дуршлага.....PRMan страдает глючностью на сабдивах с треугольничками....
 
#20
Странно... Я, правда, cloth в сабдивы превращать не пробовал, но все мои сабдивные модели (в том числе и с кучей треугольников) рендерились прекрасно. Имхо дело скорее в некорректной конвертации cloth-овых треугольников мтором...
 
Сверху