首页 > Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?

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):对于单散射模型来说,它的光线起始点是摄像机,终点是与视线相交的表面点,一般来说是固定步长的。



更多相关:

  • 其他资料1 资料2 光线追踪原理   光的基本传递模型   1 在一个要渲染的场景中,我们认为光能由预先指定的光源发出,然后我们以光线来描述光能的传递过程,当整个场景中的光能信息被我们计算出来后,我们收集这些信息转化为顶点的亮度。   2 光线经过物体表面可以产生反射和漫反射,光线透过物体可以产生折射和散射。具体产生哪种出射效果,依据...