- I have created a procedural planet, which is refered to Implicit Procedural Planet Generation mostly, on my shader.
- This project has many options which can control various values to change the planet.
- Tesselations : it decides how much the planet should be divided.
- SunDirection : it shows the sun’s direction which indicates the direction of its directional light.
- Colors : The user can pick each terrain layer’s color
- Terrain : It has values wihch can change a certain terrain’s slope, shape, height and etc.
- Time : The user can switch it off or on.
- EnviromentMap : The user can switch it off or on.
- Noise4D : The user can switch it off or on.
- Shader : The user can select several surface reflection models.
- Terrains are consists of 5 layers (shoreline, foliage, steep, snow, ice)
- I have used Fractal Brownian Motion to make procedural landscape.
- OceanHeight(absolute value) decides the height of water from the center of planet.
- ShoreHieght(relative value) decides the height of shore area from the Ocean’s Height.
- SnowHieght(absolute value) decides the height of snowy area.
- PolarCapsAttitude(absolute Y value) decides the attitude of the starting height of icy land.
- Using with Terrain Exponential, The user can make default terrain to make it steeper, more dramatic or more homogenous in height. Steeper area shows steeps color more, and more homogenous are shows foliage color more.
- Depending on the water depth from its terrain, deeper ocean has darker color and more wavy surface.
- I also have used Fractal Brownian Motion with higher frequency to make wave.
- I think surface normal is the most important feature to make our planet fancy.
- The paper recommands to use Gradient Approximation to get surface normal. But, it is too expensive because it needs use the FBM function 6 times. Instead of using that, I used the result of our FBM with dFdx and dFdy functions on fragment shader. If our drawned number of fragment is less that the number of vertex of our planet, it is much efficient because it just use the FBM fuction 2 times. But, if the area ofour planet on fragment shader is not enough, it will make ugly noise. To handle this, FBM function has LOD parameter. If the distance between the planet and camera is getting further, the number of loop of the FBM decrease. In other word, it shows less detail of the terrain.
|LOD 0||LOD 1||LOD 2||LOD 3||LOD 4|
- Each terrain layer has its roughness, respectively.
- Depending on its roughness, it reflects different amount of light energy along its surface normal.
- Enviroment map is one of the efficient way to make fancy reflection effect with cheap performance.
- Instead of using ray-tracing to find the edge of the planet, I traced screen space position of the planet to make gradation effect.
- I also have used FBM to make twinkling stars.
- Depending on its screen space position, its twinkling period is decided.