A guy on unity forum share grass shader.
Beta Release - FREE
If anyone has questions, please feel free to ask. I'm not a good tutorial giver, so... But it's pretty easy to setup, I think.
NOTE 1: If you use a density map, make sure to make it read/writable in the import settings.
NOTE 2: This does work on meshes, just make sure your Target GameObject has a collider. This uses raycast, so whatever your collider(s) looks like along the Y axis will be the footprint of the grass.
NOTE 3: The tutorial video is choppy when I pressed play, that's due to the recorder, you can see in the stats screen that I get good framerates.
NOTE 4: I'm in the process of figuring out the LOD/Distance culling for this shader. I'm not a shader wizard so if anyone wants to help tackle that part, be my guest. Occlusion culling works out of the box, just set the "*_SGRenderer" object to "Occludee Static" and include all children. However, this is the type asset that will (should) be sprinkled throughout your scene. So make sure to use the Density map feature. Density map works on a grayscale, so if the color hit is Gray to Black, it will draw grass.
Cheers, Everyone!
***************************************************************
So I am currently working on a Grass Shader, rendering each blade of grass. I am using a point cloud technique to get the positions of each blade of grass. This has turned out to be a very efficient way of rendering grass. This is a PBR geometry shader which uses Albedo, Metallic, Roughness, AO, and Emission.
Different lighting scenarios. All images are 240,000 blades of grass with Post Processing Stack AA (Quality). This is about a 20m square area of grass. I think a final product could handle maybe a 40m (which would be about a million blades of grass) square area before falloff (or LOD). That would be adjustable of course.
Ambient Wet
Ambient Dry
Dawn Wet
Dawn Dry
Mid-day Wet
Mid-day Dry
Point lights Wet
Point lights Dry
Spot light Wet
Spot Light Dry
Notice the grass spawns on top of the terrain, conforming to the topology. This also works on meshes, however, it's not a "fur". It cannot spawn around a solid mesh. For example if you applied it to a sphere, only the top hemisphere will spawn grass. It works like rainfall. So anything point on the mesh that can be raycasted vertically in the -Y direction will spawn grass.
As you can see in the images and video that the performance on this is EXCELLENT. In both the image and the video, I have the Post Processing Stack applied with AA set to "Quality", Bloom, and Vignette.
Current settings for the shader include:
Grass Blade 1
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Grass Blade 2
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Grass Blade 3
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Root Settings
Tint
Tint Start Height
Tint Spread
PBR Settings
Metallic
Ambient Occlusion Map
AO Strength
Advanced Settings
Alpha Cutoff
Grass Height
Grass Width
Wind Speed
Wind Strength
Randomness Noise Texture
The whole reason why I started this is because I needed a backyard lawn grass for my game and I got tired of looking for one, so that's what this is meant for. Obviously, it can be expanded to accommodate other grass types. However, theoretically, you could give it whatever grass texture you wanted currently. In the shader settings, you can set the width and height of the grass.
Here are the current shader settings (this is not final):
Setup Utility:
I plan to provide 3 different grass blade textures with their PBR maps in the final product.
I might provide the Shader in two forms - Unlit and PBR. Unlit actually looks decent and would probably run a little smoother in an end product. This is a DX11 shader and uses Deferred rendering only.
The stats screen in the images and video above was rendering on my PC:
i7-2600K (old... very old)
24GB RAM (why didn't I just get 32??)
GTX 1060 (I'm told it's comparable if not slightly under an XBOX One X.. ?? Please correct me if I'm wrong)
I must say, developing this shader and the point cloud technique was inspired by Sam Wronski. He has a great channel on YouTube (World of Zero) that I highly recommend - it's about everything programming:
https://www.youtube.com/channel/UCJKLCjeujQj-d3JjsbVtkJw
Free Surreal PBR Grass Shader
Beta Release - FREE
So I've decided to give back to the wonderful Unity community and make
this a free asset for you guys. If any of you make custom updates, give
it to me and I will update the source code.
Git:
https://github.com/tchpowdog/SurrealGrassShader/tree/master/SurrealGrassShader
Setup Tutorial (no audio):
If anyone has questions, please feel free to ask. I'm not a good tutorial giver, so... But it's pretty easy to setup, I think.
NOTE 1: If you use a density map, make sure to make it read/writable in the import settings.
NOTE 2: This does work on meshes, just make sure your Target GameObject has a collider. This uses raycast, so whatever your collider(s) looks like along the Y axis will be the footprint of the grass.
NOTE 3: The tutorial video is choppy when I pressed play, that's due to the recorder, you can see in the stats screen that I get good framerates.
NOTE 4: I'm in the process of figuring out the LOD/Distance culling for this shader. I'm not a shader wizard so if anyone wants to help tackle that part, be my guest. Occlusion culling works out of the box, just set the "*_SGRenderer" object to "Occludee Static" and include all children. However, this is the type asset that will (should) be sprinkled throughout your scene. So make sure to use the Density map feature. Density map works on a grayscale, so if the color hit is Gray to Black, it will draw grass.
Cheers, Everyone!
***************************************************************
So I am currently working on a Grass Shader, rendering each blade of grass. I am using a point cloud technique to get the positions of each blade of grass. This has turned out to be a very efficient way of rendering grass. This is a PBR geometry shader which uses Albedo, Metallic, Roughness, AO, and Emission.
Different lighting scenarios. All images are 240,000 blades of grass with Post Processing Stack AA (Quality). This is about a 20m square area of grass. I think a final product could handle maybe a 40m (which would be about a million blades of grass) square area before falloff (or LOD). That would be adjustable of course.
Ambient Wet
Ambient Dry
Dawn Wet
Dawn Dry
Mid-day Wet
Mid-day Dry
Point lights Wet
Point lights Dry
Spot light Wet
Spot Light Dry
Notice the grass spawns on top of the terrain, conforming to the topology. This also works on meshes, however, it's not a "fur". It cannot spawn around a solid mesh. For example if you applied it to a sphere, only the top hemisphere will spawn grass. It works like rainfall. So anything point on the mesh that can be raycasted vertically in the -Y direction will spawn grass.
As you can see in the images and video that the performance on this is EXCELLENT. In both the image and the video, I have the Post Processing Stack applied with AA set to "Quality", Bloom, and Vignette.
Current settings for the shader include:
Grass Blade 1
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Grass Blade 2
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Grass Blade 3
Albedo Map
Normal Map
Roughness Map
Distribution Weight
Tint
Root Settings
Tint
Tint Start Height
Tint Spread
PBR Settings
Metallic
Ambient Occlusion Map
AO Strength
Advanced Settings
Alpha Cutoff
Grass Height
Grass Width
Wind Speed
Wind Strength
Randomness Noise Texture
The whole reason why I started this is because I needed a backyard lawn grass for my game and I got tired of looking for one, so that's what this is meant for. Obviously, it can be expanded to accommodate other grass types. However, theoretically, you could give it whatever grass texture you wanted currently. In the shader settings, you can set the width and height of the grass.
Here are the current shader settings (this is not final):
Setup Utility:
I plan to provide 3 different grass blade textures with their PBR maps in the final product.
I might provide the Shader in two forms - Unlit and PBR. Unlit actually looks decent and would probably run a little smoother in an end product. This is a DX11 shader and uses Deferred rendering only.
The stats screen in the images and video above was rendering on my PC:
i7-2600K (old... very old)
24GB RAM (why didn't I just get 32??)
GTX 1060 (I'm told it's comparable if not slightly under an XBOX One X.. ?? Please correct me if I'm wrong)
I must say, developing this shader and the point cloud technique was inspired by Sam Wronski. He has a great channel on YouTube (World of Zero) that I highly recommend - it's about everything programming:
https://www.youtube.com/channel/UCJKLCjeujQj-d3JjsbVtkJw
Comments
Post a Comment