[LayaAirIDE3]LayaAir3.2.x模型缩放为负数时播放动画渲染异常Bug

版本LayaAir3.2.5,模型scale正数时播放动画正常,当模型缩放为负数时,部分动画播放会出现渲染异常Bug,附上Demo。

LayaAir小牛

赞同来自:

您好,感谢您的反馈,我们已经复现问题,正在寻找原因。

layabox

赞同来自:

不算是BUG,

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

要回复问题请先

商务合作
商务合作