[LayaAirIDE3]LayaAir3.2.x模型缩放为负数时播放动画渲染异常Bug
版本LayaAir3.2.5,模型scale正数时播放动画正常,当模型缩放为负数时,部分动画播放会出现渲染异常Bug,附上Demo。
没有找到相关结果
已邀请:
要回复问题请先登录
2 个回复
LayaAir小牛
赞同来自:
layabox
赞同来自:
你 Demo 的自定义 Shader 中,有一个 Pass 用于剔除正面。当模型出现负数缩放时,会改变三角形的顶点顺序,从而影响正反面的判断。引擎能根据这种变化自动调整剔除的正反面。但是,对于 SkinnedMesh(蒙皮网格)来说,它的变换是由骨骼的 transform 决定的,而这部分计算是在 Shader 中完成的。如果骨骼使用了负数缩放,引擎就无法自动判断并调整剔除方向,可能导致渲染错误。
默认材质通常是剔除背面的(Cull Back),所以一般不会遇到这种问题。但如果使用了剔除正面的设置(Cull Front),并且骨骼变换中含有负数缩放,就有可能出现渲染错误。
如果修改出问题的某一帧的某个角度,渲染效果可以恢复正常,但会导致动作变形。这是因为动画数据修改后影响了骨骼的 transform,从而影响了三角形的渲染顺序。
你可以尝试一下,当你对骨骼使用负数缩放(例如 ScaleX 为负)时,同时对 SkinnedMesh 节点的 ScaleX 一起做相应的调整,保持两者的整体变换一致,以避免剔除方向异常的问题。