Great job explaning the whole process! I've been building some similar stuff recently for my procedural space-exploration side project (<a href="https://www.threads.net/@mrsharpoblunto/post/CufzeNxt9Ol" rel="nofollow noreferrer">https://www.threads.net/@mrsharpoblunto/post/CufzeNxt9Ol</a>). I was planning to do a dev blog post writing a lot of the details up, but yours covers most of the tricks :)<p>A couple of extra things I ended up doing were:<p>1) Using a lower-res texture to modulate the high-res raymarched density, this gives you control over the overall macro shape of the clouds and allows you to transition between LOD better (i.e. as you move from ground level up to space you can lerp between the raymarched renderer & just rendering the low-res 2D texture without any jarring transition.<p>2) Using some atmospheric simulation to colorize the clouds for sunrise/sunset. To make this performant I had to build some lookup tables for the atmospheric density at given angles of the sun.<p>3) Altering the step size of the raymarch based on density, I took this from the Horizon Zero Dawn developers where they have a coarse raymarch and as soon as they get a dense enough sample they step back and switch to a higher res step until the density hits zero again.
very nice tutorial. If I can make one suggestion is to write the shaders in a GLSL file format (i.e.: .vs, .fs) then just get the text value from it; that way you can get your editor to highlight the GSLS syntax, which is pretty helpful when dealing with complex shaders.<p>this not, by any means, the best way of doing it, but I felt it was a bit easier writing GLSL code.<p><a href="https://github.com/victorqribeiro/3Dengine/blob/master/js/ShaderProgram.js">https://github.com/victorqribeiro/3Dengine/blob/master/js/Sh...</a>
The hand tuned magic numbers are disconcerting[1]. Couldn't the spectral distribution be derived from real-world cloud data?<p>1. yes I know it's common practice.
I know of raycasting, raytracing, and now raymarching. Are these just attempts to find unique names for “doing something by projecting rays” or do they in some way I can’t see effectively and uniquely describe each technique?