# Minable ore patches Six ore patches for The Descent, built on 2026-10-13 after a reference picture from the user (four store assets: rocks with crystals and nuggets grown on them). Blender only: nothing here is imported into Unreal and no game code was written. Open `OrePatches.blend` (Blender 5.2). The six patches stand in a row, the single pieces behind them. **This is version 2.** The first version was sent back as not realistic (*"do it more realistic with good textures"*) and is kept whole in `versions\v01_stylised_glow\`. Version 2 takes the rock surface from scans, sculpts the nuggets, and keeps the glow as an accent. ## What a patch is | Part | Object | What the game does with it | |---|---|---| | Host rock | `SM_OreRock__` | Static. Dark veined rock; near the clusters its veins carry the ore. Stays when the patch is mined out. | | Ore clusters | `OrePatch___Ore_NN` (9 to 16 per patch) | **Each one is its own object**, seated in a socket of the rock. Mining takes one off and frees its `ore_units` loose chunks. | | Collision | `UCX_SM_OreRock_..._01` | One convex hull per rock (and per cluster and chunk mesh). | | Root | `OrePatch__` (empty) | Origin on the terrain surface, **+Z points out of the rock face**. The rock goes on below z = 0; that part is buried. | The clusters of a patch are instances of six cluster meshes per ore type (`SM_OreCluster__01..06`), turned and scaled. Three loose chunk meshes per ore type (`SM_OreChunk__01..03`, 0.34 m, the game's chunk size) are what flies into the suction. Under each cluster the rock has a shallow socket of freshly broken rock with a few ore specks, so a mined-out patch still shows where the ore was. The rock's glow is its own texture (`_E`); fade it to zero when the last cluster is gone. Ore types are the game's own (DESIGN_UE 2.12): | Ore | Rock | Pieces | |---|---|---| | **Ferrite** | black veined rock with an iron-stained crust round the clusters | lumps of native metal, sculpted, with dark tarnish in the hollows | | **Cobalt** | black veined rock with a thin blue mineral stain | six-sided prisms of dark blue volcanic glass (the picture's obsidian), milky at the root | | **Pearl** | dark layered rock, grooved along its layers | grown clusters of small waxy spheres, muted magenta (like grape agate) | Silver, tin and gold from the picture are not in the game and were not built; the picture's four rock shapes were used (slab, twin lobes, pyramid, mound). ## The six patches | Patch | Rock shape | Footprint (m) | Height above / below ground (m) | Clusters | Ore units | Triangles: rock + ore = all | |---|---|---|---|---|---|---| | `OrePatch_Ferrite_A` | blocky slab | 1.9 x 1.7 | 1.11 / 0.31 | 11 | 15 | 4,800 + 6,516 = 11,316 | | `OrePatch_Ferrite_B` | twin lobes | 3.4 x 2.1 | 1.12 / 0.34 | 16 | 20 | 8,112 + 9,084 = 17,196 | | `OrePatch_Cobalt_A` | pyramid | 1.9 x 2.1 | 0.94 / 0.36 | 9 | 13 | 4,800 + 2,136 = 6,936 | | `OrePatch_Cobalt_B` | mound with side lumps | 3.2 x 2.7 | 1.53 / 0.38 | 16 | 20 | 8,112 + 3,752 = 11,864 | | `OrePatch_Pearl_A` | layered shelf | 2.5 x 2.0 | 0.64 / 0.28 | 11 | 15 | 4,800 + 9,492 = 14,292 | | `OrePatch_Pearl_B` | layered ridge | 3.6 x 2.0 | 1.13 / 0.32 | 16 | 20 | 8,112 + 13,884 = 21,996 | Pieces (triangles, least to most): cobalt loose chunks 48 to 68; cobalt clusters 184 to 300; ferrite loose chunks 300 to 300; ferrite clusters 432 to 840; pearl loose chunks 792 to 1032; pearl clusters 624 to 1728. All meshes: quads (crystal tips and base caps are triangles), no n-gons, no open edges, no zero-area faces, one UV map. No booleans were used. ## Files | Path | What | |---|---| | `OrePatches.blend` | Scene `Ore Patches`: collections `Patches`, `Library`, `Collision` (hidden), `Studio` (camera, lights, ground; not exported). | | `OrePatches.json` | The layout for the game: per patch the rock mesh, its textures and every cluster (mesh, position, normal, rotation, scale, units). Metres, Z up, right-handed; for Unreal multiply by 100 and flip Y. | | `fbx\SM_*.fbx` | 33 files: 6 rocks, 18 clusters, 9 chunks, each at the origin with its `UCX_` hull. Triangulated on export (the .blend keeps quads). | | `fbx\assembled\OrePatch_*.fbx` | 6 files: a whole patch with its clusters in place, for a quick look or for dressing a scene. | | `textures\T_OreRock___{BC,N,ORM}.png` | **4096 px**, one set per rock (`_E` is 2048 px). | | `textures\T_Ore__{BC,N,ORM,E}.png` | 2048 px, one atlas per ore type for its six clusters and three chunks. | | `source_textures\` | The three scanned rock sets the rocks are baked from (see below). Not needed by the game. | | `previews\` | A render of each patch, `OrePatches_sheet.png` (all six), `OrePatch_mining_stages.png` (full, half mined, mined out), `OrePieces_.png` (the nine pieces of each type). | | `build\` | `build_ore_patches.py` (builds everything headless), `verify_fbx.py` (reads every FBX back), `check_fit.py` (seating and crossing check) and their reports. | | `versions\v01_stylised_glow\` | Version 1 as delivered. | ## Where the textures come from The rock surfaces are scans from **Poly Haven** (polyhaven.com), licence **CC0**: free for commercial use, no credit required. Downloaded on 2026-10-13 with the user's permission, 9 files, 17.5 MB: | Set | Scanned area | Used for | Files | |---|---|---|---| | `dark_rock` (Amal Kumar) | 2.42 m | ferrite and cobalt rocks | `_diff_2k.jpg`, `_rough_2k.jpg`, `_disp_2k.exr` | | `dark_rock_02` (Amal Kumar) | 2.0 m | pearl rocks | the same three | | `rock_05` (Rob Tuytel) | 1.5 m | the iron-stained crust on ferrite rocks | the same three | Each scan is projected from three sides at its real size onto a 153,600-quad copy of the rock and baked into that rock's own UV set, so the game needs only the baked textures. Everything else is made here: the rock shapes, the ore pieces, and the masks that put crust, stain, dust and ore into the rock. The preview lighting uses Blender's own `studio.exr` (packed into the .blend). ## Textures in Unreal - `_BC` base colour (sRGB), `_E` emissive colour (sRGB), `_ORM` ambient occlusion / roughness / metallic in R / G / B (sRGB off), `_N` normal map in Unreal's convention (green down; leave "Flip Green Channel" off). - The emissive textures are tinted with the game's ore glow colours and are deliberately sparse (ore in the rock's veins, specks in the sockets, the hollows of the pieces). The strength is the material's number: the .blend uses 1.0 on rocks and 0.6 on ore, which is a realistic look. Raise it if the ore should carry in the dark. - Import the FBX files with normals imported and tangents computed (MikkTSpace); they carry the triangulation the normal maps were baked on. ## Rebuilding ``` blender -b --factory-startup --python build\build_ore_patches.py blender -b --factory-startup --python build\verify_fbx.py blender -b OrePatches.blend --python build\check_fit.py ``` `-- --quick` builds a small test set into `build\_quick`, `-- --only Ferrite_A,Pearl_B` builds some patches only. Shapes, cluster counts and sizes are the `PATCHES` table at the top of the script; a new ore type is one entry in `ORES` (with the scan it sits on) plus its piece shapes and its shader. ## Limits - Not in the Unreal project. The game still draws its veins in the terrain material and builds its loose chunk in code; nothing reads `OrePatches.json` yet. - No LODs and no lightmap UVs. - The cobalt glass and the pearls are opaque in these textures. Light passing through them would need a translucent or subsurface material in Unreal; that is a material choice there, not a texture. - One convex hull per rock: a twin-lobed rock has an invisible bridge over the saddle between its lobes. - The game's terrain is not made from these scans, so a patch will only sit in the terrain as well as the two rock colours agree; the rock's colour can be shifted in the material. - The preview renders use the game meshes and the baked textures under studio light; under the Tender's lamp in dark water they will look darker.