Add volumetric clouds3d renderer

Raymarches a horizontal cloud layer (28 steps, 4-octave 3D fBm).
Camera path is sinusoidal in altitude so the view dips into the
cloud deck at intervals for a 'fly through the edges' feel.
Density threshold from weather: sunny -> sparse, stormy -> overcast.
Renderer is selected via CONFIG.renderer ('clouds2d' or 'clouds3d').
This commit is contained in:
Richard Zink committed 2026-10-07 18:54:58 +02:00
1 parent 3812f80f40
commit 0648676974
4 files changed
+289 -12

No files matched your search

+9 -5
View File
@@ -474,12 +474,14 @@
<script src="vendor/three.min.js"></script>
<script src="vendor/vanta.clouds.min.js"></script>
<script src="vendor/vanta.clouds2.min.js"></script>
<script src="vendor/clouds3d.js"></script>
<script src="vendor/clouds2d.js"></script>
<script>
window.__clouds2dStarted = true;
try {
var noiseDataUri = 'data:image/png;base64,PLACEHOLDER';
var useVanta = !(window.CONFIG && window.CONFIG.renderer === 'clouds2d');
var renderer = (window.CONFIG && window.CONFIG.renderer) || 'vanta';
var useVanta = (renderer !== 'clouds2d' && renderer !== 'clouds3d');
var effect;
if (useVanta && typeof VANTA !== 'undefined') {
effect = (VANTA.CLOUDS2 || VANTA.CLOUDS)({
@@ -500,14 +502,16 @@ if (useVanta && typeof VANTA !== 'undefined') {
texturePath: noiseDataUri
}) || { setOptions: function() {} };
} else {
// Pick the right renderer based on CONFIG.renderer
var _renderFn = (renderer === 'clouds3d' && window.clouds3dRender)
? window.clouds3dRender
: window.clouds2dRender;
effect = { setOptions: function() {} };
function c2dRender() {
var c2dCanvas = document.getElementById('vanta');
if (!c2dCanvas) return;
c2dCanvas.width = window.innerWidth;
c2dCanvas.height = window.innerHeight;
if (typeof window.clouds2dRender === 'function') {
window.clouds2dRender(c2dCanvas);
if (typeof _renderFn === 'function') {
_renderFn(c2dCanvas);
}
}
c2dRender();