Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.blend binary
*.vdb binary
*.exr binary
*.png binary
*.jpg binary
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,9 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# Blender
*.blend1
*.blend2
*.blend@
.DS_Store
110 changes: 108 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,108 @@
# ARM Repository Template
Basic repository template with required security workflows
# ablemodels — ARM Blender models

Procedural Blender models of ARM Mobile Facility sites and instruments, built for the
DERECHOS campaign (Iowa–Illinois). The repository is **self-contained and runnable**: every
scene links its assets from the asset folders by relative path, so a fresh clone opens and
renders with no missing files.

Requires **Blender 5.2 LTS** or newer (files were written with 5.2.3).

![M1 aerial](scenes/preview/M1_Cam_M1_Aerial_SE.jpg)

| | | |
|---|---|---|
| <img src="scenes/preview/test_m1_supercell_Cam_Storm_Sign.jpg" width="280"> | <img src="scenes/preview/S2_Cam_C850_Drone.jpg" width="280"> | <img src="scenes/preview/M1_Camera_AMF2.jpg" width="280"> |
| CM1 supercell over M1 (`scenes/tests/m1_supercell.blend`) | S2, Washington Municipal Airport | AMF2 container row at M1 |

## Layout

| Folder | What is in it |
|---|---|
| [`instruments/`](instruments/) | One `.blend` per ARM instrument (AERI, KAZR, DL, MPL, MWR3C, MET tower, ECOR, SEBS, SIRS, RWP, …) plus the C-SAPR2 radar and the KAWG AWOS |
| [`containers/`](containers/) | AMF2 instrument containers, AOS platform, office shelter, and the SACR container (M1 and S2 versions) |
| [`buildings/`](buildings/) | Farmstead (M1), MIRF buildings and center pivots (S1), KAWG hangars and terminal (S2), Louisa power station, flagpole, site signs |
| [`vehicles/`](vehicles/) | Farm vehicles and implements, and the ARM Challenger 850 research aircraft |
| [`plants/`](plants/) | Corn and soybean variants, lawn and tall grass, tree sets (standard and high-detail), native prairie flowers |
| [`clouds/`](clouds/) | Mature-cloud snapshots as OpenVDB volumes with their shaders: LASSO SGP cumulus, UCLA cumulus, CM1 BOMEX cumulus, CM1 supercells |
| [`scenes/`](scenes/) | The three DERECHOS sites (M1, S1, S2) and test scenes; site-specific terrain/vegetation layers live in `scenes/<site>/layers/` |
| [`textures/`](textures/) | Shared image textures (PBR material sets, NAIP orthoimagery, sign and flag artwork) |
| [`tools/`](tools/) | Scripts that built this library from the original working files, plus build/verification reports |

Every asset folder has a `preview/` subfolder with renders of what it contains, and a
`README.md` catalogue (file, collection name, preview).

### Scenes

| Scene | Site |
|---|---|
| `scenes/M1/M1.blend` | M1 — main AMF2 site on the farm (instrument field, AMF2 containers, farmstead, fields) |
| `scenes/S1/S1.blend` | S1 — Muscatine Island Research Farm (ECORs in corn and soy, SEBS, center pivots, Louisa plant on the horizon) |
| `scenes/S2/S2.blend` | S2 — Washington Municipal Airport, KAWG (X/Ka SACR, C-SAPR2, AWOS, Challenger 850) |
| `scenes/tests/instrument_lineup.blend` | Every instrument asset in a row |
| `scenes/tests/m1_supercell.blend` | M1 with the CM1 100 m supercell (snapshot `c100_t25`) placed as in the storm renders |
| `scenes/tests/m1_lasso_cumulus.blend` | M1 under the LASSO SGP cumulus field |
| `scenes/tests/s1_ucla_cumulus.blend` | S1 under the UCLA LES cumulus field |

## How the linking works

Blender can **link** data from another `.blend` instead of copying it
(*File → Link*). A linked collection stays read-only in the scene and is re-read from its
source file every time the scene opens, so fixing `instruments/KAZR/KAZR.blend` updates every
scene that uses the KAZR. All paths are stored relative to the file (`//../../instruments/...`),
which is what makes the repository portable.

Re-usable assets (instruments, containers, vehicles, pivots, flagpole) are stored with their
root at the origin. Scenes place them with a **collection-instance empty** (named
`<collection>_inst`) carrying the location and rotation, so one asset can be placed many
times. Site-specific layers (terrain, fields, farmstead buildings, vegetation scatter) are
stored in their real-world site coordinates and linked in place.

Common tasks:

* **Use an asset in your own scene:** *File → Link*, browse into the `.blend`, open
`Collection`, pick the collection (e.g. `INST_KAZR`). It arrives as an instance you can move.
* **Asset Browser:** add the repository root under *Preferences → File Paths → Asset
Libraries*; all asset collections are marked as assets.
* **Pose a linked asset** (C-SAPR2 azimuth/elevation, Challenger 850 gear, flaps and fans,
AWOS wind vane): right-click the instance → *Library Override → Make → Selected & Content*,
then edit the custom properties on its `*_root` object; drivers on the parts read those
properties. The SACR azimuth/elevation is keyframed on `SACR_Azimuth`/`SACR_Elevation`.
* **Edit an asset:** open its own `.blend` and save; every scene picks up the change.
* **Make a copy you can edit locally:** *Object → Apply → Make Instances Real*, or
*Object → Relations → Make Local*.

## Clouds

Each cloud `.blend` has one collection per snapshot (`CLOUD_<name>`); the VDB files sit next
to it. Volume objects read the model's own grids (CM1: `cloud`, `rain`, `ice`, `snow`,
`graup`, `cice`; LES: `lwc`). The CM1 storm shader renders each hydrometeor species with its
own scattering and uses the raw model fields (no procedural noise).

VDBs larger than 50 MB (the three 100 m supercell snapshots) were rewritten with 16-bit
half-float storage to stay under GitHub's 100 MB file limit. Grid resolution, extent and all
species are unchanged; half precision keeps about three significant digits of the mixing
ratio, below what a volume render can show. Nothing was resampled.

## Provenance and verification

The library was generated from the original monolithic working files (`farm_v5.blend`,
`mirf_s1.blend`, `airport_awg.blend` and the cloud scenes) by the scripts in `tools/`
(`build_m1.py`, `build_s1.py`, `build_s2.py`, `build_clouds.py`, `build_tests.py`). The
extraction is lossless: each rebuilt scene was evaluated against its source and has the same
number of mesh instances, the same total vertex count and identical summed world positions
(reports in `tools/reports/`), and test renders match the originals to within sampling noise.
Text objects that used macOS system fonts were converted to meshes so they render the same
on any OS.

Deliberate differences from the working files:

* At M1 the SACR container instance is hidden (the SACR moved to S2 for DERECHOS).
* Instruments, containers and vehicles are instanced rather than embedded (see above).

## Licences of third-party content

* PBR texture sets in `textures/pbr/` are from [ambientCG](https://ambientcg.com) (CC0).
* Orthoimagery in `textures/imagery/` is USDA NAIP (public domain); the M1 height fields
(`hf_*.exr`) are terrain elevation grids, stored with lossless ZIP compression.
* Site signs and flags (`textures/signs/`, `textures/flags/`) carry partner and agency logos;
check their usage rules before reusing them outside DERECHOS/ARM material.
16 changes: 16 additions & 0 deletions buildings/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Buildings and structures

Site buildings are stored in site coordinates; the flagpole and center pivots are re-usable (root at the origin).

| Preview | Collection | File |
|---|---|---|
| <img src="preview/Farmstead.jpg" width="260"> | `Farmstead` | [`m1_farmstead.blend`](m1_farmstead.blend) (0.3 MB) |
| <img src="preview/Flagpole.jpg" width="260"> | `Flagpole` | [`flagpole.blend`](flagpole.blend) (0.2 MB) |
| <img src="preview/SIGN_M1.jpg" width="260"> | `SIGN_M1` | [`signs/sign_M1.blend`](signs/sign_M1.blend) (0.9 MB) |
| <img src="preview/SIGN_S1.jpg" width="260"> | `SIGN_S1` | [`signs/sign_S1.blend`](signs/sign_S1.blend) (0.9 MB) |
| <img src="preview/SIGN_S2.jpg" width="260"> | `SIGN_S2` | [`signs/sign_S2.blend`](signs/sign_S2.blend) (0.9 MB) |
| <img src="preview/Pivot_P3.jpg" width="260"> | `Pivot_P3` | [`center_pivots.blend`](center_pivots.blend) (1.5 MB) |
| <img src="preview/Pivot_P1.jpg" width="260"> | `Pivot_P1` | [`center_pivots.blend`](center_pivots.blend) (1.5 MB) |
| <img src="preview/LOUISA_Station.jpg" width="260"> | `LOUISA_Station` | [`louisa_station.blend`](louisa_station.blend) (0.4 MB) |
| <img src="preview/S1_MIRF_Buildings.jpg" width="260"> | `S1_MIRF_Buildings` | [`s1_mirf_buildings.blend`](s1_mirf_buildings.blend) (0.1 MB) |
| <img src="preview/S2_KAWG_Buildings.jpg" width="260"> | `S2_KAWG_Buildings` | [`s2_kawg_buildings.blend`](s2_kawg_buildings.blend) (1.8 MB) |
Binary file added buildings/center_pivots.blend
Binary file not shown.
Binary file added buildings/flagpole.blend
Binary file not shown.
Binary file added buildings/louisa_station.blend
Binary file not shown.
Binary file added buildings/m1_farmstead.blend
Binary file not shown.
Binary file added buildings/preview/Farmstead.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/Flagpole.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/LOUISA_Station.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/Pivot_P1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/Pivot_P3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/S1_MIRF_Buildings.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/S2_KAWG_Buildings.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/SIGN_M1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/SIGN_S1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/preview/SIGN_S2.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added buildings/s1_mirf_buildings.blend
Binary file not shown.
Binary file added buildings/s2_kawg_buildings.blend
Binary file not shown.
Binary file added buildings/signs/sign_M1.blend
Binary file not shown.
Binary file added buildings/signs/sign_S1.blend
Binary file not shown.
Binary file added buildings/signs/sign_S2.blend
Binary file not shown.
37 changes: 37 additions & 0 deletions clouds/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Clouds

Mature snapshots; one collection per snapshot, VDB next to the .blend. Tiled LES fields (LASSO 3x3, UCLA 7x7) keep their periodic tiling.

| Preview | Collection | File |
|---|---|---|
| <img src="preview/bomex_t360.jpg" width="260"> | `CLOUD_bomex_t360` | [`cm1_bomex_cumulus/cm1_bomex_cumulus.blend`](cm1_bomex_cumulus/cm1_bomex_cumulus.blend) (0.1 MB) |
| <img src="preview/bomex_t300.jpg" width="260"> | `CLOUD_bomex_t300` | [`cm1_bomex_cumulus/cm1_bomex_cumulus.blend`](cm1_bomex_cumulus/cm1_bomex_cumulus.blend) (0.1 MB) |
| <img src="preview/bomex_t240.jpg" width="260"> | `CLOUD_bomex_t240` | [`cm1_bomex_cumulus/cm1_bomex_cumulus.blend`](cm1_bomex_cumulus/cm1_bomex_cumulus.blend) (0.1 MB) |
| <img src="preview/supercell_s250_t60.jpg" width="260"> | `CLOUD_supercell_s250_t60` | [`cm1_supercell/cm1_supercell.blend`](cm1_supercell/cm1_supercell.blend) (0.1 MB) |
| <img src="preview/supercell_s250_t45.jpg" width="260"> | `CLOUD_supercell_s250_t45` | [`cm1_supercell/cm1_supercell.blend`](cm1_supercell/cm1_supercell.blend) (0.1 MB) |
| <img src="preview/supercell_s100_t60.jpg" width="260"> | `CLOUD_supercell_s100_t60` | [`cm1_supercell/cm1_supercell.blend`](cm1_supercell/cm1_supercell.blend) (0.1 MB) |
| <img src="preview/supercell_s100_t45.jpg" width="260"> | `CLOUD_supercell_s100_t45` | [`cm1_supercell/cm1_supercell.blend`](cm1_supercell/cm1_supercell.blend) (0.1 MB) |
| <img src="preview/supercell_c100_t25.jpg" width="260"> | `CLOUD_supercell_c100_t25` | [`cm1_supercell/cm1_supercell.blend`](cm1_supercell/cm1_supercell.blend) (0.1 MB) |
| <img src="preview/lasso_2000.jpg" width="260"> | `CLOUD_lasso_2000` | [`lasso_sgp_20170403/lasso_sgp_20170403.blend`](lasso_sgp_20170403/lasso_sgp_20170403.blend) (0.1 MB) |
| <img src="preview/lasso_1900.jpg" width="260"> | `CLOUD_lasso_1900` | [`lasso_sgp_20170403/lasso_sgp_20170403.blend`](lasso_sgp_20170403/lasso_sgp_20170403.blend) (0.1 MB) |
| <img src="preview/lasso_1800.jpg" width="260"> | `CLOUD_lasso_1800` | [`lasso_sgp_20170403/lasso_sgp_20170403.blend`](lasso_sgp_20170403/lasso_sgp_20170403.blend) (0.1 MB) |
| <img src="preview/lasso_1740.jpg" width="260"> | `CLOUD_lasso_1740` | [`lasso_sgp_20170403/lasso_sgp_20170403.blend`](lasso_sgp_20170403/lasso_sgp_20170403.blend) (0.1 MB) |
| <img src="preview/lasso8_2040.jpg" width="260"> | `CLOUD_lasso8_2040` | [`lasso_sgp_20170403/lasso_sgp_20170403.blend`](lasso_sgp_20170403/lasso_sgp_20170403.blend) (0.1 MB) |
| <img src="preview/ucla_t6600.jpg" width="260"> | `CLOUD_ucla_t6600` | [`ucla_cumulus/ucla_cumulus.blend`](ucla_cumulus/ucla_cumulus.blend) (0.1 MB) |

VDB files:

* `cm1_bomex_cumulus/bomex50_t240_x5.vdb` (2.9 MB)
* `cm1_bomex_cumulus/bomex50_t300_x5.vdb` (3.2 MB)
* `cm1_bomex_cumulus/bomex50_t360_x5.vdb` (2.4 MB)
* `cm1_supercell/c100_t25_sp.vdb` (80.8 MB)
* `cm1_supercell/s100_t45_sp.vdb` (42.4 MB)
* `cm1_supercell/s100_t60_sp.vdb` (77.5 MB)
* `cm1_supercell/s250_t45_sp.vdb` (5.5 MB)
* `cm1_supercell/s250_t60_sp.vdb` (12.6 MB)
* `lasso_sgp_20170403/lasso8_2040_lwc.vdb` (20.2 MB)
* `lasso_sgp_20170403/lasso_1740_lwc.vdb` (2.2 MB)
* `lasso_sgp_20170403/lwc_0145.vdb` (2.1 MB)
* `lasso_sgp_20170403/lwc_0193.vdb` (1.2 MB)
* `lasso_sgp_20170403/lwc_0241.vdb` (0.4 MB)
* `ucla_cumulus/ucla_t6600_m.vdb` (0.5 MB)
Loading
Loading