From 70de677266a78aeb62465ba1b78365405d0df52a Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Thu, 12 May 2022 13:30:59 +0200 Subject: [PATCH] Fix `InstanceOrigin`, `PerInstanceRandom` and `LODDitherFactor` to not use interpolation between shader stages --- Content/Editor/MaterialTemplates/Particle.shader | 8 ++++---- Content/Editor/MaterialTemplates/Surface.shader | 4 ++-- Source/Shaders/MaterialCommon.hlsl | 9 +++------ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Content/Editor/MaterialTemplates/Particle.shader b/Content/Editor/MaterialTemplates/Particle.shader index a3736a53e..ec73cd072 100644 --- a/Content/Editor/MaterialTemplates/Particle.shader +++ b/Content/Editor/MaterialTemplates/Particle.shader @@ -76,8 +76,8 @@ struct VertexOutput #if USE_CUSTOM_VERTEX_INTERPOLATORS float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; #endif - float3 InstanceOrigin : TEXCOORD6; - float InstanceParams : TEXCOORD7; // x-PerInstanceRandom + nointerpolation float3 InstanceOrigin : TEXCOORD6; + nointerpolation float InstanceParams : TEXCOORD7; // x-PerInstanceRandom }; // Interpolants passed to the pixel shader @@ -94,8 +94,8 @@ struct PixelInput #if USE_CUSTOM_VERTEX_INTERPOLATORS float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; #endif - float3 InstanceOrigin : TEXCOORD6; - float InstanceParams : TEXCOORD7; // x-PerInstanceRandom + nointerpolation float3 InstanceOrigin : TEXCOORD6; + nointerpolation float InstanceParams : TEXCOORD7; // x-PerInstanceRandom bool IsFrontFace : SV_IsFrontFace; }; diff --git a/Content/Editor/MaterialTemplates/Surface.shader b/Content/Editor/MaterialTemplates/Surface.shader index cf6e00e36..ff88f1b40 100644 --- a/Content/Editor/MaterialTemplates/Surface.shader +++ b/Content/Editor/MaterialTemplates/Surface.shader @@ -43,8 +43,8 @@ struct GeometryData #endif float3 WorldNormal : TEXCOORD3; float4 WorldTangent : TEXCOORD4; - float3 InstanceOrigin : TEXCOORD5; - float2 InstanceParams : TEXCOORD6; // x-PerInstanceRandom, y-LODDitherFactor + nointerpolation float3 InstanceOrigin : TEXCOORD5; + nointerpolation float2 InstanceParams : TEXCOORD6; // x-PerInstanceRandom, y-LODDitherFactor float3 PrevWorldPosition : TEXCOORD7; }; diff --git a/Source/Shaders/MaterialCommon.hlsl b/Source/Shaders/MaterialCommon.hlsl index 40a83ca5c..a18e29f81 100644 --- a/Source/Shaders/MaterialCommon.hlsl +++ b/Source/Shaders/MaterialCommon.hlsl @@ -98,26 +98,24 @@ struct ModelInput #if USE_VERTEX_COLOR half4 Color : COLOR; #endif - #if USE_INSTANCING float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor float3 InstanceTransform2 : ATTRIBUTE2; float3 InstanceTransform3 : ATTRIBUTE3; - half4 InstanceLightmapArea : ATTRIBUTE4; + half4 InstanceLightmapArea : ATTRIBUTE4; #endif }; struct ModelInput_PosOnly { float3 Position : POSITION; - #if USE_INSTANCING float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor float3 InstanceTransform2 : ATTRIBUTE2; float3 InstanceTransform3 : ATTRIBUTE3; - half4 InstanceLightmapArea : ATTRIBUTE4; + half4 InstanceLightmapArea : ATTRIBUTE4; #endif }; @@ -129,13 +127,12 @@ struct ModelInput_Skinned float4 Tangent : TANGENT; uint4 BlendIndices : BLENDINDICES; float4 BlendWeights : BLENDWEIGHT; - #if USE_INSTANCING float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor float3 InstanceTransform2 : ATTRIBUTE2; float3 InstanceTransform3 : ATTRIBUTE3; - half4 InstanceLightmapArea : ATTRIBUTE4; + half4 InstanceLightmapArea : ATTRIBUTE4; #endif };