We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
lowp: 2位指数5位尾数, 1/32 = 0.03125 mediump: 10位尾数 1 / 1024 = 0.0009765625 ≈ 0.001
极少数机型 PS中不支持函数输出一个结构体(out StandardSurface s)这样的写法 , Unity中是改为结构体中的每项单独out之后编译的 https://github.com/cocos-creator/3d-tasks/issues/10131#issuecomment-979582484 https://github.com/cocos-creator/3d-tasks/issues/9303
注意函数参数中需要输出结构体的情况,如果函数A(out StructType s)、B(inout vec3 xx)和C(inout StructType s),在A中调用B(s.test)和C(s),都会造成兼容性问题,原生GL上会无法正常写入test项(WebGL可能是正常的)。反之A(inout StructType s)、B(out vec3 xx)和C(out StructType s)也是不行的,out必须严格对应所有调用处的out,inout必须严格对应inout 为了统一,所有和结构体及其内部单项数据相关的传参都应给inout参数
注意函数参数中使用分支条件修改out参数的时候, 在mac上可能造成强制初始化 不一定会修改的传参也都应给inout参数
也要注意函数参数中需要输出mat4的情况, 如CSMGetLevel(out mat4), 要改成输出4个vec4(out vec4, out vec4, out vec4, out vec4), 否则对out mat4参数赋值的语句放在for或if中会导致crash (如oppo r11st) https://github.com/cocos/3d-tasks/issues/12596
WebGL1.0不支持带参数的宏的写法,只能使用#pragma define使用预先处理的字符串展开
已知待查验: surface shader场景(同时开instancing和两盏局部光才)会导致vivox7p crash test-case的鸭子场景material-upgrade, 鸭子使用legacy/toon.effect的话会在华为H60-L02的安卓原生上无光照 小游戏平台已知问题收集: https://github.com/cocos/2d-tasks/issues/2581
The text was updated successfully, but these errors were encountered:
No branches or pull requests
精度相关
lowp: 2位指数5位尾数, 1/32 = 0.03125
mediump: 10位尾数 1 / 1024 = 0.0009765625 ≈ 0.001
部分华为麒麟海思芯片(P30, P40等) 的原生GLES或WebGL中,浮点格式贴图读写精度不足导致shadowBias效果出错 https://github.com/cocos/3d-tasks/issues/13330
可以强制使用Packing, 或在每个sampler2D shadowmap的定义处(包括函数传参)都要加highp, 或直接shader头部加precisioni highp sampler2D(已解决)
有时候normal精度不足也会造成错误, 可能需要对normal也做额外的补偿处理
要特别注意这种需要齐次除的数据, 一定要在ps里除, 尤其是透视投影
指令相关
https://github.com/cocos-creator/engine/pull/9847/files
关联--https://github.com/cocos-creator/3d-tasks/issues/9858
shader里面pseudoRandom vk不兼容,具体是vk的shader不兼容此处mod的输入值,需要找一个替代写法才行
[1] 大于小于用来判断常量:
if (xxx <= UBO.clipvalue)是错的, if (xxx <= 128)是对的, 大于小于只能拿来判断常量, 判断变量或者UBO常量就错
[2] step不能直接&&:
step可以判断任何变量和常量, 但step不能写成if (step && step),要写成a = step; b= step; if(a && b)
结论是: 推荐使用step代替大于小于, 但多个step不要出现在一个语句中
也可能要分Shader, VS用> <, PS用step会兼容性更好
https://github.com/cocos-creator/3d-tasks/issues/10249 PS中的用法
https://github.com/cocos-creator/3d-tasks/issues/9022 VS中的用法, 3.4.1好像又正确了
所以说在不是必须要动态分支的地方,尽量使用宏展开的unroll形式,就算写成for也不要有上述三个语句。
贴图及采样相关
函数参数
极少数机型 PS中不支持函数输出一个结构体(out StandardSurface s)这样的写法 , Unity中是改为结构体中的每项单独out之后编译的
https://github.com/cocos-creator/3d-tasks/issues/10131#issuecomment-979582484
https://github.com/cocos-creator/3d-tasks/issues/9303
注意函数参数中需要输出结构体的情况,如果函数A(out StructType s)、B(inout vec3 xx)和C(inout StructType s),在A中调用B(s.test)和C(s),都会造成兼容性问题,原生GL上会无法正常写入test项(WebGL可能是正常的)。反之A(inout StructType s)、B(out vec3 xx)和C(out StructType s)也是不行的,out必须严格对应所有调用处的out,inout必须严格对应inout
为了统一,所有和结构体及其内部单项数据相关的传参都应给inout参数
注意函数参数中使用分支条件修改out参数的时候, 在mac上可能造成强制初始化
不一定会修改的传参也都应给inout参数
也要注意函数参数中需要输出mat4的情况, 如CSMGetLevel(out mat4), 要改成输出4个vec4(out vec4, out vec4, out vec4, out vec4), 否则对out mat4参数赋值的语句放在for或if中会导致crash (如oppo r11st) https://github.com/cocos/3d-tasks/issues/12596
WebGL1.0不支持带参数的宏的写法,只能使用#pragma define使用预先处理的字符串展开
其他
硬件能力
iOS 15.4.1报的maxVertexUniformVectors也很少, 导致骨骼使用的uniform越界, 自动计算之后可以修复 [Bug] fix maxJoints calculate error cocos/cocos-engine#13174
微信平台报的maxVertexUniformVectors很多但其实不能用, 会导致骨骼动画都画不出来, 通过写死root.ts中自动计算的Count为256可以检查是否正常
引擎相关代码
问题集查询
已知待查验: surface shader场景(同时开instancing和两盏局部光才)会导致vivox7p crash
test-case的鸭子场景material-upgrade, 鸭子使用legacy/toon.effect的话会在华为H60-L02的安卓原生上无光照
小游戏平台已知问题收集: https://github.com/cocos/2d-tasks/issues/2581
The text was updated successfully, but these errors were encountered: