图形光栅化综合实现分析
图形光栅化综合实现分析
当前阶段,光栅化仍然比光线追踪“快”,而光线追踪可以比光栅化更好地处理某些效果,如反射、软阴影、全局照明等。目前通常采用混合射线追踪,例如仅反射使用光线追踪而光栅化其他所有内容(包括主光线)。主流的GPU已基本支持光栅化、计算、光线追踪甚至深度学习等管线混合计算:
确定游戏开发人员在集成到现有游戏引擎基础设施时必须解决的问题,因为游戏引擎是为GPU设计和优化的,包含艺术资源和材质着色器。
传统的渲染管线如下图上所示,其中蓝色部分和间接光无关,可以忽略。下图下的红色是和间接光相关的阶段。
对于下图的黄色步骤,解决方案是多次反弹或近似。接下来要看的是透明度,它似乎是光线追踪的一个很好的候选者,对吗?
事实证明,屏幕空间照明问题同样适用于透明材质(多维性、性能、过滤)。当前已经在探索SSS的体积解决方案,但没有正确的SSS体积解决方案。混合渲染管线的流程如下:
对于非直接光照,分裂和近似Karis 2013有助于减少方差,蓝色是预先计算的,使用光栅化或光线追踪进行评估。
在RTX的渲染流程如下:
随机化的区域光渲染流程如下:
Battlefield V的光线追踪包含了GPU光线追踪管线、DXR的引擎集成、GPU性能等。
简单光线追踪管线:
生成管线阶段,读取GBuffer的纹理,使用随机光栅化来生成光线:
float4 light(MaterialData surfaceInfo , float3 rayDir)
{
foreach (light : pointLights)
radiance += calcPoint(surfaceInfo, rayDir, light);
foreach (light : spotLights)
radiance += calcSpot(surfaceInfo, rayDir, light);
foreach (light : reflectionVolumes)
radiance += calcReflVol(surfaceInfo, rayDir, light);
(...)
}
然而这种简单的光追管线渲染出来的画质存在噪点、低效、光线贡献较少等问题:
可以改进管线,在生成射线时加入可变速率追踪:
可变速率追踪的过程如下:
可变速率追踪使得水上、掠射角有更多光线。但依然存在问题:
可以加入Ray Binning(光线箱化),将屏幕偏移和角度作为bin的索引。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-11-28 Chiplet-4D毫米波雷达-总线互联IP分析
2021-11-28 用动态实现扩展TVM
2021-11-28 三段式LLVM编译器
2020-11-28 runtime系统的Cello
2020-11-28 用户自定义协议client/server代码示例
2020-11-28 使用TensorRT集成推理inference
2020-11-28 cuDNN 功能模块解析