Grass not Matching Terrain Shading

Dear All!

I am, once again, having an issue with my grass and how to shade properly.

The terrain on which the grass is placed is not even. As such, the directional light in my level is lighting certain parts of the terrain while casting other parts in shadow. The grass is, however, not being shaded in the same way as the terrain. I found a thread dealing with this very issue from 2016 (Foliage does not recieve lighting from Landscape? - Unreal Engine Forums), but none of the solutions have had any effect (but that might just be me being stupid). Is there a way to make the grass match the shading of the terrain it is placed on in a way that the grass in shadowy areas is darker than in areas with a ton of lighting?

I have attached an image that might help explain what I am getting at a bit better (or not :P).


To fully match grass shading, you need to make sure that grass’s basecolor, normal, roughness, specular and ambient occlusion match terrain. That implies reconstruction whatever you do with landscape, in grass material.

Commonly, it is just enough to blend grass world space normals from terrain normals to grass normals from grass card bottom to top. Luckily, your grass instances are placed perpendicular to terrain, so up vector in instance local space will give you terrain normal in world space.

Hello! Thank you for your reply! I did try matching those settings across the two different materials. I even went into the buffer visualisation to make sure they are actually matching.

Unfortunately, I am an art major (literature, not even game art :P). I have no experience with this kind of stuff, so while I have read enough to understand the difference between world normals and local normals, your last two sentences sound like something out of a Sci-Fi film to me - which sucks because if I understood, I might be able to fix the issue :smiley:

Okay, as I was trying to explain what I was doing (grabbing a vector 3 (0,0,1) and hooking it up to a transform node and connecting that to the normal channel in the material node) and how that was not working, I found out that I was using the wrong transform node :confused: It is working now :smiley: Hurray! I do still have to fine tune it, but I have made some progress. Thank you again!