Anyone old (and nerdy) enough in here to recognize what this is derived from?
It uses tilemaps and (extruded) spritesheets from the original game, upon which I sculpted a heightmap (while still retaining 1 polygon per original tile) and then baked some data down to vertex color in order to spawn particle systems for the vegetation.
The lighting is only made with Nishita and I just dragged all sliders until I got something which looked like moonlight instead of sunlight.
It’s “approximated” real world scale, so the entire thing is 12km across.
Oddities encountered while making this:
Simple deform, despite having axises to choose from, required me to rotate the origin of the landscape in order to get the top of a sphere so now, while sculpting, I have to restrict the heightmap in the Y direction instead of Z and add/subtract has become inverted.
Similarly, the hair particle collection spawner requires the origin of the object to be rotated as well in order to orient them correctly to the target. None of this is logical, you just have to try stuff until you get what Blender wants. Also, you can restrict the spawning of a hair to a single axis, but rotation randomness is always global (which I guess is why people use geometry nodes these days instead).
The different ways of recording vertex color (with face corner being the other) is a bit confusing and the results of baking face corner data was weird and using straight up vertex color involved updating a script for the selection and still a lot of manual workarounds. In hindsight, maybe splitting all faces by edges would have been easier…
i really like what you’ve done with the mountains!
…
to add a note regarding vertex color:
if you paint the vertices with a Vertex+Color attribute, you can pull this attribute into material shaders for surface coloration (works great for animal stripes, provided your mesh has closely spaced vertices).
BUT if you try to pull that same Vertex+Color attribute into a material shader for old-school particle-system hair, it silently fails (zero error messages) and your hair/fur will be black no matter what. The old-school particle-system hair will only shade using FaceCorner+ByteColor vertex-color-attribute data format.
(luckily there is a format conversion option, if you spent too much time painting in the wrong format).
Some EEVEE viewport grabs of me populating the world…
Vegetation is now geometry nodes instead of particles because I needed the tall trees to point towards the center of the planet and other tweaks the particle system couldn’t do. Funnily, I managed to get the heightmap into a state where it refuses to render when there’s geometry nodes modifiers on it (confirmed by a 3rd party expert who also got stumped by it), but not sure how it ended up like that so can’t report it as a bug.
Only texture used is sprite sheets from the original game, everything else is procedural using gradients for the horizon, voronoi for the moons and geometry nodes for the stars.
Managed to find a bug while sculpting the heightmap and had it confirmed.
Maybe I’m straying too far away now, but I really wanted to see how a “proper” shaded landscape would look… I think I’m more fond of the black look, but I’ll probably continue experimenting…
In doing this, I applied something I learned from a technique in Unreal Engine called “pivot painter”. Basically, you split all faces of an UV map (into islands) and scale them to 0, and then you bake data you want into a texture. I guess it’s sort of like attributes only they’re not limited to Blender (I could easily use this in Godot as well, for example).
So, in the above image, I’ve baked a heightmap and applied a voronoi in order to get a more prominent, faceted color change per “tile”, and also I randomly rotate the texture per tile/face in 90 degree increments:
Nobody will ever read this, so maybe I’ll make a video about it some day (that also nobody will ever watch, but maybe at least it might be more searchable).
For this part, I really wish the UV Map UX in Blender wasn’t so neglected and could be brought up to standard with attributes which is literally right next to it in the UI.