Tutorial 31 – Real-Time Procedural Gas Giants

Im heutigen Tutorial befassen wir uns mit den Grundlagen der prozeduralen Erzeugung und Darstellung von Gasriesen.










Im Vergleich zu den Gesteinsplaneten lassen sich diese Giganten des Sonnensystems deutlich leichter generieren, da sie vereinfacht gesagt lediglich aus farbigen Wolkenbändern bestehen, die parallel zum Äquator (Breitengrad 0) den Planeten umspannen.







Schauen wir uns einmal an, wie sich solche Wolkenbänder in einem Fragment Shader reproduzieren lassen:











// Breitengrad ermitteln:
float angle = asin(gs_TexCoord[5].y);

// Verdrillung der Wolkenbänder festlegen:
float frequency = 20.0*(1.0-abs(gs_TexCoord[5].x));
float torsionValue1 = 0.02*sin(frequency*angle);
float torsionValue2 = 0.02*sin(frequency*(angle+0.785));

// Anzahl, Breite und Helligkeit der Wolkenbänder festlegen:
// Hinweis: Die NoiseValue-Werte sorgen für Unregelmäßigkeiten
// in den einzelnen Gasringen.

float value1 = abs(SurfaceGeometryParameter.x*
sin(SurfaceGeometryParameter.y*(gs_TexCoord[5].x+torsionValue1)+
0.92*NoiseValue.x));

float value2 = abs(SurfaceGeometryParameter.z*
cos(SurfaceGeometryParameter.w*(gs_TexCoord[5].x+torsionValue2)+
0.92*NoiseValue.y));

gs_FragColor[0] = SurfaceBrightnessFactor*
vec4(ColorParameter1.x*value1+ColorParameter1.y*value2,
     ColorParameter1.z*value1+ColorParameter1.w*value2,
     ColorParameter2.x*value1+ColorParameter2.y*value2, 1.0);




Hinweise zum Erstellen eines neuen Projekts:

  • Kopieren Sie den Ordner GraphicsAndPhysicsFrameworkImports ins Projektverzeichnis
  • Kopieren sie alle dll-Dateien sowie die Konfigurationsdatei ResolutionAndRendering.txt aus besagtem Ordner ins gleiche Verzeichnis, in dem sich auch die exe-Datei befindet (in unseren Programmbeispielen ist dies das Bin-Verzeichnis)
  • Binden Sie die folgenden Dateien in Ihr Projekt ein: GraphicsAndPhysics_Framework_Imports.h, GraphicsAndPhysics_Framework_Imports.lib, glew32.lib, glew32s.lib, glut32.lib. Die Glew- und Glut-Bibliotheken ermöglichen die Nutzung der aktuellen OpenGL-Spezifikationen unabhängig vom Framework.

GraphicsAndPhysicsFrameworkDemo31.zip