summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorCosmic Linden <cosmic@lindenlab.com>2023-10-04 16:56:49 -0700
committerCosmic Linden <cosmic@lindenlab.com>2023-10-06 10:13:00 -0700
commit85470fc4d29cb2fd7d168debdeed3544778592b8 (patch)
treef7b2654f9a155478a8e5573f1f1b78011c5c8a50 /indra/newview
parentb553899087cb37391269eda15068291b335718ea (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.cpp39
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);
}
}
}