mirror of
https://github.com/MMqd/godot-nishita-sky-with-volumetric-clouds.git
synced 2024-12-22 16:07:29 +08:00
Nishita天空/大气/体积云godot着色器
a86eb99df7
* Added a realistically lit moon influenced by the sun, resulting in different moon phases, including Earth blocking moon (new moon phase, and blood moon). * Moving camera very high on the Y axis, or changing the `Height` parameter brings the moon closer # Misc * Added support for moon and ground texture, accurate textures included. * Moving the camera on the X and Z axis (very far) changes the sky and ground texture position. * Cloud coverage now affects the brightness of the sky and sun. # Regression * Issues with cloud alpha at edges at high sun brightness, currently cutting out the sun from the clouds |
||
---|---|---|
godot-volumetric-cloud-demo textures | ||
Screenshots | ||
earth albedo.webp | ||
earth albedo.webp.import | ||
fps_counter.gd | ||
icon.svg | ||
icon.svg.import | ||
LICENSE.md | ||
main.tscn | ||
moon albedo.webp | ||
moon albedo.webp.import | ||
nishita_sky.gdshader | ||
nishita_sky.tres | ||
NishitaSky.gd | ||
project.godot | ||
README.md | ||
star map.webp | ||
star map.webp.import |
Nishita Sky With Volumetric Clouds
This is a Nishita sky shader for Godot 4.0, with Clay John's volumetric clouds based on a tutorial by scratch pixel, which is recommended to read to understand what the sky parameters represent, when configuring the sky.
Screenshots
Features
- Game-ready asset
- Raymarched sky
- Raymarched clouds that move with the camera
- Different times of day by rotating the "NishitaSky" node
- Realistic lighting at different altitudes
- A night sky, with Milky Way texture
- A directional light that takes on the color of the sun in the shader
- All elements interact with each other: the night sky is blocked by the clouds and attenuated by the atmosphere
- Ability to configure quality of the shader and turn the clouds on/off
- Moon
- Realistically lit moon influenced by the sun, resulting in different moon phases, including Earth blocking moon (new moon phase, and blood moon)
- Support for moon and ground textures, accurate textures included
- Performance optimizations
Bonus Features
- Raising the camera high on the Y axis brings the moon closer
- Moving the camera on the XZ axis (very far) changes the sky and ground texture position
Limitations
- Performance heavy, especially with clouds on
- The camera must remain below the clouds (but is clamped to cloud height if it goes higher), since the clouds do not actually exist
Improvements
- For the sky precompute the optical depth between the sun and an arbitrary point along the ray (from Nishita's paper)
- Add multiple scattering to clouds and sky
- Physical raytraced clouds, with better lighting (currently the clouds are evenly lit)
- Better cloud density textures
- Use cloud sample distance for cloud fog (currently uses distance to clouds)
- Physically accurate ground material (currently the brightness is just a dot product to the sun)
- Better sun color saturation (currently some hacks are necessary to get the expected sun brightness and saturation)
How to Use
To implement this sky into a project
- Copy the "NishitaSky" node from the main scene into the project
- In the "NishitaSky" node set "sun_object_path" variable to the desired directional light, do not make this directional light a child of the "NishitaSky" node
- Create an "WorldEnvironment" node, set the sky material to the "nishita_sky" material
- Click copy on the sky section of the "WorldEnvironment" node, and paste it into the "sky_material" section of the "NishitaSky" node. THE MATERIALS MUST BE LINKED FOR THE SKY PARAMETERS TO BE THE SAME ON THE SCRIPT AND THE SHADER
- Set the correct "sun_ground_height" on the "NishitaSky" node, this is the height of objects on the ground
- After adjusting all settings as needed click the "Compute Gradient Toggle" to precompute the sun color gradient
- It may be necessary to reload the scene to make the sky work in the editor
- If the sky is very slow try changing the process mode to "High-Quality Incremental" in the Sky settings in the WorldEnvironment
Todo
- Fix clouds "jumping" after some time
- Clean up code
- Rework sun saturation
- Set WorldEnvironment fog color based on sky color
- Make stars move with the sun
- Position sun, stars, and moon using a real world date/time