您的位置:主页 > 技能爆料 > >

基于局部立方体贴图的折射

发布时间:2019-05-20 15:12

游戏开发者经常寻找有效的方法来在游戏中实现惊人的效果。在针对移动平台时,这一点尤其重要,因为应仔细平衡资源以实现最佳能。

在开发冰演示时,我们深入研究了局部立方体贴图的概念。在之前的博客中,我写过如何实现基于局部立方体贴图的反射是一种非常有效的渲染高质量反射的技术。本博客致力于ARM演示团队开发的一种新技术,用于渲染基于局部立方体贴图的折射。

折射,它是什么?

在渲染半透明几何体时,折射是一种需要考虑的重要效果。

折射是由于传输介质的变化导致的波方向的变化。它本质上是一种表面现象。折射率决定了进入材料时光线弯曲或折射的程度。 Snell s定律建立了折射率与入射和折射角度之间的关系,如图1所示。

图1.光通过一种介质到另一种介质时的折射。?折射实施

开发人员从他们开始渲染反射的那一刻起就试图渲染折射,因为这两个物理过程在任何半透明表面中一起发生。有几种众所周知的渲染反射技术,但不是折射的情况。

在运行时实现折射的现有方法(光线跟踪由于其复杂而被排除)取决于具体的折射类型。然而,大多数技术渲染纹理,在运行时折射对象后面的场景,并在第二遍中应用非物理基础的失真,以实现“精简外观”。这种方法随着纹理扰动的方式而变化,用于渲染在水,热雾和玻璃物体中发生的折射,以及其他效果。

虽然这些技术中的一些可以获得可靠的结果,但纹理扰动不是基于物理的,结果并不总是正确的。如果通过从“衍射相机”的角度渲染纹理来实现逼真的折射,则可能存在相机不能直接看到但通过折射变得可见的区域。尽管如此,除了物理正确和能损失之外,运行时渲染到纹理方法的主要是质量,因为在相机移动时通常会出现像素闪烁或像素不稳定的情况。

使用静态立方体贴图来实现折射并不新鲜。自1999年立方体贴图推出以来,开发人员已经使用立方体贴图来实现反射和折射。使用立方体贴图在本地环境中实现反射时,如果我们不应用局部校正,则会得到不正确的结果。折射也是如此。

基于局部立方体贴图的折射

我们将折射物体周围的环境烘焙到静态立方体贴图中,并根据折射矢量的方向从立方体贴图中获取纹理像素(应用局部校正后,参见图2)。

图2.对折射矢量的局部校正。

我们应用本地更正的方式与之前博客中的反射相同。在确定折射矢量的方向之后,我们需要找到它与界定框相交的位置,该边界框界定了本地场景的体积。下一步是从生成立方体贴图的位置到交叉点构建一个新向量,并使用此最终向量从立方体贴图中获取纹素,以渲染折射对象后面的内容。我们得到一个基于物理的折射,因为折射矢量的方向是根据Snell s定律计算的。此外,我们可以在着色器中使用内置函数严格按照此定律找到折射向量 R

R =折射(D,N, )

其中 I 是标准化视图或事件向量, N 是标准化法向量, 是折射率的比率( N1 / N2 )。

着色器实现

对于薄折射表面的简单情况,着色器实现很简单,如图3所示。至于反射,要在片段着色器中应用局部校正,我们需要传递p

游戏开发者经常寻找有效非常给力中变传奇的方法来在游戏中实现惊人的效果。在针对移动平台时,这一点尤其重要,因为应仔细平衡资源以实现最佳能。

在开发冰演示时,我们深入研究了局部立方体贴图的概念。在之前的博客中,我写过如何实现基于局部立方体贴图的反射是一种非常有效的渲染高质量反射的技术。本博客致力于ARM演示团队开发的一种新技术,用于渲染基于局部立方体贴图的折射。

折射,它是什么?

在渲染半透明几何体时,折射是一种需要考虑的重要效果。

折射是由于传输介质的变化导致的波方向的变化。它本质上是一种表面现象。折射率决定了进入材料时光线弯曲或折射的程度。 Snell s定律建立了折射率与入射和折射角度之间的关系,如图1所示。

图1.光通过一种介质到另一种介质时的折射。?折射实施

开发人员从他们开始渲染反射的那一刻起就试图渲染折射,因为这两个物理过程在任何半透明表面中一起发生。有几种众所周知的渲染反射技术,但不是折射的情况。

在运行时实现折射的现有方法(光线跟踪由于其复杂而被排除)取决于具体的折射类型。然而,大多数技术渲染纹理,在运行时折射对象后面的场景,并在第二遍中应用非物理基础的失真,以实现“精简外观”。这种方法随着纹理扰动的方式而变化,用于渲染在水,热雾和玻璃物体中发生的折射,以及其他效果。

虽然这些技术中的一些可以获得可靠的结果,但纹理扰动不是基于物理的,结果并不总是正确的。如果通过从“衍射相机”的角度渲染纹理来实现逼真的折射,则可能存在相机不能直接看到但通过折射变得可见的区域。尽管如此,除了物理正确和能损失之外,运行时渲染到纹理方法的主要是质量,因为在相机移动时通常会出现像素闪烁或像素不稳定的情况。

使用静态立方体贴图来实现折射并不新鲜。自1999年立方体贴图推出以来,开发人员已经使用立方体贴图来实现反射和折射。使用立方体贴图在本地环境中实现反射时,如果我们不应用局部校正,则会得到不正确的结果。折射也是如此。

基于局部立方体贴图的折射

我们将折射物体周围的环境烘焙到静态立方体贴图中,并根据折射矢量的方向从立方体贴图中获取纹理像素(应用局部校正后,参见图2)。

图2.对折射矢量的局部校正。

我们应用本地更正的方式与之前博客中的反射相同。在确定折射矢量的方向之后,我们需要找到它与界定框相交的位置,该边界框界定了本地场景的体积。下一步是从生成立方体贴图的位置到交叉点构建一个新向量,并使用此最终向量从立方体贴图中获取纹素,以渲染折射对象后面的内容。我们得到一个基于物理的折射,因为折射矢量的方向是根据Snell s定律计算的。此外,我们可以在着色器中使用内置函数严格按照此定律找到折射向量 R

R =折射(D,N, )

其中 I 是标准化视图或事件向量, N 是标准化法向量, 是折射率的比率( N1 / N2 )。

着色器实现

对于薄折射表面的简单情况,着色器实现很简单,如图3所示。至于反射,要在片段着色器中应用局部校正,我们需要传递p

游戏开发者经常寻找有效的方法来在游戏中实现惊仿盛大1.76复古金币版人的效果。在针对移动平台时,这一点尤其重要,因为应仔细平衡资源以实现最佳能。

在开发冰演示时,我们深入研究了局部立方体贴图的概念。在之前的博客中,我写过如何实现基于局部立方体贴图的反射是一种非常有效的渲染高质量反射的技术。本博客致力于ARM演示团队开发的一种新技术,用于渲染基于局部立方体贴图的折射。

折射,它是什么?

在渲染半透明几何体时,折射是一种需要考虑的重要效果。

折射是由于传输介质的变化导致的波方向的变化。它本质上是一种表面现象。折射率决定了进入材料时光线弯曲或折射的程度。 Snell s定律建立了折射率与入射和折射角度之间的关系,如图1所示。

图1.光通过一种介质到另一种介质时的折射。?折射实施

开发人员从他们开始渲染反射的那一刻起就试图渲染折射,因为这两个物理过程在任何半透明表面中一起发生。有几种众所周知的渲染反射技术,但不是折射的情况。

在运行时实现折射的现有方法(光线跟踪由于其复杂而被排除)取决于具体的折射类型。然而,大多数技术渲染纹理,在运行时折射对象后面的场景,并在第二遍中应用非物理基础的失真,以实现“精简外观”。这种方法随着纹理扰动的方式而变化,用于渲染在水,热雾和玻璃物体中发生的折射,以及其他效果。

虽然这些技术中的一些可以获得可靠的结果,但纹理扰动不是基于物理的,结果并不总是正确的。如果通过从“衍射相机”的角度渲染纹理来实现逼真的折射,则可能存在相机不能直接看到但通过折射变得可见的区域。尽管如此,除了物理正确和能损失之外,运行时渲染到纹理方法的主要是质量,因为在相机移动时通常会出现像素闪烁或像素不稳定的情况。

使用静态立方体贴图来实现折射并不新鲜。自1999年立方体贴图推出以来,开发人员已经使用立方体贴图来实现反射和折射。使用立方体贴图在本地环境中实现反射时,如果我们不应用局部校正,则会得到不正确的结果。折射也是如此。

基于局部立方体贴图的折射

我们将折射物体周围的环境烘焙到静态立方体贴图中,并根据折射矢量的方向从立方体贴图中获取纹理像素(应用局部校正后,参见图2)。

图2.对折射矢量的局部校正。

我们应用本地更正的方式与之前博客中的反射相同。在确定折射矢量的方向之后,我们需要找到它与界定框相交的位置,该边界框界定了本地场景的体积。下一步是从生成立方体贴图的位置到交叉点构建一个新向量,并使用此最终向量从立方体贴图中获取纹素,以渲染折射对象后面的内容。我们得到一个基于物理的折射,因为折射矢量的方向是根据Snell s定律计算的。此外,我们可以在着色器中使用内置函数严格按照此定律找到折射向量 R

R =折射(D,N, )

其中 I 是标准化视图或事件向量, N 是标准化法向量, 是折射率的比率( N1 / N2 )。

着色器实现

对于薄折射表面的简单情况,着色器实现很简单,如图3所示。至于反射,要在片段着色器中应用局部校正,我们需要传递p

相关新闻:
上一篇:环预览的团契_2 下一篇:任天堂第一款移动应用程序Miitomo周四在英国推出