URP渲染管线场景优化实战 2.3静态资源导入及优化——Texture

2.3 Texture导入设置及优化

2.3.1 纹理类型

  • Default
  • Normal Map
  • Editor GUI and Legacy GUI:在编辑器GUI上使用纹理的类型
  • Sprite:常用于2D游戏和UGUI
  • Cursor:鼠标光标自定义纹理类型
  • Cookie:用于光照Cookie
  • Lightmap:光照贴图类型的纹理
  • Single Channel:如果原始图片文件只有一个通道,建议使用此类型

2.3.2 纹理大小

一般建议为2的幂次
建议遵循以下经验:

  1. 不同平台不同硬件配置选择不同的纹理大小;
    • unity下可以采用bundle变体设置多套资源;
    • 或者通过Mipmap限制不同平台加载不同Level层级的贴图;
  2. 根据纹理用途不同,选择不同的纹理加载方式;
    • 流式纹理加载:Texture Streaming
    • 稀疏纹理:Sparse Texture
    • 虚拟纹理:VirtualTexture
  3. 不能让美术人员通过增加纹理大小的方式增加细节;
    • 可以选择细节贴图DetailMap;
    • 在美术原图上增加高反差保留;
  4. 在不降低视觉效果的前提下,尽量减小贴图大小;
    • 理想情况下:纹理映射的每一个纹素的大小正好符合屏幕上显示像素的大小;
    • 建议辅助利用SceneView->DrawMode->Mipmap选项来查看场景中的过采样和欠采样部分;

2.3.3 纹理颜色空间

一般情况下,作为颜色信息的纹理一般都会使用sRGB颜色空间处理和导出纹理;
但是对于提供非颜色信息,比如:金属度贴图、粗糙度贴图或者法线贴图等,就不需要勾选sRGB,否则会造成视觉效果错误。

2.3.4 纹理压缩

在保持纹理视觉质量的同时,尽量减小纹理数据的大小;
ASTC、ETC、ETC2等格式都是常见的纹理压缩格式;

2.3.5 纹理图集

纹理图集是一系列小纹理图像的集合;

  1. 优点:
    • 采用共同纹理图集的多个静态网格资源可以进行静态合批处理,减少DrawCall调用;
    • 纹理图集可以解决碎片纹理过多的问题,将他们打包后在进行压缩可以有效利用空间,降低纹理的内存成本和冗余数量;
  2. 缺点:
    • 美术需要合理规划模型,并且要求模型有相同的材质着色器;
    • 或者需要制作通道图去区分不同材质,制作和修改成本较高;

2.3.6 纹理过滤

  1. Nearest Point Filtering
  2. Bilinear Filtering:平衡性能和视觉质量;
  3. Trilinear Filtering:有选择的使用;
  4. Anisotropic Filtering:各向异性过滤适用于地表的纹理贴图
  • 对于混合使用,建议使用:双线性和2x各向异性过滤,而不是三线性和1x各向异性过滤,因为前一种做法不仅视觉效果更好,而且性能更高;
  • 另外,尽量选用较低的各向异性级别,仅对关键游戏资源使用高于2的级别;
    aniso level:各向异性过滤等级

2.3.7 纹理Mipmap

逐级减低分辨率来保存纹理副本;相当于生成了纹理LOD。

  1. 优点:
    • GPU在远距离上不需要记性全像素的纹理采样,提高了纹理采样的性能;
    • 同时解决了远距离下过采样导致的噪点和失真问题;
  2. 缺点:
    • 额外的内存开销;(但是可以通过unity中的Mipmap streaming功能,在渲染时仅对某个层级以下的贴图进行采样,从而尽可能的降低内存开销)
    • 同时也是 hierarchy z cull (层级剔除)的前提条件;

2.3.8 导入设置

Texture Shape

  • 2D
  • Cube 一般用于天空和反射探针,可以手动生成也可以通过脚本RenderToCubeMap自动生成;
  • 2D Array 2D纹理数组,可以极大提升大量相同大小和格式的纹理的访问效率,但需要特定平台支持,可以通过引擎SystemInfo.supports2DArrayTextures接口运行时查看是否支持;
  • 3D 通过纹理位图方式存储或传递一些3D结构化数据,一般用于体积仿真,如雾效、噪声、体积数据、距离场、东华数据等信息,可以外部导入,也可以运行时程序化创建;

Alpha Source

一般默认选择Input Texture Alpha就好,如果确定不使用原图中的alpha通道则可以选择None。

Alpha Is Transparency

如果位图像素不关系是否要半透明可以不开启此选项。这样Alpha信息只需要占1bit。节省内存

Ignore Png file gamma

一般上制作流程中没有其他特殊设置,该项默认选择就好;

Read/Write

开启后内存占用将提高一倍,一般不开启,除非有动态读取纹理的需求;

Streaming Mipmaps 和 Virtual Texture Only

保持默认即可;

Generate Mip Maps

什么时候不需要Mipmaps:
- 2D场景
- 固定视角,摄像机无法缩放远近

Border Mip Maps

默认情况下不开启,只有当纹理类型为Light Cookies时才开启,避免color bleeding现象,颜色渗透到较低级别的MipLevel纹理边缘上;

Mip Maps Filtering
  • Box最简单,随尺寸减小,Mipmap纹理变得平滑模糊;
  • Kaiser,避免平滑模糊的锐化过滤算法;
Mip Maps Preserve Coverage

只有需要纹理在开启Mipmap的同时还需要做Alpha Coverage时开启,默认不开启;

Fadeout Mip Maps

纹理Mipmap随层级淡化为灰色,一般不开启,只有在雾效较大时开启,以防影响视觉效果;

2.3.9 实际纹理问题

  • 纹理图集大小设定不合理,造成纹理资源的浪费
    在这里插入图片描述
  • 纹理图集中的内容声明周期不同,导致纹理图集长时间占用内存难以释放;
  • 半透明纹理经常占用大量的纹理空间,这一点一般要从UI设计上避免;
  • 过多的2D序列帧动画,应当组合成纹理图集;
  • 大量重复纹理和不合理的通道图利用;
  • 只有颜色差异的内容相似的UI贴图,可以采用分离变化区域贴图,同时采用UI的九宫格缩放;
  • 颜色渐变贴图建议使用单通道压缩和单像素宽度;

2.3.10 优化结果

优化方向:

  1. 对于Metallic贴图,RGB通道没有内容的贴图可以直接调整为单通道贴图,但是其中一部分贴图需要通过金属度计算光滑度,所以没办法转换为单通道。因此在美术资源设计阶段应当做好规范。
  2. 调整了各向异性的等级为2;

前:
在这里插入图片描述
后:
在这里插入图片描述

虽然整体看起来没有改变,但是相比视频中的原体积还是缩小了很多,推测可能是该项目在这个过程中优化过,所以占用减少了。
并且对纹理都提升了各向异性等级,与未提升前相比也没有明显的内存开销增加;
课程链接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zczplus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值