Precomputed Radiance Transfer for Real-Time Rendering

本文介绍了预计算辐射传递(PRT)技术,一种用于实时渲染动态低频光照环境的方法。该技术可以有效处理软阴影、环境遮挡等全局光照效果,并针对光泽材质进行了优化。通过使用球谐函数(Spherical Harmonics),PRT能够在物体旋转时快速更新光照效果,避免重新计算。

全称真长:

Precomputed Radiance Transfer for Real-Time Rendering in Dynamic, Low-Frequency Lighting Environments".

DX9 sample里就有demo什么的。

这个文章真的比较喜欢,作者也牛,来自发siggraph最多的Max-Planck-Institut和Microsoft Research。

内容在游戏里没有听说用很多,但是在:

http://developer.amd.com/media/gpu_assets/ArtAndTechnologyOfWhiteout(Siggraph07).pdf

这里有提到。

前面背景介绍也比较高屋建瓴,ok, let's start. 


 PRT是针对low frequency lighting environment来做一些全局光照效果,像soft shadow, ambient occlusion, scattering, interreflection...

但是其他的像直接一个太阳光,弄一个大shadow出来的这种情况,不是处理范围的。

然后提到了全局光光照的几大困难:

  • BRDF complexity----巨复杂的material不好搞
  • Lighting Integration complexity----周围光照的积分不好搞
  • Lighting Transport-----间接光照,阴影这些东西不好搞

本文就针对lighting integration和lighting transport来做工作。

这里比较特别的地方是针对glossy material也有工作做,不像之前辐射度系列主要针对diffuse material,glossy material在做SH投射的时候需要得出一个matrix,不像diffuse的直接一个vector,但是其他部分一样的,所以其实也没有太多可以说的。

然后提到Spherical Harmonics,因为这个东东太重要,不得不提。

主要特性在之前博客里面有说,比较特别的就是旋转一致性。这个比较不好表达:

比如一个environment map当环境光源,作用到一个球上,进而这个环境光源投射到SH上,生成一组系数。

然后当environment map(这个环境光源)绕着这个球做旋转的时候,那么我们就可以通过对原来那组系数做linear transformation来完成。

而且每个系数做的时候是各自独立的,不需要依赖于其他系数。

这样生成好的一组系数,在物体旋转(相对于environment map)的时候,对系数做一些操作就可以了,而不需要重新积分出来一组系数。

然后的工作是主体,但是简单讲就是将一切都表示成SH 系数,然后在将这些系数作用起来,就得出最终结果了。

比如:

diffuse surface要表示unshadowed diffse,shadowed diffuse, interreflection,逐vertex的把这些信息投射到SH上。

environment lighting map也是投射到SH上。

最后一个dot,搞定一切。

当然在precompute radiance transfer和存储的时候可以根据实际情况做调整,在将连续的geometry,光照信息离散化过程中,自己选择方式和密度。

存储的时候也是同样道理,比如文中推荐的per vertex的也是不错的,弄到texture里当materia也可以。

最后谈到PRT也不局限于单个物体,物体与物体之间也可以,道理一样,只是涉及到precomputed基本就是要静态的,或者几乎静态的(只能做一些简单变化,如旋转)。

之后作者们还要弄到更牛的model上,类似subsurface scattering,大家在dx sample里也可以看到,的确是有。

基本道理差不多这些,细节部分不用也是忘,就不记了。

### 实现与优化中的3D高斯点绘技术 #### 技术概述 为了实现实时辐射场渲染,研究者采用了一种基于稀疏点的方法来构建场景表示。这些稀疏点通过三维高斯分布建模,在保持空间特性的同时提供了高效的计算性能[^1]。 #### 高斯原语的选择理由 选择3D高斯作为基本单元是因为这种模型既保留了体积渲染的优点又支持快速的基于点绘制(splat-based rasterization)。这表明即使不依赖连续表征也能实现高效高质量的光线域训练过程[^2]。 #### 各向异性协方差优化 文章进一步探讨了如何通过对各向异性协方差矩阵进行调整以获得更精确的表现形式。这种方法不仅提高了图像质量还增强了算法对于复杂结构细节捕捉的能力[^3]。 #### 可视化感知渲染算法 引入了一个新颖的、考虑可见性的渲染流程用于加速处理速度。该方法能够在不影响最终视觉效果的前提下显著减少不必要的计算开销,从而达到业内领先的执行效率水平。 ```cpp // C++ pseudo code for rendering pipeline incorporating 3D Gaussian splatting void renderScene(const Scene& scene) { // Precompute visibility information based on camera position VisibilityBuffer visBuf = computeVisibility(scene.camera); // For each point in the scene represented as a 3D Gaussian distribution foreach (const Point& p : scene.points) { Vector3 mean = p.mean; // Mean vector of the Gaussian Matrix3 covar = p.covariance(); // Anisotropic covariance matrix // Apply transformations according to view/camera parameters transform(mean, covar); // Perform splat operation considering precomputed visibility data if (isVisible(visBuf, mean)) { applySplatOperation(mean, covar); } } finalizeRendering(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值