Render.ru

Как сделать position пасс в 3dsmax?

mantra

Активный участник
Рейтинг
12
#1
position pass выглядет следующим образом: в цвет каждого пикселя записываются его мировые координаты. Red - X world position, Green - Y world position, Blue - Z world position. Можно конечно и поменять последовательность, но RGB -> XYZ всетаки наглядней.

В майе мировые координаты каждого пикселя можно получить нодой sampler info. Цепляем на red канал свойства Incandence -> samplerinfo.pointworldX, на green->samplerinfo.pointworldY, на blue->samplerinfo.pointworldZ)
 

GoodMan

Мастер
Рейтинг
261
#2
Ну скрипт-эффект такой написать не сложно я думаю.. Но нюансов тут может быть много:
- записываются мировые координаты каждого пикселя или объекта?
- делается ли это только для выделенного объекта или для всех объектов в сцене?
- RGB значения я так понимаю записываются как float?
- как расчитывать (отображать) отрицательные координаты?
- антиалиаз тут получается отпадает?
и т.п. вопросы которые могут возникнуть в процессе написания..
 

mantra

Активный участник
Рейтинг
12
#4
узнал: вот что ответили

-записываются мировые координаты каждого пикселя
-антиалиаз тут отпадает
-"Нюанс там только один - как записать отрицательные координаты. Надо работать только в положительном сегменте.
Для отсчета Position pass в максе, можно использовать VRaySamplerInfoTex texture.
В майке mental ray смог записать отрицательные координаты в .exr формат. Последний нюанс разрешен.

ну да, в float есть и отрицательный цвет )
32 битовый цвет прекрасно подошел бы для XYZ. Position pass это он и есть :)

Проблема в том, что этот отрицательный цвет пишет не всякий рендер и не во всякий формат. В Hdr хоть он и 32bit, mental не пишет.
А то, что в 32 float можно засунуть отрицательные значения и так понятно."
 

GoodMan

Мастер
Рейтинг
261
#5
хех.. только я не использую Vray, я думал стандартными средствами МАХ-а попробовать..
 

GoodMan

Мастер
Рейтинг
261
#9
Кое что выходит - но есть вопросы и предложения..

1. Во-первых скрипт будет строить позишн-пасс только для пикселей геометрических объектов. Т.к. он использует функцию пересечения (по сути прямой рэй-трайсинг) который "пуляет" лучем с камеры и распознает пересечения только с геом. поверхностями..
Ну и тут соотв. вопрос - что делать с лучами которые ничего не пересекают.. Пока я им (пикселям) присваиваю нулевые значения.

2. Сохранять в hdr или exr или любой другой 32 или даже 64 bit-ный формат не проблема.. Но эти форматы сразу преобразуют эти значения в свой диапазон - т.е. клампят.
Получается что-то вроде этого [-12543.343, 50.0, 1932.34] -> [0.243, 0.004334, 431.0].
Вообщем суть в том что они после этого в любом случае уже не читаемы..

Может проще сохранять в какой-нибуть ASCII подобный формат. Грубо говоря как обычный txt где в каждой строке будет записаны координаты каждого пикселя. А количество строк будет ровнятся высоте картинки.
Я думаю что если этот файл потом будет читаться скриптом - то так будет даже проще.
Мне бы например было легче написать читалку такого файла чем какого-нибудь hdr :)
 

Alexander Dvorovenko

Активный участник
Рейтинг
5
#10
тема очень интересная, я вот что нашел. позишен пасс для врей

You can get a world position pass using the VRaySamplerInfoTex texture http://www.spot3d.com/vray/misc/vraysamplerinfotex.rar
You can use this in a VRayExtraTex render element (but be sure to turn off the "consider for antialiasing" option).
Best regards,
Vlado
 
Сверху