文章目录
- 环境
- 原因
- 解決方案
- Referenes
环境
Unity : 2020.3.37f1
Pipeline : BRP
原因
因为美术发现有些贴图太糊,但是经过研究发现,mipmap0就是完全够精度的
但是不可能还要提升贴图的尺寸,因为经过多方咨询(咨询TA大佬)
发现是 unity 纹理一个 mipmapBias 的 import 属性,但结果设置了一样木有效果
最后TA大佬说,试试 shader 修改 tex2D
=> tex2Dbias
,结果就OK了
Texture.mipmapBias
无效的原因在 unity 官方上有写:
- 使用了 MaterialPropertyBlocks 也不行
- 如果 Graphics API 是 metal, OpenGL ES 都不行,除非自己调整 shader
而我们项目 Graphics API 刚刚好是 OpenGL ES 所以没有效果
解決方案
将 float4 sample_val = tex2D(xxxMap, uv);
修改为 float4 sample_val = tex2Dbias(xxxMap, float4(uv, 0.0, -0.5); // mipmapBias : -0.5
因此对纹理的 mipmapBias import 属性设置是没有用的
只能在材质面板中添加一个 _xxx_mipmapBias
的参数
比如:_MainTex
的 mipmapBias 为:_MainTex_mipmapBias
默认 0 值即可
但是不能将这个设置 负数的偏移过大,否则导致纹理 cache miss (降低 cache hit 率)
那么就需要多次cache,导致渲染性能问题
Referenes
- google : unity mipmap bias principle
- Texture.mipMapBias
- Unity Blurry Textures – Mipmap Bias Guide
- Blur control-Mipmap bias handling
- What exactly does the mipmapbias do?
- Mip Map Bias workaround for Android (Unity) - 这个人遇到的问题和我的一样,解决方式也是一样