1)纹理开启Mipmap导致压缩失败的问题
2)使用TextMeshPro能否避免使用Resources文件夹
3)用透视摄像机去分层管理UI的优势和好处
4)Houdini中切线空间向量怎么在Unity Shader还原出原向量
这是第325篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
Texture
Q:看到一些优化建议中说,ASTC压缩格式在开启Mipmap之后需要保证纹理尺寸为2的幂次方。
可是Mipmap的生成不受纹理尺寸的影响(非2的幂次方会有性能开销,但也可以生成Mipmap),ASTC压缩也是不受尺寸大小限制的。
但为什么非2的幂次方纹理开启Mipmap采用ASTC压缩格式会压缩失败?中间是有什么冲突吗?
针对以上问题,有经验的朋友欢迎转至社区交流分享
TextMeshPro
Q:使用TextMeshPro时,自带有Resources文件夹里面会放字体资源和TMP_setting,最后打测试包发现占据的内存还是比较大,而且我只用了一个字体。
有无办法不使用Resources?或者减少Resource内存大小呢?
参考:Unity TextMesh Pro 组件的 Resources 文件夹打包_无幻的博客-CSDN博客_unity textmesh pro 组件的 resources 文件夹打包
A:如果你对修改源码没有意见,建议修改源码。
把所有Resource.Load调用,代理成自定义方法(大概3处左右)。
感谢1 9 7 3-311135@UWA问答社区提供了回答
UI
Q:用透视摄像机去分层管理UI,是有什么优势和好处吗?能联想到的就是透视摄像机可以调节大小、位置、旋转、方便做3D效果,还是说还有一些别的优势?
针对以上问题,有经验的朋友欢迎转至社区交流分享
Rendering
Q:目前有一个需求, 在Houdini中,将法线从模型空间转换到切线空间后,保存到顶点颜色中,在Unity Shader通过读取顶点颜色将法线从切线空间转换到模型空间。
Houdini中:生成切线选择MikkT算法,和Unity保持一致:
vector T = normalize(v@tangentu);
vector B = normalize(v@tangentv) ;
vector N = normalize(@N);
matrix m = set(@T, @B, @N);
@Cd = m * @Cd;
@Cd = @Cd * {-0.5,0.5,0.5} + 0.5; //Houdini是右手坐标系,加负号转左手坐标系
在Unity Shader中:
float3 bitangent = cross(normalize(v.normal) , normalize(v.tangent.xyz)) * v.tangent.w;
float3x3 TtoO = float3x3(v.tangent.x, bitangent.x, v.normal.x,
v.tangent.y, bitangent.y, v.normal.y,
v.tangent.z, bitangent.z, v.normal.z);
float3 normalOS = v.color.xyz;
normalOS = normalOS * 2 -1;
normalOS = mul(TtoO, normalOS) ;
但是这样转换出的法线是不对的。
然后做了如下测试:在Houdini中,直接将法线写入顶点颜色通道:
@Cd = @N;
@Cd = @Cd * 0.5 + 0.5;
@Cd = normalize(@Cd);
@N = @Cd;
Unity中,通过RenderDoc截帧:
向法线和顶点写入同样的数值,Unity中得到的向量顺序不一样,数值可能小数也有偏差。
哪位大佬有Unity源码的代码能不能看下Unity在导入FBX时做了哪些计算,怎么能构建出Houdini中的TBN逆矩阵来还原出houdini写入的切线空间向量?
针对以上问题,有经验的朋友欢迎转至社区交流分享
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方问答社区:answer.uwa4d.com