在构建智慧建筑的数字孪生可视化平台时,遵循一套严谨的建模规范至关重要。这不仅确保了模型的准确性和一致性,还能提高系统的可维护性和扩展性。使用3D MAX建立的模型是关键的一环。无论使用何种驱动引擎,模型的基本要求是一致的。本文是在南京古河软件有限公司多年数字孪生开发经验基础上总结归纳的三维模型制作规范。
本文提到的所有数字模型制作,全部是用3D MAX建立的模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个模型制作完成时,它所包含的基本内容包括:场景尺寸、单位,模型归类塌 陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。
一、模型制作流程
- 素材采集
- 模型制作
- 贴图制作
- 场景塌陷、命名、展开UV坐标
- 灯光渲染测试
- 场景烘焙
- 场景调整导出
二、模型制作规范
1、在模型分工之前,必须确定模型定位标准。一般这个标准会是一个CAD底图。制作人员必须依照这个带有CAD底图的文件确定自己分工区域的模型位置,并且不得对这个标准文件进行任何修改。导入到MAX里的CAD底图最好在(0,0,0)位置,以便制作人员的初始模型在零点附近。
2、在没有特殊要求的情况下,单位为米(Meters)。
3、删除场景中多余的面,在建立模型时,看不见的地方不用建模,对于看不见的面也可以删除,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度。如box底面、贴着墙壁物体的背面等。
4、保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的二千分之一。例如:在制作室内场景时,物体的面与面之间距离不要小于2mm;在制作 场景长(或宽)为1km的室外场景时,物体的面与面之间距离不要小于20cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。模型与模 型之间不允许出现共面、漏面和反面,看不见的面要删掉。在建模初期一定要注意检查共面、漏面和反面的情况。
5、可以复制的物体尽量复制。如果一个1000个面的物体,烘焙好之后复制出去100个,那么他所消耗的资源,基本上和一个物体所消耗的资源一样多。
6、建模时最好采用Editable Poly面片建模,这种建模方式在最后烘焙时不会出现三角面现象,如果采用Editable Mesh 在最终烘焙时可能会出现三角面的情况。
7、模型的塌陷当一栋建筑模型经过建模、贴纹理之后,然后就是将模型塌陷,这一步工作也是为了下一步烘焙做准备。所以在塌陷的时候要注意一些问题:
(1)按照“一建筑一物体”的原则塌陷,体量特别大或连体建筑可分塌为2-3个物体,但导出前要按建筑再塌成一个物体,城中村要按照院落塌陷。
(2)用Box反塌物体,转成Poly模式,这时需检查贴图有无错乱;
(3)塌陷物体,按楼或者地块来塌陷,不要跨区域塌陷;
(4)按项目对名称的要求进行严格的标准的命名;
(5)所有物体的质心要归于中心,检查物体位置无误后锁定物体;
(6)模型要求布线合理,无破面、共面、多余点,尽量少避免出现三角面。
备注:所有物体不准出现超过20000三角面的情况,否则导出时出错。
8、模型命名。不能使用中文命名,必须使用英文命名,不然在英文系统里会出问题。地块建筑模型不允许出现重名,必须按规范命名。
9、树的种植方法用十字交叉树或简模树。在种植树木的时候,要考虑到与周围建筑的关系,不能乱种树,要根据现状放置不同的树种、位置;重点建筑地块需种简模树,并在原地与之对应的种上十字片树(替换用);导出时模型树和与之对应的十字片树为单棵的,其它十字片树可塌一起,但面数不能超过1万。
10、模型的级别也就是模型的精细程度,有时在建模的时候要根据建筑所处的具体位置,重要程度对该建筑进行判断是建成何种精度的仿真模型。可以将建筑分为五个等级。其中,一级为最高等级,五级为最低等级。单个物体的面数不要太大,毕竟是做虚拟现实,而不是制作单张效果图。单个物体面数要控制到 8000个面以下。
11、镜像的物体需要修正。用镜像复制的方法来创建新模型,需要加修改编辑器修正一下:
第一步:需要选中镜像后的物体,然后进入Utilities面板中单击Reset XForm,然后单击Reset Selected;
第二步:进入modfiy面板选取Normal命令,反转一下法线即可。
12、烘焙的物体黑缝解决对办法。在烘焙的时候,如果图片不够大的时候,往往会在边缘产生黑缝。处理小技巧 :
1)如果做鸟瞰楼体比较复杂可以把楼体合并成一个物体变成多重材质,然后对楼体进行整体完全烘焙;这样可以节省很多资源。
2)对于建筑及地形,须检查模型的贴图材料平铺的比例,对于较远的地表(或者草地),可以考虑用一张有真实感的图来平铺,平铺次数少一些。对于远端的地面材料,如果平铺次数大了,真实感比较差。
13、模型交付格式内嵌好贴图的FBX。
三、材质贴图规范
1、材质和贴图类型。目前使用的是UE软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在使用的3ds Max中不是所有材质都被UE软件所支持,只有下面几种材质是被UE软件所支持。Standard(标准材质)默认的通用材质球。基本上目前所有的仿真系统都支持这种材质类型。Multi/Sub-Object(多维/子物体材质)将多个材质组合为一种复合式材质,分别指定给一个物体的不同次物体选择级别。要注意的是,在场景制作中,Multi/Sub-Object材质中的子材质一定要是Standard标准材质。否则不被UE支持。在制作完模型进行烘焙贴 图前都必须将所有物体塌陷在一起,塌陷后的新物体就会自动产生一个新的Multi/Sub-Object多维/子物体材质。因此,这种材质类型在的仿 真制作中经常使用。
2、贴图通道及贴图类型。UE目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。只支持Diffuse Color(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道的channel设置为烘焙后的新channel,同 时将生成的lightmap指向到self-Illumination。
3、贴图的文件格式和尺寸。建筑的原始贴图不带通道的为JPG,带通道的为32位TGA,但最大别超过2048;贴图文件尺寸必须是2的N次方(8、16、32、64、128、256、512),最大贴图尺寸不能超过(1024×1024)。在烘培时将纹理贴图存为TGA 格式。
4、贴图和材质应用规则
(1)贴图不能以中文命名,不能有重名;
(2)材质球命名与物体名称一致;
(3)材质球的父子层级的命名必须一致;
(4)同种贴图必须使一个材质球;
(5)除需要用双面材质表现的物体之外,其他物体不能使用双面材质;
(6)材质球的ID号和物体的ID号必须一致。
(7)若使用CompleteMap烘焙,烘焙完毕后会自动产生一个Shell材质,必须将Shell材质变为Standard标准材质,并且通道要一致,否则不能正确导出贴图。
(8)带Alpha通道的贴图,在命名时必须加_al以区分。
5、通道纹理应用规则。模型需要通过通道处理时需要制作带有通道的纹理。在制作树的通道纹理时,最好将透明部分改成树的主色,这样在渲染时可以使有效边缘部分的颜色正确。通道纹理在程序渲染时占用的资源比同尺寸普通纹理要多。通道纹理命名时应以-AL结尾。
四、模型烘焙
1、场景灯光
(1)渲染方式:采用Max自带的Light Tracer光线追踪进行渲染。
(2)灯光效果控制:该项目在烘焙前会给出固定的烘焙灯光,灯光的高度、角度、参数均不可调整,可以在顶视图中将灯光组平移到自己的区块,必须要用灯光合并场景然后烘焙。
2、烘焙贴图方式建筑模型的烘焙方式有两种:
一种是LightMap烘焙贴方式,这种烘焙贴图渲染出来的贴图只带有阴影信息,不包含基本纹理。具体应用于制作纹理较清晰的模型文件(如地形),原理是将模型的基本纹理贴图和LightMap阴影贴图两者进行叠加。优点是最终模型纹理比较楚,而且可以使用重复纹理贴图,节约纹理资源;烘焙后的模型可以直接导出FBX文件,不用修改贴图通道。缺点是LightingMap贴图不带有高光信息;
另一种是 CompleteMap烘焙方式,这种烘焙贴图方式的优点是渲染出来的贴图本身就带有基本纹理和光影信息,但缺点是没有细节纹理,且在近处时纹理比较模糊。
3、烘焙贴图设置
① CompleteMap烘焙方式在进行CompleteMap烘焙设置时,应注意以下几点:
a)贴图通道和物体UV坐标通道必须为1通道;
b)烘焙贴图文件存储格式为TGA格式;
使用已有通道,默认为3,阴影参与烘焙计算创建一个新的Baked材质文件格式类型,目标贴图栏 。
② LightingMap烘焙方式在进行LightingMap烘焙设置时,和CompleteMap设置有些地方不同:
a)贴图通道和物体UV坐标通道必须为3通道;
b)烘焙时灯光的阴影方式为Adv.RayTraced阴影;
创建一个新的Baked材质,开启直接光照阴影参与烘焙计算开启间接光照目标贴图栏 文件格式类型使用已有通道,默认为3 。
c) 用LightingMap烘焙时,背景色要改为白色,可避免有黑边的情况;而用CompleteMap烘培时,背景色要改为与贴图近似的颜色;
d) 在使用lightmap烘焙后,需要将材质改回Standard,然后将新生成的map拷贝到Standard的self-Illumination内,并设置正确的贴图通道。
4、贴图UV编辑必须手动进行UV编辑。
五、模型导出
1、将烘培材质球改为标准材质球,通道为1,自发光100;
2、将所有物体名、材质球名、贴图名保持一致;
3、合并顶点(大小要合适);
4、清除场景,除了主要的有用的物体外,删除一切物件;
5、清材质球,删除多余的材质球(不重要的贴图要缩小);
6、按要求导出fbx(检查看是否要打组导出)。
六、制作PBR材质
PBR管线中需要的所有材质参数都可以使用纹理来定义或者模拟,使用纹理可以逐像素控制制定的面如何跟光线交互:这个点是否是金属,粗糙度如何又或者表面对不同波长的光有什么反映。
反射率(Albedo):反射率纹理指定了材质表面每个像素的颜色,如果材质是金属那纹理包含的就是基础反射率。这个跟之前用过的漫反射纹理非常的类似,但是不包含任何光照信息。漫反射纹理通常会有轻微的阴影和较暗的裂缝,这些在Albedo贴图里面都不应该出现,仅仅只包含材质的颜色(金属材质是基础反射率)。
法线(Normal):法线纹理跟之前使用的是完全一样的。法线贴图可以逐像素指定表面法线,让平坦的表面也能渲染出凹凸不平的视觉效果。
金属度(Metallic):金属度贴图逐像素的指定表面是金属还是电介质。根据PBR引擎各自的设定,金属程度即可以是[0.0,1.0]区间的浮点值也可以是非0即1的布尔值。
粗糙度(Roughness):粗糙度贴图逐像素的指定了表面有多粗糙,粗糙度的值影响了材质表面的微平面的平均朝向,粗糙的表面上反射效果更大更模糊,光滑的表面更亮更清晰。有些PBR引擎用光滑度贴图替代粗糙度贴图,因为他们觉得光滑度贴图更直观,将采样出来的光滑度使用(1-光滑度)= 粗糙度 就能转换成粗糙度了。
环境光遮挡(Ambient Occlusion,AO):AO贴图为材质表面和几何体周边可能的位置,提供了额外的阴影效果。比如有一面砖墙,在两块砖之间的缝隙里Albedo贴图包含的应该是没有阴影的颜色信息,而让AO贴图来指定这一块需要更暗一些,这个地方光线更难照射到。AO贴图在光照计算的最后一步使用可以显著的提高渲染效果,模型或者材质的AO贴图一般是在建模阶段手动生成的。
基础颜色
基础颜色定义了材质的总体颜色。 "基础颜色"输入接受 Vector3 (RGB) 值,其中每个通道自动限制在0到1之间。
如果取自真实世界,这是使用极化筛选器(极化会删除对齐时非金属的高光度)拍照时的颜色。
非金属测量的基础颜色值(仅限强度)
|
金属测量的基础颜色
|
材质
|
基础颜色强度
|
材质
|
基础颜色强度
|
木炭
|
0.02
|
铁
|
(0.560, 0.570, 0.580)
|
新沥青
|
0.02
|
银
|
(0.972, 0.960, 0.915)
|
旧沥青
|
0.08
|
铝
|
(0.913, 0.921, 0.925)
|
裸土
|
0.13
|
金
|
(1.000, 0.766, 0.336)
|
青草
|
0.21
|
铜
|
(0.955, 0.637, 0.538)
|
沙漠沙
|
0.36
|
铬
|
(0.550, 0.556, 0.554)
|
新混凝土
|
0.51
|
镍
|
(0.660, 0.609, 0.526)
|
海洋冰
|
0.56
|
钛
|
(0.542, 0.497, 0.449)
|
新雪
|
0.81
|
钴
|
(0.662, 0.655, 0.634)
|
粗糙度
"粗糙度"输入控制了材质表面有多粗糙或光滑。 在材质中,这表现为反射在材质上看起来有多尖锐或模糊。粗糙材质会沿比光滑材质更多的方向反射光线,这样产生的是漫反射,有时很细微。光滑表面会更均匀地反射光线,这样产生的是清晰、集中的反射或镜面高光。
1)粗糙度为0(光滑)会产生镜面反射。
2)粗糙度为1(粗糙)会产生漫反射或无光泽的表面。

0到1之间的粗糙度值。顶部为非金属,底部为金属。
金属度
"金属度"输入接受0到1之间的值,并定义你的材质是作为金属还是非金属表现。在大多数情况下,你应该将"金属度"视为虚幻引擎中的二进制属性。 对于纯表面(例如纯金属、纯岩石、纯塑料,等等),你应该将"金属度"设置为 0或1,而不是中间值。创建被腐蚀、有灰尘或生锈的金属之类的混合表面时,你可能发现你需要0到1之间的某个值。
1)非金属 的"金属度"值为0。这是默认值。
2)金属 的"金属度"值为1。
相同材质中往往金属和非金属都有。假设一个金属面板,其中油漆涂层覆盖了部分或全部金属。油漆是非金属,因此在油漆覆盖的所有区域中,"金属度"值应该为0。在面板中看得到金属的所有地方,"金属度"值应该为1。这应该使用传递到"金属度"输入的黑白遮罩进行处理。油漆没有与金属混合,而是位于其上方。"金属度"贴图不应包含中间灰阶值,只能包含黑色和白色。还可以使用材质层实现类似结果。
高光度
"高光度"输入接受0到1之间的值,并控制表面反射多少高光。"高光度"值为0表示完全不反射。"高光度"值为1表示完全反射。虚幻引擎使用默认高光度0.5,这表示大约4%的高光度反射。对于绝大多数材质,此值是准确的。
修改"高光度"的一个原因是添加微型遮蔽区或小尺度阴影,比如从法线贴图中表示的裂口添加。这些有时被称为cavity。 小尺度的几何体(尤其是仅存在于高精度多边形中并烘焙到法线贴图中的细节)不会被渲染器的实时阴影选取。要捕获此阴影,你可以生成cavity贴图,它通常是追踪距离非常短的AO贴图。这会乘以输出之前的最终"基础颜色",并乘以0.5("高光度"默认值)作为"高光度"输出。确切地说,就是:基础颜色= cavity旧基础颜色,高光度=cavity 0.5。在高级用途中,这一步可以用于控制折射率(IOR)。
法线
法线(Normal) 输入接收法线贴图,后者将打乱每个单独像素的"法线"或朝向方向,为表面提供重要的物理细节。
在上图中,两种武器都使用了相同的静态网格体。下图显示了一个非常详细的法线贴图,其提供了更多细节,带来一种表面包含的多边形比实际渲染多出许多的错觉。 法线贴图通常是从高分辨率建模包创建的。
七、三维模型应用PBR材质
纹理
对于材质,纹理只是用于提供某种基于像素的数据的图像。这些数据可能是对象的颜色、光泽度、透明度以及各种其他方面。有一种过时的想法,认为"添加纹理"是给游戏模型上色的过程。虽然创建纹理的过程仍然很关键,但应该将纹理看作材质的"元件",而不是将它们本身视为最终成品,这一点很重要。
一个单一材质有可能用到几个不同的纹理贴图作为不同的目的效果。比如,一个简单的材质可能会有一个基础颜色的纹理贴图,一个高光纹理,一个法线贴图。除此以外,还有可能有保存在透明通道中的自发光贴图以及粗造度贴图。
可以发现,虽然这些可能都同时存在于一个贴图的布局中,但纹理贴图中的不同的颜色被用于不同的目的。
纹理一旦创建并导入虚幻引擎,就会通过特殊的材质表达式节点( 例如 纹理取样(Texture Sample) 节点)引入到材质中。您可以在上文的硬木地板示例中看到这些内容。这些节点引用纹理资产,该资产存在于材质外部,可以在 内容浏览器 中单独找到。与某些 3D 应用程序不同,材质无法包含它自己的纹理。
网格体
对网格网格体(静态、动态或骨骼)应用材质有许多种不同方法。您可以直接使用网格属性中的材质元素槽。在关卡中选中网格时,您可以在 细节(Details) 面板中找到这些槽,也可以通过 右键单击 网格并从快捷菜单中选择"属性"(Properties)找到这些槽。您也可以在各种编辑器(例如静态网格编辑器或者人物骨骼网格编辑器)中找到这些槽。
第一步,选择要应用材质的网格。
第二步,在细节(Details)面板中,单击材质元素下拉菜单的箭头。这会显示项目中所有的可用材质,您也可以使用搜索栏进行搜索。
或者,您可以在内容浏览器中选择所需材质,然后单击箭头按钮应用该材质。
刷表面
将材质应用于刷表面的过程非常简单:
第一步,在内容浏览器中选中一个材质
第二步,单击要将该材质指派到的刷表面。
第三步,在细节(Details)面板中,单击
按钮。单击这个按钮会将该材质应用于刷表面。