diff options
author | Cosmic Linden <cosmic@lindenlab.com> | 2023-10-04 16:56:49 -0700 |
---|---|---|
committer | Cosmic Linden <cosmic@lindenlab.com> | 2023-10-06 10:13:00 -0700 |
commit | 85470fc4d29cb2fd7d168debdeed3544778592b8 (patch) | |
tree | f7b2654f9a155478a8e5573f1f1b78011c5c8a50 /indra/newview | |
parent | b553899087cb37391269eda15068291b335718ea (diff) |
SL-20396: Apply blinn-phong rotation to texture translation animations for GLTF materials, for more consistent behavior
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llvovolume.cpp | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 468943423a..f1d4d9039b 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -666,7 +666,25 @@ void LLVOVolume::animateTextures() { if (!(result & LLViewerTextureAnim::ROTATE)) { - rot = 0.0f; + if (result & LLViewerTextureAnim::TRANSLATE) + { + // The current LSL texture animation system is + // based on Blinn-Phong texture transforms, which + // is incompatible with the GLTF texture + // transforms. As a compromise, apply Blinn-Phong + // texture rotation on top of the GLTF texture + // transforms during a translation animation. This + // ensures that the animation loops for trivial + // GLTF texture transforms, when it would for + // similar Blinn-Phong animations. This is not + // guaranteed to loop for nontrivial GLTF texture + // transforms. + te->getRotation(&rot); + } + else + { + rot = 0.0f; + } } if (!(result & LLViewerTextureAnim::TRANSLATE)) { @@ -679,29 +697,20 @@ void LLVOVolume::animateTextures() scale_t = 1.0f; } - // For PBR materials, use Blinn-Phong rotation as hint for - // translation direction. In a Blinn-Phong material, the - // translation direction would be a byproduct the texture - // transform. - F32 rot_frame; - te->getRotation(&rot_frame); - tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f)); LLQuaternion quat; quat.setQuat(rot, 0, 0, -1.f); - tex_mat.rotate(quat); + tex_mat.rotate(quat); LLMatrix4 mat; - LLVector3 scale(scale_s, scale_t, 1.f); + LLVector3 scale(scale_s, scale_t, 1.f); mat.initAll(scale, LLQuaternion(), LLVector3()); tex_mat *= mat; - - LLVector3 off(off_s, off_t, 0.f); - off.rotVec(rot_frame, 0, 0, 1.f); - tex_mat.translate(off); - tex_mat.translate(LLVector3(0.5f, 0.5f, 0.f)); + LLVector3 trans; + trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f)); + tex_mat.translate(trans); } } } |