Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

3D Procedural Planet WebGL

Imgur

To display the Procedural Planet open index.html in a Web browser as Firefox/Chrome/Edge...

main.js

Main javascript file in which there are the parameters' definitions and the initialization of the WebGL environment.

Global Parameters

  • n: dimensionality (necessary for diamond square, and used also for the other noises)
  • dim: 2^n points that make the planet
  • radius: radius of the planet
  • roughness: roughness of the terrain

Noise Parameters

  • seed: seed of the pseudo-random generator
  • smoothness: smoothness of the noise
  • scale: resolution of FBM
  • lacunarity: lacunarity of FBM
  • cliff: noise value and multiplier to make a cliff in the noise.

After setting WebGL canvas the camera object is created. Default implementation is a Perspective Camera. Then mouse controls and the scene are defined. The light used is directional.

Then Sky, Water and Atmosphere Shader. The last one is commented out and can be improved to simulate the atmospheric scattering. All three shaders are spherical meshes.

After that 2 clouds meshes are created, one textured on the outside and the other on the inside. This resolves some graphics glitches that appear when using a double-textured transparent sphere.

The geometry and textures for the planet can be done in various ways, selectable trough comments:

  • Perlin Based (Perlin, Ridge, Simplex Noise)
    • Geometry
      • Sphere Geometry
      • Spherical Cube Geometry
      • Icosahedron Geometry (Default)
  • Diamond Square Based
    • Geometry
      • Spherical Cube Geometry
  • Texture
    • Triplanar Texturing (Default)
    • Procedural "Perlin Noise" Texturing

Level Of Detail can be enabled with Chunked LOD setting CLOD=true if we want LOD in CPU or QTGPU=true if we want LOD in GPU.

Finally all the 5 meshes are inserted into the scene and rendered with the animate() function.

GradientNoise.js

Contains all the variable and methods for "Perlin Based" Noise. you can choose the method changing the first 2 variables of the file:

  • noiseFunction: indicates the noise function used. It can be "RidgedNoise" or "PerlinNoise".
  • intFunction: indicates the interpolation used in the noise function. It can be "tricosine" for the classic Perlin Noise or "simplex" for the more efficient Simplex noise.
  • nOctaves: number of noise levels for Fractional Brownian Motion.

DiamondSquare.js

Contains all the variables and methods for the Diamond-Square Noise.

materials.js

Contains all the variables and methods for textures.

  • getMaterial() Standard function to create a material in ThreeeJS with 4 textures: sand, grass, stone and snow. It uses triplanar texturing interpolation in the fragment shader and a simple vertex shader.
  • getQuadMaterial() Function to create a material with 4 textures for Chunked LOD. It uses triplanar texturing interpolation in the fragment shader and a modified vertex shader for GPU vertex displacement and normal computation (performance are poor).
  • getCustomMaterial() Same as getMaterial() but has the texture and the fragment shader as arguments. It's used by the Water, Sky, Atmosphere and shader in main.js
  • getCloudsMaterial() Function to create material for Clouds Shader. It uses a modified fragment shader to simulate motion and a simple vertex shader.
  • getMaterialArray() Function used to create an Array of 6 materials in ThreeJS with 4 textures, using the spherify cube method. It uses Procedural "Perlin Noise" Texturing in the fragment Shader and simple vertex shader.
  • getCloudsMaterialArray() Same as getMaterialArray() but used for clouds.

quadTree.js

Contains all the variable and methods for Level of Detail based on Chunked LOD. some parameter can be modified as the number of persistent levels in the tree, the quad-tree depth and the chunk size.

Utils.js

Contains utility functions as getMax() or getMin() and to transform the geometries.

shader/material.js

Function used to create Procedural "Perlin Noise" Textures. (used for static clouds and procedural terrain textures)

index.html

Contains the HTML5 canvas for WebGL and all the vertex and fragment shaders.

About

a 3D procedural Planet in THREEJS and WebGl

Resources

Stars

49 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages