Download Godot Asset: https://emaceart.itch.io/roadside-tales-iowa-covered-bridges

The Godot build of Backroad Bridges had been sitting at ninety-something percent for a while. Meshes, prefabs, LODs and the demo scene all came across from the Unity original. The terrain did not, and in a landscape pack that is the piece everything else stands on.
The symptom

Terrain before the fix
One colour across 750 metres. No roads, no mud, no sand on the banks. The heightmap survived the conversion intact and the silhouette was right, but the surface read like an untextured blockout.
The cause
Unity stores terrain painting in two RGBA textures held inside the terrain asset, one layer per channel. Both of them came out of the conversion as empty files — 236 bytes each, no pixels in them. The terrain shader still asked for those textures. Godot substituted white where they should have been, and white means every layer at full strength. Seven ground textures averaged into each other. That average is the colour in the shot above. It also explained a second thing I had been blaming on the wrong cause. The ground looked stretched, so I assumed the tiling had been lost in conversion. Tiling was fine the whole time. Averaging seven textures flattens the contrast, and flat contrast reads as smeared.
Recovering the masks
The painting itself was never lost — it was still sitting in the Unity terrain asset. I pulled both alphamaps out and wrote them back into the Godot project as PNGs

Seven layers. The entire road network lives in the alpha channel of the first texture: Mud_Path, 35.6% of the terrain surface. Rock_Slope runs in thin ribbons exactly along the banks. Leaf_Forest is empty, a layer I set up early and never used. Before trusting the vertical orientation I checked it against the heightmap rather than by eye. The correlation between the Rock_Slope mask and actual terrain slope came out at 0.71 the way I imported it, and 0.03 flipped. Getting that wrong costs an afternoon and you usually only notice three scenes later.
The terrain shader
The shader the converter generated had two faults worth replacing it over. It sampled the albedo texture when building the normal map, so ground lighting was reading colour instead of surface detail. And it divided by the raw sum of layer weights, which is exactly why an empty splatmap could quietly wash everything together instead of failing in a way you would notice. The replacement normalises the weights before mixing and reads normals from the normal maps. Tiling is set per layer at 50 repeats across the terrain — the 750 m terrain divided by the 15 m tile size the Unity layers used.


The grass pass
Unity terrain details do not survive the conversion either, so grass in the Godot build is re-scattered from the terrain mesh: height, slope, and a patch noise for meadow shapes. Without the splatmap there was no way for it to know that a road was a road, so it seeded straight across the tracks and up the pebble banks.

The scatter now samples the same two masks the terrain material uses, through the terrain's own UVs, and weighs every layer by how welcoming it is to grass. Grass and flowers 1.0, leaf litter 0.6, sand 0.25, mud and rock and pebbles 0.

The field went from 72 385 clumps to 35 313. Rather than judge that by eye, I exported every clump position and looked up which layer each one actually stands on

Between the cutoff and full strength the density falls away gradually, so verges thin out instead of ending on a cut line


Where the pack stands
The Godot version now carries the terrain the Unity original always had: the same painted backroads, the same mud pools, the same pebble banks, with grass that stays off them. The layer weights are exposed, so anyone rebuilding the field can decide how much grass belongs on sand or leaf litter and bake it again. Still open: the pebble banks read brighter than I want them under strong light. That is a texture and lighting call, and it is next.

EmaceArt