- Name: Felicity Yick
- Pennkey: feliyick
- https://feliyick.github.io/hw01-noisy-planet/
Inspiration
- The planet is inspired from my alien mini minecraft from Spring 2020 (https://vimeo.com/user68496369) :) I wanted to replicate the different types of biomes I implemented for that project.
Terrain / Biomes
- There are four different biomes: slime lake, ice mountains, distant desert, and poisonous grasslands. There are blue tree scattered across the grasslands.
- Biome types are enumerated and are determined by using a worley(fbm) noise function. Using the float value generated from this biome map, I used different levels of summed perlin are used for biome heights.
- Various noise functions and cosine colour palettes in combination with bias and gain are used to colour the terrain. I used this website religiously for the colour palettes http://dev.thi.ng/gradients/
- The slime lake biome is animated/displaced in x and y directions using sin and easeInOutQuadratic functions to give it a marbley, wavey effect.
- The trees are created using a pow(fbm) for texturing and placement. The splattered effect is done by thresholding.
- Blinn phong shading is used on mountains, ice caps, and lake, while lambert shading is used on the grass and desert.
GUI
- There are GUI controls for land distribution, light source speed, and tree distribution. The land distribution function controls the sampling frequency of the biome map/noise function. The light source in the scene rotates and the user can control how fast or slow it moves. Similar to land distribution, tree distribution controls how many trees populate the grasslands.
- Noise functions used are all 3D
- Continue practicing WebGL and Typescript
- Experiment with noise functions to procedurally generate the surface of a planet
- Review surface reflection models
You'll be using the same base code as in homework 0.
- Update the basic scene from your homework 0 implementation so that it renders an icosphere once again. We recommend increasing the icosphere's subdivision level to 6 so you have more vertices with which to work.
- Write a new GLSL shader program that incorporates various noise functions and noise function permutations to offset the vertices on the surface of the icosphere and modify the color of the icosphere so that it looks like a planet with geographic features. Your planet should have at least four distinct "biomes" on its surface (they do not have to be Earth biomes). Try making formations like mountain ranges, oceans, rivers, lakes, canyons, volcanoes, ice caps, glaciers, or even forests. We recommend using 3D noise functions whenever possible so that you don't have UV distortion, though that effect may be desirable if you're trying to make the poles of your planet stand out more.
- Combined with your noise functions, use at least four different functions from the Toolbox Functions slides. They should be used to either adjust your noise distribution, or animate elements on your planet's surface.
- Implement at least two surface reflection model (e.g. Lambertian, Blinn-Phong, Matcap/Lit Sphere, Raytraced Specular Reflection) besides on the planet's surface to better distinguish the different formations (and perhaps even biomes) on the surface of your planet. Make sure your planet has a "day" side and a "night" side; you could even place small illuminated areas on the night side to represent cities lit up at night.
- Add GUI elements via dat.GUI that allow the user to modify different attributes of your planet. This can be as simple as changing the relative location of the sun to as complex as redistributing biomes based on overall planet temperature. You should have at least three modifiable attributes.
- Have fun experimenting with different features on your planet. If you want, you can even try making multiple planets! Your score on this assignment is in part dependent on how interesting you make your planet, so try to experiment with as much as you can!
Here are some examples of procedural planets:
- Implicit Procedural Planet Generation
- Curl Noise
- GPU Gems Chapter on Perlin Noise
- Worley Noise Implementations
Commit and push to Github, then make a pull request on the original Github repository. Assignments will no longer be submitted on Canvas.
For this assignment, and for all future assignments, modify this README file so that it contains the following information:
- Your name and PennKey
- Citation of any external resources you found helpful when implementing this assignment.
- A link to your live github.io demo
- At least one screenshot of your planet
- An explanation of the techniques you used to generate your planet features. Please be as detailed as you can; not only will this help you explain your work to recruiters, but it helps us understand your project when we grade it!
Any or All of the following bonus items:
- Use a 4D noise function to modify the terrain over time, where time is the fourth dimension that is updated each frame. A 3D function will work, too, but the change in noise will look more "directional" than if you use 4D.
- Use music to animate aspects of your planet's terrain (e.g. mountain height, brightness of emissive areas, water levels, etc.)
- Create a background for your planet using a raytraced sky box that includes things like the sun, stars, or even nebulae.
- Add a textured moon that orbits your planet