Terra Firma
groundMaterials 1.0.4: 28 seamless ground surfaces at real-world scale for the materialLibraryKit material library. Each one is also a paint layer for the engine's own landscapes.
Walk the gallery: every surface stands on a floor tile, a wall, a cube, a sphere, a shader ball and a cylinder, with the reference picture it was made from hung beside it. The toolbar switches the lighting look for everyone. Materials opens the picker, and anything you apply shows for every player. The gallery sits in a hollow of a 128 m landscape painted with the alpine mix: grass in the low ground, a dirt and gravel path, scree and rock on the steep slopes, and snow on the tops.
What's in it
- Realistic (21): short grass, long grass, dry grass, dirt, mud, wet mud, clay, dry sand, wet sand, beach sand, gravel, lava rock, forest floor, leaf litter, moss, fresh snow, packed snow, ice, volcanic ash, desert crust, swamp muck.
- Stylised (7): toon grass, dirt, sand and snow; hand-painted grass; pixel-art grass and dirt. Going from realistic grass to toon or pixel grass is a change of one name.
- Landscape mixes: meadow, alpine, desert, beach, forest, swamp, volcanic, tundra. Each is picked by one name.
- Tagged by category, kind, style, tile size, roughness and metal range, texture cost, finish, not-animated and landscape-layer.
- Texture memory: 64 MB for the whole collection. Every surface stays within the web limit of textures per material.
- No shimmer at 30 m even in bright sun, and light on the GPU: in Chrome on a Linux desktop (840 x 632 window) the gallery with its painted hills in view runs at about 50 fps (20 ms average frame, 28 ms at the 90th percentile).
Use it
Install groundMaterials from ZeroMind; materialLibraryKit 1.3.1 comes with it. Then:
local Materials = require("~materialLibraryKit.Materials")
Materials.apply(myFloor, "shortGrass")
The package README covers painting landscapes, the mixes and the full tag table. The known limits below are the same list the package README carries.
Known limits
Engine limits, each with its open issue on OrigoZero/zero:
- Terrain roughness without GroundTerrain (zero#21004): the engine's Terrain shades every layer at roughness 0.95 to 1, so wet mud, wet sand and ice look as dull as ash. Add GroundTerrain beside it.
- No per-layer filtering or tiling on landscape layers (zero#21018): the engine resamples layer textures smoothly and turns every layer's hex cells, so
pixelGrassandpixelDirtpaint a landscape soft rather than crisp, anddrySand's wind ripples turn from cell to cell there (on swatches they keep their direction). The toon surfaces paint a landscape with their colours but the engine's lit shading, not the cel bands. - Reloading a scene can make its landscape float (zero#21023): a scene reload saves the landscape's generated model into the scene, and the terrain then draws far above its heights. Discard that pending edit before reloading, or remove the saved model from the scene.
- A landscape bake can fail or pass on the same inputs (zero#21026): whether
GL.buildfinishes can depend on how busy the machine is. Run it again on a quieter machine if it fails. - The gallery takes a long time to load (zero#21027): 28 materials and one landscape make a slow first load, longest in a browser.
- The gallery's frame rate in a browser is held down by multiplayer sync (zero#20750): the gallery measured about 50 fps in Chrome (see Texture memory), and the sync cost is part of every frame there.
- Two-player behaviour can't be tested inside one engine (zero#19114): shared materials are checked through the library's shared channel.
- No
asset.materialCollection.*namespace yet (zero#1889): surfaces are reached throughMaterials.*. - The engine's normal-map green convention is undocumented (zero#19414): these maps are green-up, and the tests prove the direction.
Limits of the package's own design (no engine issue):
- Curved surfaces blend projections over a narrow band, which can show as a soft join on spheres and rounded models; box faces and planes take one projection.
- The test suite takes about two minutes: its 33 tests render every surface's checks (87 to 132 s on the machines measured), so run it when nothing else is busy.
- GroundTerrain builds the landscape surface at run time on each machine, from the layers the landscape carries; nothing is sent over the network for it.
- The bake inputs are not in the package: the full-size pictures and the maps read off them stay with the machine that baked them (440 MB); the package carries the finished maps and 512 px references.
Comments · 0
Open discussion, no rating attached. Ask questions, swap notes, follow threads.