工作之后经历过一些项目,虽然不多,但还是踩过一些美术的坑。这里基于之前项目经验,对美术架构提出一些建议,希望能给其他开发者一些启发。
【如果有文章中没有涉及到或者错误之处,也希望积极交流】
本文主要通过以下几个方面来讨论
一、目录层级和命名规则
二、贴图规范
三、材质、材质实例及材质函数
四、模型和动画
一、目录层级和命名规则
对于UE4项目来说,模型和贴图的来源一般有两种方式:外包资源(无版权纠纷的网站上的资源或者UE4商城的资源也暂时划分成此类)或者内部制作。一般来说仅当全部资源为内部制作且材质数量较少时,采用根目录下的单独文件保存材质和贴图
![87b2847528704a714c2623990cf17e9b.png](https://img-blog.csdnimg.cn/img_convert/87b2847528704a714c2623990cf17e9b.png)
否则尽量将材质和贴图保存在对应资源模型的文件夹下。
![9024d18a0e15a5c14d186251af9c1d24.png](https://img-blog.csdnimg.cn/img_convert/9024d18a0e15a5c14d186251af9c1d24.png)
其次是命名规范,项目开发之初,应该确定好本项目的命名规范,包括美术资源(也可以参考官方示例或其他开发者,比如https://wiki.unrealengine.com/Assets_Naming_Convention)。
当需要搜索某种资源时,只要输入相应的前缀和后缀关键字,就可以轻松找到(推荐使用Ctrl+P组合键快速搜索)。
二、贴图规范
1.贴图的大小必须是二的整数幂
这是很重要的一点,也十分简单,但仍有很多美术不在意这一点。举个简单的例子,比如我截取了两张图,一张127*256,一张128*256,分别导入引擎。
![5d5f1cef095d88f662c814be1f131b10.png](https://img-blog.csdnimg.cn/img_convert/5d5f1cef095d88f662c814be1f131b10.png)
UE是一个很智能的引擎,它几乎能清楚地了解你这张贴图是想要做什么的,并自动把对应的设置替你勾选好(所以图里的不同部分,是UE自己识别的结果)。我们都知道世界场景里的物体在渲染时,会依据离摄像机的距离不同而从不同mip等级的贴图上采样。所以当贴图的大小是2的整数次幂时,UE就会自动帮你生成一组mip贴图(数量取决于贴图的边能被2整除到何种程度)。但如果你的贴图由于边长原因不能被自动处理,它将始终使用原贴图的大小,这在一些时候将会给性能带来致命影响。
不仅如此,如果边长不能被2整除,LOD Bias也无法方便地使用,不能方便地针对多平台进行贴图优化等环节。
2.独立Alpha还是RGBA?
有两种导入Alpha通道(下文称A)的方式,一种是把A和RGB放进一张贴图中,一种是分开导入。第一种更方便,也好写shader,第二种一定程度来说更规范,也可以避免一些显示问题(比如一些比较细的草或者钢丝网,如果使用第一种方式,当摄像头拉远之后会消失,需要适当修改一下A通道)。两种方式都可以,但一定要在项目之初就确定好导入方式,不然可能会导致shader的重用性大大降低。
3.贴图的明度
为了更真实的渲染效果,避免贴图过度饱和,避免贴图过暗(经验值明度50以上)。
4.合理设置贴图属性
虽然UE会自动识别绝大多数贴图并自动设置,但仍要在导入时仔细检查,然后根据实际用途设置好贴图的各个属性。比如用于UI的图就设置组别UI、永不流送等(不然可能进入游戏时看到模糊的UI或者看不到UI)。具体应该如何设置可以参照官方文档,这里不作展开。
三、材质、材质实例及材质函数
1.规范建立母材质和材质函数
有些常用的母材质和材质函数可以放置于一个特殊文件夹,供所有shader编写者共用,避免重复造轮子并增强shader可读性。比如常见的UV坐标变换函数
![acf5b3a4fb9746e5c41b39340d39509c.png](https://img-blog.csdnimg.cn/img_convert/acf5b3a4fb9746e5c41b39340d39509c.png)
2.合理使用材质实例
材质实例不仅可以增强可维护性,还可以优化性能。几乎在任何情况下,都使用材质实例直接赋予模型。
3.材质内参数的命名
材质内参数的命名也需遵循规则,比如底色贴图都叫BaseColor,法线贴图都叫Normal.....这样当进行代码操作时,可以方便地使用copy parameter函数。
四、模型和动画
1.LOD
绝大多数项目,模型应做好LOD。使用UE自带的工具去制作也很方便。
2.尽量减少动画的数据
可以用蒙太奇实现的动作,尽量不要通过源文件来完成(可以减少文件数量,方便管理,小项目可以忽略此条建议)。
除了上述几条之外,还应根据发布平台和目标效果提前确定好贴图精度和场景面数等,减少后期优化压力。
时间仓促,涉及的点不多,欢迎补充。