Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?

作者:洛城
链接:https://www.zhihu.com/question/29863225/answer/70728387
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

既然都是Ray开头的,这些概念中最大的区别就是射线, 具体地可以说是射线的起止点不同
1)Ray tracing是我们常说的光线追踪,利用光路可逆原理, 从摄像机位置出发,向成像屏幕上的像素点引若干条射线,初始射线始于摄像机,终止于光线第一次与表面的交点,同样,前面的答案里有人也提了,Ray tracing是一个递归的过程,射线开始于摄像机,遇到表面反弹(bounce),再引出若干条次级光线,至于path tracing,可以认为是一种具体的光线追踪做法:在光线遇到表面需要反弹时,以表面法线为中心做一个半球,向半球上若干方向引若干条射线,再递归计算每条光线对该表面点的光照贡献,具体引多少射线,每条射线的贡献如何计算,则又根据path tracing的方法不同而有所区别。
2)Ray casting是体渲染(Volumetric rendering)的一种比较简单的实现方法,体渲染是说我给你一个体数据(3D纹理),你如何把它在2D平面上的投影绘制出来的问题,常用的方法有错切形变法,光线投射法,纹理映射法等。 Ray casting的光线是从摄像机出发,向3D体纹理引射线,但是这只确定的光线的方向,实际上光线的起始位置是光线与体纹理的正面交点,终止位置是体纹理的背面交点。另外可能有人把Volumetric rendering和Voxelization混为一谈,其实两者是不同的东西,虽然他们都和体数据相关, 但前者一般不关心体数据的来源(一般是扫描之类的方法获取的真实数据),只是考虑在有了体数据的情况下以何种模型来渲染体数据(譬如吸收模型,单散射模型,多散射模型),同时一般来说体渲染使用的体素的大小是均匀的; 而后者(Voxelization)更关心的是如何将数据表示为体素,进而使用体素的表达形式实现其他的功能(碰撞检测,布尔操作,occlusion culling,GI等),生成的体素未必是均匀的。
3)Ray marching是所谓的光线行进,它只是一种通用的模拟方法,所以它的光线的起点和终点不能一概而论, 但是它的射线和Ray casting的射线有一个共同点,就是它沿着起点开始,每隔一定间隔就停下来做一次计算,再继续前行。具体算什么要看实现的是什么功能。至于这个间隔,有时可以是固定的,有时则是不固定的。举几个比较常用的例子:(1)视差贴图(POM),它在使用Ray marching的时候, 起始点是视线和模型表面的交点(但有了POM的微表面后它其实不是真正看到的点),终点是在引入了表面的视差后真正的视线交点。它有固定步长的实现和二分查找的变步长实现。(2)屏幕空间反射(SSR), 它的光线起始点是shading pass当前计算的表面像素的位置,方向是视线沿着表面法线的反射方向,终点是反射光线与屏幕空间中像素的交点。(3)体积光渲染(或者类似的participating media rendering):对于单散射模型来说, 它的光线起始点是摄像机,终点是与视线相交的表面点,一般来说是固定步长的。


Ray casting 是其他三个的第一步,根据 相机/眼睛 和屏幕的位置关系计算出ray的起始点和方向。所以,举例渲染一张800*600的图图,第一步经过ray casting,就产生了 800*600个蓄势待发,等着戳向场景的ray~~

Ray Tracing: 灰常Naive的render方法,刚刚那群蓄势待发的ray们狂奔向三维场景里的物体,戳到物体的ray就直接在其相应pixel上涂上颜色(当然要根据material和lighting算算先啦)

Path Tracing: 比ray tracing 稍微复杂点儿,更加physically based。狂奔的ray们戳到物体后不像ray tracing 一样立即结束工作,而是根据物体材质弹弹弹~bounce bounce bounce 。ray们一路弹弹弹,累积戳到的所有物体的颜色,直到戳到light,或者ray精疲力尽走不动道儿了(reach depth)。

Ray Marching: 多用在volumetric rendering (就是云彩之类的东西)。Ray Marching 里的ray 不像前两种那样冲动,而是step by step的往前走,边走边累积颜色~。推荐个很好玩哒ray marching 网站 Shadertoy BETA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值