该方案是对游戏引擎材质的扩展应用,主要是将Unity3D中的PPBR材质资源导出,并应用到SuperMap iClient3D for WebGL平台上,以提升模型的显示效果。
使用背景
在交通,电力,规划等行业中,有的对象常常具有很强的质感,比如金属质感的钢轨,电力塔;陶瓷材质的绝缘子;玻璃材质的建筑幕墙等,但常规方式的表现效果往往差强人意。
游戏引擎(Unity3D)中已有丰富的材质资源库,比如玻璃,金属等材质,这些材质很多都是PBR材质,质感明显,效果逼真。
如何基于我们提供的游戏引擎插件,将这些材质资源导出,并应用到SuperMap iClient3D for WebGL平台上,以提升模型的显示效果是本文档主要介绍的内容。
主要流程
制作PBR材质
首先大致介绍下如何在游戏引擎中制作PBR材质,了解PBR材质常用的调整参数及纹理贴图类型。 用户也可以直接去网上找一些已有的PBR材质资源,导入工程,进行使用。
金属材质的制作:
- 新建一个Unity工程
- 右键单击,新建一个材质,命名为“Metal”
- 修改材质的颜色,金属度,光滑度参数;可以将其赋给场景中的模型,以查看效果
大理石材质的制作:
- 将制作材质需要的纹理导入Unity(相关的基色纹理,法线纹理等资源需要从素材网站上下载)
- 新建一个材质,命名为“Marble”
- 将导入的基色纹理(Marble_Albedo)与法线纹理(Marble_Normal)分别拖动到Marble材质上的Albedo与Normal Map前面的方框中;
导入已有的材质资源: 如果本身已经有所需的材质资源,只需要将其导入Unity工程即可。 需要注意的是,材质资源,尽量是Stadard Shader,并且目前只支持基色,基色纹理,金属度,光滑度,法线纹理等参数的导出,其它的一些参数及纹理贴图暂不支持导出。RoughnessFactor的值,不能为0;Tiling保持默认值1。
安装游戏引擎插件
参考本手册安装指南的内容。
导出PBR材质
- 单击选中需要导出的材质球,右键单击,在弹出的面板中,选择“SuperMap-导出材质json”选项;
- 弹出“保存Json路径”面板,选择保存的路径;
- Unity的Console面板中,提示导出成功;
- 使用同样的方法导出Marble等其它材质。
导出的材质由两部分组成:Json文件及使用的纹理贴图。其中,Json文件中记录了金属度,粗糙度等材质参数,及引用贴图的相对路径。
在SuperMap iClient3D for WebGL中,使用导出的PBR材质
两种方式:1.指定图层,设置图层PBR材质;2.以专题图的方式,设置图层对象的PBR材质。
方式一:
使用S3MTilesLayer下的setPBRMaterialFromJSON接口,给图层中所有对象设置PBR材质效果,一个图层对应一种材质效果。以金属材质为例进行说明:
先找到需要设置金属材质的图层,在该范例中,对井盖图层使用Metal材质;管道图层使用Metal_Normal材质。
设置之后的效果:
在线参考网址:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#showUnderGround
方式二:
通过专题图的方式,给一个图层中,不同属性的对象设置不同的材质。
比如在该范例中,guidao_qiu图层中,有三种材质的对象:1.陶瓷材质的绝缘子对象;铜材质的吊弦对象;铝质的其它对象。
具体设置方式:
最终效果:
注:专题图的方式中,目前仅支持不带纹理的PBR材质。
使用场景
这里根据常见数据的类型,列举了三种使用场景,用户可以根据自己的数据类型,去制作对应的材质并进行使用。
BIM及管道数据的美化
BIM中的铁路轨道,接触网等数据以及管道数据,常常没有纹理,并且具有范围广,质感强的特点,我们制作Json材质文件进行美化的时候,只需要使用金属度,粗糙度两个参数就可以有很好的效果,不必设置基色纹理。
如果想要更加细腻逼真纹路效果,比如下面的截图,在金属度,粗糙度的基础上添加一个法线贴图即可(如果使用贴图,数据本身必须带有纹理坐标)。
白模数据的美化
另外有一些数据,本身也是没有纹理的,后续美化的时候,需要添加纹理。比如在白模上面制作一个墙砖的效果。针对这种情况,美化过程中使用的Json材质文件,是要带有基色纹理的,但是必须数据本身带有纹理坐标的情况下,才能有效果。
本身带有纹理的数据的美化
有的数据本身带有纹理,该类数据在美化的时候,不会改变本身的纹理。因此,使用的Json材质文件,不需要带有基色纹理,只需要有合适的金属度粗糙度,法线贴图即可。比如5.3.2.4章节中,介绍的地下管道井盖模型数据的美化。
注:这里使用的SuperMap Hi-Fi 3D SDK for Unity插件及SuperMap iClient3D for WebGL均为10.2及其之后的版本才有相关功能。