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 | |
| parent | b553899087cb37391269eda15068291b335718ea (diff) | |
SL-20396: Apply blinn-phong rotation to texture translation animations for GLTF materials, for more consistent behavior
| -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);                  }  			}  		}  | 
