three.js mtl材质贴图未显示_Spine的纹理压缩和半透显示

本文介绍了在three.js中遇到的mtl材质贴图显示问题,特别是使用ETC2或ASTC压缩格式时出现的质量下降。解决方案包括取消Spine的预乘alpha选项,启用出血(Bleeding)以支持压缩纹理。同时,文章讨论了如何在同一个Shader PASS中同时处理Alpha Blend和Additive物体的绘制,并探讨了Spine的半透明显示方法。最后,强调了动态立绘启用Mipmap的重要性,不仅为了解决纹理走样,同时也是性能优化的一种手段。
摘要由CSDN通过智能技术生成

dd933c75507837031aebd33360e1ddaa.png

纹理压缩

如果使用Spine的默认输出格式,是这样的

b8092cd4bc7aec709fbd0c2cb023b961.png

但是输出纹理的格式必须是未压缩的RGBA,如果你将图片格式改为ETC2或者ASTC,就会变成这样:

e70e655c38694bb8693c19a2e85d60cd.png

而这是绝对不能容忍的画面瑕疵。

ETC2的压缩质量绝不至于这样差,之所以会变成这样,在于Spine的默认输出格式是勾选了“预乘(premultiplied alpha)”参数的,这种做法会将图片原始的RGB通道预先乘以透明度保存成文件,显示时再用特殊的Shader乘回去。而ETC2的压缩算法并没有考虑过这种情况,由此导致了压缩质量降低。

而之所以Spine要使用预乘(premultiplied alpha),目的是为了解决透明图片的采样问题。

d6ecf73ff5e29c44285f9f8cb134464a.png

如图,左边的像素点是纯透明,右边的像素点是白色点,如果在红点处采样,获得的颜色值就是(0.5,0.5,0.5,0.5)

3f6b8892f9979d5c112a318299a12db9.png

而正确的颜色值应该是(1,1,1,0.5),因为变化的只应该是透明度,不能因为达到边缘&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值