diff options
| author | Cosmic Linden <cosmic@lindenlab.com> | 2023-02-24 18:10:49 -0800 | 
|---|---|---|
| committer | Cosmic Linden <cosmic@lindenlab.com> | 2023-02-24 18:10:49 -0800 | 
| commit | 7a533f368231c7e1135891c05e03412d0fdb9fdb (patch) | |
| tree | 2df937b4a9e8daee1ee6254b6b27d04e25996dcf | |
| parent | 33085b9d830ac1db280d678760b3972798aa1129 (diff) | |
SL-19269: For PBR materials, apply texture animation independently of the underlying texture transform
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl | 3 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 31 | 
2 files changed, 21 insertions, 13 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl index 6ad317ca63..39cc07d2d1 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/textureUtilV.glsl @@ -62,13 +62,14 @@ vec2 texture_transform(vec2 vertex_texcoord, vec2 khr_gltf_scale, float khr_gltf  {      vec2 texcoord = vertex_texcoord; +    // Apply texture animation first to avoid shearing and other artifacts +    texcoord = (sl_animation_transform * vec4(texcoord, 0, 1)).xy;      // Convert to left-handed coordinate system. The offset of 1 is necessary      // for rotations to be applied correctly.      texcoord.y = 1.0 - texcoord.y;      texcoord = khr_texture_transform(texcoord, khr_gltf_scale, khr_gltf_rotation, khr_gltf_offset);      // Convert back to right-handed coordinate system      texcoord.y = 1.0 - texcoord.y; -    texcoord = (sl_animation_transform * vec4(texcoord, 0, 1)).xy;      // To make things more confusing, all SL image assets are upside-down      // We may need an additional sign flip here when we implement a Vulkan backend diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index fec9f1cdd1..42e764b492 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -625,18 +625,24 @@ void LLVOVolume::animateTextures()  					continue;  				} -				if (!(result & LLViewerTextureAnim::ROTATE)) -				{ -					te->getRotation(&rot); -				} -				if (!(result & LLViewerTextureAnim::TRANSLATE)) -				{ -					te->getOffset(&off_s,&off_t); -				}			 -				if (!(result & LLViewerTextureAnim::SCALE)) -				{ -					te->getScale(&scale_s, &scale_t); -				} +                LLGLTFMaterial *gltf_mat = te->getGLTFRenderMaterial(); +                const bool is_pbr = gltf_mat != nullptr; + +                if (!is_pbr) +                { +                    if (!(result & LLViewerTextureAnim::ROTATE)) +                    { +                        te->getRotation(&rot); +                    } +                    if (!(result & LLViewerTextureAnim::TRANSLATE)) +                    { +                        te->getOffset(&off_s,&off_t); +                    } +                    if (!(result & LLViewerTextureAnim::SCALE)) +                    { +                        te->getScale(&scale_s, &scale_t); +                    } +                }  				if (!facep->mTextureMatrix)  				{ @@ -645,6 +651,7 @@ void LLVOVolume::animateTextures()  				LLMatrix4& tex_mat = *facep->mTextureMatrix;  				tex_mat.setIdentity(); +  				LLVector3 trans ;  					trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f));			 | 
