Build an editable landscape from a measured brief, then export terrain that can be checked and loaded into OpenSimulator. Start with the float heightfield and keep it as the master for later revisions.

What you will make
A float master, 13-channel LLRAW, R32 terrain, labeled previews and a manifest recording scale, axes, water and validation. LLRAW carries terrain samples; objects and their textures are packaged separately.
How to use this guide
Pages 2 to 6 cover the brief, landform design, encoding, a runnable exercise and the import check. Use $opensim-terrain-llraw for this workflow. Continue with Guide 2 when the terrain is ready for trees and buildings.
Page 2Set up the project and the brief
Start in Codex
Use Codex with GPT-6 Astra selected in the model control available to your account. Open a local project folder so the agent can inspect inputs, run tools and save results. These guides use a local Python and Blender workflow; a chat response alone does not execute an export. OpenAI identifies the API model as gpt-6-astra [1]. To install the companion skills, ask Codex to review the extracted Skills folder and install its three skill folders in your user skill directory, preserving any newer local versions. Open a new chat and ask it to confirm the named skill is available [2].
Prepare the tools
Give Codex a writable project folder. Ask it to check Python, NumPy and Pillow, and identify the target OpenSimulator version and terrain loaders. Use the supplied skill folder; ask Codex to confirm that it can find and read the named skill. Skills store reusable instructions and supporting files [2].
State the terrain contract
Specify width and height in meters, sample spacing, water height, north direction, maximum elevations, shoreline, building pads and paths. Say whether 4 by 4 means one 1024 meter varregion or sixteen separate 256 meter regions. Heights stay in meters when the horizontal design is enlarged.
Prompt to copy
Use $opensim-terrain-llraw. Design one 1024 by 1024 meter OpenSim varregion at one sample per meter. Water is 20 m. Put a sheltered bay in the southeast, wooded hills in the northwest, and a 40 by 30 m building pad at 27 m. Keep the main route below 10 percent grade as a design target. First save a labeled plan and parameter file. Then create the float master, LLRAW, R32, slope map and validation report. Work locally; do not load a region.
| Input | Example or decision |
|---|---|
| Reference | Attach a map and identify three coordinate anchors |
| Axes | X east, Y north, Z in meters |
| Protected content | Existing terrain areas or objects to retain |
| Output | Versioned folder with source and import notes |
Page 3Shape landforms before fine detail

Build in a deliberate order
Establish the coast and seabed, broad hills, drainage, then pads and routes. Add gentle local variation last. Smooth locally so a path does not become terraced while a deliberate cliff remains intact. The Robinwood generators use broad elevation fields, blended pads and channel masks.
Measure the route
Grade is rise divided by horizontal run. A 2 m rise over 20 m is 10 percent, not 10 degrees. Ask for a route profile and checks of the complete width. Choose a grade target for the experience and test it in the viewer; it is not a universal simulator limit.
Respect what terrain can represent
A heightfield stores one ground height at each XY sample. Caves, roofed passages, overhangs, stacked floors and bridges need meshes. Ordinary region water does not automatically make a separate high pond surface just because the map colors it blue.
Prompt to copy
Show a north-up relief map and slope map. Mark pad dimensions, shoreline elevations and any route segments exceeding the requested grade. Keep the float master and list every assumption before the next revision.
Page 4Choose and verify the terrain format

Make the encoding explicit
The project LLRAW decoder reads height = byte 0 × byte 1 / 128. Holding byte 1 at 128 gives integer-meter heights. The supplied helper chooses the nearest representable pair and reports the error. Its supported height range is 0 to 508.0078125 m; reject out-of-range input rather than wrapping bytes.
Check the actual bytes
A 1024 square LLRAW is 13,631,488 bytes; a 1024 square R32 is 4,194,304 bytes. File names ending in .raw can describe different encodings. Record dimensions and orientation because these formats do not store a useful image-style header.
Keep orientation consistent
In our arrays h[y,x], row zero is south and X changes fastest. Flip vertically once for a north-up image. Do not also flip the exported data. Use a visibly asymmetric hill or bay to prove orientation after import.
| Format | Meaning and check |
|---|---|
| LLRAW | 13 unsigned bytes per sample in this project profile |
| R32 | Little-endian float32 meters, 4 bytes per sample |
| NPY | Editable NumPy master with array dimensions |
| PNG | Preview or calibrated height image; not inherently meters |
Page 5Run the small terrain exercise
Open the companion folder
The download includes Examples/make_training_terrain.py and the terrain skill helper. Run the following commands in a terminal from the extracted guide folder using a Python environment with NumPy. Codex can run these commands for you and explain the results.
python Examples/make_training_terrain.py
python Skills/opensim-terrain-llraw/scripts/terrain_io.py self-test
python Skills/opensim-terrain-llraw/scripts/terrain_io.py export Examples/Training-Terrain/height.npy Examples/Training-Terrain/Export --water 20
python Skills/opensim-terrain-llraw/scripts/terrain_io.py inspect Examples/Training-Terrain/Export/terrain.llraw.raw --width 256 --height 256
What to inspect
The exercise makes a 256 by 256 meter island with a northwest hill and southeast inlet. The generator saves height.npy and parameters.json. The exporter saves terrain.llraw.raw, terrain.r32 and terrain-manifest.json. Check the maximum decode error, minimum and maximum heights, byte counts and hashes.
Revise with a focused prompt
Ask Codex to lower only the northwest hill by 5 m, retain the coastline and pad, create a new version and compare the two heightfields. A numerical difference map shows whether the change stayed inside the requested area.
Split only when the destination needs tiles
For sixteen regions, slice one continuous 1024 master into sixteen 256 tiles. Use x0 y0 for the southwest tile and document tile offsets. Reassemble the tiles and compare against the master. Neighboring samples are one meter apart; slopes need to be continuous, not forced flat at every boundary.
Page 6Load a test region and complete the checks
Before loading
Use a disposable test region configured to the intended dimensions. A terrain file cannot enlarge an existing 256 meter region. Confirm the installed terrain loader using simulator help; this project uses .raw for LLRAW and .r32 for float terrain. Back up the selected region first.
Simulator console example
These commands belong in the OpenSimulator console, not the operating-system terminal. Replace the region name and server file path. Use only one of the two terrain formats in a test so the result is unambiguous.
change region Terrain Test
save oar Terrain-Test-before.oar
terrain load /server/path/terrain.llraw.raw
Verify in world
Confirm north and south landmarks, water at the intended height, pad levels, shorelines and region seams. Walk the routes and check camera clearance. The LLRAW water byte is not a promise that the simulator will change its water setting; check region settings separately.
When something looks wrong
Mirrored map: inspect row direction and flips. Terracing: inspect quantization and the original float master. Wrong scale: verify region dimensions and loader format. Tall spikes: check byte length, finite source data and the selected loader. Wrong waterline: check server water elevation.
Completion evidence
Save the source, parameters, preview, LLRAW and R32, decoded report and import notes. Mark checks as offline or observed in world. Never label a successful file write as a successful simulator import.
Sources and project examples
[1] OpenAI GPT-6 Astra model reference: https://developers.openai.com/api/docs/models/gpt-6-astra
[2] OpenAI Build skills: https://learn.chatgpt.com/docs/build-skills
Project evidence: tools/generate_robinwood_llraw.py; tools/generate_robinwood_4x4.py; terrain-work/generate_terrains.py. The companion helper documents its project-specific LLRAW profile. Review target-loader behavior before deployment.