光栅化形状上的光线行进

Posted

技术标签:

【中文标题】光栅化形状上的光线行进【英文标题】:Raymarching on rasterized shape 【发布时间】:2020-05-20 21:23:23 【问题描述】:

我一直想知道如何将两种渲染方法结合起来,使光栅化的屏幕形状用作片段着色器中基于光线行进的渲染的画布。

以这些美丽的例子为例:https://www.shadertoy.com/view/XsjXRm 或 https://www.shadertoy.com/view/MtXSzS 它们的可见部分可以粗略地表示为球体。现在我想做的是把two spheres 放到世界上的某个地方并运行常规的光栅化过程。光栅化将产生模型占用哪些像素,对于那些像素,我想实际运行 shadertoy 光线行进算法以获得所需的外观(我的两个球体看起来像上面示例中的 shadertoy“球体”)。

这是可行的吗?

附:我非常了解光栅化和矩阵/空间转换,但我对光线行进的工作原理有非常模糊的理解。原谅我的无知。

【问题讨论】:

在对球体进行光栅化时,您只需在片段着色器中运行该光线行进代码。只需确保正确计算光线方向(基于gl_FragCoord 和 MVP 矩阵)。它回答了你的问题,还是我误解了你的问题? @ybungalobill 谢谢,但我很欣赏一些简单的例子,它会在光栅化像素上运行几个 raymarching 步骤,ray origin/ray direction 在光栅化碎片着色器中定义。我想我正在努力解决如何将光线行进通道中通常使用的数学与我所拥有的光栅化结果对齐。长话短说 - 我会欣赏微不足道但可以概括的例子。 【参考方案1】:

这绝对是可能的。

这个想法是使用相同的相机进行光线追踪和光栅化。 您可以从片段着色器中的相机矩阵中获取相机的位置,您可以通过从相机位置中减去片段位置并对其进行归一化来获得相机的方向。

这样光线只会从相机投射到可见片段。

【讨论】:

以上是关于光栅化形状上的光线行进的主要内容,如果未能解决你的问题,请参考以下文章

光线行进时的 GLSL 伪影

光线追踪、光线投射、光线行进和路径追踪有啥区别?

光学基于matlab GUI带切趾的光线布拉格光栅滤波特性仿真含Matlab源码 1505期

3D渲染-光线追踪-包围盒

ShapeRenderer使用LibGDX生成像素化形状

犀牛怎么一直保持光线跟踪状态