(
映维网Nweon
2024年09月24日
)
苹果
正积极改善在XR环境渲染3D图形内容的技术,例如为包括半透明材质在内的单通道渲染操作提供改进的性能和效率。这家公司在一份专利申请中提出,可以在单通道渲染操作中模拟传统上与多通道透明渲染相关的视觉混合效果,而且没有传统多通道透明渲染所需的额外相关成本。
在一个实施例中,发明描述的方法包括获得第一3D图形对象,其中第一3D图形对象与至少第一材质相关联,第一材质与可调密度值相关联,并且至少包括在虚拟环境中具有可调位置的第一平面。
然后,至少部分地基于所述可调密度值和所述第一平面与所述第一3D图形对象之间的距离,确定透明度值,并通过将确定的透明度值应用于第一材质。从第一视点并使用第一着色器渲染虚拟环境中的第一3D图形对象的至少一部分。
在这样的实施例中,虚拟环境中第一3D图形对象的渲染优选地包括在渲染不透明和非不透明(半透明)材质的单通道呈现操作。以这种方式,可以在单通道渲染操作中模拟传统上与多通道透明渲染相关的视觉混合效果,并且没有传统多通道透明渲染所需的额外相关成本。
图1A示出示例场景100的不透明渲染通道的输出。
在传统渲染中,渲染场景中的每个不透明对象可能在第一“不透明通道”中一起绘制。场景中的透明对象(至少是半透明的对象)然后在第二“透明通道”中渲染。
因为这种实现中的着色器可以访问不透明对象的颜色和深度纹理,所以可以实现复杂的混合效果,其中湖床地形的部分在湖泊较浅的外部周围的最终渲染中至少部分可见,而湖床地形在湖泊较深的内部周围的最终渲染中不可见,这使得最终渲染中的半透明水材质看起来更逼真。
图1B显示了示例场景100的不透明渲染通道的输出120,其中包括平面水材质。在图1B显示了一种替代上述复杂(且计算昂贵)的多通道渲染操作的方法,以在渲染场景中逼真地渲染半透明材质之上的不透明材质。
在图1B的示例输出120中,平面水面125与其他不透明对象(如柱子105和110)一起在不透明通道中渲染。如图1B所示的方法在计算方面比多通道渲染解决方案更便宜,因为水面125可以在颜色和深度纹理生成之前渲染。
然而,水面125没有关于水位“后面”(或“下面”)地形表面的3D几何信息。所以,着色器将无法在水材质和它后面的地形之间执行更逼真的混合技术。
现在转到图1C,显示了单通道渲染操作的输出140,操作将优化的透明度感知着色器应用于地形115,但不应用于示例场景100中的其他3D对象105/110。
如下面所述,可使用优化的透明感知着色器在单通道操作中将各种半透明材质应用于虚拟环境中的不透明3D对象,同时模拟使用传统的多通道渲染操作实现的逼真视觉效果。操作在单独的通道中渲染不透明对象和透明对象。
图1C所示的水面边缘155在“虚拟”平面水材质与下地形115之间的混合中表现出适当的透明度。然而,这种单通道渲染操作的一个明显缺点是,因为优化的透明度感知着色器只对虚拟平面水面下的湖床的3D几何形状进行着色(虚拟场景中没有实际的水面网格),任何放置在虚拟平面水面下的不透明对象都会破坏真实的渲染效果。
图1D显示了单通道渲染操作的输出160,所述操作将优化的透明感知着色器应用于地形115,以及示例场景100中的其他3D对象105/110,即为了更好地模拟多通道渲染操作。
与图1C中描述的例子相反,在图1D的输出160中,优化的透明感知着色器应用于地形115,以及场景中的其他不透明对象。因此,位于虚拟平面水面以下的地形和/或柱的所有部分将与虚拟平面水面无缝混合,从而提供一个物理上真实的水面外观。即便场景中没有实际的3D水网格,半透明水材质的渲染与场景中不透明对象的渲染都在同一通道中进行。
图2A显示了渲染操作的示例200,其计算从camera视点205发出的射线220与半透明平面水材质215相交的位置。从camera视点205发出的射线220在第一交点(2251)与半透明的平面水材质215相交,然后射线220继续到在第二交点(2252)与不透明地形210表面相交。
可以为从camera视点205发射到不透明地形210的渲染像素的每条射线计算第一交点(2251)和第二交点(2252)之间的距离。然后,对于任何给定的光线,可以使用距离度量d来确定在渲染第二个交点(2252)处的地形210时,在混合操作中应用于水材质的透明度值。
一般来说,光必须穿过的材质距离越远,光在到达其路径终点时衰减的就越多。通过计算距离度量d,渲染操作可以确定适当的透明度来应用于材质。
一旦估计出半透明材质将吸收多少光,就可以使用混合操作在半透明材质和其他材质之间进行混合。
如果当光线220到达湖床交点2252时,比尔定律确定90%的光线会由经过距离d“穿过”水材质的光线衰减,则渲染操作可以计算90%的水材质颜色和10%的地形材质颜色的混合。
相反,如果比尔定律确定只有10%的光线衰减,则渲染操作可以计算10%的水材质颜色和90%的地形材质颜色的混合。
苹果指出,实施例的一个技术效果是,在渲染操作中避免了执行单独透明通道的计算成本,同时依然在渲染场景中模拟半透明材质的物理逼真表示。
在一个实施例中,确定透明度值可以进一步至少部分地基于虚拟环境的时间变量的当前值。时间变量可以通过可编程界面和/或用户可访问的界面元素单独可调。
图2B显示了渲染操作的示例230。如果使用优化的透明感知着色器将半透明平面材质应用于地形,但不应用于示例性场景中的其他3D对象,则期望的效果将很快失效,特别是如果场景中3D对象的某些部分低于半透明平面材质。
具体地说,因为着色器实际上是在“虚拟”水面215下对几何体进行着色,所以任何放置在地形前面的不透明对象都会破坏现实的半透明效果,除非不透明物体同样使用了优化的透明度感知着色器。
换句话说,在图2B的例子中,由于不透明支柱左侧的交点2451“阻挡”了光线235与湖床地形210的交点2452的camera视图,即便地形210使用优化的透明度感知着色器对平面水材质施加适当的混合影响,优化的透明感知着色器的有益效果都不会感知到,因为camera视点被柱240的交叉点2451阻挡。
在本例中,柱240没有使用优化的透明感知着色器,所以不知道半透明的平面水材质215。这种情况将导致柱240的渲染效果与图1C中柱105/110附近的145/150区域所描述的非期望渲染效果相同。
所以,图2B简单地说明了一点,即为了确保实现优化的透明感知着色器的有益效果,场景中的每个3D对象都应该利用发明所述的优化的透明感知着色器。
图2C显示了计算从camer视点205发出的光线255与半透明材质265相交的位置的渲染操作示例250。
如图2C所示,根据单通道渲染实施例,对于从camera视点205发出的每条光线,可以计算光线255的第一交点(2701)与平面260之间的距离,以及光线255的第二交点(2702)与平面260后面的不透明表面之间的距离。对于任何给定的光线,这个距离度量d ‘可以用来确定一个透明度值,以便在渲染第二个交点(2702)的地形210时,在混合操作中应用于雾/云材质265。
如上所述,光必须穿过的材质越多,光在到达其路径的终点时就会衰减得越多。通过计算距离度量d ‘,渲染操作可以确定适当的透明度来应用于材质。
图2D显示了渲染操作的示例280,其计算从camera视点205发出的射线290在多点与半透明材质285相交的位置。图2D中材质285中不同程度的阴影旨在说明三维体积内不同位置的材质不同密度。
根据一个实施例,3D体可以在虚拟环境中具有可调节的位置。根据其他实施例,3D体积同时可以与3D噪点纹理相关联,其中半透明材质285的密度值可以在3D体积内的任何给定点通过乘以可调密度值,并由三维噪点纹理内给定点的相应噪点值表示。
在这样的实施例中,3D噪点纹理可以优选地包括平铺3D体,其中随机确定噪点值的“平铺”在3D体上重复和扩展,以确保3D体中的每个点分配随机噪点值。
根据图2D,利用非均匀密度的3D体积来近似虚拟环境中的半透明材质。图2A和2C可能无法提供足够准确的透明度值的测定,以适用于真实几何阴影点处的半透明材质。如图2D所示,第一射线290的至少一部分穿过所述3D体285。根据这样的实施例,积分值可以基于对应于与3D体积285和半透明材质的可调或“基线”密度值相关联的3D噪点纹理内的第一多个点中每个点的相应噪点值来计算。
最终计算的积分值可用于确定应用于真实几何阴影点的半透明材质的第一透明度值。例如,沿着光线穿过3D体路径“累积”的半透明材质的密度越大,实际几何阴影点处的地形材质在用于计算实际几何阴影点的渲染颜色值的最终混合操作中的影响就越小。
换句话说,在这种情况下,渲染的颜色值将以半透明材质的颜色为主。相比之下,沿着光线穿过3D体的路径积累的半透明材质的密度越小,真实几何阴影点本身处地形材质的影响就越大。亦即半透明材质的颜色对真实几何阴影点的最终渲染颜色值的影响较小。
图3A示出使用平面半透明材质在单个渲染通道中渲染不透明和半透明3D对象的流程图300。
在305,可以获得第一3D图形对象,其中第一3D图形对象与至少第一材质相关联。
在310,第一材质可以与可调密度值相关联,并且可以至少包括在虚拟环境中具有可调位置的第一平面。
在315,可以至少部分地基于与第一材质相关联的可调密度值和第一平面与第一3D图形对象之间的距离来确定透明度值。
在320,可以通过将确定的透明度值应用于第一材质,从第一视点并使用第一着色器渲染虚拟环境中的第一3D图形对象的至少一部分。
在325,第一3D图形对象可以进一步与第二材质相关联,并且虚拟环境中第一3D图形对象的至少一部分的渲染可以进一步包括根据确定的透明度值在第一材质和第二材质之间进行混合。
图3B给出了图3A步骤325的进一步细节。
在步骤330,渲染第一3D图形对象的至少一部分同时包括,对于第一3D图形对象的一个或多个渲染像素:(a)对于从第一视点发出并终止于第一3D图形对象的相应渲染像素的第一光线,计算第一光线和第一平面之间的第一交点;(b) 计算所述第一光线和所述第一3D图形对象之间的第二交点,其中所述第二交点相对于所述第一视点位于所述第一平面之后。
(c) 确定第一交点和第二交点之间的第一距离;(d) 至少部分地基于第一距离和第一材质的可调密度值,确定在第二交点处应用于第一材质的第一透明度值;然后至少部分地基于所确定的第一透明度值、第一材质和在第二交点处与第一3D图形对象对应的第二材质的一部分,在第二交叉点处渲染第一3D图形对象的一部分。
图3C显示了使用半透明3D体积材质在单个渲染通道中渲染不透明和半透明3D对象的技术流程图350。
在355,可以获得第一3D图形对象,其中第一3D图形对象与至少第一材质相关联。
在360,第一材质可以包括在虚拟环境中具有可调位置的3D体,并且其中第一材质与可调密度值和3D噪点纹理相关联。
在365,至少部分地基于第一视点和第一3D图形对象之间的3D噪点纹理中的值来确定透明度值。如上所述,可以通过将3D噪点纹理中的值应用于从camera视点发出的光线上的相应点,穿过3D体并终止于第一3D图形对象来执行积分操作,以确定在渲染操作中要应用于第一材质的透明度值。
在370,通过将所确定的透明度值应用于所述第一材质,从第一视点并使用第一着色器渲染所述虚拟环境中的所述第一3D图形对象的至少一部分。
在375,第一3D图形对象可以进一步与第二材质相关联,并且虚拟环境中第一3D图形对象的至少一部分的渲染可以进一步包括根据确定的透明度值在第一材质和第二材质之间进行混合。
图3D给出了图3C步骤375的进一步细节。
在步骤380中显示,对于第一3D图形对象的一个或多个渲染像素,在虚拟环境中渲染第一3D图形对象的至少一部分包括:(a)计算沿着从第一视点发出并终止于第一3D对象的相应渲染像素的第一光线的第一多个点,其中第一光线的至少一个部分穿过3D体积,并且其中第一光线在交点处与第一3D对象相交;(b) 基于与3D噪点纹理内的第一多个点中的每一个的位置对应的噪点值和可调密度值来计算积分值。
(c) 至少部分地基于所计算的积分值来确定在交点处应用于第一材质的第一透明度值;以及(d)至少部分地基于所确定的第一透明度值、第一材质和与交点处的第一3D图形对象对应的第二材质的一部分,在交点处渲染第一3D图形对象的一部分。
相关专利
:
Apple Patent | Shader optimizations for rendering semi-transparent materials
名为“Shader optimizations for rendering semi-transparent materials”的苹果专利申请最初在2024年3月提交,并在日前由美国专利商标局公布。