Render.ru

Volum Surf

#1
Дело обстоит примерно так
Сурф. шейдер должен рендериться как волум....
Про raysphere.h знаю - спасибо ненадо...всеравно время - лучше повеситься,
а результат приемлим только для сфер. Вторая точка которую
он возвращает не есть точка пересечения I c поверхностью.
Отсюда невозможно ПРАВИЛЬНО заполнить волумом сложный объект (человека)
нормальным образом (с прозрачностью наростающей к краям).
Хочу попробывать следующий способ:
1 проход: просчитать Z depth файл объекта как он есть
2 проход: просчитать Z depth файл объекта с выключеным Double Sided и
включенным Oposite
Считаються они мгновенно.
Сделать рэймаршевый шейдер который брал бы разницу между этими Z как
дистанцию которую ему необходимо отмаршировать от внутренней P к камере вдоль I
а в конце еще и множил бы Oi на нее (дистанцию) получая при этом falloff к краю.
Вопрос в следующем:
А не бредова ль идея и если нет то есть ли способ добраться
до инфы в pixarовском Z файле из шейдера?
 
#2
По-моему все выглядит вполне разумно. Делаешь из Z-файла текстуру (а не shadow) при помощи MakeTexture или txmake - и потом читаешь ее при помощи texture().
 
#3
Стоп, а при чем тут z-файлы? То, что ты хочешь сделать - это обычный Volume шейдер. Только не забудь в качестве surface шейдера на объект назначить что-то типа Oi = Ci = 0;
 
#4
В том то все и дело что Z есть Z тобиш дистанция от P до камеры с которой он делался. Если конвертануть его в текстуру
то на выходе будеш иметь 0 - 1 и придеться вводить некий множитель
что бы расставить все на свои места. Причем для каждой сцены свой а
рэймаршер достаточно медленная штука - поседееш пока найдеш.
А volum шейдер на объекте это чисто BMRT-шная фишка насколько я знаю.
К томуже речь о True Volum - е а не о подмешивании цвета с целью симуляции. Он должен скатерить свет, дифузить, может даже спекулярить.
А все это без реймаршера невозможно, как реймаршер невозможен без
2 точек меж которыми ему щимиться. Конечно можно просто задать определенную дистанцию которую ему надо пройти (как это сделано в
mtor-овском фоге) но это будет просто "брехней считающейся долго".
 
#5
В volume shader "I" - это как раз расстояние, которое луч проделал "внутри" объема. (Если мне не изменяет память...)
 
#6
Вернее, не расстояние, а вектор, а вот length(I) - расстояние. И в prman это все тоже работает. Ну а скаттеринг и пр... Это в любом случае долго...
 
#9
Неа.
Тут у меня риспек3.2 лежит....
The length of I is the distance trveled trough the volume (...пока все совпадает)
from the origin of ray to the point P (...а вот тут облом)
А origin of ray - есть E тобиш камера
 
#10
У меня под рукой 3.1. Так вот - origin of ray - как раз P (смотри таблицу 12.3 внимательнее), но все равно херня получается. Скорее всего там что-то напутано, потому, что в данном контексте origin of ray - ближайшая "изнанка" объекта вдоль луча зрения. В REYES при рендеринге возникает попиксельный список z-сортированных микрополигонов, начиная с ближайшего и заканчивая последним полностью непрозрачным, так что все необходимые данные там есть. Короче, я все-таки берусь утверждать, что прав.
 
Сверху