虚幻4渲染编程(光线追踪篇)【第四卷:Realtime Raytracing In UE4】

本文介绍了实时光线追踪的基本原理和在Unreal Engine 4中的实现。通过DX12的新功能,如Ray Generation Shader和Hit Group,结合Unreal的RHI接口,实现了从发起光线到处理交点的流程。文章通过修改RayTracingDebug示例,展示了如何自定义Closest Hit Shader,从而进行BRDF计算。最后,作者指出在Unreal中进行光线追踪编程相对更简便,适合初学者入门。
摘要由CSDN通过智能技术生成

MY BLOG DIRECTORY:

YivanLee:专题概述及目录

INTRODUCTION:

【1】 realtime raytracing overview

我们渲染一个东西需要一个渲染管线,渲染管线就是一系列操作把输入的数据渲染成最终的图片。最开始我们使用固定管线,然后再发展到可编程管线,其实还是相对固定的,我们只能控制整个渲染管线的一部分比如VS,PS,GS等,大部分流水线的逻辑都是焊死在硬件里的。来看下传统可编程管线:

v2-9f0a12f4c1946ba88e0131b5512dc5d8_b.jpg

把这些逻辑做在硬件里的一个考虑其实是为了加速,同理如果要做实时光线追踪,我们就需要有足够的速度,所以2018年的时候英伟达那帮人推出了比较民用的RTX显卡,把光线追踪的逻辑焊死到显卡里,我们开发者能做的就只能是使用他们暴露出来的接口来编写我们的东西。优点就是速度快,缺点也很明显,自由度低,如果想要改什么功能需要硬件支持,需要微软的DX支持。这次在API层面对DX12的改进,主要是加入了一个全新的管线专门执行光线追踪的任务。以后让GPU发起任务的方式除了现有的光栅化渲染,和通用计算(CS)以外,还新加入了一个追踪光线的调用。新的光线追踪管线如下:

v2-f85718d2993cdfb323b91b316a5db44e_b.jpg
v2-4bdefdc77552914843cd1f865120bf5f_b.jpg

把上面红框框起来的的步骤展开,场景和光线的交互这步可以被分为以下阶段:

v2-f0a6e2443dbb003e777dc5ec016dfbb7_b.jpg

上述的所有过程都是固定的,我们可以控制的部分为蓝色线框框起来的部分。

整条管线的具体组成单元:

发起光线:

新D3D函数: ID3D12CommandList::DispatchRays()

新Shader类型:Ray Generation Shader

新HLSL函数:TraceRay()

Ray Generation Shader:定义一条光线如何产生,开始整个光线追踪过程。一个pass只执行一次。

光线的遍历与求交

遍历加速结构(Acceleration Structures)

新Shader类型: Intersection Shader。Intersection Shader定义光线如何和物体交互。

交点处理

Hit Group : 由Closest Hit, Any Hit, Intersection三种Shader构成。都不是必须的Shader,可选择调用

Intersection Shader:用于自定义几何体与射线求交,三角形与射线求交无需使用(内置)通过调用ReportHit()报告交点,同时传递Attributes给Hit Shaders

Any Hit Shader:射线有任一交点时被触发(不保证触发顺序)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值