// Comment out this line Skip to content
Winter Crown Works Logo Winter Crown Works Logo

Optimizing Vegetation Shadows with ShadowProxyMesh

To build a high frame rate, dynamic, vegetation-heavy scene with a low-end target, we proceeded with the following in mind:

  • Reduce ShadowDepth process
  • Reduce Triangles
  • Reduce Pixel burden

Based on past research, we have concluded that LOD mesh + CSM + ShadowProxyMesh is the lightest combination.
We plan to create a report comparing the process.
Vegetation meshes that use Masked materials tend to have a high process due to the fact that PreZ/EarlyZ is not very effective.

WinterCrownWORKS : Shadow Billboard Wind Animation
Section titled “WinterCrownWORKS : Shadow Billboard Wind Animation”
Play
  • When the rendered mesh is a Nanite mesh
    Use ShadowProxyMesh as a non-Nanite mesh
  • When a visual mesh is an LOD mesh with a Masked material
  • When a visual mesh is an LOD mesh and is High resource

Comparison of resources used for shadow rendering

Section titled “Comparison of resources used for shadow rendering”

left:18,761 tri
right:2 tri

Can you tell which one is lighter?

1. Uncheck the Dynamic Shadow for the Visual mesh. Keep Cast Shadow on to apply Contact Shadow.
Section titled “1. Uncheck the Dynamic Shadow for the Visual mesh. Keep Cast Shadow on to apply Contact Shadow.”
2. Uncheck the Visible of ShadowProxyMesh and turn on HiddenShadow
Section titled “2. Uncheck the Visible of ShadowProxyMesh and turn on HiddenShadow”
3. Overlay the Visual mesh and ShadowProxyMesh at the same coordinates
Section titled “3. Overlay the Visual mesh and ShadowProxyMesh at the same coordinates”

Although the shadow is not fully accurate, it avoids drawing high density meshes and allows for lightweight drawing.

By using the ShadowProxyMesh material, you can not only draw shadows, but also replace the furthest LOD with a 2-triangles card.

LOD
Polygon Count
Notes
LOD0
18,761 tri
LOD1
9,788 tri
LOD2
5,187 tri
LOD3
2,320 tri
LOD4
10 tri
SpeedTree Billboard
LOD5
2 tri
A card that uses ShadowProxyMesh material

This implementation uses RotateAboutAxis.
Depending on how you set the axis, it will sway horizontally and twist slightly.
*Change the strength of sway separately for the shadow and the furthest LOD meshes.

Click to Enlarge
Click to Enlarge
  • default: Process to face the Camera
  • Shadow: Process to face the Light direction
Click to Enlarge
Click to Enlarge
Change the scale depending on whether it is a Shadow pass or not
Section titled “Change the scale depending on whether it is a Shadow pass or not”
Click to Enlarge
Click to Enlarge
WinterCrownWORKS : Quad Mesh Wind Animation
Section titled “WinterCrownWORKS : Quad Mesh Wind Animation”
Play

The farthest LOD5 is displayed.

Between Tech and Art: The Vegetation of ‘Horizon Zero Dawn’ P83
Section titled “Between Tech and Art: The Vegetation of ‘Horizon Zero Dawn’ P83”
Rendering ‘Assassin’s Creed Shadows’ P30
Section titled “Rendering ‘Assassin’s Creed Shadows’ P30”
Zen of Streaming: Building and Loading ‘Ghost of Tsushima’ P86
Section titled “Zen of Streaming: Building and Loading ‘Ghost of Tsushima’ P86”
Ghost of Tsushima DIRECTOR’S CUT : Billboard Shadow
Section titled “Ghost of Tsushima DIRECTOR’S CUT : Billboard Shadow”
Play