🌑 Трасування Шляхів

Monte Carlo global illumination · Cornell box · Progressive accumulation

0 spp

Render

Сцена

Scene change resets accumulation

Progress

Samples / pixel0
Кадрів/с
Resolution

Max target: 512 spp

About

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.

🌑 Трасування Шляхів — Monte Carlo Light Transport

Фізично точний рендеринг методом Монте-Карло. Кожен піксель випускає багато промінів, що відбиваються випадково, поки не досягнуть джерела світла — усереднення результатів дає безшумне зображення з часом.

🔬 Що демонструє

Рівняння рендерингу (Каджія, 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 та Exposure?

Max bounces задає, скільки разів промінь може розсіятися, перш ніж його шлях завершиться, від 1 до 8. Вищі значення фіксують більше непрямого, багатовідбивного освітлення, як-от перетікання кольору між стінами, ціною повільнішого збігання. Exposure масштабує накопичену яскравість від 0.2 до 3.0 перед ACES тон-мапінгом, дозволяючи освітлити чи затемнити фінальний вигляд без зміни самого рендеру.

Чи фізично це точно?

Це незміщена оцінка рівняння рендерингу, тож за нескінченної кількості семплів вона збігається до точного розв'язку глобального освітлення, що робить її фізично обґрунтованою. Втім, для браузера вона спрощена: геометрія — це невеликий набір площин і сфер, дзеркальна модель — це наближений конус шорсткості, а не повний GGX, і немає спектрального чи заломного перенесення скла. Проте сам перенос світла слідує реальній фізиці.

Що таке коробка Корнелла і навіщо її використовувати?

Коробка Корнелла — це класична тестова сцена, створена в Корнельському університеті: кубічна кімната з червоною лівою стіною, зеленою правою стіною, нейтральними підлогою, стелею й задньою стіною та площинним джерелом світла вгорі. Її кольорові стіни роблять дифузне перетікання кольору й м'які площинні тіні легко помітними, тож вона стала стандартним еталоном для перевірки рендерерів глобального освітлення проти реальних вимірювань.