Компьютерная графика
Path Tracing и Monte Carlo
Pixar's Renderman рендерил 'Toy Story' в 1995 году со сканлайн-рендерингом. 'Coco' в 2017 году рендерился уже path tracing с 300-500 сэмплами на пиксель - каждый кадр занимал 200 часов CPU. Разница - в уравнении Кайджия (1986): единая математическая формула для всего переноса света. Path tracing - это численное решение этого уравнения. Понимание Monte Carlo интегрирования и importance sampling объясняет, почему photorealistic рендеринг возможен и почему он так медленен.
- **Blender Cycles / Mitsuba 3:** production path tracers на Python/CUDA. Mitsuba - исследовательская платформа для новых алгоритмов рендеринга
- **NVIDIA DLSS 3.5 (Ray Reconstruction):** нейросеть, обученная на path traced данных, реконструирует чистое изображение из 1-spp шума - замена тысячам сэмплов
- **Disney / Pixar / DreamWorks:** каждый production фильм использует path tracing с 256-4096 spp на финальный рендер. Total lighting бюджет 'Моана' - 200 миллионов CPU-часов
Monte Carlo интегрирование и уравнение рендеринга
В 1986 году Джеймс Кайджия опубликовал уравнение рендеринга - единую формулу для всего переноса света: Lo(x, wo) = Le(x, wo) + integral[hemisphere] fr(x, wi, wo) * Li(x, wi) * cos(theta) * dwi. Здесь Lo - исходящий свет, Le - излучение, fr - BRDF, Li - входящий свет с направления wi. Интеграл по полусфере аналитически нерешаем для сложных сцен. Monte Carlo метод решает это: выборка N случайных направлений wi даёт несмещённую оценку интеграла. Именно этот принцип лежит в основе Blender Cycles, Arnold, RenderMan.
Monte Carlo оценка интеграла: I = integral f(x)dx приблизительно равно (1/N) * sum f(Xi)/p(Xi), где Xi - сэмплы из распределения p. При равномерной выборке по полусфере p(wi) = 1/(2*pi), оценка = (2*pi/N) * sum fr*Li*cos(theta). Ошибка убывает как O(1/sqrt(N)) - независимо от размерности!
Monte Carlo оценка интеграла имеет ошибку O(1/sqrt(N)). Что это означает для качества рендеринга?
Importance Sampling: сэмплирование по BRDF и свету
Равномерная выборка по полусфере расточительна: большинство сэмплов из темных направлений вносят нулевой вклад. Importance sampling берёт больше сэмплов там, где подынтегральная функция велика. Для Lambertian BRDF оптимально сэмплировать по cos(theta): PDF = cos(theta)/pi. Для GGX (metallic PBR) - по half-vector distribution. Multiple Importance Sampling (MIS) Верача (1995) комбинирует несколько стратегий оптимально: взвешивает сэмплы обратно пропорционально дисперсии. Именно MIS используется в Cycles, Arnold, Mitsuba.
MIS вес Баланса: w_k(x) = n_k * p_k(x) / sum_j n_j * p_j(x). Heuristic Баланса является оптимальным по дисперсии среди линейных комбинаций. При сэмплировании BRDF + Light: w_brdf = p_brdf / (p_brdf + p_light), w_light = p_light / (p_brdf + p_light).
Для глянцевого материала с острым зеркальным пиком лучший выбор сэмплирования - по BRDF. Почему равномерная выборка по полусфере неэффективна в этом случае?
BRDF: физически корректные материалы
BRDF (Bidirectional Reflectance Distribution Function) fr(wi, wo) описывает, как поверхность отражает свет: отношение яркости в направлении wo к облучённости из направления wi. Физически корректная BRDF удовлетворяет: (1) взаимности Гельмгольца fr(wi,wo) = fr(wo,wi), (2) сохранению энергии integral fr*cos(theta)*dwi <= 1. Disney BRDF (Burley 2012) - стандарт индустрии: metallic-roughness модель с 10 параметрами. GGX (Trowbridge-Reitz) - распределение микрограней для глянца, используется в Unreal, Unity, Blender.
GGX NDF: D(h) = alpha^2 / (pi * ((n*h)^2*(alpha^2-1)+1)^2), где h - half-vector, alpha - roughness^2. GGX имеет длинный хвост по сравнению с Blinn-Phong - более физически точные highlights. Геометрический член G (self-shadowing) и Fresnel F(wi, h) вместе образуют specular BRDF: f_specular = D*G*F / (4*(n*wi)*(n*wo)).
Disney BRDF использует параметр metallic от 0 до 1. Что меняется в шейдинге при metallic=1 (металл) vs metallic=0 (диэлектрик)?
Сходимость path tracer: денойзинг и debiasing
Path tracer конвергирует к правильному изображению при росте числа сэмплов, но медленно: шум убывает как 1/sqrt(N). Для production рендеринга (кино) - 4096+ spp. Для игр в реальном времени - 1-4 spp с AI-денойзингом. NVIDIA DLSS 3.5 (Ray Reconstruction) использует нейронную сеть для деноизинга 1-spp трассировки. OptiX AI Denoiser - HDR-денойзер, обученный на миллионах рендеров. Variance reduction техники: Next Event Estimation, Russian Roulette для обрезки, Quasi-Monte Carlo (Halton, Sobol sequences) вместо псевдослучайных чисел.
Russian Roulette: при весе пути w < threshold с вероятностью (1-p) путь обрывается, с вероятностью p продолжается с весом w/p. Это несмещённая оценка: E[w/p * p + 0 * (1-p)] = w. Quasi-Monte Carlo (QMC) использует последовательности с низким discrepancy (Halton, Sobol) - ошибка O(log^d(N)/N) vs O(1/sqrt(N)) для обычного MC.
Больше сэмплов всегда лучше - с достаточным N path tracer даст идеальное изображение
Monte Carlo имеет неустранимый шум O(1/sqrt(N)). Для практичного рендеринга нужны variance reduction техники и денойзинг
При 1 spp - видимый шум. При 4096 spp - чистое изображение, но 4096x дольше. AI-денойзинг (DLSS Ray Reconstruction, OptiX Denoiser) заменяет 4096 spp на 4 spp + нейросеть - и даёт сопоставимое качество за 1/1000 времени. Физически корректный результат требует бесконечного числа сэмплов.
Russian Roulette прерывает пути с малым throughput с вероятностью (1-p) и продолжает с весом 1/p. Почему это не вносит смещения в оценку?
Ключевые идеи
- **Уравнение рендеринга:** Lo = Le + integral fr*Li*cos*dwi. Path tracing решает его Monte Carlo методом, единственным практичным подходом для произвольных сцен.
- **MC ошибка O(1/sqrt(N)):** для уменьшения шума вдвое - четыре раза больше сэмплов. Это мотивирует importance sampling и AI-денойзинг.
- **Importance sampling:** сэмплировать там, где функция велика. Cosine-weighted для Lambertian, GGX-sampling для metal/gloss. MIS комбинирует стратегии оптимально.
- **Практика:** Russian Roulette (несмещённое обрезание), Next Event Estimation (прямой свет), QMC sequences - variance reduction без смещения.
Связанные темы
Path tracing развивает Monte Carlo подходы к рендерингу глобальной освещённости.
- Ray Tracing: основы — Path tracing расширяет Whitted ray tracing, добавляя случайное сэмплирование полусферы
- Освещение: Phong, PBR — Disney/GGX BRDF - материальная модель, используемая в path tracer
Вопросы для размышления
- DLSS Ray Reconstruction заменяет 4096 spp на 4 spp + нейросеть. Физически ли корректен результат? Что именно делает нейросеть - уточняет интеграл или 'угадывает' отсутствующую информацию?
- Quasi-Monte Carlo последовательности (Halton, Sobol) дают ошибку O(log^d/N) против O(1/sqrt(N)) для обычного MC. Почему QMC не всегда лучше? При каких условиях стандартный MC предпочтительнее?
- Next Event Estimation (NEE) трассирует shadow ray прямо к источнику освещения, что резко снижает шум. Но NEE неприменим для зеркальных поверхностей. Почему? Как BDPT (bidirectional path tracing) решает эту проблему?