Render.ru
Поддержать

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

mantra

Активный участник
Рейтинг
12
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

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

mantra

Активный участник
Рейтинг
12
ухты блин, надо узнать)

mantra

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

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

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

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

GoodMan

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

GoodMan

Мастер
Рейтинг
275
попробую что-нибудь такое написать на выходных 😎

GoodMan

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

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

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

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