【unity shader】渐变效果在小米手机变成色块的问题

问题


同样的效果在华为手机是正常的,颜色平滑地渐变、过渡,但在小米(小米11,小米mix2)颜色只有生硬的变化

(有时间补图)

原因

相关计算使用了half。通过一块块注释掉代码的方法发现,有一行式子中,只要加一个值,就会产生色块问题,而这个值的大小是8。将这个值改为0.2(较小的值)就是没有问题的,所以认为是精度问题。


接下来记录学习官方文档得到的知识:

unity官方支持HLSL语言,它使用三种基础精度的浮点数:float, half, fixed。

float

最高的精度,基本是32bit

适合计算世界坐标,纹理坐标,或者涉及比如三角函数、pow、exp等等的复杂计算

half

中等精度,基本是16bit,范围–60000 to +60000,小数点后3位的精度。

适合短的向量,方向,本地空间坐标,hdr颜色

fixed

低精度,基本是11bit,范围-2.0到2.0,1/256的精度

适合普通的颜色,简单的计算

总结

在PC上,全部使用float计算,在mobile上half和fixed才开始起作用。所以要想在手机上跑必须测试。

一般是先用half写,除非位置和texcoord的计算,精度不够再加。

对于NaN这种特殊值,支持Direct3D 10的GPU的行为和写C#脚本的行为是一样的。其他硬件,除以零可能得到NaN,Infinity,零。判断是否是nan使用isnan()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值