(本视频转载自YouTube:视频原址)
体素雕刻向来以高多边形数量的模型著称。SculptrVR的八叉树系统能够减少三角形,但其数量仍然很多。为了获得良好的体验,SculptrVR必须能够在屏幕上推送大量三角形。在Quest上,我可以实现最高350000个三角形,并且保持稳如磐石的72 fps立体帧率。不幸的是,这使得默认的UE4光照模型成本有点高了。在SculptrVR中创建并使用本文所述的高效移动光照渲染的模型。
简单的默认光照着色器单是选择一种颜色并把它拖到底色中都要经过数百次运算。即使选中了“完全粗糙(Fully Rough)”,默认光照材质也只能满足在Quest的屏幕上渲染约50000个三角形的要求。要想得到良好的雕塑体验,这是不够的。
所以我没有使用默认的UE4光照,而是使用无光照的自发光材质构建了我自己的Phong光照。这个材质看起来成本很高,但是只需要17次运算。 想了解它的工作原理,还想亲自使用它?这里是一个pastebin链接:https://blueprintue.com/blueprint/1gp1z-xh/
让我们来了解一下这里发生了什么:
首先请注意,它支持三种不同的材质类型:粘土、金属和发光。粘土模仿的是完全粗糙材质,金属是有光泽和反光的,发光是粘土加上一个恒定的发光量。这种材质类型是在每个顶点颜色的8位环境信道中编码的。
场景由一个定向光源和一个环境天空盒照亮(其实SculptrVR中的天空盒用的是相同的环境分段代码,但常量略有不同)。我使用Blinn-Phongu光照得到有高光亮点的漫反射光照,并添加了来自解析天空盒的环境光源。
这个结果与一个顶点颜色和一个逐顶点环境光遮蔽(AO)项相乘。AO项是在CPU上使用体素锥体跟踪的自定义变体对每个顶点计算得到的。
让我们看看每个光照分量:
漫反射:
漫反射光照与摄像机位置无关,完全由太阳位置决定。所以我们只需要得出太阳方向与表面法线的点乘积。这里的最终结果对于粘土材质是0.2到1.0,对于金属是0.05到0.25。理论上讲,纯金属感的表面不应该有任何漫反射光照,但是添加一点漫反射光有助于眼睛更好地理解形状,这在雕塑应用中是非常重要的。高光度:
高光度光照只显示太阳在物体表面的反光。高光的锐利度通常取决于粗糙度,使用Blinn-Phong光照时,只需要将点乘积提高到不同的幂就能调节锐利度。这里对于粘土,幂是6,对于金属是64。我们还可以上下调整金属/粘土的最大高光亮度。环境:
环境光照是我为这个着色器添加高效的“天空光照”等效物的尝试。上面的三个注释框按照表面法线(对应粘土)或反射矢量(对应金属)的Z坐标在天空颜色和地面颜色之间插值。通过将该Z坐标与一个常量相乘来锐化插值。当Z坐标接近于零时,第四个注释框会添加一条水平线。这条水平线是绝对必要的,它可以使带金属光泽的物体有形状感。自发光:
自发光光照是完全独立于视角的,它就是给每个发光像素添加一个基底数。在SculptrVR中,“GlowMultiple”参数会发生波动,以提供闪烁的外观。这种波动是由CPU在蓝图中控制的。在CPU上将此过程执行一次就会保存几个运算,它们会在数以百万计的像素上重复。总体光照:
漫反射、高光度和环境光累加到一起,并乘以太阳颜色来控制白天/黑夜的亮度,在这之后再添加自发光的光照。调整参数以实现动态的天空
在你移动太阳时,太阳位置、太阳颜色、天顶颜色、地平线颜色和地面颜色都会动态变化,如以下视频所示。(本视频转载自YouTube:视频原址)
颜色都是完全根据太阳方向的Z分量存储在曲线表中的。这些表格经过了手动微调,可以配合SculptrVR的调色板提供良好的亮度和对比度。见上图:白色金属、绿色发光、和青色粘土材质。请注意,虽然物体都是纯色的,但你仍能感受到不少形状信息。
在SculptrVR中,每个材质都是自发光的,使用此材质函数在光照中做乘法。有些材质/模型使用顶点颜色,有些带纹理,但它们都可以得到一致的光照。
希望这篇文章能对大家有用,你们可以直接利用它或以此为起点制作自己的变体。感谢阅读。