- малюсенькие прямоугольные патчи; а с другой стороны, их можно рассматривать как шейдинг сэмплы - минимальные кусочки поверхностей, закрашиваемые сплошным цветом.

Вот здесь и начинается собственно шейдинг: для каждого такого патчика будет сформирован однократный вызов соответствующих шейдеров и каждый патчик получит свой цвет и прозрачность. А если на поверхность назначен и displacement шейдер, патчики-сэмплы будут сдвинуты в указанном шейдером направлении. Но повторяю: это все пока происходит в трехмерном пространстве, и до картинной плоскости дело еще не дошло!

Следующая задача - спроецировать эту трехмерную информацию на пиксели картинки. Тут вроде бы все просто - нужно только грамотно определить видимость шейдинг сэмплов из пикселей картинки, чтобы определить, какой шейдинг сэмпл закрасит какой пиксель.

В реальности же все намного сложнее, в основном, из-за того, что тут мы попадаем в царство Его Величества Антиалиасинга. Не вдаваясь в подробности, скажу лишь, что для этой цели алгоритм REYES использует oversampling, то есть многократный точечный сэмплинг. Через каждый пиксель картинной плоскости (грубо говоря, нашего конечного изображения) к сцене провешивается несколько лучиков (точнее будет сказать, point samples, или точечных сэмплов,

- не путать с шейдинг сэмплами, с одной стороны, и со световыми лучами при рейтрейсинге

- с другой стороны!), и выясняется, с каким цветом/прозрачностью они уперлись в шейдинг сэмплы. Эти значения взвешиваются по каждому пикселю, с использованием одной из нескольких доступных для пользователя фильтрующих функций и в зависимости от удаленности лучиков от центра пикселя. Результаты взвешивания записываются в пиксель готовой картинки.

Так вот, параметры PixelSamples определяют количество точечных сэмплов на каждый пиксель - по вертикали и горизонтали. PixelSamples 5 5 заставит prman запросить цвет/прозрачность шейдинг сэмплов, спроецировааных в каждый пиксель ровно 5 * 5 = 25 раз.

Если копнуть еще глубже, выяснится, что в реальности Prman провешивает лучики, не разбивая каждый пиксель на регулярную сетку, размером, скажем, 5x5, как в нашем примере, а случайным образом разбрасывая их в пределах ячеек этой сетки. По науке это называется Stochastic Sampling - именно на эту технологию Pixar получила свой патент, и именно при помощи этого патента засудила компанию Exluna.

Интересно, что такие эффекты как Motion Blur и Depth of Field prman-ом производятся как раз при помощи PixelSamples. Все очень просто: направления PixelSample-лучей, опять-таки, случайным образом изменяются с учетом вектора «движения» шейдинг сэмплов и/или их удаленности от «точки фокуса» камеры. Собственно, вот вам и объяснение того, что prman держит пальму первенства в скорости рендеринга Motion Blur - там, где другие рендереры при включении MB замедляются в разы, он теряет всего десяток-другой процентов, потому что продолжает использовать те же самые алгоритмы, что и до этого. И именно поэтому сцены с motion blur более требовательны к PixelSamples, чем обычные - ведь чем сильнее «блюр» (размазанность), тем больше может потребоваться сэмплов, чтобы она выглядела равномерно, а не “разбросанной по экрану”.


⇐ вернуться назад | | далее ⇒