Skip to content

Commit b516dcf

Browse files
eh-unityEvergreen
authored andcommitted
Graphics/urp/bugfix/uum 77906
Fixes SpeeTree8 shader. Broken vertex shader and camera facing leaves.
1 parent a806f0b commit b516dcf

File tree

3 files changed

+29
-27
lines changed

3 files changed

+29
-27
lines changed

Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8"
7777

7878
#pragma shader_feature_local_vertex _WINDQUALITY_NONE _WINDQUALITY_FAST _WINDQUALITY_BETTER _WINDQUALITY_BEST _WINDQUALITY_PALM
7979
#pragma shader_feature_local EFFECT_BILLBOARD
80+
#pragma shader_feature_local EFFECT_BUMP
8081
#pragma shader_feature_local_fragment EFFECT_HUE_VARIATION
8182
#pragma shader_feature_local_fragment EFFECT_SUBSURFACE
82-
#pragma shader_feature_local_fragment EFFECT_BUMP
8383
#pragma shader_feature_local_fragment EFFECT_EXTRA_TEX
8484

8585
#define ENABLE_WIND
@@ -152,9 +152,9 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8"
152152

153153
#pragma shader_feature_local_vertex _WINDQUALITY_NONE _WINDQUALITY_FAST _WINDQUALITY_BETTER _WINDQUALITY_BEST _WINDQUALITY_PALM
154154
#pragma shader_feature_local EFFECT_BILLBOARD
155+
#pragma shader_feature_local EFFECT_BUMP
155156
#pragma shader_feature_local_fragment EFFECT_HUE_VARIATION
156157
#pragma shader_feature_local_fragment EFFECT_SUBSURFACE
157-
#pragma shader_feature_local_fragment EFFECT_BUMP
158158
#pragma shader_feature_local_fragment EFFECT_EXTRA_TEX
159159

160160
#define ENABLE_WIND
@@ -184,7 +184,7 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8"
184184
#pragma multi_compile_instancing
185185
#pragma instancing_options assumeuniformscaling maxcount:50
186186

187-
#pragma shader_feature_local_vertex _WINDQUALITY_NONE _WINDQUALITY_FAST _WINDQUALITY_BETTER _WINDQUALITY_BEST _WINDQUALITY_PALMlity and backface normal mode enum keywords)
187+
#pragma shader_feature_local_vertex _WINDQUALITY_NONE _WINDQUALITY_FAST _WINDQUALITY_BETTER _WINDQUALITY_BEST _WINDQUALITY_PALM
188188
#pragma shader_feature_local EFFECT_BILLBOARD
189189

190190
#define ENABLE_WIND
@@ -245,7 +245,7 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8"
245245
#pragma fragment SpeedTree8FragDepthNormal
246246

247247
#pragma shader_feature_local_vertex _WINDQUALITY_NONE _WINDQUALITY_FAST _WINDQUALITY_BETTER _WINDQUALITY_BEST _WINDQUALITY_PALM
248-
#pragma shader_feature_local_fragment EFFECT_BUMP
248+
#pragma shader_feature_local EFFECT_BUMP
249249

250250
#pragma multi_compile _ LOD_FADE_CROSSFADE
251251
#pragma multi_compile_instancing

Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8Passes.hlsl

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,26 @@ struct SpeedTreeFragmentInput
9797

9898
void InitializeData(inout SpeedTreeVertexInput input, float lodValue)
9999
{
100-
#if defined(LOD_FADE_PERCENTAGE) && (!defined(LOD_FADE_CROSSFADE) && !defined(EFFECT_BILLBOARD))
101-
input.vertex.xyz = lerp(input.vertex.xyz, input.texcoord2.xyz, lodValue);
100+
#if !defined(EFFECT_BILLBOARD)
101+
#if defined(LOD_FADE_PERCENTAGE) && (!defined(LOD_FADE_CROSSFADE))
102+
input.vertex.xyz = lerp(input.vertex.xyz, input.texcoord2.xyz, lodValue);
103+
#endif
104+
105+
// geometry type
106+
float geometryType = (int) (input.texcoord3.w + 0.25);
107+
bool leafTwo = false;
108+
if (geometryType > GEOM_TYPE_FACINGLEAF)
109+
{
110+
geometryType -= 2;
111+
leafTwo = true;
112+
}
113+
114+
// leaf facing
115+
if (geometryType == GEOM_TYPE_FACINGLEAF)
116+
{
117+
float3 anchor = float3(input.texcoord1.zw, input.texcoord2.w);
118+
input.vertex.xyz = DoLeafFacing(input.vertex.xyz, anchor);
119+
}
102120
#endif
103121

104122
// wind
@@ -118,30 +136,14 @@ void InitializeData(inout SpeedTreeVertexInput input, float lodValue)
118136
float3 windyPosition = input.vertex.xyz;
119137

120138
#ifndef EFFECT_BILLBOARD
121-
// geometry type
122-
float geometryType = (int)(input.texcoord3.w + 0.25);
123-
bool leafTwo = false;
124-
if (geometryType > GEOM_TYPE_FACINGLEAF)
125-
{
126-
geometryType -= 2;
127-
leafTwo = true;
128-
}
129139

130140
// leaves
131141
if (geometryType > GEOM_TYPE_FROND)
132142
{
133143
// remove anchor position
134144
float3 anchor = float3(input.texcoord1.zw, input.texcoord2.w);
135145
windyPosition -= anchor;
136-
137-
if (geometryType == GEOM_TYPE_FACINGLEAF)
138-
{
139-
// face camera-facing leaf to camera
140-
float offsetLen = length(windyPosition);
141-
windyPosition = mul(windyPosition.xyz, (float3x3)UNITY_MATRIX_IT_MV); // inv(MV) * windyPosition
142-
windyPosition = normalize(windyPosition) * offsetLen; // make sure the offset vector is still scaled
143-
}
144-
146+
145147
// leaf wind
146148
#if defined(_WINDQUALITY_FAST) || defined(_WINDQUALITY_BETTER) || defined(_WINDQUALITY_BEST)
147149
#ifdef _WINDQUALITY_BEST

Tests/SRPTests/Projects/UniversalGraphicsTest_Terrain/Assets/Scenes/060_SpeedTree_LeafFacing.unity

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ GameObject:
630630
m_Icon: {fileID: 0}
631631
m_NavMeshLayer: 0
632632
m_StaticEditorFlags: 0
633-
m_IsActive: 0
633+
m_IsActive: 1
634634
--- !u!4 &581908187
635635
Transform:
636636
m_ObjectHideFlags: 0
@@ -722,7 +722,7 @@ Camera:
722722
m_TargetDisplay: 0
723723
m_TargetEye: 3
724724
m_HDR: 1
725-
m_AllowMSAA: 1
725+
m_AllowMSAA: 0
726726
m_AllowDynamicResolution: 0
727727
m_ForceIntoRT: 0
728728
m_OcclusionCulling: 1
@@ -803,11 +803,11 @@ MonoBehaviour:
803803
TargetWidth: 960
804804
TargetHeight: 540
805805
TargetMSAASamples: 4
806-
PerPixelCorrectnessThreshold: 0.001
806+
PerPixelCorrectnessThreshold: 0
807807
PerPixelGammaThreshold: 0.003921569
808808
PerPixelAlphaThreshold: 0.003921569
809809
RMSEThreshold: 0
810-
AverageCorrectnessThreshold: 0.0001
810+
AverageCorrectnessThreshold: 0.001
811811
IncorrectPixelsThreshold: 0.0000038146973
812812
UseHDR: 0
813813
UseBackBuffer: 0

0 commit comments

Comments
 (0)