sculptrvr分享:如何用虚幻引擎为quest探索有效照明解决方案

来源:映维网 作者 吴羽桦
《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》中,每个材质都是自发光,并使用这一材质功能来增加照明。一些材质/模型使用顶点颜色,一些使用纹理,但它们都获得一致的照明。
我认为这非常有用,并希望可以给你的开发提供一定的借鉴参考。
原文链接:l
作者最新文章
11-2923:12
11-2923:11
11-2923:11