建模指南

以下是一些重要的准则,你在建立对象模型时必须遵守

         我们经常会想如何支配好多边型,请牢记一个平滑的轮廓比一个高度镶嵌(tessellation)的平滑表面更重要。看一看如何将多边形应用到下面汽车模型。平滑的侧面多边形的聚合度非常低,而构成轮廓的部分,如挡泥板处有非常多的细分。

 

         添加边缘到保留的适当的集合体上,如果需要,在边缘做倒(dao)角或添加额外的边缘,通过这样做是为了得到NormalMap和平滑模型,特别的是当需要做好的高光贴图的时候,通过添加一些额外的边,可以让模型的着色看起来更平滑,如下边左边的汽车。

 

         请牢记Tesselation,在导出前,要经常确保手动调整Tesselation,每个三角形都尽可能得到最大的空间利用率。这有助于我们保持着色的一致性,美术人员要确保三角形带没有破损,避免出现三角扇。

 

         尽可能少的使用着色群组,添加一个新的着色群组(Shading Group)通常会带来与边缘倒角一样的开销,只使用一个着色群组(Shading Group)因为顶点在不同的着色群组时会被引擎有效的分离成2份。另外,在轮廓处进行倒角处理有助于着色处理(它会创建一个高光)。但避免混淆,因为一个边缘倒角不像刚才两个面在不同着色群组中那么明显,它看起来更加自然因为大多数边都不是%100的锐利。这需要根据具体美术资源来做决定

 

         始终要尝试使用基础图元象(盒子)Box,(球体)Sphere,或者(胶囊体)Capsules来作为碰状检测的几何体,甚至使用一些使用这些多个这样图元的复合体都要比用原始的建模体做碰撞代理体要节省开销。确保在3dMax下这些碰撞图元的颜色,并且考虑到底需要使用了多少种类型。

         请牢记贴花(Decals)永远是做了两个方向的投射(Projected).这个意思是说任何事情都有要从两方面考虑,并不是所有面都需要用碰撞图元全部覆盖,一些角色无法到达的区域没有必要非要用碰撞代理体去包裹他们。只需要保证他们在一个平滑组(Smooth Group)下即可

 

         确保你在3ds Max导出时使用了一些虚拟体(dummies)来做为导出的根节点,这些帮助体可以保持文件的可读性和干净也使其他美术人员能够方便的在此文件上工作。

         在设定的图层上工作,并遵循命名规范。

 

         确保使用LOD来为模型减少复杂度。第一层LOD不应包含一些细小细节,透明物体例如玻璃应该被删除,保留轮廓,并尝试减少一些材质上的复杂度和个数。颜色上的变化可以使用一些顶点色进行补偿。第二层LOD不应包含一些曲面,不必有太精确的轮廓,使大多数的表面尽量减少面数。最后一层的LOD应越简单越好,甚至可以不需要保留轮廓,只使用1种材质,同样可以使用一些顶点色替换。每个层级的LOD要至少保证三角形面有%50的减少。

 

         要将多边型的开销尽量应用到角色可以接近的区域,一些远处的地方可以节省一些。想想这些资源会被应用到那里。如果它是一个背景型的物体,确保他越简单越好(低三角形数/低纹理解决方案)

 

         尝试匹配平滑组(Smooth Group)/材质分割(Material splits)/UV边界。每次进行材质分割(Material splits)/平滑组(Smooth Group) /UV边界分割时都要保证共享边缘。当需要在在许多不同地方进行拆分时,保证顶点只会被拆分1次,并且保证三角形数量不会受到影响。

         同样,总是要尽可能少的使用平滑组(Smooth Group)/材质分割(Material splits)/UV边界。

         避免背面的影响(意思是根据需求关闭背面渲染)

         删除角色看不到的多边形

         合并meshes成一个统一的Mesh可以节省DrawCalls

 

纹理与UV展开

         物体应用的纹理大小应该与这个物体在平面上的显示区域大小和数量有关。对Crysis来说,Crytek设定的屏幕分辨率为800×600,假设该对象在任何时间填充屏幕一般的高度(600/2=300pixel);因此我们需要使用至少256×256的贴图分辨率,使用512×512的会更好。最好的情况是屏幕上的每一个象素代表纹理上的一个想素。当然这还依赖于物体在三维方面具体有多大,你不能直接将2D下的纹理空间直接匹配到三维空间里。

         尽量保证所有的纹理比率为常数,这个意思是所有屏幕上的对象每米使用相当于同样的纹理象素数。这样,你可以确保所有对象在屏幕上有大致相同的清晰度,而且纹理不会看历来参差不齐。

         屏幕上的对象与角色总保持相同的距离(如:武器)可以使用一个更高的纹理比率,因为他们是最接近角色的。

 

         始终保持纹理是正方形的,正方形文理处理速度比非正方形的要快。如果你有一个使用非正方形纹理的物体,尝试使用一个正方形纹理,甚至与其他物体共享一张正方形纹理。

         重复利用纹理,如果你正在建立一个资源而保证纹理是可贴的,而不需要重新进行特殊的UV展开。此外在不同对象上共享文理可以保证相同的纹理比率。

         透明纹理不要使用的太过火,屏幕上越多的空间被覆盖上了透明,渲染的开销越大。透明面使用AlphaTest会带来第二次Drawcall.

         请牢记过度绘制(overdraw)。裁减一个被透明贴图覆盖的多边形面以匹配它的形状,这样保证透明区域在屏幕区域出现的越少越好。这样还可以在贴图存放更多的纹理。

 

         合并UV,确保所有UV顶点在彼此上边的将被合并。这是对一些有镜向部分的Mesh非常重要的,它可以阻止UV边界上的顶点被重复拆分。

 

         为物体创建合适的高光贴图(Specular Map)。将他们存储到一个Difuuse贴图的Alpha通道并启动Diffuse Alpha材质中Gloss。一个好的高光贴图会伪造大量的细节信息。有时候你甚至物体可以不需要一张NormalMap.不要增加额外的贴图,这是内存上的浪费。

 

         这里有些有创意的方法来创造各种视觉效果。同时仍然只使用贴图(其实就是光照贴图)

1. 使用顶点颜色,这是一种为网格添加阴影信息和颜色变化的简单方法。通过将环境闭塞烘焙到顶点色中,然后手动添加颜色

2. 再添加另外一个材质,可以通过添加额外顶点得到差异,使用顶点颜色增加对比度和颜色信息到贴图文理。

 

        

   依靠贴花可以提供一些差异性的纹理,不要使用编辑器里的贴花,在3dsMax中通过Floating Geometry选项来创建他们,保证所有贴花在一张纹理上,这样你不需要额外的材质。合并纹理使用要有Alpha

 

         在某些情况下,你可能需要添加额外的细节纹理,像一个额外的装饰或底部的一块要有一些变化。这通常是个好主意,但要确保纹理的主要部分仍然是贴图的本身。你需要在网格上添加一些额外的三角形网格用来进行纹理tile.,通常情况下,这种视觉的改善是值得的。并且它提供了一个通过顶点色添加变化的机会。

 

         最大限度的利用纹理,不要使用一个已经铺好的图,尽可能获得多的细节并减小纹理的尺寸。

         使用所有可用的纹理空间,不要使用黑色作为初始纹理的背景色(也不要使用红色在游戏中,因为MipMaping,黑色是中性的,它不会给你直观感觉还有多少空间没有被利用。(其实就是告诉你挑选一个不会再游戏中利用的颜色作为贴图的背景色。)

 

Shaders

         内存的合理应用,NormalMaps是一种普通DiffuseMapSpecularMap4倍成本。因此NormalMap应该只有DiffuseMap四分之一大小的分辨率,避免使用NormalMap来创建号的SpecularMap

         精细的NormalMap非常昂贵,应尽可能的用细节颜色贴图来进行视觉补偿。

         使用DiffuseAlpha Shader Generation 选项当高光贴图没有包含额外颜色信息的时候。你可以使用shader里的高光色(Specular Color)来弥补高光贴图缺少的颜色信息。通过这样做你可以节省1DrawCall.

         如果可能 在一张地图中之使用一张环境贴图以保证统一的外观和节省内存的开销

         避免过多的昂贵的shader,这里包括skin Shader,eye shader, wet shaderfrozen shader

         尽量使用alpha testing来做透明物体(如,植被)

         使用调色,这一点对于一些物体非常重要,如某些道具,汽车,飞机,垃圾桶等。调色意味着为diffusemap创建一个灰度贴图,色彩通过材质编辑器中的diffuse color属性进行着色。所有对象和表面可以改变颜色而使用相同的材质。

         你需要事先确定哪些对象使用着色功能,然后再3dsMax进行正确设置。通过这样做可以节省很多内存。

一般注释

         关卡设计应该从一些基础的代理集合体开始构建开始,这可以通过使用一些solids或者3dsMax下建立的一些代理模型开始。然后所有逻辑相关的Entites被放置。然后将关卡转给美术。

         关卡中的VisBlocking和遮挡体是非常重要的,因此关卡应该是相当小的可视距离,同一时间应该尽可能少的对象显示在屏幕上。角色应该总能看到自己很小的一块活动区域(Action Bubble)。包括过度区域(Transition Zone)

         如果游戏设计需要更多的可视区域需要同时显示在屏幕上,就应该平衡关卡的复杂度与复杂性了。为此,美术人员需要知道此范围内的对象需要被用。(小的,封闭型室内;大的,户外;屏幕上几个对象,人工智能与屏幕参数选项)

版权声明:本文为wanax原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wanax/archive/2009/12/09/1619866.html