基于 WebGL 的实时全局光照路径追踪渲染器

基于 WebGL 的实时全局光照路径追踪渲染器

Hacker News 摘要

原标题:Real-time PathTracing with global illumination in WebGL

项目核心概述

THREE.js-PathTracing-Renderer 是一个建立在 Three.js 框架之上的实时路径追踪渲染器。它支持全局光照和渐进式渲染,能够直接在浏览器中运行,并根据硬件性能在智能手机或桌面电脑上达到每秒 30 到 60 帧的流畅度。当相机静止时,渲染器会进入渐进模式,通过不断累积采样,最终生成高质量的光学照片级图像。

交互控制方式

桌面端:点击屏幕任何位置可捕获鼠标,使用鼠标移动和 WASDQZ 键控制第一人称相机。鼠标滚轮用于缩放。OP 键切换正交与透视模式。左右方向键调整光圈大小(景深模糊效果),上下方向键调整焦点距离。按 ESC 键退出。

移动端:滑动屏幕旋转相机,通过屏幕上的四个大箭头按钮控制移动。水平捏合手势用于缩放,垂直捏合手势控制光圈大小。两个小箭头按钮用于调整焦距。

核心功能亮点

实时交互:在包括智能手机在内的各种设备上实现每秒 30 到 60 载的实时路径追踪。

多样化几何体支持:支持球体、平面、圆盘、四边形、三角形,以及圆柱体、圆锥体、椭球体、抛物面、双曲面、胶囊体、环面等二次曲面。

高级材料系统:提供金属、透明折射、漫反射、清漆、半透明及次表面散射等多种材料选项。

BVH 加速结构:利用边界体积层次结构(BVH)极大提升了 gltfglb 格式三角形模型的渲染速度,测试支持高达 80 万个三角形。

CSG 几何运算:允许通过并集、差集和交集操作将两个形状组合成新形状。

自定义降噪系统:内置带有边缘检测和模糊滤镜的降噪器,能够在动态场景中显著减少蒙特卡洛路径追踪产生的噪点。

物理特性支持:透明物体遵循 Beer-Lambert 定律处理颜色和能量衰减;支持基于物理的渲染(PBR)材质。

演示场景分类

几何与环境演示

几何展示:演示基本形状的全局光照、真实反射与折射、软阴影和焦散效果。

海洋与天空:结合路径追踪与光线步进技术,模拟广阔的海洋和真实的物理天空及云层。

体积渲染:在灰尘或雾气等体积感环境中渲染物体,展示玻璃球产生的体积焦散。

水体渲染:实时模拟照片级水面波动,无需三角形网格,水面通过光线步进实现。

地形与星球:利用光线步进渲染程序生成的室外环境,甚至能模拟拥有物理大气层的完整类地行星。

BVH 加速演示

点光源与聚光灯:演示包含 3 万个三角形的斯坦福兔子模型,在复杂光源下实现几乎瞬间的图像收敛。

动态 BVH 模型:支持在实时路径追踪中对 1.5 万个三角形的模型进行平移、旋转和缩放。

HDRI 环境:展示如何加载等距柱状投影的 HDRI 贴图作为环境光。

模型实例化:通过实例化技术,在浏览器中处理数以亿计甚至百亿计的多边形。

二次曲面与数学形状

二次曲面探索:提供 4x4 矩阵存储参数,可通过滑块实时调整生成球体、圆锥、抛物面等无数种形状。

新型环面实现:开发者设计了 Cheap Torus(廉价环面),通过组合双曲面和截断球体来规避传统环面在 GPU 浮点精度限制下产生的裂缝和性能开销。

经典场景还原与渲染历史

该项目致敬了多位图形学先驱,重现了渲染史上的经典图像:

Arthur Appel (1968):复现了最早的光线投射和阴影光线技术。

J. Turner Whitted (1979):展示了经典的折射球体场景。

James T. Kajiya (1986):展示了《渲染方程》论文中的蒙特卡洛路径追踪场景。

Eric Veach (1997):通过双向路径追踪解决了隐藏光源和复杂间接光照的渲染难题。

Wikipedia 经典图示:复刻了维基百科上关于全局光照和路径追踪的三个代表性场景。

路径追踪游戏实验

项目作者还开发了多款实时路径追踪游戏,展示了该技术在游戏开发中的潜力:

AntiGravity Pool(无重力台球):具有实时反射、软阴影和全局光照。

Path Traced Pong:在康奈尔盒内进行的 3D 乒乓球游戏。

The Sentinel: 2nd Look:经典游戏的重制版,包含随机地形生成、日夜循环及动态 BVH 技术。

Glider Ball 3D:一款飞行载具足球游戏,车辆利用物理光线投射吸附在曲面赛道内侧。

实验性与开发中功能

光线/物体扭曲:通过空间扭曲产生变形物体。

多采样模式:为高性能 GPU 用户提供每帧多像素采样的选项。

网格加速结构:利用高度图纹理,在移动设备上以 60 帧的速度实时追踪超过 200 万个三角形。

混合采样策略:改进了漫反射和清漆表面的采样方法,通过类似透明物体的微堆栈处理,在减少噪点的同时保留了软光照和颜色溢出效果。

技术背景

该项目始于 2015 年,最初是 Kevin BeasonsmallPT 项目向 Three.js 框架的移植。开发者受 Brigade 渲染器启发,旨在创建一个能在任何设备浏览器中运行、性能卓越且效果真实的开源路径追踪器。


原文:https://erichlof.github.io/THREE.js-PathTracing-Renderer/

评论:https://news.ycombinator.com/item?id=46993014

Report Page