Monte Carlo global illumination · Cornell box · Progressive accumulation
Scene change resets accumulation
Max target: 512 spp
Each frame traces one random ray per pixel. Samples accumulate via a ping-pong framebuffer — the more samples, the less noise. Colour from red/green walls “bleeds” onto nearby surfaces.
Фізично точний рендеринг методом Монте-Карло. Кожен піксель випускає багато промінів, що відбиваються випадково, поки не досягнуть джерела світла — усереднення результатів дає безшумне зображення з часом.
Рівняння рендерингу (Каджія, 1986) обчислює вихідне світло L на поверхні як інтеграл вхідного світла × BRDF по півсфері. Монте-Карло вирішує це, вибираючи випадкові напрямки відповідно до розподілу BRDF. Кожен зразок незміщений — зображення сходиться до точного глобального освітлення при нескінченній кількості зразків. М'які тіні, перетікання кольору та каустики виникають автоматично з фізики, без спеціального коду.
Перетягуй для обертання камери. Зображення поступово уточнюється — кожен кадр додає більше зразків на піксель. Перемикайся між пресетами сцен для перегляду ящика Корнелла, кластерів сфер і відбивних поверхонь. Збільш максимальну кількість відбиттів для захоплення багаторазового непрямого світла. Лічильник зразків показує, скільки промінів на піксель накопичено. Натисни "Скинути накопичення" для перезапуску після зміни сцени.
RenderMan від Pixar використовує трасування шляхів для рендерингу кожного кадру фільму — один виробничий кадр може накопичити 10 000+ зразків і зайняти години на рендер-фермі. Швидкість збіжності Монте-Карло трасування шляхів — 1/√N: подвоєння якості вимагає чотириразового збільшення кількості зразків. Апаратне трасування променів GPU (NVIDIA RTX) з'явилося у 2018 році, вперше уможлививши трасування шляхів у реальному часі в іграх завдяки апаратному прискоренню запитів перетину BVH.
Це прогресивний трасувальник шляхів методом Монте-Карло, що рендерить коробку Корнелла повністю на GPU у WebGL2. Кожен кадр випускає по одному випадково розсіяному променю на піксель і наближено обчислює рівняння рендерингу, інтегруючи добуток вхідного світла на BRDF поверхні по півсфері. Семпли накопичуються у ping-pong фреймбуфері з плаваючою комою, тож шум спадає, а м'які тіні, перетікання кольору й відбиття стають чіткішими впродовж сотень семплів на піксель. Це чесний, заснований на фізиці погляд на те, як насправді переноситься світло.
Однонаправлений трасувальник шляхів для рівняння рендерингу. Дифузні стіни розсіюють світло за допомогою косинусно-зваженого семплування півсфери; металеві, дзеркальні та глянсові сфери використовують відбиті напрямки з конусом шорсткості. Прямокутний випромінювач на стелі освітлює коробку, шляхи завершуються на випромінюванні, а російська рулетка відкидає тьмяні шляхи після четвертого відбиття. Кадри змішуються з вагою 1/(n+1), а ACES тон-мапінг плюс гамма завершують вивід.
Використовуйте Pause/Resume, щоб зупинити чи продовжити накопичення, та Reset, щоб очистити буфер. Повзунок «Max bounces» (1-8) задає глибину шляху, фіксуючи більше непрямого світла за вищих значень. «Exposure» (0.2-3.0) масштабує яскравість перед тон-мапінгом. Кнопки Scene перемикають між пресетами Cornell, Spheres і Mirror; будь-яка зміна скидає накопичення. Живі показники відображають семпли на піксель, FPS і роздільність, а смужка відстежує прогрес до 512 spp.
Трасування шляхів методом Монте-Карло збігається зі швидкістю 1/√N, тож щоб удвічі зменшити видимий шум, потрібно вчетверо збільшити кількість семплів. Саме тому ранні кадри виглядають зернистими, а для чистого зображення потрібні сотні семплів.
Трасування шляхів — це техніка рендерингу, яка моделює поширення світла, відстежуючи промені, що відбиваються по сцені, доки не досягнуть джерела світла. Вона чисельно розв'язує рівняння рендерингу за допомогою інтегрування методом Монте-Карло, тобто на кожен піксель усереднюється багато випадкових семплів. Результат — фізично коректне глобальне освітлення, включно з м'якими тінями, відбиттями й непрямим перетіканням кольору.
Кожен кадр додає лише один випадково обраний світловий шлях на піксель, тож окремий семпл — це груба, зерниста оцінка. Симуляція накопичує ці оцінки кадр за кадром і усереднює їх зі змішуванням 1/(n+1). Коли кількість семплів на піксель зростає до цілі в 512, випадкова похибка зменшується, і зображення збігається до гладкого, безшумного результату.
Max bounces задає, скільки разів промінь може розсіятися, перш ніж його шлях завершиться, від 1 до 8. Вищі значення фіксують більше непрямого, багатовідбивного освітлення, як-от перетікання кольору між стінами, ціною повільнішого збігання. Exposure масштабує накопичену яскравість від 0.2 до 3.0 перед ACES тон-мапінгом, дозволяючи освітлити чи затемнити фінальний вигляд без зміни самого рендеру.
Це незміщена оцінка рівняння рендерингу, тож за нескінченної кількості семплів вона збігається до точного розв'язку глобального освітлення, що робить її фізично обґрунтованою. Втім, для браузера вона спрощена: геометрія — це невеликий набір площин і сфер, дзеркальна модель — це наближений конус шорсткості, а не повний GGX, і немає спектрального чи заломного перенесення скла. Проте сам перенос світла слідує реальній фізиці.
Коробка Корнелла — це класична тестова сцена, створена в Корнельському університеті: кубічна кімната з червоною лівою стіною, зеленою правою стіною, нейтральними підлогою, стелею й задньою стіною та площинним джерелом світла вгорі. Її кольорові стіни роблять дифузне перетікання кольору й м'які площинні тіні легко помітними, тож вона стала стандартним еталоном для перевірки рендерерів глобального освітлення проти реальних вимірювань.