来源:映维网 作者
《SculptrVR》是一个3D艺术创作工具,支持PSVR,Oculus Rift/Quest/Go,以及HTC Vive。这款作品凭借简单高效的操作受到了各平台用户的大量好评。日前,应用开发者内森·罗威(Nathan Rowe)撰文介绍了用于Oculus Quest的有效照明解决方案。下面是映维网的具体整理:
《SculptrVR》已经登陆SteamVR,Oculus Rift和PSVR,而最近这款应用已经支持诸如Oculus Quest和Oculus Go等移动VR头显。相对而言,Quest的图形计算预算有限。为了实现最佳性能,必须制定一种高效的照明解决方案。体素雕刻涉及大量的多边形。尽管《SculptrVR》的八叉树系统产生的三角形有所减少,但数量依然巨大。为了实现出色的体验,《SculptrVR》需要能够在屏幕推动大量的三角形。对于Quest,我将三角形提升至350000,并保持稳定的72 fps立体视觉效果。遗憾的是,默认的UE4照明模型有点过于成本高昂。
简单的默认照明着色器只是将一种颜色拖到“底色”,而这就已经涉及数百次操作。即使选中“完全粗糙”,默认的照明材质都只能在Quest屏幕渲染大约50000个三角形。这不足以实现优秀的雕刻体验。
所以,我没有选择默认的Unreal 4照明,而是通过自发光材质来打造自己的照明。这种材质看起来成本高昂,但只涉及十七个操作。
下面我们来解释一下具体的过程:
首先, 请注意支持的三种材质类型:Clay,Metal和Glowing。Clay是完全粗糙的材质,Metal具有光泽和反射性,Glowing则是Clay加上恒定的发光量。材质类型在每个顶点颜色的8位环境光通道中编码。
世界由一个定向光和一个环境光天空盒照亮(SculptrVR中的天空盒实际上使用了相同的环境光section code,但常数稍有不同)。我使用了Blinn-Phong照明来获得具有镜面反射高光的漫射照明。为此,我要添加来自analytical skybox的环境光。
结果乘以顶点颜色和逐顶点环境光遮蔽(ambient occlusion;AO)项,而AO项是使用体素锥追踪(voxel cone tracing)的自定义变体并由CPU为每个顶点计算。
下面我们来看看各个照明组件:
1. 漫射
漫射照明与camera位置无关,并且完全由太阳位置决定。所以,我们只是将太阳方向与表面法线进行点积。对于Clay,最终结果范围是0.2到1.0,Metal是0.05到0.25。从理论上讲,纯金属表面不应具有任何散射光,但添加一点散射光可以帮助眼睛更好地理解形状,而这在雕刻应用中非常重要。
2. 镜面
镜面光只是太阳在物体表面的反射。高光的清晰度通常基于粗糙度,而利用Blinn-Phong照明,你只需将增加点积即可调整清晰度。在这里,Clay是为6,Metal为64。我们同时可以上下调整Metal/Clay的最大镜面反射亮度。
3. 环境光
我尝试使用环境光照明来添加等效于着色器的“天窗”。前三个注释框根据表面法线(对于Clay)或反射矢量(对于Metal)的Z坐标在天空颜色和地面颜色之间进行插值。通过将Z坐标乘以一个常数可以使插值锐化。当Z坐标接近零时,第四个注释框将添加一条地平线。地平线对于使金属光泽对象的形状感至关重要。
4. 自发光
自发光完全独立于视图,仅向每个发光像素增加一个基本量。在《SculptrVR》中,“GlowMultiple”参数振荡以提供闪烁的外观。这种振荡由CPU在Blueprint中控制。在CPU执行这一操作可以节省一定的操作。
5. 总照明
将漫射,镜面和环境光相加并乘以太阳色以控制白天/夜晚的亮度,然后在此之后添加自发光。
6. 为动态天空调整参数
当你围绕太阳移动时,Sun Position, Sun Color, Zenith Color, Horizon Color和Ground Color都将动态更改,如视频所示。所有颜色完全是根据太阳方向的z-component存储在curve table中。所述table是经过手动调整,目的是通过《SculptrVR》的调色板提供优秀的亮度和对比度。
上图是:白色Metal,绿色Glowing和青色Clay材质。请注意,尽管对象是纯色,但你依然可以感知到一定的形状信息。
在《SculptrVR》中,每个材质都是自发光,并使用这一材质功能来增加照明。一些材质/模型使用顶点颜色,一些使用纹理,但它们都获得一致的照明。
我认为这非常有用,并希望可以给你的开发提供一定的借鉴参考。
原文链接:https://yivian.com/news/69379.html