Compare commits
6 Commits
v005-conta
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2054217c77 | |||
| cdf0d311ac | |||
| ac5407f073 | |||
| 544ff143f8 | |||
| 1e337e0551 | |||
| 0582fc44df |
17
AGENTS.md
@@ -2,7 +2,7 @@
|
||||
|
||||
Read README.md, docs/PROJECT-CONTEXT.md, docs/REQUEST-HISTORY.md and the latest decision record before editing.
|
||||
|
||||
- Current model: blender/samford-solarpunk-container-water-tour.blend, version 005.
|
||||
- Current public model: blender/samford-solarpunk-wind-tour-v009.blend. It derives from distributable v007; earlier binaries remain historical.
|
||||
- The table-tennis deck was explicitly removed. Do not restore it from older scenes.
|
||||
- Future child/dwelling pavilions remain ghost outlines. The one built small pavilion is a meditation room.
|
||||
- Preserve the detailed kitchen, reading library, bedroom sleep setup, sauna, shower, solar, tanks, Starlink, homelab, Tesla garage, training and food-growing features.
|
||||
@@ -16,3 +16,18 @@ Read README.md, docs/PROJECT-CONTEXT.md, docs/REQUEST-HISTORY.md and the latest
|
||||
- No need to create Linear issues unless Marcus explicitly asks.
|
||||
|
||||
- Current water storage is a container-style enclosure with two sealed internal tanks. Do not restore the old exposed cylinders from earlier scene files.
|
||||
|
||||
- Preserve the garden Buddha north of the meditation room and its chapter 31 tour stop. The Buddha remains in v009.
|
||||
|
||||
- v007 has a separate client cinematic and an actual whole-site Unreal walking project at unreal/SamfordHomestead. Do not describe Unreal as meditation-only anymore. Read walkthroughs/CLIENT-PRESENTATION-V007.md.
|
||||
- Never attach evaluated temporary Blender material IDs to persistent meshes: resolve materials through bpy.data.materials by name. Invalid evaluated references caused a save-time crash during this revision and were fixed.
|
||||
- Test Unreal collision in a fully initialized play world; editor startup traces can run before physics is ready. Set complex-as-simple collision, refresh the mesh section and save.
|
||||
|
||||
- Bedroom bed is to be built into the wall, rigid and quiet, not a free-standing frame. Recorded in decisions/2026-09-11-bed-wall-integrated.md and still to be modelled.
|
||||
|
||||
- Historical licensed revision v008 is in the PRIVATE archive `/home/marcus/projects-private/samford-valley-home-v008`. It contains the licensed 7K Studio Tesla and daylight Unreal scene. Public binaries remain v007. Never publish embedded Tesla geometry; see the v008 decision.
|
||||
- Do not export Blender volume-only haze as an opaque Unreal mesh. The v007 enclosing haze cube blocked sunlight and was removed in v008. Match Unreal imported material slots by name, not index. Use explicit look-at rotations or keyword Rotator arguments; confirm the sun forward vector points down.
|
||||
|
||||
- Latest revision is v009. Public Blender is based on v007; private Blender with the licensed Tesla is at `/home/marcus/projects-private/samford-valley-home-v009/`. Never publish that private binary.
|
||||
- Preserve the wind turbine detailed and FAST copies, provisional (-36,40) concept location, and chapter 32 (32 chapters, 160 seconds). The 18 m hub and 6 m rotor are visual placeholders, not engineered dimensions or a product selection.
|
||||
- Current plan: plans/concept/wind-turbine-plan-v009.svg. Unreal and the v007 film do not yet contain the turbine. Read the v009 decision before editing.
|
||||
|
||||
29
README.md
@@ -10,12 +10,25 @@ Read [Project context](docs/PROJECT-CONTEXT.md), [Request history](docs/REQUEST-
|
||||
|
||||
Clone using `git clone ssh://git@git.rehbock.xyz:2222/marcus/samford-valley-home.git`. Current files use ordinary Git; no Git LFS client is needed. The existing Git server has LFS disabled.
|
||||
|
||||
## Open the current work
|
||||
## Latest revision — v009 wind turbine, 24 September 2026
|
||||
|
||||
- **Blender 5.2.1:** `blender/samford-solarpunk-container-water-tour.blend`. Includes the entire homestead, reading chair and 163 books. Its camera tour has 30 chapters and lasts 2 minutes 30 seconds. Hover over the 3D view and press Space to play; Shift + Left Arrow returns to the start. It opens at the container water-storage chapter. Earlier bedroom and reading-tour files remain as previous versions.
|
||||
- **Unreal Engine 5.8.2:** `unreal/SamfordMeditation/SamfordMeditation.uproject`. The saved meditation room includes 152 meshes, 14 materials, lighting and a camera. The Unreal work currently covers this room only; an interactive whole-home walkthrough is future work.
|
||||
Added a three-blade wind turbine on a freestanding mast beyond the northwestern edge of the homestead. The concept location (-36, 40) m, 18 m hub height and 6 m rotor diameter are illustrative placeholders pending an actual site, wind measurements, equipment selection, engineering and approvals. Solar and storage remain part of the brief.
|
||||
|
||||
Current public Blender file: `blender/samford-solarpunk-wind-tour-v009.blend`, derived from distributable v007. The private v009 Blender file preserves the licensed v008 Tesla at `/home/marcus/projects-private/samford-valley-home-v009/`. Keep private binaries out of public Git. Both models add matching detailed/fast turbine geometry and chapter 32; the tour now lasts 2 min 40 sec and opens at the turbine chapter. Shift + Left Arrow restarts the complete tour.
|
||||
|
||||
Current plan: `plans/concept/wind-turbine-plan-v009.svg`. Current overview: `renders/v009-wind-overview.png`. See [v009 decision](decisions/2026-09-24-v009-wind-turbine.md) for assumptions and feasibility work. The Unreal walkthroughs and v007 film are unchanged and do not yet include the turbine. All previous house and landscape features remain, including the future pavilion outlines and garden Buddha.
|
||||
|
||||
## Previous working revision — v008
|
||||
|
||||
The 7K Studio Tesla Model 3 and daylight Unreal scene are stored privately at `/home/marcus/projects-private/samford-valley-home-v008` because the car licence restricts redistribution. This public repository retains the distributable v007 binaries and new renders/source/context. See [v008 decision](decisions/2026-09-15-v008-tesla-and-daylight.md).
|
||||
|
||||
## Preserved public v007 work
|
||||
|
||||
- **Blender 5.2.1:** `blender/samford-solarpunk-presentation-tour.blend`. Includes the entire homestead, reading chair and 163 books. Its camera tour has 31 chapters and lasts 2 minutes 35 seconds. Hover over the 3D view and press Space to play; Shift + Left Arrow returns to the start. It opens at the whole-site overview. Earlier bedroom and reading-tour files remain as previous versions.
|
||||
- **Walkable Unreal Engine 5.8.2:** `unreal/SamfordHomestead/SamfordHomestead.uproject`. Whole-site editor-play prototype, 229 mesh groups and 117 materials. Play, click the viewport, then WASD and mouse; Escape stops. Fresh-launch play testing verified floor collision and movement from the verandah into the house. The earlier meditation-only study is preserved separately.
|
||||
- **Client video:** `walkthroughs/video/Samford-Valley-Concept-Film-v007.mp4`, a 30-second captioned H.264 concept film. Read `walkthroughs/CLIENT-PRESENTATION-V007.md` for usage and the source-render/interpolation details.
|
||||
- **Images:** `renders/` contains the latest compound, detailed kitchen, training terrace and outdoor dining, plus earlier bedroom, reading corner, garage and actual Unreal room studies.
|
||||
- **Concept layout:** `plans/concept/container-water-plan.svg`. Current version 005 includes the container water-storage module and replaces the table-tennis deck with flowers, aligns the pavilions and adds curved paths and a central garden court.
|
||||
- **Concept layout:** `plans/concept/buddha-garden-plan.svg`. Current version 007 includes the container water-storage module and replaces the table-tennis deck with flowers, aligns the pavilions and adds curved paths and a central garden court.
|
||||
- **Animation instructions:** `walkthroughs/UNREAL-CAMERA-ANIMATION.md`.
|
||||
|
||||
## Working in Blender
|
||||
@@ -78,3 +91,11 @@ The full conversation context and decision history are now preserved in docs/. S
|
||||
## Container water-storage revision — 10 September 2026, v005
|
||||
|
||||
Marcus asked to make the water tanks a shipping container. Replaced the exposed cylinders with a dark-green 20-foot container-style module (approximately 6.06 × 2.44 × 2.59 m), retaining two sealed water tanks inside. Added corrugated walls, cargo doors and locking bars, corner castings, inlet/outlet manifolds, pump and a first-flush component concept. The container enclosure is not itself the water-retaining vessel. The west end is a transparent inspection cutaway. The garden service path reaches the east cargo doors. Updated tour chapter 13, the plan and exterior/cutaway/overview renders. Product selection, structural/loading checks and hydraulic sizing remain future design work.
|
||||
|
||||
## Garden Buddha — version 006, 10 September 2026
|
||||
|
||||
Added a seated weathered-limestone Buddha on a low stone plinth north of the meditation pavilion, facing east into the shared garden court. The statue has a draped robe, folded hands, lowered eyes, elongated earlobes and a carved topknot. Position (-12.4, 15.35), clear of both the room and curved walking route. Added a lightweight viewport proxy and chapter 31 to the Play tour (2 min 35 sec total). The scene opens on the statue. Existing house, container water module, future shadows and landscaping remain intact.
|
||||
|
||||
## Presentation and whole-site walkthrough — 12 September 2026, v007
|
||||
|
||||
Refined natural materials, softened 420 construction/furniture edges, added woven kitchen pendants, table settings, living textiles, fuller planted borders and path aggregate. Preserved the layout and all 31 inspection chapters. Created a separate eight-shot cinematic and 30-second client concept film. Converted the whole site to an actual Unreal level with walking, collision, lighting and cameras; fresh-launch play testing passed. It remains an editable prototype rather than a packaged client app or final photorealistic campaign asset.
|
||||
|
||||
26
blender/blender-enhancement-checks.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": 7,
|
||||
"beveled_objects": 420,
|
||||
"materials_refined": [
|
||||
"Bamboo lining - golden fibres",
|
||||
"Eight Sleep charcoal cover textile",
|
||||
"Honed natural marble - ivory and warm grey veins",
|
||||
"Meditation cushion charcoal linen",
|
||||
"Naturally silvered hardwood - horizontal X",
|
||||
"Naturally silvered hardwood - horizontal Y",
|
||||
"Oiled spotted gum posts - vertical grain",
|
||||
"Reading chair moss linen",
|
||||
"Reading lamp undyed linen shade",
|
||||
"Sauna thermally modified timber staves",
|
||||
"Soft warm clay plaster - natural mineral texture",
|
||||
"Split sandstone facing - mineral grain",
|
||||
"Undyed flax linen",
|
||||
"Unpainted hardwood - long X grain",
|
||||
"Unpainted hardwood - long Y grain",
|
||||
"Warm oxide polished concrete - fine aggregate"
|
||||
],
|
||||
"new_detail_objects": 171,
|
||||
"new_leaf_faces": 22232,
|
||||
"tour_chapters": 31,
|
||||
"tap_connection_corrected": true
|
||||
}
|
||||
53
blender/blender-verification.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"required_features": {
|
||||
"ISLAND - honed marble countertop": true,
|
||||
"FAST | Garden Buddha statue": true,
|
||||
"CONTAINER WATER - steel base frame": true,
|
||||
"Living woven jute rug": true,
|
||||
"Fuller garden borders - curved lanceolate leaves": true,
|
||||
"FAST | Crafted details and fuller gardens": true
|
||||
},
|
||||
"render": [
|
||||
"CYCLES",
|
||||
2560,
|
||||
1440,
|
||||
100
|
||||
],
|
||||
"ghosts": 26,
|
||||
"captions": [
|
||||
"01 / ONE CONNECTED GARDEN HOMESTEAD",
|
||||
"02 / LIVING PAVILION & VERANDA",
|
||||
"03 / KITCHEN & EXPOSED STRUCTURE",
|
||||
"04 / DINING & OPEN LIVING",
|
||||
"05 / ONE SERVER - LOCAL AI",
|
||||
"06 / SHORT CORRIDOR TO PRIVATE ROOMS",
|
||||
"07 / ADJACENT BEDROOM WING",
|
||||
"08 / ENCLOSED BEDROOM",
|
||||
"09 / BATHROOM - SEPARATE LOBBY DOOR",
|
||||
"10 / FINNISH SAUNA & OUTDOOR SHOWER",
|
||||
"11 / SAUNA BENCHES & STONE HEATER",
|
||||
"12 / OUTDOOR SHOWER",
|
||||
"13 / CONTAINER RAINWATER STORAGE",
|
||||
"14 / ROOFTOP SOLAR & STARLINK",
|
||||
"15 / SOLAR ARRAY & ENERGY STORAGE",
|
||||
"16 / FOOD GARDEN & GREENHOUSE",
|
||||
"17 / INSIDE THE GREENHOUSE",
|
||||
"18 / QUIET MEDITATION ROOM",
|
||||
"19 / CUSHION, CANDLES & STILLNESS",
|
||||
"20 / GRAVEL ROAD & GARAGE",
|
||||
"21 / TESLA, SOLAR CHARGING & WORKSHOP",
|
||||
"22 / BALANCED FUTURE PAVILIONS",
|
||||
"23 / RECTANGLES AND GARDEN CURVES",
|
||||
"24 / BOOKS & A QUIET READING CORNER",
|
||||
"25 / TRAINING & STRENGTH",
|
||||
"26 / OUTDOOR TABLE & MATCHA",
|
||||
"27 / FLOWERING GARDEN - ROOM TO BREATHE",
|
||||
"28 / FLOWING WALKS AND GARDEN COURT",
|
||||
"29 / EASY EVERYDAY FOOD",
|
||||
"30 / COPPER & MARBLE KITCHEN",
|
||||
"31 / QUIET GARDEN BUDDHA"
|
||||
],
|
||||
"no_ping_pong": true,
|
||||
"material_references_valid": true,
|
||||
"status": "PASS"
|
||||
}
|
||||
5451
blender/buddha-garden-layout.json
Normal file
16
blender/buddha-garden-verification.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"buddha_collection_objects": 281,
|
||||
"viewport_proxy": true,
|
||||
"tour_chapters": 31,
|
||||
"caption_issues": [],
|
||||
"path_clearance_m": 0.165,
|
||||
"statue_outside_room": true,
|
||||
"internal_water_tanks": 2,
|
||||
"kitchen_preserved": true,
|
||||
"no_table_tennis": true,
|
||||
"render_size": [
|
||||
2560,
|
||||
1440,
|
||||
100
|
||||
]
|
||||
}
|
||||
BIN
blender/samford-client-cinematic.blend
Normal file
BIN
blender/samford-solarpunk-buddha-garden-tour.blend
Normal file
BIN
blender/samford-solarpunk-presentation-tour.blend
Normal file
BIN
blender/samford-solarpunk-wind-tour-v009.blend
Normal file
58
blender/samford-solarpunk-wind-tour-v009.verification.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"model": "samford-solarpunk-wind-tour-v009.blend",
|
||||
"turbine_objects": 20,
|
||||
"rotor_blades": 3,
|
||||
"hub_height_m": 18,
|
||||
"rotor_diameter_m": 6,
|
||||
"concept_xy": [
|
||||
-36,
|
||||
40
|
||||
],
|
||||
"tour_chapters": 32,
|
||||
"tour_seconds": 160,
|
||||
"captions": [
|
||||
"01 / ONE CONNECTED GARDEN HOMESTEAD",
|
||||
"02 / LIVING PAVILION & VERANDA",
|
||||
"03 / KITCHEN & EXPOSED STRUCTURE",
|
||||
"04 / DINING & OPEN LIVING",
|
||||
"05 / ONE SERVER - LOCAL AI",
|
||||
"06 / SHORT CORRIDOR TO PRIVATE ROOMS",
|
||||
"07 / ADJACENT BEDROOM WING",
|
||||
"08 / ENCLOSED BEDROOM",
|
||||
"09 / BATHROOM - SEPARATE LOBBY DOOR",
|
||||
"10 / FINNISH SAUNA & OUTDOOR SHOWER",
|
||||
"11 / SAUNA BENCHES & STONE HEATER",
|
||||
"12 / OUTDOOR SHOWER",
|
||||
"13 / CONTAINER RAINWATER STORAGE",
|
||||
"14 / ROOFTOP SOLAR & STARLINK",
|
||||
"15 / SOLAR ARRAY & ENERGY STORAGE",
|
||||
"16 / FOOD GARDEN & GREENHOUSE",
|
||||
"17 / INSIDE THE GREENHOUSE",
|
||||
"18 / QUIET MEDITATION ROOM",
|
||||
"19 / CUSHION, CANDLES & STILLNESS",
|
||||
"20 / GRAVEL ROAD & GARAGE",
|
||||
"21 / TESLA, SOLAR CHARGING & WORKSHOP",
|
||||
"22 / BALANCED FUTURE PAVILIONS",
|
||||
"23 / RECTANGLES AND GARDEN CURVES",
|
||||
"24 / BOOKS & A QUIET READING CORNER",
|
||||
"25 / TRAINING & STRENGTH",
|
||||
"26 / OUTDOOR TABLE & MATCHA",
|
||||
"27 / FLOWERING GARDEN - ROOM TO BREATHE",
|
||||
"28 / FLOWING WALKS AND GARDEN COURT",
|
||||
"29 / EASY EVERYDAY FOOD",
|
||||
"30 / COPPER & MARBLE KITCHEN",
|
||||
"31 / QUIET GARDEN BUDDHA",
|
||||
"32 / WIND POWER - PROPERTY CONCEPT"
|
||||
],
|
||||
"preserved_features": [
|
||||
"ISLAND - honed marble countertop",
|
||||
"FAST | Garden Buddha statue",
|
||||
"CONTAINER WATER - steel base frame",
|
||||
"Living woven jute rug",
|
||||
"Fuller garden borders - curved lanceolate leaves"
|
||||
],
|
||||
"future_outline_objects": 26,
|
||||
"material_references_valid": true,
|
||||
"dimensions_status": "Illustrative placeholders, not engineered"
|
||||
}
|
||||
188
blender/tour-chapters-buddha-garden.json
Normal file
@@ -0,0 +1,188 @@
|
||||
[
|
||||
{
|
||||
"title": "01 / ONE CONNECTED GARDEN HOMESTEAD",
|
||||
"start": 1,
|
||||
"end": 120,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "02 / LIVING PAVILION & VERANDA",
|
||||
"start": 121,
|
||||
"end": 240,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "03 / KITCHEN & EXPOSED STRUCTURE",
|
||||
"start": 241,
|
||||
"end": 360,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "04 / DINING & OPEN LIVING",
|
||||
"start": 361,
|
||||
"end": 480,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "05 / ONE SERVER - LOCAL AI",
|
||||
"start": 481,
|
||||
"end": 600,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "06 / SHORT CORRIDOR TO PRIVATE ROOMS",
|
||||
"start": 601,
|
||||
"end": 720,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "07 / ADJACENT BEDROOM WING",
|
||||
"start": 721,
|
||||
"end": 840,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "08 / ENCLOSED BEDROOM",
|
||||
"start": 841,
|
||||
"end": 960,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "09 / BATHROOM - SEPARATE LOBBY DOOR",
|
||||
"start": 961,
|
||||
"end": 1080,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "10 / FINNISH SAUNA & OUTDOOR SHOWER",
|
||||
"start": 1081,
|
||||
"end": 1200,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "11 / SAUNA BENCHES & STONE HEATER",
|
||||
"start": 1201,
|
||||
"end": 1320,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "12 / OUTDOOR SHOWER",
|
||||
"start": 1321,
|
||||
"end": 1440,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "13 / CONTAINER RAINWATER STORAGE",
|
||||
"start": 1441,
|
||||
"end": 1560,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "14 / ROOFTOP SOLAR & STARLINK",
|
||||
"start": 1561,
|
||||
"end": 1680,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "15 / SOLAR ARRAY & ENERGY STORAGE",
|
||||
"start": 1681,
|
||||
"end": 1800,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "16 / FOOD GARDEN & GREENHOUSE",
|
||||
"start": 1801,
|
||||
"end": 1920,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "17 / INSIDE THE GREENHOUSE",
|
||||
"start": 1921,
|
||||
"end": 2040,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "18 / QUIET MEDITATION ROOM",
|
||||
"start": 2041,
|
||||
"end": 2160,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "19 / CUSHION, CANDLES & STILLNESS",
|
||||
"start": 2161,
|
||||
"end": 2280,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "20 / GRAVEL ROAD & GARAGE",
|
||||
"start": 2281,
|
||||
"end": 2400,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "21 / TESLA, SOLAR CHARGING & WORKSHOP",
|
||||
"start": 2401,
|
||||
"end": 2520,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "22 / BALANCED FUTURE PAVILIONS",
|
||||
"start": 2521,
|
||||
"end": 2640,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "23 / RECTANGLES AND GARDEN CURVES",
|
||||
"start": 2641,
|
||||
"end": 2760,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "24 / BOOKS & A QUIET READING CORNER",
|
||||
"start": 2761,
|
||||
"end": 2880,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "25 / TRAINING & STRENGTH",
|
||||
"start": 2881,
|
||||
"end": 3000,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "26 / OUTDOOR TABLE & MATCHA",
|
||||
"start": 3001,
|
||||
"end": 3120,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "27 / FLOWERING GARDEN - ROOM TO BREATHE",
|
||||
"start": 3121,
|
||||
"end": 3240,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "28 / FLOWING WALKS AND GARDEN COURT",
|
||||
"start": 3241,
|
||||
"end": 3360,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "29 / EASY EVERYDAY FOOD",
|
||||
"start": 3361,
|
||||
"end": 3480,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "30 / COPPER & MARBLE KITCHEN",
|
||||
"start": 3481,
|
||||
"end": 3600,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "31 / QUIET GARDEN BUDDHA",
|
||||
"start": 3601,
|
||||
"end": 3720,
|
||||
"seconds": 5
|
||||
}
|
||||
]
|
||||
194
blender/tour-chapters-wind-v009.json
Normal file
@@ -0,0 +1,194 @@
|
||||
[
|
||||
{
|
||||
"title": "01 / ONE CONNECTED GARDEN HOMESTEAD",
|
||||
"start": 1,
|
||||
"end": 120,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "02 / LIVING PAVILION & VERANDA",
|
||||
"start": 121,
|
||||
"end": 240,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "03 / KITCHEN & EXPOSED STRUCTURE",
|
||||
"start": 241,
|
||||
"end": 360,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "04 / DINING & OPEN LIVING",
|
||||
"start": 361,
|
||||
"end": 480,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "05 / ONE SERVER - LOCAL AI",
|
||||
"start": 481,
|
||||
"end": 600,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "06 / SHORT CORRIDOR TO PRIVATE ROOMS",
|
||||
"start": 601,
|
||||
"end": 720,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "07 / ADJACENT BEDROOM WING",
|
||||
"start": 721,
|
||||
"end": 840,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "08 / ENCLOSED BEDROOM",
|
||||
"start": 841,
|
||||
"end": 960,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "09 / BATHROOM - SEPARATE LOBBY DOOR",
|
||||
"start": 961,
|
||||
"end": 1080,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "10 / FINNISH SAUNA & OUTDOOR SHOWER",
|
||||
"start": 1081,
|
||||
"end": 1200,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "11 / SAUNA BENCHES & STONE HEATER",
|
||||
"start": 1201,
|
||||
"end": 1320,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "12 / OUTDOOR SHOWER",
|
||||
"start": 1321,
|
||||
"end": 1440,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "13 / CONTAINER RAINWATER STORAGE",
|
||||
"start": 1441,
|
||||
"end": 1560,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "14 / ROOFTOP SOLAR & STARLINK",
|
||||
"start": 1561,
|
||||
"end": 1680,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "15 / SOLAR ARRAY & ENERGY STORAGE",
|
||||
"start": 1681,
|
||||
"end": 1800,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "16 / FOOD GARDEN & GREENHOUSE",
|
||||
"start": 1801,
|
||||
"end": 1920,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "17 / INSIDE THE GREENHOUSE",
|
||||
"start": 1921,
|
||||
"end": 2040,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "18 / QUIET MEDITATION ROOM",
|
||||
"start": 2041,
|
||||
"end": 2160,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "19 / CUSHION, CANDLES & STILLNESS",
|
||||
"start": 2161,
|
||||
"end": 2280,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "20 / GRAVEL ROAD & GARAGE",
|
||||
"start": 2281,
|
||||
"end": 2400,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "21 / TESLA, SOLAR CHARGING & WORKSHOP",
|
||||
"start": 2401,
|
||||
"end": 2520,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "22 / BALANCED FUTURE PAVILIONS",
|
||||
"start": 2521,
|
||||
"end": 2640,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "23 / RECTANGLES AND GARDEN CURVES",
|
||||
"start": 2641,
|
||||
"end": 2760,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "24 / BOOKS & A QUIET READING CORNER",
|
||||
"start": 2761,
|
||||
"end": 2880,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "25 / TRAINING & STRENGTH",
|
||||
"start": 2881,
|
||||
"end": 3000,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "26 / OUTDOOR TABLE & MATCHA",
|
||||
"start": 3001,
|
||||
"end": 3120,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "27 / FLOWERING GARDEN - ROOM TO BREATHE",
|
||||
"start": 3121,
|
||||
"end": 3240,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "28 / FLOWING WALKS AND GARDEN COURT",
|
||||
"start": 3241,
|
||||
"end": 3360,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "29 / EASY EVERYDAY FOOD",
|
||||
"start": 3361,
|
||||
"end": 3480,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "30 / COPPER & MARBLE KITCHEN",
|
||||
"start": 3481,
|
||||
"end": 3600,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "31 / QUIET GARDEN BUDDHA",
|
||||
"start": 3601,
|
||||
"end": 3720,
|
||||
"seconds": 5
|
||||
},
|
||||
{
|
||||
"title": "32 / WIND POWER - PROPERTY CONCEPT",
|
||||
"start": 3721,
|
||||
"end": 3840,
|
||||
"seconds": 5
|
||||
}
|
||||
]
|
||||
5460
blender/wind-turbine-layout-v009.json
Normal file
5
decisions/2026-09-10-v006-buddha-garden.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Garden Buddha
|
||||
|
||||
Added a seated weathered-limestone Buddha on a low stone plinth north of the meditation pavilion, facing east into the shared garden court. The statue has a draped robe, folded hands, lowered eyes, elongated earlobes and a carved topknot. Position (-12.4, 15.35), clear of both the room and curved walking route. Added a lightweight viewport proxy and chapter 31 to the Play tour (2 min 35 sec total). The scene opens on the statue. Existing house, container water module, future shadows and landscaping remain intact.
|
||||
|
||||
Verified the saved Blender file, all 31 captions, full 2560 × 1440 render settings, path clearance and retained kitchen/container features. Inspected a Cycles preview of the finished sculpture.
|
||||
23
decisions/2026-09-11-bed-wall-integrated.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Wall-integrated bed
|
||||
|
||||
Marcus asked that the bedroom bed be built into the wall rather than stand as
|
||||
free furniture, so that it stays rigid and quiet in use instead of rocking,
|
||||
creeping across the floor or knocking against the lining.
|
||||
|
||||
Requirement for the Blender bedroom and for eventual builder documentation:
|
||||
|
||||
- Bed platform fixed to the bedroom wall framing, not a free-standing frame on legs.
|
||||
- Load carried into the wall structure and the floor, so the bed cannot slide or rack.
|
||||
- Head end hard against the wall, with no separate headboard able to knock the lining.
|
||||
- Detailed for quiet: isolate the mattress platform from the wall sheeting and avoid
|
||||
metal-on-metal fixings that develop a creak.
|
||||
- Keep under-bed and bedside access for the Eight Sleep hub cabling and for cleaning.
|
||||
- Retain the existing sleep setup: Eight Sleep Pod cover, ventilated bedside hub,
|
||||
indoor/outdoor air conditioning, lined blackout curtains, timber and linen finishes.
|
||||
|
||||
Not yet modelled. The bedroom scene still shows a free-standing bed; fold this
|
||||
into the next bedroom revision along with the chapter 08 camera framing.
|
||||
|
||||
Concept-stage note: the wall framing, fixings and load path for a cantilevered or
|
||||
wall-hung platform have not been engineered. A builder or engineer has to confirm
|
||||
the wall can take it before this is treated as buildable.
|
||||
@@ -0,0 +1,9 @@
|
||||
# Presentation and walkable homestead
|
||||
|
||||
Improve the approved concept for communication without redesigning the buildings. New natural-finish detail, 420 softened edges, woven pendants, table settings, textiles and fuller planting. Keep editable full detail plus a lightweight display. Preserve the 31-chapter inspection tour and create a separate eight-shot camera edit.
|
||||
|
||||
Deliver a 30-second silent H.264 concept film, with honest documentation of source frame size, interpolation and output size. Add the complete site to a new UE 5.8.2 project with grouped geometry, portable material maps, bundled ArchVisCharacter, and complex mesh collision. Test actual Play mode after asset/physics initialization. Do not conflate the earlier meditation-only study with the new whole-site prototype, or label the prototype a packaged application.
|
||||
|
||||
Verification: saved Blender feature/caption/material checks; inspected Cycles stills and film contact sheet; MP4 codec/duration/dimensions checked; saved Unreal scene and actual captures inspected; eight floor traces and possessed-character walking passed on a fresh launch.
|
||||
|
||||
Final review repaired the mixer upright hidden by the clay lining and replaced the obstructed bedroom film shot with a clear interior view. The final model and clip contain a visible connected copper riser. The Unreal map includes the matching small cylinder; apply Content/Python/fix_tap_connection.py after rebuilding from the base transfer FBX.
|
||||
17
decisions/2026-09-15-v008-tesla-and-daylight.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# Version 008 — licensed Tesla and daylight walkthrough
|
||||
|
||||
15 September 2026. Marcus selected the existing Tesla Model 3 by 7K Studio, then asked for more sunlight to walk around in daylight.
|
||||
|
||||
The licensed model replaces the handmade Model Y-inspired placeholder in a private Blender revision and the whole-site Unreal prototype. The original artist geometry, interior, wheels and shaders are retained in Blender, with a simplified fast display. All 31 tour chapters match v007. Unreal uses the reduced artist geometry and adapted PBR materials, with slot assignment by imported material name. A simple car collision box blocks walking; eight floor traces and normal entry movement passed.
|
||||
|
||||
Unreal daylight uses a higher neutral sun, brighter sky, reduced native fog and adaptive exposure. Inspection found the old Blender haze volume had imported as an opaque enclosing cube, blocking sunlight and the sky. That non-colliding export was removed; Unreal's native atmosphere/fog now handle the environment. The sun also pointed upward because of positional Rotator argument ordering. An explicit look-at rotation now points the sunlight downward from the northeast, at approximately 52.5 degrees elevation; its forward vector was verified. Actual daylight captures were reviewed.
|
||||
|
||||
## Licensed storage
|
||||
|
||||
Asset: Tesla Model 3 by 7K Studio. https://www.blendkit.com/asset-gallery-detail/1fc56739-2fd9-447e-b2c1-fee5d9e276b7/
|
||||
|
||||
Royalty Free licence: https://www.blendkit.com/docs/licenses/licensing-faq/
|
||||
|
||||
The original model is free to acquire but its raw geometry must not be publicly redistributed. The complete v008 Blender file, FBX and Unreal project are stored at `/home/marcus/projects-private/samford-valley-home-v008`, outside the public repository and web root, with restricted directory access. The public repository retains the last distributable v007 binaries, source scripts, this context and permitted rendered images. Do not copy the licensed car or an embedded .blend/.uasset into public Git.
|
||||
|
||||
The v007 client film remains unchanged. The pending wall-integrated bed requirement remains unmodelled.
|
||||
53
decisions/2026-09-24-v009-wind-turbine.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# Version 009 — a wind turbine for the property
|
||||
|
||||
24 September 2026. Marcus asked to add his own wind turbine to the property,
|
||||
the associated Git project and the public project page.
|
||||
|
||||
## Design
|
||||
|
||||
Added a conventional three-blade horizontal-axis turbine on a freestanding,
|
||||
tapered galvanised mast, with an ivory rotor/nacelle, tail vane, foundation cap
|
||||
and indicative lockable isolation cabinet. The illustrative location is
|
||||
(-36, 40) m, beyond the northwestern edge of the homestead. The hub is 18 m above local
|
||||
concept terrain and the rotor is 6 m in diameter. These are visual study
|
||||
dimensions, not a selected product, rated output or engineered design.
|
||||
|
||||
Retain solar and energy storage. Keep the turbine out of the garden court,
|
||||
future pavilion footprints, food beds and basketball reserve. Its final
|
||||
position, tower height, foundations, access and electrical route must be
|
||||
reconsidered against the actual site. No setback or wind clearance is verified.
|
||||
|
||||
## Deliverables and version boundaries
|
||||
|
||||
- Public model: `blender/samford-solarpunk-wind-tour-v009.blend`, derived only
|
||||
from the distributable v007 model. Prior binaries remain unchanged.
|
||||
- Private model: `/home/marcus/projects-private/samford-valley-home-v009/`
|
||||
contains the turbine added to the licensed v008 Blender scene. Never copy
|
||||
that binary into public Git or the web root.
|
||||
- Matching detailed and lightweight viewport geometry; the original 31 tour
|
||||
chapters remain, with turbine chapter 32 added (2 min 40 sec total).
|
||||
- Updated concept plan, actual Blender overview render, website and context.
|
||||
- The Unreal projects and v007 film retain their previous contents. The turbine
|
||||
has not yet been imported into Unreal or added to the film.
|
||||
|
||||
## Before equipment selection
|
||||
|
||||
Measure the wind resource at a representative proposed hub height and assess
|
||||
terrain, tree/building turbulence and seasonal variation. Then compare a
|
||||
supplier's independently supported power curve and expected annual energy
|
||||
against the household load and solar/storage plan. No output or payback is
|
||||
assumed in this revision.
|
||||
|
||||
Obtain site-specific advice on council planning/building requirements, tower
|
||||
engineering and geotechnical conditions, noise and neighbours, vegetation and
|
||||
wildlife, maintenance access and electrical protection. The electrical designer
|
||||
must establish compatible turbine control, braking/dump-load arrangements where
|
||||
required, battery/inverter integration, isolation and earthing. If grid-connected,
|
||||
confirm the combined generation connection requirements with Energex.
|
||||
|
||||
References checked 24 September 2026:
|
||||
- [Australian Government Your Home — renewable energy](https://www.yourhome.gov.au/energy/renewable-energy)
|
||||
- [Energex — solar connections and other technologies](https://www.energex.com.au/our-services/connections/residential-and-commercial-connections/solar-connections-and-other-technologies)
|
||||
|
||||
The existing lack of survey, property boundary, site wind measurements and
|
||||
engineering remains explicit. The pending wall-integrated bed is unchanged.
|
||||
@@ -2,11 +2,19 @@
|
||||
|
||||
This is Marcus Rehbock's long-term personal homestead design project. The aim is to refine the design over several years, choose a real site, add survey and LiDAR information, coordinate construction plans, and eventually create a full Unreal Engine 5 walkthrough. The design is a working concept, not an approved or engineered building proposal.
|
||||
|
||||
## Current state: version 005, 10 September 2026
|
||||
## Latest revision — v009 wind turbine, 24 September 2026
|
||||
|
||||
Open `blender/samford-solarpunk-container-water-tour.blend` in Blender 5.2.1. This is the current model. It includes the detailed kitchen and bedroom upgrades, a garden-centred arrangement, 13 flowering beds, and a 30-chapter camera tour lasting 2 minutes 30 seconds at 24 fps. The former table-tennis platform and its equipment have been removed. Earlier dated scene files are historical versions.
|
||||
Added a three-blade wind turbine on a freestanding mast beyond the northwestern edge of the homestead. The concept location (-36, 40) m, 18 m hub height and 6 m rotor diameter are illustrative placeholders pending an actual site, wind measurements, equipment selection, engineering and approvals. Solar and storage remain part of the brief.
|
||||
|
||||
The latest plan is `plans/concept/container-water-plan.svg`. It is generated from the same `container-water-layout.json` coordinates used by the Blender revision. Latest images are `renders/container-water-overview.png`, `container-water.png` and `container-water-cutaway.png`. The preceding garden revision also has courtyard, planting, dining and training detail renders.
|
||||
Current public Blender file: `blender/samford-solarpunk-wind-tour-v009.blend`, derived from distributable v007. The private v009 Blender file preserves the licensed v008 Tesla at `/home/marcus/projects-private/samford-valley-home-v009/`. Keep private binaries out of public Git. Both models add matching detailed/fast turbine geometry and chapter 32; the tour now lasts 2 min 40 sec and opens at the turbine chapter. Shift + Left Arrow restarts the complete tour.
|
||||
|
||||
Current plan: `plans/concept/wind-turbine-plan-v009.svg`. Current overview: `renders/v009-wind-overview.png`. See [v009 decision](../decisions/2026-09-24-v009-wind-turbine.md) for assumptions and feasibility work. The Unreal walkthroughs and v007 film are unchanged and do not yet include the turbine. All previous house and landscape features remain, including the future pavilion outlines and garden Buddha.
|
||||
|
||||
## Historical state: version 007, 12 September 2026
|
||||
|
||||
Open `blender/samford-solarpunk-presentation-tour.blend` in Blender 5.2.1. This is the preserved v007 model. It includes the detailed kitchen and bedroom upgrades, a garden-centred arrangement, 13 flowering beds, and a 31-chapter camera tour lasting 2 minutes 35 seconds at 24 fps. The former table-tennis platform and its equipment have been removed. Earlier dated scene files are historical versions.
|
||||
|
||||
The latest plan is `plans/concept/buddha-garden-plan.svg`. It is generated from the same `buddha-garden-layout.json` coordinates used by the Blender revision. The Buddha close-up is `renders/buddha-garden.png`. Other current images are `renders/container-water-overview.png`, `container-water.png` and `container-water-cutaway.png`. The preceding garden revision also has courtyard, planting, dining and training detail renders.
|
||||
|
||||
## Philosophy and values
|
||||
|
||||
@@ -64,9 +72,9 @@ Keep rooftop solar, a separate ground array (current conceptual footprint centre
|
||||
|
||||
Blender has full editable geometry and Cycles materials. Saved render settings are 2560 × 1440 at 100%; web preview renders are made at 60% (1536 × 864). The user previously reported low playback FPS. `00 FAST TOUR - lightweight viewport` is a static simplified display; `DETAIL - full geometry for renders` is disabled only in the viewport. Cycles renders exclude FAST and use DETAIL automatically. For detailed editing, enable DETAIL and disable FAST. After moving or removing geometry, refresh the affected fast copies as well.
|
||||
|
||||
The tour contains 30 five-second chapters. Space plays/pauses with the pointer over the 3D view; Shift+Left Arrow returns to frame 1. The current scene opens at chapter 13, container rainwater storage. Update camera positions and captions whenever a subject moves.
|
||||
The tour contains 31 five-second chapters. Space plays/pauses with the pointer over the 3D view; Shift+Left Arrow returns to frame 1. The current scene opens at the site overview; the Buddha remains chapter 31. Update camera positions and captions whenever a subject moves.
|
||||
|
||||
The **actual Unreal work covers only the meditation room**. `unreal/SamfordMeditation/SamfordMeditation.uproject` is the UE 5.8.2 project, with room geometry, materials, light and camera. It is not a complete Unreal homestead. FBX/GLB exports and textures are retained. Camera animation instructions are in `walkthroughs/UNREAL-CAMERA-ANIMATION.md`. A complete interactive home/site walkthrough remains future work.
|
||||
The actual Unreal work now includes the **whole-site walkable prototype**, `unreal/SamfordHomestead/SamfordHomestead.uproject`, in UE 5.8.2: 229 imported mesh groups, 117 materials, 179 collision-enabled mesh groups, bundled architectural walking pawn, lighting and saved cameras. A fresh-launch play test passed eight floor traces and moved the possessed walking pawn about 3.45 metres from the verandah into the living entry. The earlier meditation study remains historical. This is editor Play mode, not a packaged standalone app. `walkthroughs/CLIENT-PRESENTATION-V007.md` records controls and limitations.
|
||||
|
||||
## Storage and continuation
|
||||
|
||||
@@ -79,3 +87,19 @@ Read `REQUEST-HISTORY.md`, the decisions folder and `AGENTS.md` before making fu
|
||||
## Version 005 water module
|
||||
|
||||
Marcus requested that the water tanks become a shipping container. The visible module is a roughly 20-foot corrugated-steel container at (-25, -8), 6.06 × 2.44 × 2.59 m. Two separate sealed tanks fit inside; the steel shell is an enclosure, not the water-retaining vessel. The cargo doors are at the east end and the west end is a transparent inspection cutaway. Plumbing is kept off the door faces, and the service path approaches the east end. Current renders: container-water.png, container-water-overview.png and container-water-cutaway.png. Exact tank products/capacities, water quality treatment, hydraulic sizing and container support design are not resolved by the concept model.
|
||||
|
||||
## Garden Buddha — version 006, 10 September 2026
|
||||
|
||||
Added a seated weathered-limestone Buddha on a low stone plinth north of the meditation pavilion, facing east into the shared garden court. The statue has a draped robe, folded hands, lowered eyes, elongated earlobes and a carved topknot. Position (-12.4, 15.35), clear of both the room and curved walking route. Added a lightweight viewport proxy and chapter 31 to the Play tour (2 min 35 sec total). The scene opens on the statue. Existing house, container water module, future shadows and landscaping remain intact.
|
||||
|
||||
## Version 007 presentation work
|
||||
|
||||
Marcus requested more overall Blender fidelity, a start on a walkable UE5 simulation, and a video suitable for showing the house concept to clients. Enhanced materials, softened edges, woven pendants, ceramics, living textiles, leaf geometry and path detail preserve the existing programme and coordinates. Current Blender stills are presentation-overview.png, presentation-kitchen.png and presentation-garden.png. The separate cinematic has eight three-second animated shots. The client MP4 adds opening/closing cards for 30 seconds total. It is 1080p/24 fps delivery from 1440×810 Cycles source frames at 6 fps, interpolated within each shot and upscaled. It has no audio. Describe it as a first concept presentation rather than final photorealistic marketing output.
|
||||
|
||||
## Pending wall-integrated bed requirement
|
||||
|
||||
A 11 September 2026 note requests that the bed be rigidly built into wall framing with a considered load path, quiet isolation and Eight Sleep access. This was recorded without a geometry edit in decisions/2026-09-11-bed-wall-integrated.md. The v007 presentation retains the current free-standing bed; incorporate the wall-integrated platform in the next bedroom design revision, with its fixings and load path still subject to engineering.
|
||||
|
||||
## Version 008 — Tesla and daylight
|
||||
|
||||
Selected the existing 7K Studio Tesla Model 3 and added clear daytime lighting to Unreal. Full licensed revision is stored privately at `/home/marcus/projects-private/samford-valley-home-v008`; public v007 binaries remain available. See `decisions/2026-09-15-v008-tesla-and-daylight.md`. The v007 movie is unchanged.
|
||||
|
||||
@@ -44,3 +44,26 @@ Marcus explicitly authorised making the repository public: “You can make it pu
|
||||
## Version 005 request
|
||||
|
||||
Marcus asked: “Can you make my water tanks a shipping container?” Implemented as a container-style enclosure with two separate sealed tanks inside, with updated plumbing, service access, plan, camera chapter and rendered views.
|
||||
|
||||
## Version 006 request
|
||||
|
||||
Marcus asked: “Ok nice, can you also put a statue of hte buddha somewhere and open in blender”. Added a seated weathered-limestone Buddha on a low stone plinth north of the meditation pavilion, facing east into the shared garden court. The statue has a draped robe, folded hands, lowered eyes, elongated earlobes and a carved topknot. Position (-12.4, 15.35), clear of both the room and curved walking route. Added a lightweight viewport proxy and chapter 31 to the Play tour (2 min 35 sec total). The scene opens on the statue. Existing house, container water module, future shadows and landscaping remain intact.
|
||||
|
||||
## Version 007 request — 12 September 2026
|
||||
|
||||
Marcus asked for more overall fidelity, a start on a walkable Unreal Engine 5 simulation, and a video to show prospective house-building clients. Implemented a new detailed Blender revision, short animated concept film, and an actual whole-site Unreal first-person prototype; all prior design constraints remain.
|
||||
|
||||
## Bedroom bed note
|
||||
|
||||
Marcus asked for a note on the Blender bedroom: the bed should be built into the
|
||||
wall rather than stand as free furniture, so it stays rigid and quiet in use.
|
||||
Recorded as a requirement in `decisions/2026-09-11-bed-wall-integrated.md`. Not
|
||||
yet modelled — the scene still shows a free-standing bed.
|
||||
|
||||
## Version 008 — Tesla and daylight
|
||||
|
||||
Selected the existing 7K Studio Tesla Model 3 and added clear daytime lighting to Unreal. Full licensed revision is stored privately at `/home/marcus/projects-private/samford-valley-home-v008`; public v007 binaries remain available. See `decisions/2026-09-15-v008-tesla-and-daylight.md`. The v007 movie is unchanged.
|
||||
|
||||
## Version 009 — wind turbine, 24 September 2026
|
||||
|
||||
Marcus asked: “I want to have my own wind turbine on the property, can you add it to the associated git.rehbock.xyz project and update accordingly”. Added a conventional three-blade turbine concept to public and private Blender revisions, a 32nd tour chapter, updated concept plan, actual overview render and the website. The style and dimensions are working assumptions; no product, energy output or site compliance is established. Unreal and the concept film remain unchanged. See the v009 decision.
|
||||
|
||||
1
plans/concept/buddha-garden-plan.svg
Normal file
|
After Width: | Height: | Size: 28 KiB |
1
plans/concept/wind-turbine-plan-v009.svg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
renders/buddha-garden.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
renders/presentation-garden.png
Normal file
|
After Width: | Height: | Size: 3.3 MiB |
BIN
renders/presentation-kitchen.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
renders/presentation-overview.png
Normal file
|
After Width: | Height: | Size: 3.5 MiB |
BIN
renders/unreal-overview.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
renders/unreal-verandah.png
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
BIN
renders/v008-daylight-overview.png
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
renders/v008-daylight-tesla.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
renders/v008-daylight-verandah.png
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
BIN
renders/v008-tesla-garage.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
renders/v009-wind-overview.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
@@ -1,11 +1,15 @@
|
||||
{
|
||||
"milestone": "2026-09-10-v005-container-water",
|
||||
"milestone": "2026-09-24-v009-wind-turbine",
|
||||
"files": {
|
||||
".gitattributes": "d4f9cc15aed223cff7a906452370117fc93992272828cb1efbdd94c61422ad19",
|
||||
".gitignore": "d38c3a1d58416906185c4c7695ea24f9401be3b610fcce0e624f41dff9fe1675",
|
||||
"AGENTS.md": "b4c5ed43cf84a524961fa81babcd3f83a33506edf0b3cb1f9abd56afc9dcf933",
|
||||
"README.md": "7ae06d8f50612a0a50249be16be4f636846763ffc9b8aa15ed703aa3248153bf",
|
||||
"AGENTS.md": "f20c3f60e3d8d27b5d4d89a99ebff9e8a23499530f836263ece51d9f806a009f",
|
||||
"README.md": "2d6e86ac8a38799f984bc95e055df7bd1fcc0d58c7078dbf276b2eb9b08c8801",
|
||||
"blender/bedroom-sleep-checks.json": "4f28426b4c23e55c956a4c5bc94947706da63e35de455cfaedd8e90e330f1114",
|
||||
"blender/blender-enhancement-checks.json": "f66943121057ec2e3c2fd0b2bb5d9245721e063b56cfef060598081fce3554e0",
|
||||
"blender/blender-verification.json": "772764db02a6cec6225d01bf8e38c7680087e53f35614ed48212ea57cbec51dc",
|
||||
"blender/buddha-garden-layout.json": "c24aabd04146d6e30c6d855ca43dc668881e65df2e2aab4af5b15668337bfe50",
|
||||
"blender/buddha-garden-verification.json": "f030aa32bf883cd85d2c820846d78ad84e3ff0a6f8623878a6e0bda641712fcd",
|
||||
"blender/container-water-checks.json": "59f1a2c3cdf921de280cb8931e26511c6502fb3618b9bad10021619863c0ae37",
|
||||
"blender/container-water-layout.json": "d13666a791378cf826b56d69f2dc48cbbdf33ac0db339b944f69c45b8dcb7c50",
|
||||
"blender/container-water-verification.json": "04aa76751f9310ffb2bfda90742e5907bcb09d2159003d837fbbaf7b439344e9",
|
||||
@@ -16,34 +20,50 @@
|
||||
"blender/garden-flow-layout.json": "096b0674740c3ec2b739549f03213fd455b2158a9adf021b57990db372befa0c",
|
||||
"blender/garden-flow-verification.json": "7f35c643afbc61152eb211a6c34a29b4edb98aefa261426ed0d5e99e9f296c70",
|
||||
"blender/reading-corner-checks.json": "e6cf3b9b895888b4c20c95a9612070064067100d881da7e26b4d5f69bf4db50a",
|
||||
"blender/samford-client-cinematic.blend": "5243d8e0266b80205f83592a17e39083c85657873861a0f202ecb958ae8bb17e",
|
||||
"blender/samford-solarpunk-bedroom-tour.blend": "5c967f65d9e3f680bcf9e1da3f2d3d82bd4ab313fe030c0b0a284c2aca5d58b7",
|
||||
"blender/samford-solarpunk-buddha-garden-tour.blend": "ac72bd7588c1802cd5029b93eab456c80887de3d4020ffd628b9074e6bb456a3",
|
||||
"blender/samford-solarpunk-container-water-tour.blend": "bbf12b85e7d5373bbebfba7eeb30f5fc2a5fc06a339f314676c74d2ceea1dd33",
|
||||
"blender/samford-solarpunk-daily-life-tour.blend": "445db0cc7b4647dd45ae899632e3de5a2aaf1bfabdc2aa8ffc77d11c6a70ad74",
|
||||
"blender/samford-solarpunk-garden-flow-tour.blend": "b2bf1e7556f75b3ad3d96dbf340feac0fecfaf0865fcbeb838b1c417bb62ae2b",
|
||||
"blender/samford-solarpunk-presentation-tour.blend": "9feab166af90eea6492de2999e38b3f1536008fa1b4f62eb9f7b1918cce8367a",
|
||||
"blender/samford-solarpunk-reading-tour.blend": "f47296df39f3eaa381ec1b60615dec77f1ff5e2b5f3c645deea2e5b3af4e6d83",
|
||||
"blender/samford-solarpunk-wind-tour-v009.blend": "a02c3898da7f2e385a0a57b5610c0b1035997116f747919a46cebfed8cd12c8a",
|
||||
"blender/samford-solarpunk-wind-tour-v009.verification.json": "48f5a3909abecb42fcde45efc5800b94f749d00902af2e973d87c10db298f3af",
|
||||
"blender/scripts/add_daily_life.py": "701f246fe963124b04ef86512ff1465dd51bec335ca0059d6b966b653563be47",
|
||||
"blender/scripts/create_site_plan.py": "7e7c566e960e37b5a8225157750ba11c06afe72d86fdceea7d73b2e6e0b03a24",
|
||||
"blender/scripts/enhance_kitchen.py": "2ac50b24427210f00f6bd4ba492ddaffef22ee3835c20f3ec72d41b97081f1f3",
|
||||
"blender/scripts/verify_daily_life.py": "7241568d786cd9d78fad97af24b14fd487cad1357bfac19fc1c800cbafeef8fb",
|
||||
"blender/tour-chapters-buddha-garden.json": "f695157b58947bc494bddc4689365f784c8d825e8e263ed89dbfd7877c06d3aa",
|
||||
"blender/tour-chapters-container-water.json": "acd9bfcb805fa6bc22a8521e5c0d3fe06bd32b1f947dbff0cd43b521568fcef5",
|
||||
"blender/tour-chapters-daily-life.json": "d6eb5ff0406a5e3b54fd088ef3e050f876a0b922c2b94350770900bca3d6a587",
|
||||
"blender/tour-chapters-garden-flow.json": "7a6807925630812188acad57afab5c46671b0d0c4fe6c8b90763f5f80353cea6",
|
||||
"blender/tour-chapters-reading.json": "53d17d81ab55528240e6453c19fc7e45721c1ecfcf610e90e21644da509d42ab",
|
||||
"blender/tour-chapters-wind-v009.json": "378b08b048d8c480772c76bc7a141cbede17c531b919658130b033edacd2d735",
|
||||
"blender/wind-turbine-layout-v009.json": "3e9d06c55ff24bdce810b33d1942fde9f082cf8bd24b46f24126abc3000e4dab",
|
||||
"decisions/2026-09-10-repository-public.md": "3ded28ebf5fde19aeed74caac9308260602551651fdaebf58494fe625d0d27ad",
|
||||
"decisions/2026-09-10-v001.md": "8c30365df61ef50a9bc06391e01eccc6e72c7bddd3d368defc34b720fcd90431",
|
||||
"decisions/2026-09-10-v002-bedroom.md": "36d0a4a398b3fa8ca354e0f560c4cec4c96e788fa8789de41c11dad32d65c90e",
|
||||
"decisions/2026-09-10-v003-daily-life-kitchen.md": "396ad405df9e7c10d1c71753ecc76cc9889c661e352533d601c666213f065c98",
|
||||
"decisions/2026-09-10-v004-garden-flow.md": "55ed1e2e222941a9ab9dde5d0d18f6f979528d15e0e3fe988a340744f459b9bc",
|
||||
"decisions/2026-09-10-v005-container-water.md": "5fc937e7231a6b3d1856a0f7db2a998c81e4b51afb31fa4222a8d3e931de53fc",
|
||||
"docs/PROJECT-CONTEXT.md": "c283ab1c20e78cec8cfdd27998505fd1db5b4c9e5c859cc07dad6a7a8a963324",
|
||||
"docs/REQUEST-HISTORY.md": "1c2797c29a437091a359e199343c7f9bbeb7c039b00736097769aedc93dccb58",
|
||||
"decisions/2026-09-10-v006-buddha-garden.md": "aa14fcca78e225563b19ed4a98e335b2f465ed27e12904665c3c654de77b950c",
|
||||
"decisions/2026-09-11-bed-wall-integrated.md": "31eb04842a0a5904d477d7d28f07792f8b0b1737ac5bb3cbdcc2acb2d7f02a22",
|
||||
"decisions/2026-09-12-v007-presentation-and-walkthrough.md": "6b3aa18b3660730313f5e0f6a9218c0c868b9734c800456d65c62996cbf7a0b0",
|
||||
"decisions/2026-09-15-v008-tesla-and-daylight.md": "aa5ba8211c49dbe30f5bd205843dec0de6144833907b8739cfa4cea4da0e6a1e",
|
||||
"decisions/2026-09-24-v009-wind-turbine.md": "26118e95b1fe9f716bb3a7ed6e7df8c31eff2fcb038500f2b4e6c81e1ec5e228",
|
||||
"docs/PROJECT-CONTEXT.md": "f44ba333fcf5a6955cd35f281c21677e7c732ea67956e52ea643d2e2349bca95",
|
||||
"docs/REQUEST-HISTORY.md": "555ec31c40f80a04ee0d24db0fcc766768d66e91a7f692a6b70f9eab2c1d28a7",
|
||||
"plans/architectural/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"plans/concept/buddha-garden-plan.svg": "62f622647732bf9556e7d351c06c9dc8576f68e8e0044f91232401972e43e466",
|
||||
"plans/concept/container-water-plan.svg": "5cf52ea84ae8e222f64881b46807ca869728845c9e1a5b5c80ecfdbfbc3d5fe3",
|
||||
"plans/concept/garden-flow-plan.svg": "95c7309d44143ebb3f11a7e0f6b4cee8b076c17a423ab14c8288f450b54ae4db",
|
||||
"plans/concept/retreat-garage-plan.svg": "225985399ed62625b0280ef9e6a802e276e3c6aad6c35e47c744628868c8022e",
|
||||
"plans/concept/wind-turbine-plan-v009.svg": "d4e7cf9aad22559f61f123f37775315934a06f3769198099062a756f4c379107",
|
||||
"plans/engineering/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"references/UNREAL-PROJECT-SCOPE.md": "9727e4447a772756fae2456465f4677d63772858d3433e68c901adbd3a2a5632",
|
||||
"renders/bedroom-sleep-setup.png": "5e12a5303615695093b61ef70111ee3d75c41ebe119c9efe0645f70725fbb707",
|
||||
"renders/buddha-garden.png": "8b6f6658e17aac9f681191be2d02a1acb9387b0f94695489250d8ebf05acdb63",
|
||||
"renders/container-water-cutaway.png": "720e0d03c6839e54b181edfe63515d0e11179d9f2767ea3ac41f3b1ebaafa447",
|
||||
"renders/container-water-overview.png": "5c03c9e7d447a4847b227be4e76ce5fc03328b6635b840e5927f3404805d9323",
|
||||
"renders/container-water.png": "279e52861b2557e79eeaed6dbbe5f96e4d81aaa273494bd4b6a6f6903a405c8f",
|
||||
@@ -56,13 +76,26 @@
|
||||
"renders/kitchen-copper-marble.png": "7264c703bc66d3ab574224e03854399972301cd70ab1cd161d92eba1140a5563",
|
||||
"renders/meditation-room-unreal.png": "8fd03a477c8aba27fad0d36c8eb6fb58cc0c1926919d618985dc4b8f553f3412",
|
||||
"renders/outdoor-gathering.png": "94f1d80b20e4a6f9026493f7244b83c8f28a9b39f5c5c2043ddb94a3216324bf",
|
||||
"renders/presentation-garden.png": "45beebc0c730f3065bb66e2a63b43443490e646142cc62e0e959d871e09c661f",
|
||||
"renders/presentation-kitchen.png": "c6a56c920d3b639e3a448dd51471872dffeced998e4baee06ea10afa4d4a0cfe",
|
||||
"renders/presentation-overview.png": "0fc281acdb3bff428ffec574942dbc2c66f6cd82cecb347d4d217f84e3c5d8e8",
|
||||
"renders/reading-corner.png": "eebb89ce1081bbe458d95c22888346ee6e8175e2fb7df88a0694f0b90601564d",
|
||||
"renders/retreat-garage-overview.png": "83beac9982533420f31af41048f6e08c7ff4602d0ea4086b6d77649de934a171",
|
||||
"renders/tesla-solarpunk-garage.png": "5c779a173a748edd5b10ce18fa5e90ea60226614dd4b06110c38868b68616deb",
|
||||
"renders/training-area.png": "4534ad28d7ccda82bc93f44f5c0b8b358a3f9e549fe4ba141ca94931812678f8",
|
||||
"renders/unreal-overview.png": "c01aa10e711c55773b0e087191f6b8857f575f51843e3ebffdf9c7eddd857aca",
|
||||
"renders/unreal-verandah.png": "d04cd18d2a564e7fd0bc7a9539ffaa590a9e836e6322ba03951eaf0c01e70276",
|
||||
"renders/v008-daylight-overview.png": "f19f22b21b1227dce3d19b0385b00af757ebc3ca30196dc8f044188f27d39143",
|
||||
"renders/v008-daylight-tesla.png": "1113d76c2f7edbb98b582f5ee07afad876a40a5810134ec99231233038d46e4c",
|
||||
"renders/v008-daylight-verandah.png": "8909c2603b0f98c62fc0c4f5d4632172eebdf939819b806f095b557ef870244e",
|
||||
"renders/v008-tesla-garage.png": "1e706ab3873ba0369d507f89f690e9185b10622cba95a6022b9a989d6b0b0eba",
|
||||
"renders/v009-wind-overview.png": "1aa727e37a263eed860718c758624af416f0a094aac7ca6368e4a555851b60e8",
|
||||
"site/lidar/processed/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"site/lidar/raw/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"site/metadata/llms.txt": "5810cb29ffa7f9b1521babb3cedf1a7b8a95cd5af5f66e3072ef466489cdc9ed",
|
||||
"site/metadata/sitemap.xml": "6af5dec5ef6d887c751becc9549970e7251fce6e164037f3d80da02ecda63c27",
|
||||
"site/photos/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"site/samford-valley-home/index.html": "7cbd30f42a4e23a5d9d5bdb939c1beec20c5dd9d8dfe697e607b8099e9d3bade",
|
||||
"site/surveys/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"source/samford-modular/README.md": "e4dd2ed10b0e4f33ddfae86e753cc572d7872bce67ba9aecf66557befc05324d",
|
||||
"source/samford-modular/build_scene.py": "0bce8490a7f078880c0902b464e9f0202e30f2b44673a7b5378d248850264aa9",
|
||||
@@ -76,6 +109,7 @@
|
||||
"source/samford-retreat-garage/README.md": "ea463e21ea71158e75a17eea6ee0c4e666663ef18dd58ae74d64c2b09f201a0f",
|
||||
"source/samford-retreat-garage/UNREAL-PROJECT-SCOPE.md": "9727e4447a772756fae2456465f4677d63772858d3433e68c901adbd3a2a5632",
|
||||
"source/samford-retreat-garage/add_daily_life.py": "701f246fe963124b04ef86512ff1465dd51bec335ca0059d6b966b653563be47",
|
||||
"source/samford-retreat-garage/add_garden_buddha.py": "6606a677bf529565fd3fa206bcd48657bb4a25982d2f5a6b63f0c4935f1a99ff",
|
||||
"source/samford-retreat-garage/add_reading_corner.py": "95a5223670ae53343f6fe7e435c0955dcb0c7d05dea3804b2b3cca356c02feb9",
|
||||
"source/samford-retreat-garage/bedroom-sleep-checks.json": "4f28426b4c23e55c956a4c5bc94947706da63e35de455cfaedd8e90e330f1114",
|
||||
"source/samford-retreat-garage/bedroom_sleep_setup.py": "584ea23c5fc9e7b1651025776d25c9ba18fe4b8482a539f9e84cde397cdc2e08",
|
||||
@@ -103,6 +137,7 @@
|
||||
"source/samford-retreat-garage/tour-chapters-garden-flow.json": "7a6807925630812188acad57afab5c46671b0d0c4fe6c8b90763f5f80353cea6",
|
||||
"source/samford-retreat-garage/tour-chapters-reading.json": "53d17d81ab55528240e6453c19fc7e45721c1ecfcf610e90e21644da509d42ab",
|
||||
"source/samford-retreat-garage/tour-chapters.json": "7ba0647e7c9102e1f9cf87ed35979b1a110f335ab0439bfbac9280d1d826de49",
|
||||
"source/samford-retreat-garage/verify_buddha_garden.py": "6869e5e386b160cd6b48ebce230715957581c755d057b59be1a66b8edeab7f51",
|
||||
"source/samford-retreat-garage/verify_container_water.py": "74ac1a851660bde1c098b10dfbed1f92a1d5251c6b1a3303d7d506f6f344fa8a",
|
||||
"source/samford-retreat-garage/verify_daily_life.py": "7241568d786cd9d78fad97af24b14fd487cad1357bfac19fc1c800cbafeef8fb",
|
||||
"source/samford-retreat-garage/verify_garden_flow.py": "b48c25116eb7f3cd56914a4f53601427207c387dd59d48fbd3b8cb692a9e46c0",
|
||||
@@ -116,8 +151,452 @@
|
||||
"source/samford-spacious-tour/save_ready_to_play.py": "b25bddc10469a2a050f7bfacab4be2d088892386062f4e58ab11cac8806a9887",
|
||||
"source/samford-spacious-tour/tour-chapters.json": "e5472d288a42e1c32618ffa40e27eeb418675f23ea7391e02164f2022bf5e213",
|
||||
"source/samford-spacious-tour/tour-checks.json": "84d18a75b9e5ad2ded578deda0be163f37a32e058dfec62377599f3408ae3287",
|
||||
"source/samford-v007-client-walkthrough/DESIGN-AND-PLAN.md": "cdf5be426a027cd416acc218ae04b1adfbeca372f0473e54a3f7e434e7dfc317",
|
||||
"source/samford-v007-client-walkthrough/README.md": "4849985252dfcc4d6ced1b4e073e1ac54ad96c81114de768a51332f027c56fd5",
|
||||
"source/samford-v007-client-walkthrough/source/audit_scene.py": "809723a45816b851944410dc7b89213773f6511290ff44aea930d8357436ad21",
|
||||
"source/samford-v007-client-walkthrough/source/encode_film.py": "a3304cfd13334980698a56600fe46cae8c0de5c2e41fca85d82fcdf1cdbe2f02",
|
||||
"source/samford-v007-client-walkthrough/source/enhance_scene.py": "8a4cc6eb6b15d7fc8e7d5dd6f2b4ded0ec1d4df5356329cc6ff0853b969e7928",
|
||||
"source/samford-v007-client-walkthrough/source/export_homestead.py": "958acf4af505ca4279fb375b2b010040e58988bb000f0fdcb241342ba20043b0",
|
||||
"source/samford-v007-client-walkthrough/source/fix_tap_presentation.py": "173c45952a862b499027f15afd9938bb2150b462e1796b158be7da33f882a8f6",
|
||||
"source/samford-v007-client-walkthrough/source/prepare_cinematic.py": "bf53ef5ff6560ac09abd4de99aca2ec4c03994dce6cc6ebfaf8de9ba6b6b3927",
|
||||
"source/samford-v007-client-walkthrough/source/refine_film_bedroom.py": "ea6bae1e216a12f0bb7c201fb5bfdc6b39b4eda6045beb2f305c9538d8a18084",
|
||||
"source/samford-v007-client-walkthrough/source/render_film.py": "77ce49f28c2a47968e00b8c86bae5704d2c683361c2a3689e1cc9da1b8e75f0f",
|
||||
"source/samford-v007-client-walkthrough/source/verify_blender.py": "7ac14703e84eb6c885d930b9971bd96058de3fe83e4b7c3428cb466bc9231ff6",
|
||||
"source/samford-v008-tesla/asset-source.json": "1582cdeb9c32b57545020a76def5046257f1ab7c6e4b8cc1ecff72353cadb79c",
|
||||
"source/samford-v008-tesla/blender-final-verification.json": "2c6c73634c367d29181085dd81ca355accf680da9a3e4de71a4e41675ee28686",
|
||||
"source/samford-v008-tesla/export_tesla.py": "42f8f7313263cadad2fdb5d2b8f8cf20a3ad969fcb48399f43b99ed09607a049",
|
||||
"source/samford-v008-tesla/finalize_blender.py": "9d5b1e7bfe0dd9a5576be16be5347545a9bdd7d8185e79c8602dfb9917bffbca",
|
||||
"source/samford-v008-tesla/replace_tesla.py": "d9764fddd296175c47d60a47849874e3e60c6d541b5ae2a78dcd0e7bb7227cca",
|
||||
"source/samford-v008-tesla/unreal-daylight-checks.json": "d28e1a42bf4b78d91164e510cab7cba39b5701127a3bf974a281b9f8be3abe32",
|
||||
"source/samford-v008-tesla/unreal-daylight.py": "f599fa542a520a2991d5a1bd2ccc1e53f7602205207ce58efc010a7fa4890dcb",
|
||||
"source/samford-v008-tesla/unreal-fix_sun_direction.py": "2c9def0ab36406dab5eaa49604887e88447d67eebd5dcecabe0e4bc3f856afeb",
|
||||
"source/samford-v008-tesla/unreal-remove_opaque_haze.py": "e9e4edd5c9a0098017e3e86bf3d5e412b329f53d4f7c77f64631b88ca8b091aa",
|
||||
"source/samford-v008-tesla/unreal-replace_tesla.py": "64563ec67680f065b6ee6f22ea2767a619dc536a2454394daa0ed42894e37cc1",
|
||||
"source/samford-v008-tesla/unreal-verify_walkthrough.py": "ed426cee0c14a00064ca4d79b0fbc80383f119ada2694ae916949b8bb16d3c0e",
|
||||
"source/samford-v008-tesla/unreal-walkthrough-verification.json": "4d883f97fd86e2caa9cc5537bde0f74993fbe61cb099ec6f1f9b274413a4f27c",
|
||||
"source/samford-v008-tesla/verify_saved_blender.py": "ff7b26b54c04b82b773b0b60d192d08717bcf2af393b3d2c4f423c2b07b76384",
|
||||
"source/samford-v009-wind/README.md": "fc9f6f3f18686445fe270808bf3a4db479f8b7292168ea11a4b626ed63835fb0",
|
||||
"source/samford-v009-wind/add_wind_turbine.py": "c1e9b7112473b888d6f5d34c137f8e166be7e4dc0679d2e0074f37a822b326cb",
|
||||
"source/samford-v009-wind/publication-sha256.json": "5bc8d2358c3eef904b2ee3533696dc24f920477ba10c8d26a8c85acddef13b60",
|
||||
"source/samford-v009-wind/verify_wind_turbine.py": "ef54260f1c66079f59af06a551bf077f14af1fa5da3311eefcb83297e5b58c71",
|
||||
"unreal/MeditationRoom.fbx": "7540b71e6cf075e51748db7dc829cf7330c1bfa8cfd8c713041f2127f17ceceb",
|
||||
"unreal/MeditationRoom.glb": "529770faf5d746f74cc33ccaa84bc1315b1dced2a2e6d14209add716983a9fb6",
|
||||
"unreal/SamfordHomestead/Config/DefaultEngine.ini": "3448b132adc8ac3f9690fec0a0895d7f3f6d0b1463bf65c81b0d4c822f4c9000",
|
||||
"unreal/SamfordHomestead/Config/DefaultInput.ini": "8eefad65a75b816dd4d35659db0fca88ff00132f5b92d624d9ae4c82b5b5eecb",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_000_Warm_oxide_polished_concrete___fine_aggregate.uasset": "0a3cbb8c0bb6d0b99f74af3c8a85048f635eda5cc9c680e19321003994235354",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_001_Split_sandstone_facing___mineral_grain.uasset": "0ceed0c33a908bef7885cb9cb90d6819f6baf218d9a1c73c38c15a3d8d666445",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_002_Blackened_steel_fixings.uasset": "ea12eea91af1999a027ceb0ca6bd29de4fc198fa46a654a917e08cc3db9c2256",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_003_Naturally_silvered_hardwood___horizontal_X.uasset": "c47252d6b0bcb12030c94d10c789268b547187261c7aeaf137fd1887561c0e24",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_004_Naturally_silvered_hardwood___horizontal_Y.uasset": "e2456815b89a3bf14a69689a228458ef09e915f195034a472ec99bc6e683599e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_005_Oiled_spotted_gum_posts___vertical_grain.uasset": "f116af4c8edbc2ce39baabb30680c533a1dbb38a77f01e25b5bec9bb247a12aa",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_006_Bamboo_lining___golden_fibres.uasset": "f33969e3c3f2a26d0035f8bd3ad8cfaa08fb578d74611a40d9ced3ab750967e0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_007_Pale_Colorbond___powder_coated_steel.uasset": "410ed1f1ff54197362385d309f80b62dee1c4faf7c5aa668778e5ec1bb7b270c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_008_Unpainted_hardwood___long_X_grain.uasset": "e0c1dfe1d74d6f8100af3000c7c0db679e364065e641f9e21039f75629d03a27",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_009_Undyed_flax_linen.uasset": "34f70669aaadcdaab3e5025a04a63c402dfc31d43066fa4e48937eb12d9d9959",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_010_Exposed_copper_service_pipes.uasset": "af533f2a27577c3991db3afb35c135da0cf365627de71ae72fcdb7fb928d425d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_011_Solar_photovoltaic_cells___blue_black_silicon.uasset": "df241cc05d5c8906f84c68d154f546f7d1c69bf7871304448a3e6a5788a2ed43",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_012_Solar_anodised_aluminium_frames.uasset": "d80462c6c64425a1e39c27014f57a3a9b719453bd9de16e808f19c936cb49944",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_013_Solar_cell_fine_contacts.uasset": "4e04c5dfb48ff1d1fd285753323ab84499fdef0c9e6f4bb1f3b2f0bda666658c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_014_Unpainted_hardwood___long_Y_grain.uasset": "1eb6fb32fd23ce579d8aa1ac71f64c0099aec5a7be0640044689c9513ea6087d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_015_Damp_brown_garden_soil.uasset": "275a95be42ef619e039700f351f5574f114b5dc1674a31b891e3247c56a9aef6",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_016_Leaf_0.uasset": "78f8287147069791059019ccd2af39a0fc466738a5ed8b6f7780ba0e5c8ec494",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_017_Leaf_1.uasset": "040f3ec534302e683544c3a34bc5af3b8d7653cb89e04ce893a27a67f13a7072",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_018_Leaf_2.uasset": "32482f4a4d05b925791c01bf9c4b156454ccc25ab91d45d95ca8cd2dcb7d84ef",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_019_Leaf_3.uasset": "f50458590aafb236357da0933712e027f0b02c7cbbba592cc6a45f009c24d312",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_020_Loose_local_gravel___fine_stones.uasset": "b74cfba2bc74cf0a972c77cafc70bab0b6bb180933b0546c2bea3f6a9ed9e123",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_021_Clear_glazing.uasset": "d8858affcf419e6eb7c05da37020d0886175ee02686cc3c49a9f83982c9d91e7",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_022_Living_soil_and_patchy_subtropical_ground.uasset": "02b3f93e39373399fbcf6698b24d83431b9b44aa6c35c1eae2dd58f490244264",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_023_Distant_wooded_ridge_0.uasset": "c2023d44889f7d6dd1284c15a830651d2f7f7b47270fd406df31fc53474587ea",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_024_Distant_wooded_ridge_1.uasset": "ec21974948e1d23afdbd0b553c0c00292959496e37734403015d3573f4544b3e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_025_Distant_wooded_ridge_2.uasset": "34bc9fa0ee78394bf55a133aa2ba892ead2814c0c39f0c8593f9af598b14482d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_026_Native_grass_0.uasset": "a1f2fe4d3a87bbf03180a0fff02ae63850b46bc9f95b774b6b24d05e41358a2d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_027_Native_grass_1.uasset": "546ff21bdbba5f6c7f43333ec2d402e8c2933867b2ae4f174cbf37b680c7451e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_028_Native_grass_2.uasset": "521884b902475bc4e58feb35b16ecf84134b0533404c7f4e998f1aa30ed23bd8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_029_Native_grass_3.uasset": "e1594ea93d33ca5baf7d818d468ead2cf6d2270dca7bde0da48dd4843ae7d316",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_030_Fallen_leaves_0.uasset": "878da248911dedc3c68d32c830cd0e2b6f58a3258030408e671ec8311f19d27b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_031_Fallen_leaves_1.uasset": "aeeaf0fdd73211144a1fd028c36c62d0d9b33bfca690936c05668fc5f05ec642",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_032_Fallen_leaves_2.uasset": "f31a492265aec132f39c2d5fb3725fca23cb868e43fdac1e1cf0f43ca0addff1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_033_Eucalyptus_peeling_pale_bark.uasset": "a4ce1e9b97fa666b24653b9034fcc8fe48178a6e8cbe843d7ba6b729a29d38bd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_034_Leaf_4.uasset": "cd9ea332f5b764cdbc19fca26da325e05a84143945402d37788e5b2f946bd58d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_035_Very_light_canopy_haze.uasset": "6e5d23750b09cde964a74f4857800e7e747c0f050ff09b933ec82169a39e5e93",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_036_Reusable_dark_steel_bolts_and_shoes.uasset": "53cd98bcc272ddc792404507dfadc99d7bba30ed82905caa20de774fdbce83ab",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_037_Sauna_thermally_modified_timber_staves.uasset": "4b81da1e302dc79feb0e7c6c4321e3150d93609425c0913f1a6cefd6e3ef3283",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_038_Sauna_protective_graphite_metal_cap.uasset": "8329b08da18d303c6af2f36e32523e5b7a5c4ead440e760a33beba8e771717be",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_039_Sauna_untreated_aspen___warm_pale_grain.uasset": "30545e80a7a6dd4eee0ebd8e655379336ddf41da669a1a84a8486b35ea9d8797",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_040_Warm_indirect_sauna_light.uasset": "9358b3d1737964acadeee9067b8bbe0778d728dc7cf4d0f1d5dc512b65ec900c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_041_Homelab_ventilated_graphite_chassis.uasset": "f46a944cec2af67d47a5a764f69639cde3a86c00da757e9d454f79212a745628",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_042_Starlink_off_white_weatherproof_enclosure.uasset": "4e78af66bb22b9820a5883eea9eb901880962580819ee4267913a32eb9d111c1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_043_Homelab_brushed_aluminium.uasset": "2bfe6ed134327701b29bca54d00a12f6d29fecd944045bde71bba7d6e38ce029",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_044_Equipment_subtle_status_lights.uasset": "35239c429df62964bae3e7bdd455e2d873afea7884d6eda10b583c7a763a8db5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_045_Soft_warm_clay_plaster___natural_mineral_texture.uasset": "a98543746070987aaeae6bd06fc15cbd341c040b0f4e9423a4a8b5e74312e250",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_046_Hemp_fibre_insulation___concealed_infill_concept.uasset": "4d6616d5794d3848345f08e8f5004487b457ce0c0e0d6e58e41e6eb1df5da175",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_047_Bathroom_warm_white_ceramic.uasset": "b863b1b08a25e21851de54447625ac6651a2d5d640c8fdf964bb32017efe14cf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_048_Bathroom_satin_stainless.uasset": "f9c6301b07ae3bfb56bdba014fe1906a01f8e272d5ec7c67bb68cf29e17778a7",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_049_Woven_natural_meditation_mat.uasset": "3eefc96cc9b1ace0cc5876b24af88861d7bcc57bbeac14aca78a955e171e2594",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_050_Meditation_cushion_charcoal_linen.uasset": "36c8d051c3bd9de53a497dc1046c3fe7fa89f7335b325f5d1dfcc9d6f0375833",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_051_Beeswax_candle.uasset": "e8c1abafab373cb180569b136c9ef22315f04c33c87f2c1a07762635dae33997",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_052_Small_warm_candle_flame.uasset": "9e10fd0fb2a1ec1202f870b83f7b131861e3bf16d65cd73eab1c30ae1f54f5fd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_053_Future_shadow___faint_sage_outline.uasset": "f9a12d3f4130a831e838c1ab8f1e6d4041a173a8c4b6e1cd22265f8812ac2903",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_054_Future_shadow___translucent_footprint.uasset": "d4d58e53cb4711a025f425bc78184769932ad1051686c28efd13ce412d4b1ff0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_055_Garage_rubber_and_dark_tools.uasset": "5117e5f22dc6d26a47fb8d830696810952fb612127f44d31c87d1ddf14658d71",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_056_Tesla_pearl_white_multi_coat.uasset": "45af9f571cabfafcb38929bb9d2a4c8a24ff0656dda1693c82f01a55a6026937",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_057_Tesla_satin_black_trim.uasset": "c32801044c17e26de586bdc2d8db7ac6c3aaa00f639297c20bb09c6ae6b07084",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_058_Solar_charge_indicator.uasset": "6fbd3a8f2efcd97aa8508403d4d90a8d49c7e541eddccd086963812909875653",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_059_Tesla_machined_wheel_accents.uasset": "0741780c4baafeface3f9f4901dab0b2125bdc9664c3b8facbdc787b467e694c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_060_Garage_solar_blue_black_cells.uasset": "4d604e061ba95e9e5e552b6ada71df6b462fcab6ff934d1135bf058bfab8951f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_061_Garage_brushed_aluminium.uasset": "f283b26085b1c2a7b2dd8035cfc8cf31da6990f6caaa6d63b0a7473c3ee94898",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_062_Bicycle_ochre_frame.uasset": "531c5bbe28d817d7ba57cfa2cf350872d20702bf2eb44bd2fc3f5281d47e90c5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_063_Bicycle_blue_green_frame.uasset": "853dea7c25f53147e9b229f8e29ec12ef0dfa7f6733d852319ab8cd6a7ded1ad",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_064_Tesla_smoked_panoramic_glass.uasset": "f738a69554e94a17ab0fcf08a52d85308148c40e0150a265b14dabc1cb2f6491",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_065_Tesla_tyre_rubber.uasset": "f1a0f0ab0893b149429968068bc55033637adc0e4d90e19aa352663e6c58d7a0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_066_Tesla_LED_white.uasset": "b6f579c7d835e445a2716f6caf31db407807ae4ac30425b2934599cb2cd66b72",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_067_Tesla_rear_light_red.uasset": "07452c522a82de4726e35d59954cf00d1dec3f5443660e8ab5e63bb001f50420",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_068_Books_warm_uncoated_paper.uasset": "40a16a4e2c4b7a9b04a5a624a9c4ebeff44a562ed322e35a8c781f7a6424b2ea",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_069_Cloth_book_cover_06.uasset": "936ea807330fbe3c2321ae0e8e48b62faabc32787c070250f8185bb957b1d298",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_070_Book_spine_gold_print.uasset": "9ae6d01f249dc9f469075f66b4531a2a870d0dbb544a08f693e7c77aec731438",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_071_Cloth_book_cover_05.uasset": "45760551ec3a8a92d3b6f7e207472fa70333b746c307931a041e08b0e2629cd0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_072_Cloth_book_cover_09.uasset": "c21cf388a70eae533e9698d79a5eea0246a0a1f2dfe9846465c5c8cc7bc522f3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_073_Cloth_book_cover_04.uasset": "e6134c60e4ccaf13f72536d7cd5097d2632d11bff65d12bf4181b6e801ff7872",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_074_Cloth_book_cover_00.uasset": "ecd678e91d1c70eb9e112fc761262eccedf86798aa9e46bbcd74a287bfa21fc9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_075_Cloth_book_cover_07.uasset": "c0d8cb3aba3f68195f504c5a2563675ae258bf38374b01973232cadfb30bcbca",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_076_Cloth_book_cover_03.uasset": "2b3bbcfdf06e4da11935357393f753bcf3950e718c3f381fc4a94e000c9d5d97",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_077_Cloth_book_cover_08.uasset": "e32b796583512831c878b62e5267034c060a55078205f555d3214ec555ec0568",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_078_Cloth_book_cover_02.uasset": "d5433573b240023f7ff649ba2bac0cbba17c1e8fe9c7ccd5f03a7e9fcaea4011",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_079_Cloth_book_cover_01.uasset": "b9d3f70f4731087f2ff7c7ef708123e3c6e4cac35b86e2ae695ab09e9627d49a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_080_Reading_chair_moss_linen.uasset": "67968c759e6ecd199ff126981f4fb8ee4ae177fad75c55f2a250da7bf87eefa5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_081_Reading_lamp_undyed_linen_shade.uasset": "70253fbc106aa57bbfc1bea538af78a7460f6aec527d83b894a6a112370cd209",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_082_Eight_Sleep_charcoal_cover_textile.uasset": "a444dd1c7779db227bbdc5a9e1a17eb634b9d96e3d03564a3614ba5129c691e8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_083_Eight_Sleep_hub_graphite_casing.uasset": "fc2a0ba259717449ca5071c495b44ad52b3464e805bed4ea7cc9b098a6307153",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_084_Blackout_curtain_oatmeal_woven_face.uasset": "c7616bd53bc5754a4ec171fd6d9d5960ac82230ebacd13ddba187a189ae6f5bc",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_085_Opaque_blackout_curtain_lining.uasset": "4cd8387035b73b0c68c8a35fb26402456c32c8b793e856a4d7558b4b8b5b9bdc",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_086_Quiet_AC_warm_white_casing.uasset": "053b944c30b0e20a896ae483ce1fc1b1198b4cf62f9f7db351864b22f9c44713",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_087_Appliance_brushed_metal.uasset": "e48d3e741f9e228ab40f919e85a533d9d10403498304108c117da9f444353c6b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_088_Freezer_seals_and_equipment_grips.uasset": "23c41447d42d366baf38a69a1506678f3f90b9005881e940bfdae6bdb4d83535",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_089_Exercise_mat_muted_charcoal.uasset": "8cd43c02ea03f8e60e2a0cf4fc0dfdd91b157baed44442d0ed9f56494031d445",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_090_Ceramic_tea_bowls_warm_white.uasset": "723fdb98d754cb96addd8f56bbed434b3dbc50e3dc915a7d00ff86acc553ac3f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_091_Honed_natural_marble___ivory_and_warm_grey_veins.uasset": "ae208be3e079817ad11e51319598d111db4917caadd09f393a5eea8132490877",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_092_Cookware_food_contact_stainless_lining.uasset": "deaceb6b7aaa03175ff1ff6b393b0cba321f7bb0a82f4f8220242d36fac6d2f1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_093_Copper_cookware___brushed_warm_patina.uasset": "390f3b14ea2bf30aa04bcf91399da80131362474d35b469cdb8c2da50b91c6f0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_094_Oven_and_induction_reflective_smoked_glass.uasset": "b786852107985308ea18bdb9e07d2fb35b83876f134f38c668c2f77532ed9f72",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_095_Oven_glass_subtle_interior.uasset": "9fc3d890a0398ad49a67d3a86567634fdd91486984514d9f8aff37f42090931c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_096_Appliance_soft_white_display.uasset": "3a4319c2f6977714b04b17849a38a78e87d5cdac6db7f624e516fe93f3942451",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_097_Induction_subtle_etched_markings.uasset": "cf1fb258f24ce8a68bca94009cac58766b506743503ab0f4308c76f46342a1f3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_098_Courtyard_low_native_groundcover.uasset": "fdfcf812d07109a7d3399d98bbce19bfb7664dbcb589acf5d2476870bb5a884c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_099_Garden_leaf_0.uasset": "94523638a4fd918ab6a8377a51879db9d44e475e0917f5b748241135a7489c87",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_100_Garden_leaf_1.uasset": "46d2268e22c4bc14f56045b70921f48135a809d6cbb1e2332910f363835540fd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_101_Garden_leaf_2.uasset": "343152e0efbdb40f806b4e611334b6124f1960e7c2935f10c270c7686194170c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_102_Garden_leaf_3.uasset": "9912cac4361ab6823acea9158056194fc114cd8c62e1ad4a1090d009744984e3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_103_Garden_flower_soft_ivory.uasset": "a57f1f9ba397b2827445b6fdbd52ef8548e6a2390d50cb8e4a3834402d9d3883",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_104_Garden_flower_warm_lilac.uasset": "470ac9de49d4d59bcf22d4954ce6a4c41a977cab2a742b8f077a6dc72207ec7e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_105_Garden_flower_bottlebrush_rose.uasset": "00ed4f70aee78263a91d4942be6aff588500e733ef51537e17932a54bb910169",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_106_Garden_flower_native_yellow.uasset": "d680fbdc4c6d420e5dbbdb42a145f48589b5186803659a9c43ca2e2a626dba4e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_107_Container_olive_green_powder_coated_steel.uasset": "e2aef71f47874be44b3f4ecb5c5a32619ddbe1154f2de9bbe70b4622f05cde50",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_108_Container_enclosed_water_tanks_pale_grey_polymer.uasset": "80fb68875e30f92427796dd03a8960b69e6881d04aefea0575d3ab803cecff2f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_109_Rainwater_pipe_dark_polyethylene.uasset": "eba2676906ccf633aff8c8fc23d6f1241388dbd55428bd8511ef8b5f1c419afe",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_110_Buddha___warm_weathered_limestone.uasset": "f1054f6dc64e2bbcc78d49d6739c68532aab33019197924b7abff481172f4d1b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_111_Buddha___fine_carved_recess.uasset": "b5d24bd5afa0b2d71041f2492bb1eae2d0daa422e82bde486d761e78cacbcbd2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_112_Handwoven_cane___fine_warm_fibres.uasset": "0b89a1627e325cb2a1559cfcb8a5b2057acc537c87516a3352c987f1cf08a8ab",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_113_Pendant_warm_diffuser__4_37.uasset": "cdfec80c2c23de9de13c40b4d819f36c74b30fe4cbf18379cfa5c499772c49c0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_114_Pendant_warm_diffuser__3_22.uasset": "66310d8c22d1bb5b356059ea3ae48f2547e35380c4a345a6ec13a2e83b6aba15",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_115_Unglazed_terracotta___fine_mineral_surface.uasset": "cfaf88795e6f2684027548a9ba7686349ebb25991e2da3e469df3e8655d00bea",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Materials/M_116_Path_aggregate___warm_river_stone.uasset": "09998f384b076136ee1f15792efb7b64888d4fd5ce22eecb48bab951782984d2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_000_01_Living_pavilion_12_x_6_m.uasset": "dad7347391d9adaa8c998b754f52bd5a57b42763849feaea2b770d29a0155d9e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_001_01_Living_pavilion_12_x_6_m.uasset": "8049eb6887e9610dd048935d6c7eca87f4a956fbc0f32612088d30b49bf96543",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_002_01_Living_pavilion_12_x_6_m.uasset": "fd6820645e04d4e3bd2318a5f746abaf782353c492f44a78f5ce87fd3468d03f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_003_01_Living_pavilion_12_x_6_m.uasset": "24482c0c956c71ece24ee34a9f22b28d9ad2a0ef3b3eb7797e4c2e5629f8d81c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_004_01_Living_pavilion_12_x_6_m.uasset": "5633653729f8f2cfe6e3139af0e63d83ba6117064b23969dbe7df1b9372d1061",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_005_01_Living_pavilion_12_x_6_m.uasset": "9a2577298b11a6647348ce0c2be84d991a91f301f4dec47c579208c57b0d7a56",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_006_01_Living_pavilion_12_x_6_m.uasset": "cd12e09c93c20b95094f02584b0381130a0a0c07cac0114a877bf1b577faa55c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_007_01_Living_pavilion_12_x_6_m.uasset": "b6e60710c1b8419ab45ee5ac247275fe90591bfeccf5af7d319c8b20b9f4415d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_008_01_Living_pavilion_12_x_6_m.uasset": "a125b2ffe32dc37d442d812b55a5b8dbfbea26709767b21edfaa9638e58f1cd8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_009_02_Sleeping_pavilion_8_x_5_m.uasset": "7e3dd81f2af0e98a2aabf778e4d5a4efc89ea206f7725ed4f8dd97b2337be04a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_010_02_Sleeping_pavilion_8_x_5_m.uasset": "64f53aa5ae80fc199e9cf9e1a9950559f782811b5801ff0f16029e13792051ec",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_011_02_Sleeping_pavilion_8_x_5_m.uasset": "fa26ad339bdc0357bad3d71ce4c22a0f83e8b2b921288e307f0ef705b4671f44",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_012_02_Sleeping_pavilion_8_x_5_m.uasset": "1f24612d29e6e5a7425b2ba6794aee201a09e227b8d38b2c9f44f3900c986620",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_013_02_Sleeping_pavilion_8_x_5_m.uasset": "fa65678636c5ecf27697814de6062c0e50bf5de2a558c04af97e5ccc9c008988",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_014_02_Sleeping_pavilion_8_x_5_m.uasset": "0c5e619bfe4aff5229c263215213635d00bffd52a82c89b2dcd83bf1d9ec2344",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_015_02_Sleeping_pavilion_8_x_5_m.uasset": "3550968859863949b7d858c173be3de6914dc9f24ad5a5f096ccce05e00ae9a0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_016_02_Sleeping_pavilion_8_x_5_m.uasset": "f57297e742c4bd82c9c4e38b0c38b3159826a43a12079361b0be60a81dffb34c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_017_02_Sleeping_pavilion_8_x_5_m.uasset": "bd9130f6f6178c2b6b1ac343beb72f0179a4639d2837b04eb44b902c3b26b58a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_018_05_Water_and_services.uasset": "27f453e8f2209605f9e7acfca6da657b806bb148a7f84e6ab03da8100836d38b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_019_05_Water_and_services.uasset": "9307284c09a0d6e9c153dad98ce6d3c03ffc8881bea497a0eaaa0774d16cdcf9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_020_05_Water_and_services.uasset": "1457f4ed9fcb403e0dd61cbd91c47026dd6a1aaeb0452fb6ffad2a1deee06503",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_021_05_Water_and_services.uasset": "522f8000a64f31cceb62a1808d73784694b611d80fc963a9f4fac792b8c4f2c6",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_022_05_Water_and_services.uasset": "961168fce5cc7aac51d8d548176f4cb60753b8de68e4aa02a1d84a190db67965",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_023_05_Water_and_services.uasset": "2b168d72cf0142e57462546d9c321c1081c740a1642e1d98094ea39dafc46cbf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_024_06_Kitchen_garden.uasset": "fa86e5653708263a0daadfa07ff5f0533f6943bd9891ef5f309d69fa8a5e7bb9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_025_06_Kitchen_garden.uasset": "7bf94fd970401db988944861a5751db9b80183b11acd6ef7f20d3e644bc8e3ff",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_026_06_Kitchen_garden.uasset": "89a680752360a8978530b0b3e3ba9f9848b35a614a4bf407077893e688894c2c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_027_06_Kitchen_garden.uasset": "dcf95008ead7f55fe33f5bce267a48330af89fc6b78d67bcac8027c8d410dab6",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_028_06_Kitchen_garden.uasset": "95c484ef28149f97081386e2f9a7ad0b35d43d33c1526ca80984976ef7eaf570",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_029_06_Kitchen_garden.uasset": "7b3d96371626a34274ceb6766bb2be6c461c102c24c399ecfee9fe553ed2dfd1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_030_06_Kitchen_garden.uasset": "adbc2a7fa8265b6276945ec3d7de9a16b9cfdfc1d765bef230b8c1e5ab85ac4a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_031_06_Kitchen_garden.uasset": "619fdd7a61ecec3794da34156b64978901543bd8cf999c1e68012c16bfe96fe5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_032_06_Kitchen_garden.uasset": "c7cbb70ea6be4c1e0514abebba0cf40032253e07ccba5da7ae00de54381d71ee",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_033_06_Kitchen_garden.uasset": "fbbc0bfdb2366971d9c9a184523f0fbed91ef96ab69f9e70808618b45a8786b9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_034_06_Kitchen_garden.uasset": "434fab2f16e50a3093af6b8124c66bbdb977182e9c2360cc7bcdcf83ed644289",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_035_07_Terrain_and_paths.uasset": "110998551de8db66079ce1b0c5affd6729d4bc2de3ed9012966a4db1da71840a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_036_07_Terrain_and_paths.uasset": "7c07900651d4bdcd05b1157d2e3aec6aefb2054209e557a504c9635c20bacc6a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_037_07_Terrain_and_paths.uasset": "09afce023c29df1fbcfff36cf61e91c96e693a90eff4f70347fcd14b5a58b2ed",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_038_07_Terrain_and_paths.uasset": "5adc01e18cd8b76e4e92924f3706c22972c8c8cc64290bfa4dd51d94cf7cec1c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_039_08_Native_planting.uasset": "f9ac35afcc56a5c343d64b6d5aea5fa7cbfe353c2c291259f727cf546e0d40de",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_040_08_Native_planting.uasset": "837cd5150f8d0e62f5ea3ef4c7b8f319408e21aca19c4f3b59c64b51bde44e8d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_041_08_Native_planting.uasset": "884d0e59afc3c0673397354a5b14098576b5995b66fe2a223c381eb9a4c0c60b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_042_08_Native_planting.uasset": "b3533af8ad6df74b3cd02305cb6f58110e53f51b482d19b275a539236f412d91",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_043_08_Native_planting.uasset": "a6fd08aa47636c920122f2bb30581ae0d20f95ab471e9e72522aa6b4699284c2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_044_08_Native_planting.uasset": "06f39d08c655ebc8e5119132d6d2805206967aa4ac5817c15adfb0e525b9af5d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_045_08_Native_planting.uasset": "fb0b234dbc7113753480914e2d81b19aeaafb34b1dd98e0ce7e19e2f161025b5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_046_08_Native_planting.uasset": "5e9e41c718245ffb398129e1855f1c26f5adb8b5cf3666893d5e54f6c61d5d2d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_047_09_Eucalyptus_and_fruit_trees.uasset": "8c207020d53fd042481192465fc1bf0d9b94a45ba01c64730bc82ee944a07c4f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_048_09_Eucalyptus_and_fruit_trees.uasset": "47f346407ccb6e6066f9095fc2296d56859e81f30dbb762f3a2272118962a39f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_049_09_Eucalyptus_and_fruit_trees.uasset": "1af809edd002a70bfc426bd7095dff80cc6f46b233b9fb369b301fc23a808185",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_050_09_Eucalyptus_and_fruit_trees.uasset": "fa3cc9bb6448c4884faafa06cf7071ffe4bc7402fbafd5a9cdf3918b13fe72bf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_051_09_Eucalyptus_and_fruit_trees.uasset": "75d8b8091ba6bfd7d5d87afe30527110d240716ee704930e3e084d4f70f8ed8d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_052_09_Eucalyptus_and_fruit_trees.uasset": "c4341cb80ff3c48bafb213df5ae834b46feecf19ee72b51724440e561ddd7278",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_053_10_Furniture.uasset": "0fa2bc407e9521bb0e91e0c283c5327e579e20c1de898b93d9a4d56f677be000",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_054_10_Furniture.uasset": "a5d57df736bfe1b42f3afcc9375ffa78b96ad76a7d57fc355811339b054bf464",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_055_10_Furniture.uasset": "1fe97f855b57a0271456ed756a3cf3d1bd2bbb15441cced811580803632b9bd5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_056_11_Camera_and_atmosphere.uasset": "2ea2de34617ba8725dfb2e117e2981a39ba0d3d16e05ac42820a7c4ba2ff988b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_057_12_Natural_materials_and_reversible_connections.uasset": "8a6ba3a208af331b800c860a142cb17b398515dc42937c1d68cf1e3f4bf24750",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_058_12_Natural_materials_and_reversible_connections.uasset": "dcbfe4d842fa4d94fd83633ee64eaee929853548bbda84850f428fd5aee78917",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_059_12_Natural_materials_and_reversible_connections.uasset": "d3c9806e79fb9e7c3c1c0f364c0c234ba789d95162fd911e27e685077efb38fa",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_060_12_Natural_materials_and_reversible_connections.uasset": "3aebc245ee7982d4efd60f8ec158ac7b0713548cb2f203932841f99094d6750c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_061_12_Natural_materials_and_reversible_connections.uasset": "ed57ef3183db5da72a1e9411367515ab88de8a6335476f1bcb35d9d88dcacfbb",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_062_16_Oval_Finnish_sauna.uasset": "ede69b7783b86ce6630907a7715308c50a1837d6b0290cf35d872064b3d9c0b0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_063_16_Oval_Finnish_sauna.uasset": "a101712ba0dc848f58e07097085d9ecc491b2bce4fbfd45faed85fb7f75b917b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_064_16_Oval_Finnish_sauna.uasset": "5186abd298584df4ddba111ce6381bfe9b8f99d69e77b0da9e25c144e4f98173",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_065_16_Oval_Finnish_sauna.uasset": "c12bc7fd609093f57c4752bda2b8c7bff5765241c8ac6382d0d05d3d7113f744",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_066_16_Oval_Finnish_sauna.uasset": "0dbff625a092ebe55c8611e0312d05c4bbdb32ed508663584fdd010267f0fd76",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_067_16_Oval_Finnish_sauna.uasset": "859d1c0b2e8bc8774538a629f066225fb6998f7e23e9569b0177f83a848d61f2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_068_16_Oval_Finnish_sauna.uasset": "3b9ed89e48391ba7f9f34e4774aafbc75eccab23225ed34280f57824f8f71aff",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_069_16_Oval_Finnish_sauna.uasset": "ad7a1b2f2d66a0cb43990006e089db43ff38e7f3f8d8a46ec97a148a5661ddba",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_070_17_Outdoor_shower_and_stone_terrace.uasset": "e85c7c1aa181ff74ae696306a7dff5b3beaadd6dd5cf16254102e769ca1d3e9a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_071_17_Outdoor_shower_and_stone_terrace.uasset": "c221543128ae812b5a2194b7153a8e42a929db0e6edef716e1a3b02a35501b0b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_072_17_Outdoor_shower_and_stone_terrace.uasset": "54c814e6a9b5becbd47844987145a82cc1028ee6be5373b3600e0cbcc37062a1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_073_17_Outdoor_shower_and_stone_terrace.uasset": "632585e2c570520da70ab496b357b1dcad90c1f325c79843655ee803cd289d5b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_074_17_Outdoor_shower_and_stone_terrace.uasset": "91b19aa66bc1f0d3d6b3acc6e034949d737d5adc7ddd8e69dbaf030f1b67aca2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_075_17_Outdoor_shower_and_stone_terrace.uasset": "165d26df15c3bf347be50c21d782e63ebc083245ee432263169f3cbb8227821a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_076_18_Starlink_and_single_server_homelab.uasset": "40c935430f17e166665ea11b024d7a86beb79a599f81c717928ff510831d000c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_077_18_Starlink_and_single_server_homelab.uasset": "b1ff07128c7ad3db3c2fd8ef7f43e2b3687595ffda08f577a54a308a494e4131",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_078_18_Starlink_and_single_server_homelab.uasset": "7d9e92740a1d8c0157bb188aa6c6bd8cd67ff314986bd2d68d7bbba0b345790a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_079_18_Starlink_and_single_server_homelab.uasset": "dd6af89827f06ec1be32213740c59ced32519393899543d09d2e81070fd70bd5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_080_18_Starlink_and_single_server_homelab.uasset": "338b20df69b15790798cdb2c86638ea5ba6b1cd93afdec0ada2383b911e528d6",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_081_18_Starlink_and_single_server_homelab.uasset": "fb86ef39a099945f5d32c8d62ce5fbda99a63d091dec543b38c20a8bd998b7e5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_082_18_Starlink_and_single_server_homelab.uasset": "6111f7327f0028a081e437d06f8d25450e91950da86b57b1ca28d81302ff4260",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_083_18_Starlink_and_single_server_homelab.uasset": "4cc95a15586db2633bfeaab4d21d69f9576cff900ee8bb9ca03a6ce573adb620",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_084_19_Clay_finishes_and_hemp_wall_infill.uasset": "03fe4153c6a552a8ee704fe1c18c197860e596c667d7c5b75b9091d8f87d4d01",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_085_19_Clay_finishes_and_hemp_wall_infill.uasset": "00f86dae5ee256d680e789ec055157168271ef0d5cc45a43cea8743136294893",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_086_20_Spacious_site_connections.uasset": "9eecf9a2d57a505414ac1ad83ad5fb911964e4a6676267575b3e3605323e4387",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_087_20_Spacious_site_connections.uasset": "ed5b639d72c242c43c359fb0c189c5dc2e5c1919adbea243f1a72486e685792c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_088_20_Spacious_site_connections.uasset": "acb89753ba627741909cbc02b40a5e93e1b33008ce16e33f1c70566f09212768",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_089_20_Spacious_site_connections.uasset": "63c0c998d43c2607b60f488a6c0ea8200b4a0cc9f1969526a7be2906da502de5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_090_20_Spacious_site_connections.uasset": "a940835614fa0772042f9a95197eeef6498f1bcd5cfbf3b6e7b0be953f7ef20c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_091_20_Spacious_site_connections.uasset": "c57b8281c26839a67e74ea9a9e4306ad57760f1eff6512508b63ed7a2ede3d5a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_092_21_Bathroom_fittings.uasset": "83cce5b6f62002145eb397e45a760332977e808484f2e7a97d8da9f2cc2bbf35",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_093_21_Bathroom_fittings.uasset": "49450089b880ac38ae215d68013d1f60dfd126e086359b5bf93dfeb438eb0922",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_094_21_Bathroom_fittings.uasset": "9641cdf2278c4cfcdf42ff0c1cb0722bc0571798dace68815a5e896955d83315",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_095_21_Bathroom_fittings.uasset": "eaeb9d50ceb2f67e86d8813c47587aaa48202caabdf7f5539237e32d12291bf2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_096_21_Bathroom_fittings.uasset": "20fbb66ebfe9d42816770507e4c714b7f2a99dbcc87d28c06abcc06c7c46c770",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_097_21_Bathroom_fittings.uasset": "7b3c1ec03854b0057e83df0e7ad30fcc6fb0cd346dcdd65675496ad30914dc82",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_098_21_Bathroom_fittings.uasset": "8bd57369458dac3d23f69d62d9bbffe69f94bf8a83f535a74c66d918f8043ff3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_099_23_NOW___Quiet_meditation_room.uasset": "d2f266cb3145333a70937421cf5564e3319b937e7a97e669c357b490aade2d86",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_100_23_NOW___Quiet_meditation_room.uasset": "d32a64f5e720a1fc03132f6dba6f66f7e2833bad70354099d685f6c1d3ad3315",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_101_23_NOW___Quiet_meditation_room.uasset": "4527125f266cf5d774454d5905030d13f852d750c7f82a08d76aefbce1bac7a8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_102_23_NOW___Quiet_meditation_room.uasset": "d98155e8b7f740e7a903ea2706228e1f0c3ad897455151900df506ff95c22d75",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_103_23_NOW___Quiet_meditation_room.uasset": "4714561187b50ee6a7f0883ad5b5933fed2a279f9bd39f66c49fdf5d9552eb28",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_104_23_NOW___Quiet_meditation_room.uasset": "15b6e7c0e29789f5643df14cc7863057ca4200053413c767b7dfc7707def56c5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_105_23_NOW___Quiet_meditation_room.uasset": "01d99ff5c31be34718dd98f97c699ca814b4ecd597c3fdd92bb83fa6025bd43f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_106_23_NOW___Quiet_meditation_room.uasset": "7263e0dbc6a3ede0ec0d62e8272776d48f3b1235db81db4e3a8fd690e6cba75b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_107_23_NOW___Quiet_meditation_room.uasset": "7e3a0b8b6a9e459b5f131e6c107d116e438bb57b2ba02df0ed4c2438cec1ee49",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_108_23_NOW___Quiet_meditation_room.uasset": "4b2ff122fcb75dd618ceaf9e511e489b740ea3b33ff8530f1f392627eb17e8f2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_109_23_NOW___Quiet_meditation_room.uasset": "b6884fc16527485441659a689c8ae4da88507ee4d91547217015c5c4df1b15ff",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_110_23_NOW___Quiet_meditation_room.uasset": "e7adb56cd446791059135306c05e27842621b8df94ae8b918672778c06f8dbf0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_111_23_NOW___Quiet_meditation_room.uasset": "d87b943f474b666068d8b38d3c23f27fd6929251206804d4f2e5006c23b07433",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_112_23_NOW___Quiet_meditation_room.uasset": "0442040234c73544536da87d106bbe0a018e668e30fcb7cc055991f6bbef6bf2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_113_24_LATER___Shadow_spaces_only.uasset": "0acfd38bc5c2eba3a3bc43c306aa87c4aa695fca1721ee4fa39d73da19aed632",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_114_24_LATER___Shadow_spaces_only.uasset": "471374d194fd53cbf5dfd95444927b51af72d8dccbc2cea217c69994ffb14d8f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_115_28_Garage_and_workbench.uasset": "f832f633b6caf8b02304591b3245068e9f88a5e44c7db3becfec17aa9f4c835f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_116_28_Garage_and_workbench.uasset": "588c1ce873e16bde8e59beaec36868278e06a9561667686147adfdaf22b620b2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_117_28_Garage_and_workbench.uasset": "c465be718175a720999fe5c4c71053eaea4319416d0e8e54ff6e95c8a756bdf9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_118_28_Garage_and_workbench.uasset": "a6d9ce1818bc95d98cff502b085318f90badef58c27367a2730218ea7e5f33ee",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_119_28_Garage_and_workbench.uasset": "86798b1ff9c24e9eb99cc567546137e5d1190a2c26d6a99c1bbb5c285dbbbdab",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_120_28_Garage_and_workbench.uasset": "e27f5a159f225c9ddb34e0a1ec5f6ced311340352317c2cdee6df2853a463d6c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_121_28_Garage_and_workbench.uasset": "fab2079250b6b924e6ca0dc77361fe6eea7f631ead22182e07aca721213999d5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_122_28_Garage_and_workbench.uasset": "c117d97c02420205399b7d0bf15b1b4af65f28a54267e4d37cdd473d05a42e1f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_123_28_Garage_and_workbench.uasset": "c765301c1e2df1f82149ec3cdac2c781cd6d0f6a1ef60c5c264242cab66f79b0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_124_28_Garage_and_workbench.uasset": "99325946bebc09e3b538f2027385aeef3c5e59de86a5a9b556613a1c867a8108",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_125_28_Garage_and_workbench.uasset": "1e32dc2275a0954bcd26f07b43388ad5cedb05910f63b87409d127a18b5f3c9f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_126_28_Garage_and_workbench.uasset": "aa46170332421c6173c14df25d3b820ae27475ed96fe00f2f683e2832b2c7d63",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_127_28_Garage_and_workbench.uasset": "9dee072eec26d9af9dbeab67710a59ed9a57a030b571ffecb08e61c8f103de88",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_128_28_Garage_and_workbench.uasset": "3849449b2c82aeefeeb255ace06fe3ba63440882bb571b959316beee73d5d09c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_129_28_Garage_and_workbench.uasset": "7e29f9e563a610deb920c95149f8d82165e68b2f656415a86497f170447664db",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_130_28_Garage_and_workbench.uasset": "c72c3474a658b129e398a19fea47afdb3a2748670602289beac43f2eb739d0c9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_131_28_Garage_and_workbench.uasset": "491eda97331256dc774005dbb0bef86904b3f798f6f0cfae68167ab2c7c52b56",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_132_28_Garage_and_workbench.uasset": "e8a9a8587493d3eb89fae3e01001d4df8daed3cf87c7e2aaff9be254e6e01629",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_133_28_Garage_and_workbench.uasset": "d4866e44f0be9c492b4374805988a43ab8ade9777465a3a9c2d7203a870b96c8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_134_28_Garage_and_workbench.uasset": "2437c693e93458c896df2ef969a21ea6450f98895321863e237b90d06e80f91c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_135_28_Garage_and_workbench.uasset": "4f9ee897e33060866bb202a10bc89519ad4660c19697f387b38536f66f0cb2b6",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_136_29_Car_and_bicycles.uasset": "4d5c2d179542c2c4d00effdc135b12e2bd274c21cb9968c8e18ba66e89c39db9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_137_29_Car_and_bicycles.uasset": "f0db8910efafac098fc3843b1aa92351f4540de765a83e14d95020db9d2a0ec9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_138_29_Car_and_bicycles.uasset": "6a7bf50771a5447f8cc6ec5503758a3c63205f436bca65edf0457a9c0e642ad9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_139_29_Car_and_bicycles.uasset": "469edd3df474bda60c2f921c8f49cf151ccb60fa141f3eb52ebbe32f737637b7",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_140_29_Car_and_bicycles.uasset": "df8f6327b5f03d3794fb4e58037d2a7dde44d6f0e5b0027bfc4c5e749ba5ea2f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_141_29_Car_and_bicycles.uasset": "2b85f51029e5085fcadc3cf947aa123128a4af92d30dc9e9bb1845a9dd030857",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_142_29_Car_and_bicycles.uasset": "32c03ccee8628d1fb3af49271aa4469e10f44df1770a860b6f21f051ff2d1ab4",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_143_29_Car_and_bicycles.uasset": "e948af89b850196bd87e763539dab682c5b95a937a0814288dacd62444dc2786",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_144_29_Car_and_bicycles.uasset": "244e4c851e291fa0c5b3f78d0a766a7a45ae10f3ba34886b765184f69111095a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_145_29_Car_and_bicycles.uasset": "9d7bd0ca3a3d1b07459dce13cbfaddd81f4a7acfecd50ad9b47ef5ca824e60c5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_146_29_Car_and_bicycles.uasset": "28692b79337e0b17935b9d5af1b24bfedbe5b33a4f6f750420fa940cefa8d800",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_147_29_Car_and_bicycles.uasset": "500d8fd1d37174e99df4e5857f5354863f23209bf30cc5bf4b96057f2632ebfd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_148_31_Reading_library___books_and_lounge_chair.uasset": "59c668debea020a23c22303d3f00dac609d0002b655901c865a743ebba80bcc4",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_149_31_Reading_library___books_and_lounge_chair.uasset": "510327dc805d8ba4011f3253bee6c6f9cf14c9f71774c3eb62c1e1dcf313a27c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_150_31_Reading_library___books_and_lounge_chair.uasset": "5503eee8ab29425349cd094b402915aa7fa38d3452fdc9d707b3a64b31e54240",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_151_31_Reading_library___books_and_lounge_chair.uasset": "eba2782b64626016704172012b8f6df765b6de5673fd7cb764bbe47533a6b7a4",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_152_31_Reading_library___books_and_lounge_chair.uasset": "3bb290961dc19338e04cba01dcb9123be49f3ba60331d7695b7478f933f4d998",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_153_31_Reading_library___books_and_lounge_chair.uasset": "badd69fd59dd5814a6e6d2fb464360f498bd387c41bac73733dcc16c3c0b094f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_154_31_Reading_library___books_and_lounge_chair.uasset": "d135aa6a85b234f37447ca2269bde9c355dfcc67063f230a96c838e6f74b99ff",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_155_31_Reading_library___books_and_lounge_chair.uasset": "878e1b3fa58b83c4804768c0efec6f0287532f8f1bfc76c5ffb95a086ad7fbb2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_156_31_Reading_library___books_and_lounge_chair.uasset": "53773a33f8e20f9dc83747bfb4b8bf0e4346daaaa60525d07d96aa20aa65de2b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_157_31_Reading_library___books_and_lounge_chair.uasset": "15f1172d711820512c41d43d9dadf846fee4ff4a74e9fb9dc5953d19a2fa582a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_158_31_Reading_library___books_and_lounge_chair.uasset": "0ad953b208c857057f87deef10307a58611c18108d381adfe3781d265a714a60",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_159_31_Reading_library___books_and_lounge_chair.uasset": "c3567367d848c7001eb4099e6c5bf406303637d88f4d5622e61340c2a06880c9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_160_31_Reading_library___books_and_lounge_chair.uasset": "bce238059a2d7c818922748e3c6a4c8708d7c21bb7a3929355defebe843c717b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_161_31_Reading_library___books_and_lounge_chair.uasset": "5de8eb7f2bd6df874cd3fcf400e607fe9e07ef6736f540cdd2f2f40ba393bbba",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_162_31_Reading_library___books_and_lounge_chair.uasset": "3819cd573e36a9a6aecfe52152ba9efd5dc256294759173b49280f06ad8b7ecc",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_163_31_Reading_library___books_and_lounge_chair.uasset": "f1be8806ddceb34b1af14f5d984d119ef2863d158e1065fc025c0092b9861709",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_164_31_Reading_library___books_and_lounge_chair.uasset": "085e875b19688a6b2a18f0627d59a85d285347810a21a576433c9aa996c74617",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_165_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "d0c5db2c11ba0641a76172ee7fb6c2cdaff6d46bda5f7c8e249c532c520d17f0",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_166_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "e5641b4601eb2f148b3bff8d71c8d3f03f5a4d409586da88937d3c5c70bf0c94",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_167_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "d657b75266f64a01c5818407ce2b9090f051b263607dd84e0e573f411fc671f8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_168_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "46abf76294f66e41e28c20330dfb4e30e5e810926bd56787cf3508212ac8671d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_169_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "b8b2c984b290ed0f221a759050aff8b8f0b1ce910617e3406a728b9c45ca1a0a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_170_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "f09270855b76a03590e1b4aa5224caa74518ad6f637f287fda9a1a3bb5c8f92a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_171_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "9a3e23b7e3e388d0b127625226bbf69b295ccbfa840269067a5b046789bc1c7d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_172_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "2516730b76d4f8cca26a5c80dcda20989bb1f561eb710f308696abaff1f61421",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_173_32_Bedroom___Eight_Sleep_blackout_and_air_conditioning.uasset": "f4ded9f3e1dace55f622b46e543b452f3676e7c3e579677eb17c84f189c6dce8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_174_33_Daily_life___training_gathering_play_and_food.uasset": "f71a3b90916eb2f163cb861543ea885f23c65f66d0c8604eb573a482c6fbb0dd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_175_33_Daily_life___training_gathering_play_and_food.uasset": "740fd08a9a2cc41596cc02e3b9180b489a89c9a0436b0e6359b6eb39b21a3fbf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_176_33_Daily_life___training_gathering_play_and_food.uasset": "4e6aa164065cd571b41492dfa5aa05d8e49a9c398b4c193626e85da44f6da205",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_177_33_Daily_life___training_gathering_play_and_food.uasset": "9b87bc2a02ec4e18967b4e915d88327ab6f857828850f62604507d70b2e0f18a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_178_33_Daily_life___training_gathering_play_and_food.uasset": "28a73fd70eb14b96415f3d8419c23c7f7975994c635528360d65e1122dd9a7ab",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_179_33_Daily_life___training_gathering_play_and_food.uasset": "39a77e7968bc42b5ec03f5b813f020c733542755b8774974d8ec5ef5344e2d4c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_180_33_Daily_life___training_gathering_play_and_food.uasset": "965f206776bf1518f4f024f44639070db3a04a9aaedf4ed82aa8f6c112b55d32",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_181_33_Daily_life___training_gathering_play_and_food.uasset": "022de4f7deadd241c8c19c4815234e9e28cdcebc27e78e2097f5281ad902af9b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_182_33_Daily_life___training_gathering_play_and_food.uasset": "54fc4bc7a2fb472af2763eae7c56aadbd375f470289ff88a8bdc7406c944a56f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_183_33_Daily_life___training_gathering_play_and_food.uasset": "760c8880bda3adfdb634cb69043af9ca32a0a542d9b2f8860b83115fd240a803",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_184_33_Daily_life___training_gathering_play_and_food.uasset": "2354527be32a2cd20bb45b40f2fe1a0592545a028dfe5d5a0a73f2517b90d31e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_185_33_Daily_life___training_gathering_play_and_food.uasset": "8515e9e8f65d9f355a241bd67f37723a40509c3bc3b017b554926386775b3aeb",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_186_33_Daily_life___training_gathering_play_and_food.uasset": "9c02816beb7b21d6f71f55ea727581065e0d03144ab32899afcf764101ef6ca1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_187_33_Daily_life___training_gathering_play_and_food.uasset": "eed3f82fe0294fbeef8da89169c8d260a2da901c4c73dcd38dc6a773390f93dd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_188_33_Daily_life___training_gathering_play_and_food.uasset": "ab9ee84bb42829c852847fa66d22b468f6eb6207bca38f344076f7857407e39e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_189_33_Daily_life___training_gathering_play_and_food.uasset": "bbf7d990c3d8d2dbed97fa85d03f9adeb8319ea7834554a6e8a47f550cb05f25",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_190_33_Daily_life___training_gathering_play_and_food.uasset": "ff3ecf8a2646e242ff1a421f64f5c65d06fe08b1428f03e3e2ec31db15f61cbc",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_191_33_Daily_life___training_gathering_play_and_food.uasset": "3b53684759cbfad67a05e580f4231e11bfefa089c75d9005dc3b0f8cabde3cbf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_192_33_Daily_life___training_gathering_play_and_food.uasset": "e4ffa5fd8d1417e775ff2c73197ac2ec3e36ae37578f808394ac8cc07f04a9cb",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_193_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "e78ab9ce7f2c70c1854efe50957c21f668628aa13de4be2568647e047bb445c9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_194_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "b180d376df1d66f09ce0c7cca99a4dd4d92acf80cb11966faa5df551bd88589b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_195_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "460299408cde67a2adbdea91477574c0b2fbddc3db895d24e5b54ad2fb6dcc17",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_196_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "6a303612fae2762d858eab8359825a0380e3357f89c1f5518434d6d6940f8874",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_197_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "bc12a34ca1abc43efca7c872d161468385133f45778c2bd8404bc3420532cda3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_198_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "8c8d296e9f66d5b6b0d5df430be0045486c77003304622fffcec669e2d0a460a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_199_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "a3f330cf707069b55deef4ae75f3d08216f274675ba4aa33ec0855be872b7185",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_200_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "05889bb26521a9c8b27faf9af74f0b0538d93dc1f6779267b77af878d738a8c2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_201_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "40c982386f46af9852a847b29912c183eac0c5ebbb3e4788e512373bd36d8245",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_202_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "2e26331ef35b205fc1a6bcfa077a1944373ed89c9cfc1c4b73ce875d7cf15c87",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_203_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "43e10e166a46894abbdc1c30fd1859f8d2cb4678b9169553f315d4df0eb1ea58",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_204_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "709f96119b7ef4fc36a7108e84b9bc0e3264ec4b1f94a9c12929ea0ffafb37df",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_205_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "62ea511c6f63657eb94f2db3221e64ccb5dbd05d898d7ff210455a1ca645221e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_206_34_Garden_court___aligned_pavilions_and_flowing_landsca.uasset": "d6f84fe0bf61a0d2fed11d9633d08d2792dd2086a50e6985fff9e482649d331d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_207_35_Shipping_container___rainwater_storage.uasset": "e31fbc38b5fd7150a82a8888c64fa26d2f64776bec19de0fbd8f1b97f214b207",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_208_35_Shipping_container___rainwater_storage.uasset": "c1ecacae4aab23a8d5395c06d62a6bb8092b40bb675a449c8497c45466c23ad8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_209_35_Shipping_container___rainwater_storage.uasset": "953356311b07f9474cef52d6d325037c5de94bba5f09ad5d926cebb6fd2d34f5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_210_35_Shipping_container___rainwater_storage.uasset": "e6583ad7e1cb6154d6b284d10829ed05755baeff11b8a2936303e440a4cef6f2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_211_35_Shipping_container___rainwater_storage.uasset": "81d01af12e670c15f90856c8baa86eab5c82740d486fa8c6e06241c57261e540",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_212_35_Shipping_container___rainwater_storage.uasset": "a2f4050a0ea24b963a89f3eb55f9fcc10a6fc5f858a74f61658acc2940eaaee9",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_213_35_Shipping_container___rainwater_storage.uasset": "6e8e293b0c32246f3c066b6e8a53e4fc9761b307b00c84cecd5a228a40deafb8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_214_36_Buddha___meditation_garden.uasset": "5b8b958699f8880e984da1b1f9c29db1063af4d61fc87f3268e896c36cfe1113",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_215_36_Buddha___meditation_garden.uasset": "e7a38735d39a2e8c1189d86bf01ca8db841eca4fc9d98e4a27bc91d107f2f005",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_216_37_Presentation___crafted_details_and_fuller_planting.uasset": "cadadaaa68cc6bb0ae3093453a0eca6487ac685c06b010da040d97a7c435b0da",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_217_37_Presentation___crafted_details_and_fuller_planting.uasset": "b0d55f69afa9f548b9f9c602bc73ae5ce870fbe00905200b85299b59b11f1243",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_218_37_Presentation___crafted_details_and_fuller_planting.uasset": "71d3a07be300db07bb3a91932ccc8b94eb6114875fc008301d8c06847a95a4b4",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_219_37_Presentation___crafted_details_and_fuller_planting.uasset": "436948ccda0e246446ef3098076d995999e99baf7b359d79f2cc4da42b114ad2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_220_37_Presentation___crafted_details_and_fuller_planting.uasset": "57b875f032cce58e8dbb02f94f831282d9057849baa3625de869f1e73b121854",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_221_37_Presentation___crafted_details_and_fuller_planting.uasset": "21341325bdf1b441722a86a19710fd2d6f9333a7989018ad06da5ffece5a7e0e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_222_37_Presentation___crafted_details_and_fuller_planting.uasset": "10fa78dbd52fad4ffcaf2d84b7173ffacb622b602dfcd8688bb1717df135f8f1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_223_37_Presentation___crafted_details_and_fuller_planting.uasset": "dad0d47dfa94abae7832a10165d43a9f9d0c6dcd85612e1819bb7c6b57d83b80",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_224_37_Presentation___crafted_details_and_fuller_planting.uasset": "54c7ada0b48394d1e68d9aa21b447126fa327563760078c88453afdf9b863745",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_225_37_Presentation___crafted_details_and_fuller_planting.uasset": "8863d0ebc18733bab75091fff3012c023074059bde5207271d8cb264110bf752",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_226_37_Presentation___crafted_details_and_fuller_planting.uasset": "24834dd2be85258e5a1c293b9d0b2e9ac32acf89b615e99be21f08dc6eed67b7",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_227_37_Presentation___crafted_details_and_fuller_planting.uasset": "8b788fd0b5345876300e81fbe73438f15071953e04fb2981c95a7593082941e5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Meshes/SamfordHomestead_SM_228_37_Presentation___crafted_details_and_fuller_planting.uasset": "8c97a6adde71a3211f452e17ef804da81a2e4850b16b8a17514fb49b5db9a263",
|
||||
"unreal/SamfordHomestead/Content/Homestead/SamfordHomestead.umap": "29204475ef86b1a472ebc89ef709e117af9b687ff1d61e75349f8513231e892d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_000_Warm_oxide_polished_concrete___fine_aggregate_BaseColor.uasset": "bd62b440048676139aa0e8b9a0a2e9018d0cc462f0b26a508b9511d807daa4f3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_000_Warm_oxide_polished_concrete___fine_aggregate_Normal.uasset": "6920721065dcf4539f758f96e14e0436a4c448549af5d32dcf3ff457581fef5a",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_001_Split_sandstone_facing___mineral_grain_BaseColor.uasset": "5d1cb874025ac07e61ba3cb562a6b83dda0c634879c6c43d945efc6dc8150f35",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_001_Split_sandstone_facing___mineral_grain_Normal.uasset": "0b366ff3e11616bed766b02b656a68702b188333e7002f0ecbfaa435fd94d89c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_003_Naturally_silvered_hardwood___horizontal_X_BaseColor.uasset": "729490f12a02bc88706047129723231a42207ac2dbfd4007c9c8ad79ead5d8ef",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_003_Naturally_silvered_hardwood___horizontal_X_Normal.uasset": "f5b0f9e4b16af634834ebe650df28e9a04c81370537c566f2d64123854c124c3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_004_Naturally_silvered_hardwood___horizontal_Y_BaseColor.uasset": "811aa6fda2ad481efdea37e40af58f19b1b9b9f763af7b3a9f3ae8d6b1919722",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_004_Naturally_silvered_hardwood___horizontal_Y_Normal.uasset": "83654bff8b681c69830f4dfcf3216090db374f91a34dbfa3f0119ebf0816be96",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_005_Oiled_spotted_gum_posts___vertical_grain_BaseColor.uasset": "28bebb9a32004ff8a2ff0c2b8cb62101d57d6dca07927def90e18db8e867781c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_005_Oiled_spotted_gum_posts___vertical_grain_Normal.uasset": "add49dab8185c0da3ae2bcb44b45eda62d063601c39942ac5f6938096ea2f401",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_006_Bamboo_lining___golden_fibres_BaseColor.uasset": "b916b445138f56124911200839e2e1ceef0d6a1a66d5d0c01824b77c9a213fea",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_006_Bamboo_lining___golden_fibres_Normal.uasset": "4beafe59fed03a328cb1289f505bc79651815a4768aa2a793b9cd040e6ddb10f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_007_Pale_Colorbond___powder_coated_steel_BaseColor.uasset": "9304c646dcfb94d54bc31be78b0338d6372abaebe43bc3fd41d29dd9b1b647b1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_007_Pale_Colorbond___powder_coated_steel_Normal.uasset": "5862d978de42352b4d07a1ce92c9af3428cca21187238fd9a11a7920e02df5d1",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_008_Unpainted_hardwood___long_X_grain_BaseColor.uasset": "fc8fede0b73ebbd1704ebc5d1e356f5271299abefa1dbc4c7d942bc8f37686b3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_008_Unpainted_hardwood___long_X_grain_Normal.uasset": "66ba25edb0973c3b61b8a267effd8897b660eef98ab01c55e523e866b299a345",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_009_Undyed_flax_linen_BaseColor.uasset": "4b1813c191634a3ca4e3c18a36fe23a1ce2d846e9af2de5b44600de102b30cb4",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_009_Undyed_flax_linen_Normal.uasset": "67ab5a1249ebf65c2c6545daf826ae1863043c7e3a8bf1195bc89320b4da9fd2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_014_Unpainted_hardwood___long_Y_grain_BaseColor.uasset": "805be186a63b3a50afed4cf80e876566a6d1bc728e05f5ba5521b96712836560",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_014_Unpainted_hardwood___long_Y_grain_Normal.uasset": "0cabfd2278b8ee4a7747df055d807a197ccfd421fc0fc317fb424dae4c296811",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_015_Damp_brown_garden_soil_BaseColor.uasset": "da3ed9b1e47e73cacbf52556c382b19d58f5b70f803f1a3d350b2e3011912a54",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_015_Damp_brown_garden_soil_Normal.uasset": "1585f5d5b9ea9213b7621dfb87d12950483b4d5de3dd026f047788fdbd1950d5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_020_Loose_local_gravel___fine_stones_BaseColor.uasset": "f272d09ae9b7c1f5ba8ca56be6fd680dbacd910183332992a210382ef01ef9c5",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_020_Loose_local_gravel___fine_stones_Normal.uasset": "e6428f94dd1666725319868f5d1290ba3295b660e40de26938481f3dc155f6ec",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_022_Living_soil_and_patchy_subtropical_ground_BaseColor.uasset": "84a78e3acbefda546a2d9d69978c98282ac3dc325c54e4d2bfbf0b2661d8ea8c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_022_Living_soil_and_patchy_subtropical_ground_Normal.uasset": "b40d9a308f077ec7711675a76087852ce0891a651896c93eb1a9aa478d67b5f8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_033_Eucalyptus_peeling_pale_bark_BaseColor.uasset": "4142175c6d6d22bc21dbb575fd75b4d05b154e41ec3749b2428bd429315fab6f",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_033_Eucalyptus_peeling_pale_bark_Normal.uasset": "d8f843ef83b77e9617be443bbf738afb4e5b488591471ec2531608f52bc2c171",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_037_Sauna_thermally_modified_timber_staves_BaseColor.uasset": "8555b35fe857e848cae743f6bca2464495e959bf5c6f2ce18d717fee430b7f4d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_037_Sauna_thermally_modified_timber_staves_Normal.uasset": "08e3975e7094556e8a9f234447c8a881c866f27c23af810688b443dc484db1dc",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_039_Sauna_untreated_aspen___warm_pale_grain_BaseColor.uasset": "ff68723dd8986a07eec0e5a3b721e7ff1d00913fa518cebded27575a67a88a58",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_039_Sauna_untreated_aspen___warm_pale_grain_Normal.uasset": "f8c1923d9bab8e2a615261837980314833cf8389686285ddbbcad17b6331b2cd",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_045_Soft_warm_clay_plaster___natural_mineral_texture_BaseColor.uasset": "46f52279715ecc38f2971ab206c3a9d493b7d4e4e5fb89d0dfaf9648a493043b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_045_Soft_warm_clay_plaster___natural_mineral_texture_Normal.uasset": "80a8103283d2e5e79f7c4fbec10c64f752b84bb648ea618cc4694da190c7d474",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_046_Hemp_fibre_insulation___concealed_infill_concept_BaseColor.uasset": "547befa219130592b6c2a6b81b2cce43439b8ca8107c5d78d121b6baf4273922",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_046_Hemp_fibre_insulation___concealed_infill_concept_Normal.uasset": "a4040ee8e4c92c8ed82a928c86fe489747a7a167b806c7b8662304270abb1c74",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_049_Woven_natural_meditation_mat_BaseColor.uasset": "ae1dade08a4a1a01c75cca1d1c34ebdd3749f02e8f16928621b2497560f6d8c7",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_049_Woven_natural_meditation_mat_Normal.uasset": "a5ba9ccd461c6b31586de87cb89e0aae24a1eccd0d81271fbde6e4ae61fbe55e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_050_Meditation_cushion_charcoal_linen_BaseColor.uasset": "b21ddc4f7a13883cc79a82b672ad1373fc0e340e9d4646c6977912cf3626d232",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_050_Meditation_cushion_charcoal_linen_Normal.uasset": "3d36f37bbf0fd68a8afc59598fc2dc849d8feeb8ebecf5c8a0aacb3097c143ee",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_080_Reading_chair_moss_linen_BaseColor.uasset": "eb6fc6c3e9c57d6187060343820ffb94c392a80988319c98cee246e429d1641d",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_080_Reading_chair_moss_linen_Normal.uasset": "b87dff21c9fa335abddf110ba2aeefea37d48dacd4659ebc21d6fd7305c4a8ec",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_082_Eight_Sleep_charcoal_cover_textile_BaseColor.uasset": "d0407470c2736511994793dbaa3c025213298f4486da6fb3efe13fd389adcef2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_082_Eight_Sleep_charcoal_cover_textile_Normal.uasset": "49b9c72c265b511b8e6925a0c32116f2d4760b132106458623b2d426aae5bafb",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_084_Blackout_curtain_oatmeal_woven_face_BaseColor.uasset": "4b7c02d8ea4221537df3181e62cd3d1d3800ca2c379ecc8c7324c36d34e5525b",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_084_Blackout_curtain_oatmeal_woven_face_Normal.uasset": "efe45552901b9622cf75f9d98dc1e82cb9fc5e63a03eb90fd66d1fbe08fa0760",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_091_Honed_natural_marble___ivory_and_warm_grey_veins_BaseColor.uasset": "77ddac9e0fdb872b8b14c7f0d55bff9848b8eaffb65ea59ec5e32660eb56f476",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_091_Honed_natural_marble___ivory_and_warm_grey_veins_Normal.uasset": "89df7989ba1a56ffdda50d1fd0cc4a572bd97a656c0823e6d7d0c81fa9bb169c",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_093_Copper_cookware___brushed_warm_patina_BaseColor.uasset": "cbb98fca57bf65f7cba6b52f6153e4389daef17c4d4351d369cf9c7767f70488",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_093_Copper_cookware___brushed_warm_patina_Normal.uasset": "2d4be2608a26920dbc9e66af1dd5393036165fa298b2ce35da76f561c1f34339",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_107_Container_olive_green_powder_coated_steel_BaseColor.uasset": "103a1d2f7e179e385310d6541e62a9df8accc07c08e5d81ea6805e9ab51e56cf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_107_Container_olive_green_powder_coated_steel_Normal.uasset": "2e8195c5d8ea916095d402d22786d7c1cef97c8e53e583b0ac6e31ca2d9748b3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_110_Buddha___warm_weathered_limestone_BaseColor.uasset": "791f163c1b867ba6b9f51bc26d163ea3fe1e7c15519bda68dfd4e45895fbc9bf",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_110_Buddha___warm_weathered_limestone_Normal.uasset": "5ae25a3f429995ccef29bc27d41f420a35ea9c80c721dde1d259953ead830864",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_112_Handwoven_cane___fine_warm_fibres_BaseColor.uasset": "d835b7841e00ff79bce45002d599fdfb47b3857de883bc71e647a8115c2ee7c2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_112_Handwoven_cane___fine_warm_fibres_Normal.uasset": "70d53c002952793831dad44c0baf576416bee696bf3f274cbf7d6850e1b6f5c2",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_115_Unglazed_terracotta___fine_mineral_surface_BaseColor.uasset": "f8cd23d69a5bcfafc36672724beaa34e8d214269fffa25193b021a505b792ba3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_115_Unglazed_terracotta___fine_mineral_surface_Normal.uasset": "b1e75191bb74bca85522ce5d626424a38c6a02366bf9e211e9ab650eb74731f3",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_116_Path_aggregate___warm_river_stone_BaseColor.uasset": "ba6047bd26b8f8262440836d3ebe43ac673ac9478038a056ddd36eefda97ea0e",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Textures/M_116_Path_aggregate___warm_river_stone_Normal.uasset": "060bf01ba5716d270216a5cac916d0315f3e5e18894f5da45b0125450bd54df8",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Walkthrough/BP_HomesteadGameMode.uasset": "2858fe830612991e4f55cb6567d32f61606b3c965ba493951d8c11a419e0db49",
|
||||
"unreal/SamfordHomestead/Content/Homestead/Walkthrough/BP_HomesteadWalker.uasset": "cd4deea4fb77166ba86ab078719d9cbb4bb6717afd77e7a814330d4c138f8be7",
|
||||
"unreal/SamfordHomestead/Content/Python/build_homestead.py": "833bc82993ce8d7a9b1edbe2fd66f380232531bbce7bcabed9503aae84ad1b74",
|
||||
"unreal/SamfordHomestead/Content/Python/fix_tap_connection.py": "d1819ba38bc139265c20783a3df97ca8b221cbb445a66ba8ad47e5ff01268dff",
|
||||
"unreal/SamfordHomestead/Content/Python/refine_unreal_presentation.py": "69b553bac29f25108071e802fe42d5516b7e14c87be4bac84a0c99a2c10105cb",
|
||||
"unreal/SamfordHomestead/Content/Python/verify_walkthrough.py": "13a57a27c97619015827233a24bbe1aee4bf2b5b09703b90c390f384722913b0",
|
||||
"unreal/SamfordHomestead/SamfordHomestead.uproject": "ccd922240c639c6bfbbe47e641494a2e678753f5c5fbd809b874ee4a247b7d09",
|
||||
"unreal/SamfordMeditation/Config/DefaultEngine.ini": "012fbb2dee20d5ba6c074503d52b77d76d013c241f791ac3b09065336888ac66",
|
||||
"unreal/SamfordMeditation/Config/DefaultInput.ini": "e1b7a60e4da1acca28b8540ed7b2746551df9ae1ddc0056eb45a0932ed82ea78",
|
||||
"unreal/SamfordMeditation/Content/Collections/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
@@ -332,7 +811,81 @@
|
||||
"unreal/Textures/M_11_Meditation_cushion_charcoal_linen_BaseColor.png": "41ea24a82506acba8965f06847aa4860c4d963d0bd8255b4905626809de38e90",
|
||||
"unreal/Textures/M_11_Meditation_cushion_charcoal_linen_Normal.png": "4b0a80b762c24675c40ac26fd16272bd45039fa88098ada032631554da4dde57",
|
||||
"unreal/meditation-room-manifest.json": "3a900693fd579ee176955618d889fce6f72632878e5ee566ff4061222af58318",
|
||||
"unreal/renders/unreal-overview.png": "c01aa10e711c55773b0e087191f6b8857f575f51843e3ebffdf9c7eddd857aca",
|
||||
"unreal/renders/unreal-verandah.png": "d04cd18d2a564e7fd0bc7a9539ffaa590a9e836e6322ba03951eaf0c01e70276",
|
||||
"unreal/transfer/SamfordHomestead.fbx": "414a8dae608c1ad2fae9205b7448ce381af60fcb0b7c80e8824d4138c9ce4fc5",
|
||||
"unreal/transfer/Textures/M_000_Warm_oxide_polished_concrete___fine_aggregate_BaseColor.png": "aa42f2ede8629372cfd52b9c55e586b134261c5c266f63a453df6314f109e0b3",
|
||||
"unreal/transfer/Textures/M_000_Warm_oxide_polished_concrete___fine_aggregate_Normal.png": "2d2f3f9c7b1c5e7473683fde69570e2d72b4d6a9650e7f4d356b0ea21b9ac81b",
|
||||
"unreal/transfer/Textures/M_001_Split_sandstone_facing___mineral_grain_BaseColor.png": "9bc1b7dbb0f25c6e8cc79df559c1e3213f7b434b1e66bfbbb5b24f18faefdba2",
|
||||
"unreal/transfer/Textures/M_001_Split_sandstone_facing___mineral_grain_Normal.png": "f7304c158fafd1b2c4e67f00363ab6b7dc82bb35e2672e21fe6d07e4ed55e877",
|
||||
"unreal/transfer/Textures/M_003_Naturally_silvered_hardwood___horizontal_X_BaseColor.png": "52dbc3e144bec7e54ada08f03e990ce4d0785632c931e43d868489b57841ed28",
|
||||
"unreal/transfer/Textures/M_003_Naturally_silvered_hardwood___horizontal_X_Normal.png": "71c27bbbd54f6b81355bb7999eb7714390a36bc1a0661036ffa97f13f46a3866",
|
||||
"unreal/transfer/Textures/M_004_Naturally_silvered_hardwood___horizontal_Y_BaseColor.png": "7fbfb31afabafed46ac1837188c6a240b408634294a9e3b2d1698ca987cfa78d",
|
||||
"unreal/transfer/Textures/M_004_Naturally_silvered_hardwood___horizontal_Y_Normal.png": "ba6ccee15583a1fd5364ed1e91551db22e577f4632c2f2c2c6e7f5fa194e0b4e",
|
||||
"unreal/transfer/Textures/M_005_Oiled_spotted_gum_posts___vertical_grain_BaseColor.png": "19a3dfcd4d2ab4457a9978b8781662b0114d8ef470cd182d140567f05021c683",
|
||||
"unreal/transfer/Textures/M_005_Oiled_spotted_gum_posts___vertical_grain_Normal.png": "98092a02746a16ef3938f0c57662a8f15b0255665e11dec4e679049c228cb307",
|
||||
"unreal/transfer/Textures/M_006_Bamboo_lining___golden_fibres_BaseColor.png": "f0f4b659cc335396fd29ed135311ac5186e925d7e038de3dad46e1c2a08f3cec",
|
||||
"unreal/transfer/Textures/M_006_Bamboo_lining___golden_fibres_Normal.png": "5b0b79814bbddde011757a1e5c713842d62ea0357f2e196076727eb1c200c57f",
|
||||
"unreal/transfer/Textures/M_007_Pale_Colorbond___powder_coated_steel_BaseColor.png": "9b62a7ed53c9cabb265923892c1fccad55801f2be80368706a49085b3e8dfe8c",
|
||||
"unreal/transfer/Textures/M_007_Pale_Colorbond___powder_coated_steel_Normal.png": "e43f3d8a47487b69ec5333b35bb5a6e43c7a42b272a8c0d110367ef49242073a",
|
||||
"unreal/transfer/Textures/M_008_Unpainted_hardwood___long_X_grain_BaseColor.png": "2f15239e9396415fa4a4a9ac39ade06464930903633b6570db686149690e537a",
|
||||
"unreal/transfer/Textures/M_008_Unpainted_hardwood___long_X_grain_Normal.png": "3f01831564fc545ba15abfbf1283eae7bb0c680c35f6e34f66f290b38cbd7fda",
|
||||
"unreal/transfer/Textures/M_009_Undyed_flax_linen_BaseColor.png": "b6769fd157a73f4876d4b7ea6ed6e31cec7ad75570c0457b8b76ef7bf5c8f246",
|
||||
"unreal/transfer/Textures/M_009_Undyed_flax_linen_Normal.png": "adf270384d5b067e020752ab82df5f1640fce450a3bffe6063cfe0d462525412",
|
||||
"unreal/transfer/Textures/M_014_Unpainted_hardwood___long_Y_grain_BaseColor.png": "2e57817de1f3b7c37193249fd5f2be202c23df40ec842d9fdf4c0383318b69ac",
|
||||
"unreal/transfer/Textures/M_014_Unpainted_hardwood___long_Y_grain_Normal.png": "0648c05229cf467e3d86c55c91ce4be2b20c73ce51faa5a7200ca7980c487ee3",
|
||||
"unreal/transfer/Textures/M_015_Damp_brown_garden_soil_BaseColor.png": "1f5b24bd19a03deec7e75b8c056c8284405ab2cd5998a2930690bb4051736284",
|
||||
"unreal/transfer/Textures/M_015_Damp_brown_garden_soil_Normal.png": "517162c47f75e85bf42e41336862004d396074c5f30f6260cca88944d9f04e53",
|
||||
"unreal/transfer/Textures/M_020_Loose_local_gravel___fine_stones_BaseColor.png": "d04c00abcb761522572c6bb59de23342121aab571ee2f4cc1916de83ac5a7bb7",
|
||||
"unreal/transfer/Textures/M_020_Loose_local_gravel___fine_stones_Normal.png": "2a40ddb2742cb5eb168cab58316f594500dfc79c5737684eea34772233b81f61",
|
||||
"unreal/transfer/Textures/M_022_Living_soil_and_patchy_subtropical_ground_BaseColor.png": "05a0abe1bdf32422b6c0874c773669f3692845b1038118d176c0b6e0dc8f5860",
|
||||
"unreal/transfer/Textures/M_022_Living_soil_and_patchy_subtropical_ground_Normal.png": "de4f98b7601dd0b833fc55c9a4be805dd3ec890ab14fdf9a325adccb6b978e14",
|
||||
"unreal/transfer/Textures/M_033_Eucalyptus_peeling_pale_bark_BaseColor.png": "be11af1d858be9e81d62e3af326939a85672f830df2f44b8e26582c534ff7ac7",
|
||||
"unreal/transfer/Textures/M_033_Eucalyptus_peeling_pale_bark_Normal.png": "61912b12a155ef3abd695bac006ff083b46703e07378b36391b4a22e184a902d",
|
||||
"unreal/transfer/Textures/M_037_Sauna_thermally_modified_timber_staves_BaseColor.png": "df4e5c30f8d148008004a78cda6a57899ea01464b6fb5c96b53fed092f234f7d",
|
||||
"unreal/transfer/Textures/M_037_Sauna_thermally_modified_timber_staves_Normal.png": "2340109d0aab9f0bb7d2894db43e016235eeae517e46a0643cc92ca9bcb8fdc9",
|
||||
"unreal/transfer/Textures/M_039_Sauna_untreated_aspen___warm_pale_grain_BaseColor.png": "23029950b738a0f596273582c6fb54c2120a4f3b2bc63bdc5f4752da4b25b431",
|
||||
"unreal/transfer/Textures/M_039_Sauna_untreated_aspen___warm_pale_grain_Normal.png": "b4ea45e5aff4e11bdc8e7431280161bbabc555bdc5d584732422da98277a5709",
|
||||
"unreal/transfer/Textures/M_045_Soft_warm_clay_plaster___natural_mineral_texture_BaseColor.png": "c08c004e2a55ca9772558b96b19767fee7ad38ad9de2bc62b940c96fef9310ea",
|
||||
"unreal/transfer/Textures/M_045_Soft_warm_clay_plaster___natural_mineral_texture_Normal.png": "cac53dbaf019cc54b235b8bd3c4a12fc706234215d492ef94e55b91ebdb81461",
|
||||
"unreal/transfer/Textures/M_046_Hemp_fibre_insulation___concealed_infill_concept_BaseColor.png": "0acd8f301925c3fe2e453dd10ffb94fd46c1197ffad1c9b0974b3dd42072fc14",
|
||||
"unreal/transfer/Textures/M_046_Hemp_fibre_insulation___concealed_infill_concept_Normal.png": "5ef06fedd84918d3d1148724e990c875ce249191a51c5c7d04e3510ca2a4fa5f",
|
||||
"unreal/transfer/Textures/M_049_Woven_natural_meditation_mat_BaseColor.png": "1e66a4f64e82c4553eaa5b71fdfb3687c629fd81640b22be898437ac1af31230",
|
||||
"unreal/transfer/Textures/M_049_Woven_natural_meditation_mat_Normal.png": "45d7d605a99e9842f8b1bd694a0090082b3e2e519a4774b1ae2f90776534af07",
|
||||
"unreal/transfer/Textures/M_050_Meditation_cushion_charcoal_linen_BaseColor.png": "41ea24a82506acba8965f06847aa4860c4d963d0bd8255b4905626809de38e90",
|
||||
"unreal/transfer/Textures/M_050_Meditation_cushion_charcoal_linen_Normal.png": "bcb74be360a5347d6b6cfad364661bb9dede4817a5b46ee43608e3bb6c94768b",
|
||||
"unreal/transfer/Textures/M_080_Reading_chair_moss_linen_BaseColor.png": "00d76378eb1155ad121b075ca7624869350186c90f5715ee6ea05f2d4fff003c",
|
||||
"unreal/transfer/Textures/M_080_Reading_chair_moss_linen_Normal.png": "afc0586c294826a439972169a401d8b8fef159512232ed89d5876614b6b670cf",
|
||||
"unreal/transfer/Textures/M_082_Eight_Sleep_charcoal_cover_textile_BaseColor.png": "a92a7f8f82ad6dd5da9f5b7d845232c6905895fbfa0d928669f3a2cc986500c5",
|
||||
"unreal/transfer/Textures/M_082_Eight_Sleep_charcoal_cover_textile_Normal.png": "df19f94814c147f4f9ad37b9fceac563e02e34966b5f75ece37cc4e4cc4de62a",
|
||||
"unreal/transfer/Textures/M_084_Blackout_curtain_oatmeal_woven_face_BaseColor.png": "984b6485fcd48b82f2689f9b998a08def529cabf7593ad9f3d4e4c7d470d4e00",
|
||||
"unreal/transfer/Textures/M_084_Blackout_curtain_oatmeal_woven_face_Normal.png": "04c8bad2f454ae0210cd1ee1cda4c819884a27c0e8bc6d90f862ad22b199f0a1",
|
||||
"unreal/transfer/Textures/M_091_Honed_natural_marble___ivory_and_warm_grey_veins_BaseColor.png": "dfec89e018dcf50a38fd77dfcaff15e748b32ae2d5ab6fca8a81ff176f9f72d1",
|
||||
"unreal/transfer/Textures/M_091_Honed_natural_marble___ivory_and_warm_grey_veins_Normal.png": "3b8dfb8c3b14effa2ec38e69ef1a4882de1fa69c367859e73cbedef159afbe90",
|
||||
"unreal/transfer/Textures/M_093_Copper_cookware___brushed_warm_patina_BaseColor.png": "2dd779d9af6818b6f5c1d0e78b898474811b907eb2c73c6d7eb4afb4f95aedfd",
|
||||
"unreal/transfer/Textures/M_093_Copper_cookware___brushed_warm_patina_Normal.png": "c74747ee34f4b6c592763d4bd7596011c6698cfd0bc83b877635a560363305f1",
|
||||
"unreal/transfer/Textures/M_107_Container_olive_green_powder_coated_steel_BaseColor.png": "7cca27c2bcce1776f44a4c35f7f5a211964daee9e3de93d3a297ef1710ed060e",
|
||||
"unreal/transfer/Textures/M_107_Container_olive_green_powder_coated_steel_Normal.png": "a10710640bb40756a6e0a441baf8e026b297bf42fd136a9903cda03a7a72fc0e",
|
||||
"unreal/transfer/Textures/M_110_Buddha___warm_weathered_limestone_BaseColor.png": "4cd353c24d014a231b554d434155cbfa3419fe4e3a9f27f5cf370cbeb8d13cb8",
|
||||
"unreal/transfer/Textures/M_110_Buddha___warm_weathered_limestone_Normal.png": "9ba086066add646875e35c7b2d18da2e2f623086b0df96260a55390fa852a2c4",
|
||||
"unreal/transfer/Textures/M_112_Handwoven_cane___fine_warm_fibres_BaseColor.png": "59f9e9349a088f41e7c1adf28a1970e06b70b6f3fed638cc71d519a297ce0076",
|
||||
"unreal/transfer/Textures/M_112_Handwoven_cane___fine_warm_fibres_Normal.png": "6a700ae2567161a476ffe4c42dbe9ca97198a2fb5d9010bd699af77d5dc182db",
|
||||
"unreal/transfer/Textures/M_115_Unglazed_terracotta___fine_mineral_surface_BaseColor.png": "edbaaf5f8b03f4e802caf32bb1a29d691908483acad0e97e7e21f48677e59254",
|
||||
"unreal/transfer/Textures/M_115_Unglazed_terracotta___fine_mineral_surface_Normal.png": "2d8c055a803826c7305b78b93393ae86cddfb482aab3b10601c47230a82a4300",
|
||||
"unreal/transfer/Textures/M_116_Path_aggregate___warm_river_stone_BaseColor.png": "361f379bcefc096bf30667f10c1a622098ebb2fc011e5af17e5efdcf430ad12f",
|
||||
"unreal/transfer/Textures/M_116_Path_aggregate___warm_river_stone_Normal.png": "0708402685b767932cceb61c15dcf18b8f1d296d6536d1a44d706b6b568cce6a",
|
||||
"unreal/transfer/homestead-manifest.json": "556b029c46a044882e3a8050a4f37098c8872e615b4f45605c98a16cad7d8898",
|
||||
"unreal/unreal-build-checks.json": "22a2cb8fb5f90abbd4f4a0832a0256e1cc7e79d755baa4f1bee2fac6c6542260",
|
||||
"unreal/unreal-collision-rebuild.json": "7cd17249cca0a26161283a1e9d297dfbcb697bca54f7722f992d0a35347b4731",
|
||||
"unreal/unreal-scene-checks.json": "bed6fe7aea84a3dbe92dd382f970e7014e045365e38d05de12b69b933ffb634d",
|
||||
"walkthroughs/UNREAL-CAMERA-ANIMATION.md": "f0c53352a5b6651409e99b6b696a95eca2330a8527fe347534efaabfe277b21a"
|
||||
"unreal/unreal-tap-check.json": "8e39e188184dcd715d71f3a37ac5f765a49306883847e05d53e742a7cf4d3538",
|
||||
"unreal/unreal-walkthrough-verification.json": "3bc8f43f0face1434b0b67a3aa32547f39c73c950e64dabb5ec901ee41d11696",
|
||||
"walkthroughs/CLIENT-PRESENTATION-V007.md": "ce69b2b29911058bb305310ea5377f2ac63eddaf7e81d2bbd08f0c1eb17ee81a",
|
||||
"walkthroughs/UNREAL-CAMERA-ANIMATION.md": "f0c53352a5b6651409e99b6b696a95eca2330a8527fe347534efaabfe277b21a",
|
||||
"walkthroughs/video/Samford-Valley-Concept-Film-v007.mp4": "1e0b3e22c8e8eacb7c0ec3fe2df430aa98e5b4109f4df4a3b1ac4613907452fd",
|
||||
"walkthroughs/video/cinematic-shots.json": "1240d02e9c286445ef58597037ebe74bb50ffa579ac74c005ca4a74dc35ea580",
|
||||
"walkthroughs/video/film-contact-sheet.jpg": "65189ecce7f17ecbf48ccb2a3b3d3a93770d18cd2272bc84cc33ba34e527a5be",
|
||||
"walkthroughs/video/render-checks.json": "307987c6a052f2f0e6140bbe0640eae8295838d8888d87ad7c59335d788e788f",
|
||||
"walkthroughs/video/video-verification.json": "fa0e585f0c30795fb7ba8b8a831ed945318c91402eec98f68c50ae4f3f62ac63"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
45
site/metadata/llms.txt
Normal file
@@ -0,0 +1,45 @@
|
||||
# Marcus Rehbock
|
||||
|
||||
> Technical product manager and builder from Brisbane, Australia, now in San Francisco building startups. Co-founder of The Pai Company. Formerly Technical Product Manager at Updoc (healthtech) and Associate Product Manager intern at Atlassian. BSc Computer Science + BCom Finance, University of Queensland. Runs a ~35-container self-hosted server, writes a friends & family newsletter, and ships side projects across web, mobile and ML.
|
||||
|
||||
Canonical site: https://rehbock.xyz (marcusrehbock.com is the same person). Contact: marcus@rehbock.xyz.
|
||||
Core values, in his own words: Health · Relationships · Wealth · Flow.
|
||||
|
||||
## Identity
|
||||
|
||||
- [Home](https://rehbock.xyz/): who I am, newsletter issues, a random quote
|
||||
- [Now](https://rehbock.xyz/now/): what I'm doing right now (Sivers-style /now page)
|
||||
- [Resume](https://rehbock.xyz/resume/): experience, education, awards — Updoc, Atlassian, The Pai Company, UQ
|
||||
- [LinkedIn](https://www.linkedin.com/in/marcus-rehbock-52673b159/): professional profile
|
||||
- [Code](https://git.rehbock.xyz/marcus): self-hosted Gitea with public repositories
|
||||
|
||||
## Things I've built
|
||||
|
||||
- [Samford Valley home](https://rehbock.xyz/projects/samford-valley-home/): extendible homestead design with solar, a freestanding wind turbine concept, gardens and an editable Blender model; an earlier whole-site Unreal walking prototype and concept film are available. Real-site surveys, wind assessment and engineering remain future work.
|
||||
|
||||
- [Projects](https://rehbock.xyz/projects/): the full list with what/why/stack for each
|
||||
- [maPPP](https://mappp.rehbock.xyz): interactive 3D globe of purchasing power on live World Bank data (three.js, globe.gl)
|
||||
- [Sonora](https://sonora.rehbock.xyz): local 3D audio visualizer — spectral peaks as an orbiting constellation, plus texture/frequency/modulation plots (three.js, Web Audio API); source at https://git.rehbock.xyz/marcus/sonora
|
||||
- [BJJ injury visualizer](https://bjj.rehbock.xyz): interactive 3D anatomy of a T2–T5 costovertebral joint sprain from a jiu-jitsu neck crank — mechanism animation plus six rehab exercises with the targeted structures highlighted (three.js, single file)
|
||||
- [BuddhaGPT](https://git.rehbock.xyz/marcus/buddha-gpt): Qwen2.5-7B QLoRA fine-tune on the Pali Canon, RAG with sutta citations, CompassionBench eval harness (Python)
|
||||
- [Friends & Family Newsletter](https://blog.rehbock.xyz): seven long-form issues, self-hosted and self-sent; custom admin, editor and voice-memo tooling
|
||||
- [Budgy](https://budgyai.xyz): AI budget meal planner — seven dinners and a priced shopping list from a weekly budget (iOS + web)
|
||||
- [GoalHound](https://goalhound-app.vercel.app/): AI accountability partner on WhatsApp — set a SMART goal, send photo proof, get chased until it's done
|
||||
- [Kin](https://git.rehbock.xyz/marcus/kin): self-hosted relational-wealth CRM — Bun/Hono API, web UI, Expo Android app
|
||||
- [GTD](https://git.rehbock.xyz/marcus/gtd): minimal Getting Things Done app — Expo/React Native + Bun + Postgres
|
||||
- [Meditation timer](https://git.rehbock.xyz/marcus/meditation-timer): Jhana timer for GrapheneOS, CI-built APKs via Gitea Actions + Obtainium
|
||||
- Private, self-hosted: a personal health platform (bloodwork, DNA, DEXA, workouts, sleep, meditation; Bun + SQLite API + MCP server + Expo app), ClaudeClaw (a Claude Code ops agent on the server, over Telegram), a voice-memo → newsletter pipeline, and the homelab itself (Docker Compose behind Caddy, restic backups to BorgBase)
|
||||
|
||||
## Taste
|
||||
|
||||
- [Heroes](https://rehbock.xyz/heroes/): people I learn from
|
||||
- [Quotes](https://rehbock.xyz/quotes/): quotes I keep coming back to
|
||||
- [Media](https://rehbock.xyz/media/): books, films, albums, YouTube, articles
|
||||
- [Hobbies](https://rehbock.xyz/hobbies/): meditation, travel, reading, building, training (basketball, Jiu Jitsu), writing
|
||||
- [Uses](https://rehbock.xyz/uses/): hardware, software and the self-hosted stack
|
||||
|
||||
## Machine-readable
|
||||
|
||||
- [Sitemap](https://rehbock.xyz/sitemap.xml)
|
||||
- [Newsletter RSS](https://blog.rehbock.xyz/feed.xml)
|
||||
- JSON-LD Person schema is embedded in https://rehbock.xyz/ (@id https://rehbock.xyz/#person) with sameAs links
|
||||
13
site/metadata/sitemap.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>https://rehbock.xyz/</loc><lastmod>2026-09-01</lastmod><changefreq>monthly</changefreq><priority>1.0</priority></url>
|
||||
<url><loc>https://rehbock.xyz/projects/</loc><lastmod>2026-09-10</lastmod><changefreq>monthly</changefreq><priority>0.9</priority></url>
|
||||
<url><loc>https://rehbock.xyz/now/</loc><lastmod>2026-07-18</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url>
|
||||
<url><loc>https://rehbock.xyz/resume/</loc><lastmod>2026-08-25</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url>
|
||||
<url><loc>https://rehbock.xyz/uses/</loc><lastmod>2026-08-09</lastmod><changefreq>monthly</changefreq><priority>0.6</priority></url>
|
||||
<url><loc>https://rehbock.xyz/heroes/</loc><lastmod>2026-07-27</lastmod><changefreq>yearly</changefreq><priority>0.5</priority></url>
|
||||
<url><loc>https://rehbock.xyz/quotes/</loc><lastmod>2026-08-06</lastmod><changefreq>yearly</changefreq><priority>0.5</priority></url>
|
||||
<url><loc>https://rehbock.xyz/media/</loc><lastmod>2026-09-12</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url>
|
||||
<url><loc>https://rehbock.xyz/hobbies/</loc><lastmod>2026-08-09</lastmod><changefreq>yearly</changefreq><priority>0.5</priority></url>
|
||||
<url><loc>https://rehbock.xyz/projects/samford-valley-home/</loc><lastmod>2026-09-24</lastmod><changefreq>monthly</changefreq><priority>0.7</priority></url>
|
||||
</urlset>
|
||||
116
site/samford-valley-home/index.html
Normal file
@@ -0,0 +1,116 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Samford Valley home — Marcus Rehbock</title>
|
||||
<meta name="description" content="A long-term design project for a simple, extendible homestead in Samford Valley: Blender models, natural materials, food gardens and a walkable Unreal Engine prototype.">
|
||||
<link rel="canonical" href="https://rehbock.xyz/projects/samford-valley-home/">
|
||||
<meta property="og:title" content="Samford Valley home — a home that can grow">
|
||||
<meta property="og:type" content="website"><meta property="og:url" content="https://rehbock.xyz/projects/samford-valley-home/">
|
||||
<meta property="og:description" content="A family homestead, designed slowly over years. Explore the early Blender and Unreal Engine studies.">
|
||||
<meta property="og:image" content="https://rehbock.xyz/projects/samford-valley-home/images/v007-presentation-overview.jpg"><meta name="twitter:card" content="summary_large_image">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
|
||||
<script type="application/ld+json">{"@context": "https://schema.org", "@type": "CreativeWork", "name": "Samford Valley home", "url": "https://rehbock.xyz/projects/samford-valley-home/", "dateCreated": "2026-09-10", "dateModified": "2026-09-24", "author": {"@id": "https://rehbock.xyz/#person"}, "image": "https://rehbock.xyz/projects/samford-valley-home/images/v007-presentation-overview.jpg"}</script>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
:root {
|
||||
--text: #1a1a1a;
|
||||
--text-secondary: #555;
|
||||
--text-light: #888;
|
||||
--bg: #faf6ec;
|
||||
--bg-card: #ffffff;
|
||||
--border: #e8e5e0;
|
||||
--serif: 'EB Garamond', Georgia, serif;
|
||||
--sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
}
|
||||
html { scroll-behavior: smooth; }
|
||||
body { font-family: var(--sans); background: var(--bg); color: var(--text); line-height: 1.7; -webkit-font-smoothing: antialiased; }
|
||||
nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: rgba(250, 246, 236, 0.85); backdrop-filter: blur(12px); border-bottom: 1px solid var(--border); }
|
||||
.nav-inner { max-width: 900px; margin: 0 auto; padding: 16px 32px; display: flex; justify-content: space-between; align-items: center; }
|
||||
.nav-name { font-family: var(--serif); font-size: 20px; font-weight: 600; color: var(--text); text-decoration: none; }
|
||||
.nav-back { font-size: 14px; color: var(--text-secondary); text-decoration: none; letter-spacing: 0.3px; }
|
||||
.nav-back:hover { color: var(--text); }
|
||||
main { max-width: 760px; margin: 0 auto; padding: 130px 32px 80px; }
|
||||
h1 { font-family: var(--serif); font-size: 42px; font-weight: 500; letter-spacing: -0.5px; line-height: 1.2; margin-bottom: 12px; }
|
||||
.lede { font-size: 17px; color: var(--text-secondary); max-width: 560px; margin-bottom: 8px; }
|
||||
.updated { font-size: 13px; color: var(--text-light); letter-spacing: 0.3px; margin-bottom: 56px; }
|
||||
h2 { font-family: var(--serif); font-size: 28px; font-weight: 500; letter-spacing: -0.3px; margin: 56px 0 8px; padding-top: 40px; border-top: 1px solid var(--border); }
|
||||
h2 + p.section-note { font-size: 15px; color: var(--text-light); margin-bottom: 28px; }
|
||||
.project { display: grid; grid-template-columns: 1fr; gap: 18px; padding: 28px 0; border-top: 1px solid var(--border); }
|
||||
.project:first-of-type { border-top: 0; }
|
||||
.shot { display: block; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; background: var(--bg-card); box-shadow: 0 2px 10px rgba(0,0,0,0.05); }
|
||||
.shot img { display: block; width: 100%; height: auto; }
|
||||
.project h3 { font-family: var(--serif); font-size: 24px; font-weight: 600; letter-spacing: -0.2px; display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 6px; }
|
||||
.project h3 a { color: var(--text); text-decoration: none; }
|
||||
.project h3 a:hover { text-decoration: underline; text-underline-offset: 4px; text-decoration-color: var(--border); }
|
||||
.status { font-family: var(--sans); font-size: 11px; font-weight: 600; letter-spacing: 1.1px; text-transform: uppercase; padding: 3px 8px; border-radius: 999px; border: 1px solid var(--border); color: var(--text-light); }
|
||||
.status.live { color: #2f6b3a; border-color: #cfe3d3; background: #eef7f0; }
|
||||
.status.private { color: #7a5a1e; border-color: #ead9b8; background: #fbf3e2; }
|
||||
.status.wip { color: #4a5a7a; border-color: #cdd6e6; background: #eef2f9; }
|
||||
.project p { font-size: 15.5px; color: var(--text-secondary); margin-bottom: 10px; }
|
||||
.project p a { color: var(--text); text-decoration: underline; text-decoration-color: var(--border); text-underline-offset: 3px; }
|
||||
.project p a:hover { text-decoration-color: var(--text); }
|
||||
.why { font-style: italic; }
|
||||
.why strong { font-style: normal; font-weight: 600; color: var(--text); }
|
||||
.stack { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 4px 0 12px; }
|
||||
.stack li { font-size: 12px; color: var(--text-secondary); background: var(--bg-card); border: 1px solid var(--border); border-radius: 6px; padding: 2px 8px; letter-spacing: 0.2px; }
|
||||
.links { font-size: 14px; }
|
||||
.links a { color: var(--text); text-decoration: none; border-bottom: 1px solid var(--border); padding-bottom: 1px; margin-right: 14px; }
|
||||
.links a:hover { border-color: var(--text); }
|
||||
.links .muted { color: var(--text-light); margin-right: 14px; }
|
||||
.earlier { list-style: none; }
|
||||
.earlier li { padding: 14px 0; border-top: 1px solid var(--border); font-size: 15.5px; color: var(--text-secondary); }
|
||||
.earlier li:first-child { border-top: 0; }
|
||||
.earlier strong { color: var(--text); font-weight: 600; }
|
||||
.earlier .year { color: var(--text-light); font-size: 13px; margin-left: 8px; }
|
||||
.colophon { margin-top: 64px; padding-top: 24px; border-top: 1px solid var(--border); font-size: 14px; color: var(--text-light); }
|
||||
.colophon a { color: var(--text-secondary); }
|
||||
footer { max-width: 900px; margin: 0 auto; padding: 32px; border-top: 1px solid var(--border); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; font-size: 13px; color: var(--text-light); }
|
||||
.footer-links { display: flex; gap: 18px; flex-wrap: wrap; }
|
||||
.footer-links a { color: var(--text-light); text-decoration: none; }
|
||||
.footer-links a:hover { color: var(--text); }
|
||||
@media (min-width: 720px) {
|
||||
.project.has-shot { grid-template-columns: 260px 1fr; align-items: start; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
main { padding: 110px 20px 48px; }
|
||||
.nav-inner { padding: 14px 20px; }
|
||||
h1 { font-size: 32px; }
|
||||
h2 { font-size: 24px; }
|
||||
}
|
||||
|
||||
main{max-width:1080px} .intro{max-width:730px} .lede{max-width:720px} p{margin-bottom:18px} figure{margin:32px 0 48px} figure img{display:block;width:100%;height:auto;border-radius:8px;border:1px solid var(--border)} figcaption{font-size:14px;color:var(--text-secondary);margin-top:10px;max-width:760px} .roadmap{padding-left:22px;margin:22px 0} .roadmap li{margin-bottom:15px} .note{padding:20px 24px;background:#f0eadf;border-left:3px solid #83916b;border-radius:3px} .intro a,main>p a{color:inherit;text-underline-offset:4px} .updated{margin-bottom:28px} blockquote{font-family:var(--serif);font-size:27px;line-height:1.4;margin:30px 0} blockquote cite{display:block;font:13px var(--sans);margin-top:9px;color:var(--text-secondary)}
|
||||
</style></head><body>
|
||||
<nav><div class="nav-inner"><a href="/" class="nav-name">Marcus Rehbock</a><a href="/projects/" class="nav-back">← Projects</a></div></nav>
|
||||
<main><div class="intro"><p class="updated">Started September 2026 · Concept design · A project for the coming years</p>
|
||||
<h1>A home that can grow.</h1><p class="lede">A simple family homestead in Samford Valley, Queensland. Warm timber, soft clay walls, solar and wind power, food gardens and room to change my mind.</p>
|
||||
<p>I want to spend the next few years getting this house right. Inspired by Derek Sivers’ article <a href="https://sive.rs/fit">Building without predicting</a>, the starting point is a few straightforward spaces, with future additions left visible as outlines. The house should adapt to life as it unfolds.</p>
|
||||
<blockquote>“All buildings are predictions. All predictions are wrong.”<cite>— Stewart Brand</cite></blockquote>
|
||||
<p>The current model brings together a central kitchen, dining and living space, an adjacent parents’ bedroom, a quiet meditation room, an outdoor sauna and shower, and a garage with a workbench and bike storage. A freestanding wind turbine is now part of the concept alongside container-enclosed rainwater storage, solar panels, a greenhouse and garden beds are part of the homesteading idea.</p></div>
|
||||
<div class="intro"><h2 id="wind-turbine">A wind turbine of my own</h2><p><strong>24 September 2026 — Version 009.</strong> A three-blade turbine on a freestanding mast joins the homestead concept, set beyond the northwestern edge of the homestead to keep the central garden and future pavilions open. I want wind generation to sit alongside the existing solar and energy-storage plans.</p><p>The model shows an 18-metre hub height and a 6-metre rotor to explore its scale in the landscape. These are provisional study dimensions. The actual property’s wind, trees, terrain, neighbours and approval requirements will determine the location and equipment.</p></div>
|
||||
<figure><a href="images/v009-wind-overview.png"><img src="images/v009-wind-overview.png" alt="Actual Blender concept render of the Samford Valley homestead with a three-blade wind turbine on a freestanding mast beyond the northwestern edge of the homestead" width="1536" height="864" loading="lazy"></a><figcaption>Version 009: the wind turbine in the full homestead model. Illustrative terrain and equipment scale; no surveyed location or energy yield has been established.</figcaption></figure>
|
||||
<div class="intro"><p>The editable Blender models include the turbine and a new inspection-tour chapter. The <a href="https://git.rehbock.xyz/marcus/samford-valley-home">public project repository</a> contains the distributable version, source script, updated plan and design notes. The Unreal walkthrough and version 007 film shown below retain their earlier contents.</p><p class="note">Next: assess wind at the proposed hub height, then resolve siting, noise, tower engineering, maintenance access and electrical integration. The <a href="https://www.yourhome.gov.au/energy/renewable-energy">Australian Government’s Your Home guide</a> explains why household wind needs an exposed site with smooth, consistent wind. Any grid connection will also need assessment through <a href="https://www.energex.com.au/our-services/connections/residential-and-commercial-connections/solar-connections-and-other-technologies">Energex’s generation-connection process</a>.</p></div>
|
||||
<figure><a href="images/v007-presentation-overview.jpg"><img src="images/v007-presentation-overview.jpg" alt="Garden-centred revision: aligned pavilions, an oval shared garden, curved covered walkway and flowering beds. Future pavilions remain outlines; the table-tennis deck has been removed." width="1600" height="900" loading="lazy"></a><figcaption>Garden-centred revision: aligned pavilions, an oval shared garden, curved covered walkway and flowering beds. Future pavilions remain outlines; the table-tennis deck has been removed.</figcaption></figure>
|
||||
<figure><video controls playsinline preload="metadata" poster="images/v007-presentation-overview.jpg" style="display:block;width:100%;height:auto;border-radius:8px"><source src="videos/Samford-Valley-Concept-Film-v007.mp4" type="video/mp4">Your browser can download the film using the link below.</video><figcaption>A 30-second concept film: open living, natural materials, shared meals and room to grow. <a href="videos/Samford-Valley-Concept-Film-v007.mp4">Download the MP4</a>.</figcaption></figure>
|
||||
<figure><a href="images/v007-presentation-kitchen.jpg"><img src="images/v007-presentation-kitchen.jpg" alt="Detailed timber kitchen with woven pendants, clay walls, copper cookware and marble island" width="1600" height="900" loading="lazy"></a><figcaption>Version 007 adds woven pendants, softer construction edges, natural-finish variation, table settings and fuller garden planting.</figcaption></figure>
|
||||
<figure><a href="images/v007-unreal-verandah.jpg"><img src="images/v007-unreal-verandah.jpg" alt="Actual Unreal Engine view into the main homestead pavilion" width="1600" height="900" loading="lazy"></a><figcaption>The whole homestead is now an editable first-person Unreal prototype. Walking and floor collision have been tested; the project is in the public repository. The video above is rendered in Blender.</figcaption></figure>
|
||||
<figure><a href="images/buddha-garden.jpg"><img src="images/buddha-garden.jpg" alt="Seated stone Buddha beside the meditation pavilion and curved garden walk" width="1536" height="864" loading="lazy"></a><figcaption>A quiet garden Buddha beside the meditation room, facing the shared garden court. Weathered stone, a low plinth and a new close-up stop in the Blender tour.</figcaption></figure>
|
||||
<figure><a href="images/container-water.jpg"><img src="images/container-water.jpg" alt="Dark-green corrugated shipping-container water module with cargo doors and rainwater plumbing" width="1536" height="864" loading="lazy"></a><figcaption>A 20-foot container-style rainwater module replaces the exposed cylinders. Two separate sealed tanks sit inside the steel enclosure; a cutaway end allows inspection in the Blender model.</figcaption></figure>
|
||||
<figure><a href="images/garden-court.jpg"><img src="images/garden-court.jpg" alt="The central oval garden court, paired flower beds, curved walkway and balanced future pavilion outlines" width="1536" height="864" loading="lazy"></a><figcaption>The garden gives the separate pavilions a shared centre. A north–south axis, paired planting and gently curving connections bring the composition together.</figcaption></figure>
|
||||
<figure><a href="images/kitchen-copper-marble.jpg"><img src="images/kitchen-copper-marble.jpg" alt="Kitchen refinement: a marble-topped timber island, oven, four-zone induction cooktop, detailed drawers, copper cookware and a recessed sink." width="1536" height="864" loading="lazy"></a><figcaption>Kitchen refinement: a marble-topped timber island, oven, four-zone induction cooktop, detailed drawers, copper cookware and a recessed sink.</figcaption></figure>
|
||||
<figure><a href="images/garden-flow-dining.jpg"><img src="images/garden-flow-dining.jpg" alt="A ten-place outdoor table with timber benches and end chairs, pergola shade and a nearby tea and matcha preparation counter." width="1536" height="864" loading="lazy"></a><figcaption>A ten-place outdoor table with timber benches and end chairs, pergola shade and a nearby tea and matcha preparation counter.</figcaption></figure>
|
||||
<figure><a href="images/garden-flow-training.jpg"><img src="images/garden-flow-training.jpg" alt="Covered training beside the garage: a dedicated pull-up and wooden-rings frame, adjustable dumbbells and bench, movable mats and timber access steps." width="1536" height="864" loading="lazy"></a><figcaption>Covered training beside the garage: a dedicated pull-up and wooden-rings frame, adjustable dumbbells and bench, movable mats and timber access steps.</figcaption></figure>
|
||||
<figure><a href="images/reading-corner.jpg"><img src="images/reading-corner.jpg" alt="Reading-corner study: a timber library filled with books, a linen reading chair and a small side table." width="1600" height="900" loading="lazy"></a><figcaption>Reading-corner study: a timber library filled with books, a linen reading chair and a small side table.</figcaption></figure>
|
||||
<figure><a href="images/meditation-room.jpg"><img src="images/meditation-room.jpg" alt="The first actual Unreal Engine 5.8.2 render: clay walls, timber, a meditation cushion and candles." width="1600" height="900" loading="lazy"></a><figcaption>The first actual Unreal Engine 5.8.2 render: clay walls, timber, a meditation cushion and candles.</figcaption></figure>
|
||||
<figure><a href="images/garage.jpg"><img src="images/garage.jpg" alt="The garage study: a Tesla, workshop bench, bicycle storage and rooftop solar." width="1600" height="900" loading="lazy"></a><figcaption>The garage study: a Tesla, workshop bench, bicycle storage and rooftop solar.</figcaption></figure>
|
||||
<figure><a href="images/bedroom-sleep.jpg"><img src="images/bedroom-sleep.jpg" alt="Bedroom with an Eight Sleep-style cooling cover and bedside hub, oatmeal blackout curtains and a wall-mounted split air conditioner" width="1536" height="864" loading="lazy"></a><figcaption>Bedroom revision: an Eight Sleep-style cover and cooling hub, lined blackout curtains and split-system air conditioning. The outdoor condenser sits behind the bedroom wing.</figcaption></figure>
|
||||
<div class="intro"><h2>Space for everyday life</h2><p>The plan brings together a covered place to train, an outdoor table for ten, a shared oval garden and gently curving walks ending at a quiet bench. The former table-tennis deck has become a flowering garden. A clear breakfast counter, pantry and freezer storage, and a garden harvest bench make everyday food preparation easier.</p><p>A separate 10 × 10 metre area is reserved for basketball later. It is shown as a dashed outline on the plan; the court surface and hoop have not been built into the concept. The future dwelling spaces also remain outlines.</p><p>The latest Blender inspection tour has 32 chapters and lasts 2 minutes 40 seconds, with views of the garden layout, future pavilions, kitchen and the new wind turbine.</p></div>
|
||||
<div class="intro"><h2>Where the project goes next</h2>
|
||||
<p>The Blender house is the working concept, now accompanied by a short presentation film and a walkable whole-site Unreal prototype. The next step is to refine that prototype for a smooth, packaged client experience.</p>
|
||||
<ol class="roadmap"><li><strong>Keep refining the house.</strong> Test room proportions, circulation, materials, storage and where future buildings belong.</li><li><strong>Bring in the real site.</strong> Add boundary and contour surveys, site photographs and LiDAR when a property is available.</li><li><strong>Develop coordinated plans.</strong> Bring architectural, structural and services models together with the landscape and access design.</li><li><strong>Develop the Unreal experience.</strong> Refine materials and performance, add interactions and camera tours, then package and test the walkthrough for clients.</li><li><strong>Record the build.</strong> Keep dated decisions, construction photographs and revised models as the house becomes real.</li></ol>
|
||||
<p><a href="images/wind-turbine-plan-v009.svg">View the updated concept site plan →</a></p>
|
||||
<p class="note">These images are early design studies. The terrain is illustrative; surveyed land, LiDAR and construction drawings have not been added yet.</p>
|
||||
<h2>Tesla and a daylight walkthrough</h2><p>15 September 2026 — The garage now uses an existing Tesla Model 3 by <a href="https://www.blendkit.com/asset-gallery-detail/1fc56739-2fd9-447e-b2c1-fee5d9e276b7/">7K Studio</a>. The Unreal walkthrough has clear daytime lighting. The licensed scene is stored privately; the public repository retains the earlier distributable model. The film above remains version 007.</p><figure><a href="images/v008-tesla-garage.png"><img src="images/v008-tesla-garage.png" alt="7K Studio Tesla Model 3 in the timber and clay garage, rendered in Blender" width="1600" height="1000" loading="lazy"></a><figcaption>The imported artist model in Blender, with the existing workshop and bikes.</figcaption></figure><figure><a href="images/v008-daylight-overview.png"><img src="images/v008-daylight-overview.png" alt="Actual Unreal Engine daylight view of the homestead" width="1600" height="900" loading="lazy"></a><figcaption>Actual Unreal Engine daylight scene. Walking and Tesla collision have been tested.</figcaption></figure><h2>Project journal</h2><p><strong>24 September 2026 — Wind turbine.</strong> Added a freestanding three-blade turbine to the Blender concept, with matched lightweight display geometry, a 32nd camera-tour chapter, a revised plan and a new overview render. Siting, capacity and equipment remain subject to assessment.</p><p><strong>12 September 2026 — Presentation and walking prototype.</strong> Refined the Blender scene, created a short client concept film and imported the full site into Unreal Engine with a walking character, collision and lighting. This is an evolving design study; the Unreal project is not yet a packaged client application.</p><p><strong>10 September 2026 — Garden Buddha.</strong> Added a seated stone Buddha beside the meditation pavilion and a 31st tour chapter. The updated Blender model, plan, render and design context are saved in the public project repository.</p><p><strong>10 September 2026 — Container water storage.</strong> Replaced the exposed water tanks with a dark-green container-style enclosure, updated the service path and tour, and added exterior and cutaway renders. The <a href="https://git.rehbock.xyz/marcus/samford-valley-home">project repository is now public</a>, including Blender models, design context and revision history.</p><p><strong>10 September 2026 — A home held together by its garden.</strong> Removed the table-tennis deck, aligned the pavilions and added an oval garden court, curved covered breezeway, smooth paths and thirteen flowering beds. Updated the camera tour and saved the design history, Blender models and supporting files in a private Git repository.</p><p><strong>10 September 2026 — Movement, meals and a detailed kitchen.</strong> Added the training area, ten-place outdoor table and tea counter, table tennis, a future basketball reserve, garden walking loop, quiet bench and convenient food storage. Refined the kitchen with an oven, induction, copper cookware and a marble island. Updated the site plan and saved the 30-chapter Blender tour as milestone v003.</p><p><strong>10 September 2026 — Bedroom comfort.</strong> Added an Eight Sleep-style bed-cooling system, blackout curtains and air conditioning. The updated Blender tour opens in the bedroom; the curtains have a saved closed position for night-time studies.</p><p><strong>10 September 2026 — First saved milestone.</strong> Full Blender homestead and two-minute camera tour; a reading corner with 163 books; a solar-powered garage study; and the first actual Unreal Engine meditation-room render. Working files and a dated snapshot are stored on my server.</p>
|
||||
<p class="colophon"><a href="/projects/">← Back to all projects</a></p></div></main>
|
||||
<footer><span>Marcus Rehbock</span><div class="footer-links"><a href="/">Home</a><a href="/projects/">Projects</a><a href="/now/">Now</a></div></footer>
|
||||
<script async src="https://scripts.simpleanalyticscdn.com/latest.js" data-collect-dnt="true"></script>
|
||||
</body></html>
|
||||
154
source/samford-retreat-garage/add_garden_buddha.py
Normal file
@@ -0,0 +1,154 @@
|
||||
import bpy,math,os,json
|
||||
from mathutils import Vector,Matrix
|
||||
from math import sin,cos,pi
|
||||
O=os.path.dirname(__file__);s=bpy.context.scene
|
||||
c=bpy.data.collections.new('36 Buddha - meditation garden');bpy.data.collections['DETAIL - full geometry for renders'].children.link(c);COL={'new':c};active='new'
|
||||
src=open(O+'/../samford-modular/build_scene.py').read();exec(src[src.index('def mesh('):src.index('timber=textured(')])
|
||||
cubefs=[tuple(reversed(f)) for f in cubefs]
|
||||
stone=textured('Buddha - warm weathered limestone',(.31,.285,.235),(.49,.46,.38),(42,42,42),.83,.0018)
|
||||
shade=mat('Buddha - fine carved recess',(.18,.16,.125),.94)
|
||||
def ell(n,p,sz,ma=stone,rot=0,nu=40,nv=24):
|
||||
vs=[];fs=[]
|
||||
for j in range(nv+1):
|
||||
a=pi*j/nv
|
||||
for i in range(nu):
|
||||
b=2*pi*i/nu;x=sz[0]*sin(a)*cos(b);y=sz[1]*sin(a)*sin(b)
|
||||
vs.append((p[0]+x*cos(rot)-y*sin(rot),p[1]+x*sin(rot)+y*cos(rot),p[2]+sz[2]*cos(a)))
|
||||
for j in range(nv):
|
||||
for i in range(nu):k=j*nu+i;l=j*nu+(i+1)%nu;fs.append((k,l,l+nu,k+nu))
|
||||
ob=mesh('BUDDHA - '+n,vs,[tuple(reversed(f)) for f in fs],ma)
|
||||
for f in ob.data.polygons:f.use_smooth=True
|
||||
return ob
|
||||
def tube(n,points,r,ma=stone):
|
||||
# Catmull-Rom smooth carved lines / rounded limbs.
|
||||
pts=[];p=[Vector(q) for q in points]
|
||||
for i in range(len(p)-1):
|
||||
a=p[max(0,i-1)];b=p[i];cc=p[i+1];d=p[min(i+2,len(p)-1)]
|
||||
for j in range(8):
|
||||
t=j/8;pts.append(.5*(2*b+(-a+cc)*t+(2*a-5*b+4*cc-d)*t*t+(-a+3*b-3*cc+d)*t*t*t))
|
||||
pts.append(p[-1]);vs=[];fs=[]
|
||||
for i,v in enumerate(pts):
|
||||
q=(pts[min(i+1,len(pts)-1)]-pts[max(0,i-1)]).to_track_quat('Z','Y')
|
||||
rr=r*(.65+.35*sin(pi*i/(len(pts)-1)))
|
||||
for j in range(10):vs.append(tuple(v+q@Vector((rr*cos(j*2*pi/10),rr*sin(j*2*pi/10),0))))
|
||||
for i in range(len(pts)-1):
|
||||
for j in range(10):k=i*10+j;l=i*10+(j+1)%10;fs.append((k,l,l+10,k+10))
|
||||
fs.extend([tuple(reversed(range(10))),tuple(range(len(vs)-10,len(vs)))])
|
||||
ob=mesh('BUDDHA - '+n,vs,fs,ma)
|
||||
for f in ob.data.polygons:f.use_smooth=True
|
||||
return ob
|
||||
box('BUDDHA - low stone plinth',(0,0,.13),(1.5,1.12,.26),stone,.04)
|
||||
box('BUDDHA - plinth cap',(0,0,.285),(1.56,1.18,.075),stone,.025)
|
||||
ell('oval seat',(0,0,.37),(.65,.43,.075))
|
||||
ell('left folded robe knee',(-.30,-.075,.52),(.39,.32,.16),rot=-.22)
|
||||
ell('right folded robe knee',(.30,-.075,.52),(.39,.32,.16),rot=.22)
|
||||
ell('crossed shin left',(-.13,-.25,.555),(.40,.145,.13),rot=.23)
|
||||
ell('crossed shin right',(.15,-.22,.585),(.39,.14,.12),rot=-.24)
|
||||
ell('left resting foot',(.30,-.25,.655),(.19,.09,.075),rot=.25)
|
||||
ell('right resting foot',(-.29,-.28,.64),(.18,.09,.072),rot=-.20)
|
||||
# Sculpted torso profile narrows at waist and neck, rounded shoulders.
|
||||
vs=[];fs=[];profiles=[(.53,.26,.18),(.68,.235,.185),(.86,.24,.175),(1.05,.30,.16),(1.16,.30,.14),(1.23,.20,.12),(1.25,.105,.095)]
|
||||
for z,rx,ry in profiles:
|
||||
for i in range(48):a=i*2*pi/48;vs.append((rx*cos(a),.02+ry*sin(a),z))
|
||||
for j in range(len(profiles)-1):
|
||||
for i in range(48):k=j*48+i;l=j*48+(i+1)%48;fs.append((k,l,l+48,k+48))
|
||||
fs.extend([tuple(reversed(range(48))),tuple(range(len(vs)-48,len(vs)))])
|
||||
ob=mesh('BUDDHA - draped torso',vs,fs,stone)
|
||||
for f in ob.data.polygons:f.use_smooth=True
|
||||
mod=ob.modifiers.new('Soft carved robe','SUBSURF');mod.levels=2;mod.render_levels=2
|
||||
ell('neck',(0,.015,1.265),(.10,.10,.13))
|
||||
for sign in [-1,1]:
|
||||
ell('rounded robe shoulder',(sign*.265,0,1.135),(.095,.091,.107))
|
||||
tube('relaxed arm',[(sign*.265,0,1.15),(sign*.32,-.015,.99),(sign*.34,-.08,.80),(sign*.22,-.255,.725),(sign*.085,-.30,.715)],.075)
|
||||
ell('hand in meditation',(sign*.052,-.325,.73+sign*.012),(.13,.073,.037),rot=sign*.08)
|
||||
for i in range(3):tube('finger crease',[(sign*.015,-.375-i*.008,.734+sign*.012),(sign*.11,-.365-i*.008,.728+sign*.012)],.0014,shade)
|
||||
tube('touching thumbs',[(-.09,-.30,.755),(-.035,-.29,.79),(0,-.30,.785),(.035,-.29,.79),(.09,-.30,.755)],.014)
|
||||
# A serene face, lowered eyelids, elongated earlobes and ushnisha.
|
||||
ell('head',(0,0,1.48),(.157,.136,.21))
|
||||
ell('chin',(0,-.033,1.355),(.100,.088,.067))
|
||||
for sign in [-1,1]:
|
||||
ell('ear',(sign*.157,.002,1.46),(.037,.050,.104))
|
||||
ell('elongated earlobe',(sign*.158,-.002,1.365),(.026,.028,.055))
|
||||
tube('ear carving',[(sign*.168,-.036,1.52),(sign*.181,-.042,1.47),(sign*.171,-.037,1.40)],.004,shade)
|
||||
tube('gentle brow',[(sign*.022,-.127,1.527),(sign*.068,-.127,1.545),(sign*.113,-.105,1.53)],.009)
|
||||
tube('lowered eyelid',[(sign*.026,-.131,1.497),(sign*.061,-.133,1.486),(sign*.102,-.112,1.493)],.0035,shade)
|
||||
ell('nose bridge',(0,-.133,1.46),(.024,.029,.064))
|
||||
ell('nose tip',(0,-.155,1.423),(.029,.024,.017))
|
||||
tube('calm closed mouth',[(-.047,-.116,1.387),(-.022,-.130,1.392),(0,-.133,1.389),(.022,-.130,1.392),(.047,-.116,1.387)],.0028,shade)
|
||||
ell('lower lip',(0,-.123,1.378),(.037,.010,.009))
|
||||
ell('ushnisha topknot',(0,.022,1.723),(.087,.086,.092))
|
||||
for j in range(7):
|
||||
a=.16+j*.14;num=max(9,int(36*sin(a)))
|
||||
for i in range(num):
|
||||
b=2*pi*(i+.5*(j%2))/num
|
||||
ell('carved hair curl',(.161*sin(a)*cos(b),.143*sin(a)*sin(b),1.48+.214*cos(a)),(.018,.018,.015),nu=10,nv=6)
|
||||
for j in range(6):
|
||||
a=.20+j*.29;num=max(6,int(24*sin(a)))
|
||||
for i in range(num):
|
||||
b=2*pi*(i+.5*(j%2))/num
|
||||
ell('topknot carving',(.087*sin(a)*cos(b),.022+.086*sin(a)*sin(b),1.723+.092*cos(a)),(.013,.013,.011),nu=8,nv=6)
|
||||
# Robe seam and restrained shallow folds.
|
||||
tube('robe diagonal edge',[(-.18,-.095,1.20),(-.11,-.16,1.10),(.02,-.174,.97),(.15,-.15,.86),(.20,-.13,.77)],.013)
|
||||
for j in range(5):
|
||||
z=.61+j*.075;tube('robe fold',[(-.18,-.13,z+.04),(-.05,-.173,z),(.11,-.155,z-.008)],.0045)
|
||||
for sign in [-1,1]:
|
||||
for j in range(3):tube('knee robe fold',[(sign*.22,-.37,.57+j*.022),(sign*.42,-.30,.57+j*.025),(sign*.55,-.17,.55+j*.027)],.005)
|
||||
# Fuse the neck, shoulders and arms into one continuous stone carving.
|
||||
detail=bpy.data.collections['DETAIL - full geometry for renders'];was_hidden=detail.hide_viewport;detail.hide_viewport=False;bpy.context.view_layer.update()
|
||||
parts=[ob for ob in c.objects if any(k in ob.name for k in ['draped torso','rounded robe shoulder','relaxed arm',' - neck'])]
|
||||
vs=[];fs=[];dg=bpy.context.evaluated_depsgraph_get()
|
||||
for ob in parts:
|
||||
ev=ob.evaluated_get(dg);me=ev.to_mesh();off=len(vs);vs.extend(tuple(v.co) for v in me.vertices);fs.extend(tuple(off+i for i in p.vertices) for p in me.polygons);ev.to_mesh_clear()
|
||||
body=mesh('BUDDHA - continuous carved upper body',vs,fs,stone)
|
||||
bpy.context.view_layer.objects.active=body
|
||||
rem=body.modifiers.new('Joined limestone carving','REMESH');rem.mode='VOXEL';rem.voxel_size=.007;rem.use_smooth_shade=True
|
||||
bpy.ops.object.modifier_apply(modifier=rem.name)
|
||||
sm=body.modifiers.new('Stone carving finish','SMOOTH');sm.factor=.65;sm.iterations=5;bpy.ops.object.modifier_apply(modifier=sm.name)
|
||||
for ob in parts:bpy.data.objects.remove(ob,do_unlink=True)
|
||||
detail.hide_viewport=was_hidden
|
||||
# Rotate east to look toward shared court; north of meditation room, south of garden path.
|
||||
cx,cy=-12.4,15.35
|
||||
def ground(x,y):return -.024*y+.004*x+.12*sin(x*.19)*cos(y*.14)+.055*sin(x*.72+y*.32)
|
||||
zbase=max(ground(cx+x,cy+y) for x in [-.6,.6] for y in [-.8,.8])+.025
|
||||
T=Matrix.Translation((cx,cy,zbase))@Matrix.Rotation(pi/2,4,'Z')
|
||||
for ob in c.objects:ob.matrix_world=T@Matrix.LocRotScale(ob.location,ob.rotation_euler.to_quaternion(),ob.scale)
|
||||
# Single smooth lightweight viewport proxy, no object overhead from small carving details.
|
||||
vs=[];fs=[];inds=[];smooth=[];mats=[]
|
||||
for ob in c.objects:
|
||||
mw=Matrix.LocRotScale(ob.location,ob.rotation_euler.to_quaternion(),ob.scale);off=len(vs);vs.extend(tuple(mw@v.co) for v in ob.data.vertices)
|
||||
for m in ob.data.materials:
|
||||
if m not in mats:mats.append(m)
|
||||
for p in ob.data.polygons:fs.append(tuple(off+i for i in p.vertices));inds.append(mats.index(ob.data.materials[p.material_index]));smooth.append(p.use_smooth)
|
||||
me=bpy.data.meshes.new('Buddha garden viewport');me.from_pydata(vs,[],fs);me.update()
|
||||
for m in mats:me.materials.append(m)
|
||||
me.polygons.foreach_set('material_index',inds);me.polygons.foreach_set('use_smooth',smooth)
|
||||
proxy=bpy.data.objects.new('FAST | Garden Buddha statue',me);bpy.data.collections['00 FAST TOUR - lightweight viewport'].objects.link(proxy)
|
||||
chapters=json.load(open(O+'/tour-chapters-container-water.json'));title='31 / QUIET GARDEN BUDDHA';chapters.append(dict(title=title,start=3601,end=3720,seconds=5))
|
||||
cam=bpy.data.objects['PLAY TOUR camera'];s.frame_end=3720
|
||||
for f,p in [(3601,(-7.5,18.2,2.6)),(3720,(-7.8,17.7,2.35))]:
|
||||
s.frame_set(f);cam.location=p;cam.rotation_euler=(Vector((cx,cy,zbase+.95))-cam.location).to_track_quat('-Z','Y').to_euler();cam.keyframe_insert('location',frame=f);cam.keyframe_insert('rotation_euler',frame=f);cam.data.lens=49;cam.data.keyframe_insert('lens',frame=f)
|
||||
coll=bpy.data.collections['22 PLAY - guided camera tour'];fonts=[o for o in coll.objects if o.type=='FONT']
|
||||
ref=next(o for o in fonts if o.data.body.startswith('30 /'))
|
||||
ref.scale=(0,0,0);ref.keyframe_insert('scale',frame=3601)
|
||||
caption=ref.copy();caption.data=ref.data.copy();caption.animation_data_clear();coll.objects.link(caption);caption.name='Tour caption 31 - garden Buddha';caption.data.body=title;caption.location=(-36/49*.91,36/49*9/16*.84,-2)
|
||||
for f,k in [(1,0),(3600,0),(3601,1),(3720,1)]:caption.scale=(k,k,k);caption.keyframe_insert('scale',frame=f)
|
||||
for ob in [ref,caption]:
|
||||
for layer in ob.animation_data.action.layers:
|
||||
for strip in layer.strips:
|
||||
for bag in strip.channelbags:
|
||||
for fc in bag.fcurves:
|
||||
for key in fc.keyframe_points:key.interpolation='CONSTANT'
|
||||
s.timeline_markers.new(title,frame=3601);s['PLAY THE TOUR']='Hover over the 3D view and press Space. 31 chapters, 2 min 35 sec. Shift+Left Arrow restarts.'
|
||||
s['Garden Buddha']='Weathered limestone seated Buddha on a low stone plinth, north of the meditation pavilion, facing east into the shared garden court. Version 006.'
|
||||
text=bpy.data.texts.get('START HERE - PRESS PLAY')
|
||||
if text:text.clear();text.write(s['PLAY THE TOUR']+'\n\n'+s['Garden Buddha'])
|
||||
layout=json.load(open(O+'/container-water-layout.json'));layout.update(version=6,buddha=[cx,cy,zbase],buddha_facing='east')
|
||||
json.dump(layout,open(O+'/buddha-garden-layout.json','w'),indent=2);json.dump(chapters,open(O+'/tour-chapters-buddha-garden.json','w'),indent=2)
|
||||
s.frame_set(3601);s.render.resolution_percentage=100;s.camera=cam
|
||||
bpy.ops.wm.save_as_mainfile(filepath=O+'/samford-solarpunk-buddha-garden-tour.blend')
|
||||
for o in fonts+[caption]:o.hide_render=True
|
||||
s.render.resolution_percentage=60;s.cycles.samples=48;s.cycles.use_denoising=True
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU';s.render.filepath=O+'/buddha-garden.png';bpy.ops.render.render(write_still=True)
|
||||
print('BUDDHA_READY',len(c.objects),len(fs),flush=True)
|
||||
19
source/samford-retreat-garage/verify_buddha_garden.py
Normal file
@@ -0,0 +1,19 @@
|
||||
import bpy,json,os,math
|
||||
from mathutils import Vector
|
||||
O=os.path.dirname(__file__);s=bpy.context.scene;chapters=json.load(open(O+'/tour-chapters-buddha-garden.json'));fonts=[o for o in bpy.data.collections['22 PLAY - guided camera tour'].objects if o.type=='FONT'];issues=[]
|
||||
for ch in chapters:
|
||||
s.frame_set(ch['start']+30);shown=[o.data.body for o in fonts if o.scale.length>.5]
|
||||
if shown!=[ch['title']]:issues.append([ch['title'],shown])
|
||||
names=[o.name for o in s.objects];layout=json.load(open(O+'/buddha-garden-layout.json'));x,y,z=layout['buddha']
|
||||
# Actual rotated rectangular plinth lies outside the pavilion and walking-path ribbon.
|
||||
mx,my,mw,md=layout['meditation'];assert y-.78>my+md/2
|
||||
clearance=999
|
||||
for path in layout['paths']:
|
||||
if path['kind']=='roofed walk':continue
|
||||
for q in path['points']:
|
||||
dist=math.hypot(max(abs(q[0]-x)-.59,0),max(abs(q[1]-y)-.78,0))-path['width']/2
|
||||
clearance=min(clearance,dist)
|
||||
assert clearance>.05,clearance
|
||||
report={'buddha_collection_objects':len(bpy.data.collections['36 Buddha - meditation garden'].objects),'viewport_proxy':'FAST | Garden Buddha statue' in names,'tour_chapters':len(chapters),'caption_issues':issues,'path_clearance_m':round(clearance,3),'statue_outside_room':True,'internal_water_tanks':sum(n.startswith('INTERNAL RAINWATER TANK') for n in names),'kitchen_preserved':'ISLAND - honed marble countertop' in names,'no_table_tennis':not any('table tennis' in n.lower() for n in names),'render_size':[s.render.resolution_x,s.render.resolution_y,s.render.resolution_percentage]}
|
||||
assert len(chapters)==31 and s.frame_end==3720 and not issues and report['viewport_proxy'] and report['internal_water_tanks']==2 and report['kitchen_preserved'] and report['no_table_tennis'] and report['render_size']==[2560,1440,100]
|
||||
json.dump(report,open(O+'/buddha-garden-verification.json','w'),indent=2);print('VERIFIED '+json.dumps(report),flush=True)
|
||||
15
source/samford-v007-client-walkthrough/DESIGN-AND-PLAN.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Samford presentation and first walkable homestead — v007
|
||||
|
||||
Goal: improve the existing approved Blender concept and provide an actual shareable video plus an editable first-person Unreal prototype of the whole site. Preserve all v006 layout decisions and historical files.
|
||||
|
||||
Design: natural material detail at human scale; finished edges, soft mineral surfaces, timber end grain and grain variation, fuller garden planting and visible lighting details. Retain the open presentation sides and future ghost pavilions. No new architectural programme or claim of surveyed/construction accuracy.
|
||||
|
||||
Implementation:
|
||||
- [x] Inspect the v006 saved scene and improve materials, architectural detail and planting in a new v007 file. Keep the 31-chapter inspection tour and FAST/DETAIL split.
|
||||
- [x] Render a small set of actual Cycles views, inspect them, and build a separate short cinematic with deliberate camera moves. Encode an H.264 MP4 for ordinary client playback.
|
||||
- [x] Export evaluated full-site meshes in logical groups, with transferable material maps. Import into a separate Unreal 5.8 project, preserve the existing meditation study.
|
||||
- [x] Configure the bundled ArchVisCharacter with WASD/mouse, real floor/terrain collision and furniture/wall obstacles. Save an opening level and presentation cameras.
|
||||
- [x] Test the saved Unreal level, floor traces and actual first-person movement; capture a real UE preview. Label the result a prototype rather than a packaged production simulation.
|
||||
- [ ] Save model, video, Unreal assets and usage/context documentation to the public server project; verify repository and published gallery.
|
||||
|
||||
Validation: saved-file object/material checks; unchanged building coordinates and preserved features; view actual rendered images and video contact sheet; inspect video dimensions/duration; verify Unreal assets, collision and pawn movement. The MP4 is a concept presentation, not engineering approval or an exact representation of a surveyed property.
|
||||
39
source/samford-v007-client-walkthrough/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Samford Valley — presentation and walkable prototype, v007
|
||||
|
||||
This revision develops the approved Samford Valley concept for design conversations and client presentations. It preserves the modular layout, future shadow pavilions, natural material direction and all previous house features.
|
||||
|
||||
## Watch the film
|
||||
|
||||
`video/Samford-Valley-Concept-Film-v007.mp4` is the client presentation master. It contains real animated Blender camera views, introductory and closing cards, and short captions. H.264 MP4, 1920 × 1080, 24 fps, 30 seconds, no audio. It plays in QuickTime or a normal browser.
|
||||
|
||||
The film uses Cycles source frames rendered at 1440 × 810, six source frames per second, then optical-flow interpolation within each shot to 24 fps and upscale to 1080p. The editable cinematic retains the camera animation at 24 fps and 1920 × 1080 for a future full-frame, higher-sample render. This is a first concept film rather than final photorealistic marketing output.
|
||||
|
||||
## Walk in Unreal Engine
|
||||
|
||||
Open `SamfordHomestead/SamfordHomestead.uproject` in Unreal Engine 5.8.2 on this Mac. Allow the first shader load to finish. The homestead level opens automatically.
|
||||
|
||||
1. Press the green Play button, then click inside the viewport.
|
||||
2. Use W/A/S/D to walk and the mouse to look around.
|
||||
3. Escape stops play. Shift+F1 releases the mouse while playing.
|
||||
4. Start on the main verandah, walk into the kitchen/living room or down the front steps to the garden. The curved covered walkway leads to the meditation room.
|
||||
|
||||
The pawn uses Epic's bundled ArchVisCharacter plugin. It has a human-scale collision capsule and walking movement rather than free flight. The new project contains the entire site as grouped meshes with transferred material maps, collision, lights and presentation cameras. Python Editor Script, Editor Scripting Utilities, ArchVisCharacter, Sequencer Scripting and Movie Render Pipeline are bundled plugins enabled in the project; no external paid plugin is required.
|
||||
|
||||
This is an editable editor-play prototype, not a packaged application or browser-hosted simulation. Some large mesh groups and procedural material approximations will need finer optimization and art direction before production delivery. Open presentation faces are retained to match the Blender concept. Unbuilt pavilions have no collision. There are no interactive doors, product switches, VR controls or construction-stage simulation yet.
|
||||
|
||||
## Blender files
|
||||
|
||||
- `samford-solarpunk-presentation-tour.blend`: current enhanced whole-site scene, Cycles 2560 × 1440, all 31 inspection-tour chapters. FAST TOUR is the lightweight viewport; DETAIL contains the editable render geometry.
|
||||
- `samford-client-cinematic.blend`: separate 24-second, eight-shot camera edit with the detailed geometry and no inspection captions. The opening/closing cards and film labels are added during encoding.
|
||||
|
||||
Changes: finer natural-finish variation and roughness, 420 softened construction/furniture edges, original woven cane kitchen pendants, stoneware table settings, a woven living rug and loose cushions, visible track/bolt details, fuller curved-leaf planting, and mineral chips along garden paths. Building positions remain unchanged.
|
||||
|
||||
## Continue development
|
||||
|
||||
`source/` contains the Blender enhancement, export, render, encode and verification scripts. `transfer/` contains the full-site FBX, portable textures and a manifest. Unreal setup and validation scripts live under `SamfordHomestead/Content/Python/`. The previous meditation-only Unreal study remains a separate historical project.
|
||||
|
||||
Next useful work: choose a surveyed property; refine human-scale access and all room routes; replace illustrative vegetation and some material approximations with selected production assets; optimize mesh grouping, LODs and collision; add optional closed-façade mode and interactive doors; author an Unreal Sequencer film; render a final full-frame presentation; package and test a client application for their target computer. LiDAR import and construction coordination remain later stages.
|
||||
|
||||
The design has no supplied cadastral boundary, surveyed terrain or engineering documentation. Treat the video and walkable model as concept communication, not an approved or site-verified construction proposal.
|
||||
|
||||
Final presentation review also repaired the kitchen mixer riser, which had been hidden by the clay lining, and replaced the obstructed exterior bedroom film angle with an interior view. These adjustments are retained in the final Blender model/cinematic and in the Unreal map. The base FBX is supplemented by `fix_tap_connection.py` for the final copper riser.
|
||||
14
source/samford-v007-client-walkthrough/source/audit_scene.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import bpy,json,os
|
||||
from mathutils import Matrix
|
||||
s=bpy.context.scene
|
||||
r={'collections':{c.name:len(c.objects) for c in bpy.data.collections},'materials':[],'objects':[],'cameras':[]}
|
||||
for m in bpy.data.materials:
|
||||
p=next((n for n in m.node_tree.nodes if n.type=='BSDF_PRINCIPLED'),None) if m.node_tree else None
|
||||
r['materials'].append({'name':m.name,'color':list(m.diffuse_color),'roughness':p.inputs['Roughness'].default_value if p else None,'nodes':[n.type for n in m.node_tree.nodes] if m.node_tree else []})
|
||||
for o in s.objects:
|
||||
if o.type=='MESH' and not o.name.startswith('FAST'):
|
||||
r['objects'].append({'name':o.name,'loc':list(o.location),'dim':list(o.dimensions),'mats':[m.name if m else '' for m in o.data.materials],'polys':len(o.data.polygons),'collections':[c.name for c in o.users_collection]})
|
||||
for f in [1,121,241,361,481,601,721,841,961,1081,1201,1321,1441,1561,1681,1801,1921,2041,2161,2281,2401,2521,2641,2761,2881,3001,3121,3241,3361,3481,3601]:
|
||||
s.frame_set(f);c=s.camera;r['cameras'].append({'f':f,'pos':list(c.location),'rot':list(c.rotation_euler),'lens':c.data.lens})
|
||||
json.dump(r,open(os.path.dirname(__file__)+'/../scene-audit.json','w'),indent=2)
|
||||
print('AUDIT',len(r['objects']),len(r['materials']))
|
||||
24
source/samford-v007-client-walkthrough/source/encode_film.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from pathlib import Path
|
||||
import subprocess,json
|
||||
from PIL import Image,ImageDraw,ImageFont
|
||||
O=Path(__file__).resolve().parents[1];V=O/'video';F=V/'frames6';parts=V/'parts';parts.mkdir(exist_ok=True)
|
||||
font='/System/Library/Fonts/Supplemental/Arial.ttf';bold='/System/Library/Fonts/Supplemental/Arial Bold.ttf'
|
||||
def run(a):subprocess.run(['ffmpeg','-hide_banner','-loglevel','error','-y',*a],check=True)
|
||||
labels=['A home held together by its garden','Open living and a shaded verandah','Natural materials / a shared kitchen','Gather around the outdoor table','A separate private sleeping wing','A quiet place for meditation','Growing food and living with the landscape','Leave space for the years ahead']
|
||||
for i,label in enumerate(labels):
|
||||
frames=list(F.glob('shot%02d_*.jpg'%(i+1)));assert len(frames)==18,(i,len(frames))
|
||||
cached=parts/('shot%02d.mp4'%(i+1))
|
||||
if cached.exists() and cached.stat().st_mtime>max(f.stat().st_mtime for f in frames):continue
|
||||
overlay=Image.new('RGBA',(1920,1080),(0,0,0,0));d=ImageDraw.Draw(overlay);d.rectangle((0,960,1920,1080),fill=(0,0,0,82));d.text((64,992),label,font=ImageFont.truetype(font,30),fill='white');labelpath=parts/('label%02d.png'%(i+1));overlay.save(labelpath)
|
||||
vf="[0:v]tpad=stop_mode=clone:stop_duration=0.5,minterpolate=fps=24:mi_mode=mci:mc_mode=aobmc:vsbmc=1,trim=duration=3,setpts=PTS-STARTPTS,scale=1920:1080:flags=lanczos[base];[base][1:v]overlay=0:0,format=yuv420p[v]"
|
||||
run(['-framerate','6','-i',str(F/('shot%02d_%%03d.jpg'%(i+1))),'-i',str(labelpath),'-filter_complex',vf,'-map','[v]','-t','3','-an','-c:v','libx264','-preset','medium','-crf','18','-r','24',str(parts/('shot%02d.mp4'%(i+1)))])
|
||||
for name,title,subtitle in [('opening','SAMFORD VALLEY','A home that grows with you'),('closing','Start simple. Leave room to grow.','DESIGN CONCEPT / SEPTEMBER 2026')]:
|
||||
img=F/('shot01_000.jpg' if name=='opening' else 'shot08_017.jpg')
|
||||
overlay=Image.new('RGBA',(1920,1080),(20,37,30,168));d=ImageDraw.Draw(overlay);d.text((960,445),title,font=ImageFont.truetype(bold,68 if name=='opening' else 54),fill='white',anchor='mt');d.text((960,550),subtitle,font=ImageFont.truetype(font,30),fill=(229,221,201),anchor='mt');labelpath=parts/(name+'.png');overlay.save(labelpath)
|
||||
vf="[0:v]scale=1920:1080[base];[base][1:v]overlay=0:0,fade=t=in:st=0:d=0.3,fade=t=out:st=2.7:d=0.3,format=yuv420p[v]"
|
||||
run(['-loop','1','-i',str(img),'-i',str(labelpath),'-t','3','-filter_complex',vf,'-map','[v]','-an','-c:v','libx264','-preset','medium','-crf','18','-r','24',str(parts/(name+'.mp4'))])
|
||||
order=['opening']+['shot%02d'%(i+1) for i in range(8)]+['closing'];lst=V/'concat.txt';lst.write_text('\n'.join("file '%s'"%(parts/(name+'.mp4')) for name in order))
|
||||
output=V/'Samford-Valley-Concept-Film-v007.mp4';run(['-f','concat','-safe','0','-i',str(lst),'-c','copy','-movflags','+faststart',str(output)])
|
||||
probe=json.loads(subprocess.check_output(['ffprobe','-v','error','-show_streams','-show_format','-of','json',str(output)]));stream=probe['streams'][0];assert stream['width']==1920 and stream['height']==1080 and 29.9<float(probe['format']['duration'])<30.1
|
||||
(V/'video-verification.json').write_text(json.dumps({'status':'PASS','output':output.name,'width':1920,'height':1080,'fps':stream['r_frame_rate'],'duration_seconds':probe['format']['duration'],'codec':stream['codec_name'],'size_bytes':output.stat().st_size,'source':'Animated Cycles renders, 1440x810 at 6 source frames/s, per-shot optical-flow interpolation to 24 fps and upscale to 1080p. No audio.'},indent=2))
|
||||
run(['-i',str(output),'-vf','fps=1/3,scale=480:270,tile=5x2','-frames:v','1',str(V/'film-contact-sheet.jpg')]);print('CLIENT_FILM_READY',output,flush=True)
|
||||
152
source/samford-v007-client-walkthrough/source/enhance_scene.py
Normal file
@@ -0,0 +1,152 @@
|
||||
import bpy,os,json,math,random
|
||||
from mathutils import Matrix,Vector
|
||||
from math import sin,cos,pi
|
||||
random.seed(712);O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene;detail=bpy.data.collections['DETAIL - full geometry for renders'];fast=bpy.data.collections['00 FAST TOUR - lightweight viewport']
|
||||
c=bpy.data.collections.new('37 Presentation - crafted details and fuller planting');detail.children.link(c);COL={'new':c};active='new'
|
||||
src=open(O+'/../samford-modular/build_scene.py').read();exec(src[src.index('def mesh('):src.index('timber=textured(')])
|
||||
cubefs=[tuple(reversed(f)) for f in cubefs]
|
||||
wood=bpy.data.materials['Unpainted hardwood - long X grain'];steel=bpy.data.materials['Reusable dark steel bolts and shoes'];linen=bpy.data.materials['Undyed flax linen'];stone=bpy.data.materials['Split sandstone facing - mineral grain'];ceramic=bpy.data.materials['Ceramic tea bowls warm white']
|
||||
rattan=textured('Handwoven cane - fine warm fibres',(.22,.135,.062),(.48,.34,.17),(8,100,25),.72,.002)
|
||||
terracotta=textured('Unglazed terracotta - fine mineral surface',(.22,.092,.044),(.38,.19,.10),(60,60,60),.86,.0015)
|
||||
pebble=textured('Path aggregate - warm river stone',(.18,.17,.14),(.37,.34,.26),(25,25,25),.86,.002)
|
||||
print('PHASE # Existing anisotropic',flush=True)
|
||||
# Existing anisotropic grain retains direction; subtle roughness variation and random board tone.
|
||||
material_changes=[]
|
||||
for m in list(bpy.data.materials):
|
||||
if not m.node_tree or m.name.startswith('VIEW'):continue
|
||||
p=next((n for n in m.node_tree.nodes if n.type=='BSDF_PRINCIPLED'),None)
|
||||
if not p:continue
|
||||
ns=m.node_tree.nodes;ls=m.node_tree.links
|
||||
if any(k in m.name.lower() for k in ['hardwood','spotted gum','timber','bamboo']):
|
||||
old=p.inputs['Base Color'].links[0].from_socket if p.inputs['Base Color'].is_linked else None
|
||||
if old:
|
||||
oi=ns.new('ShaderNodeObjectInfo');ramp=ns.new('ShaderNodeValToRGB');ramp.color_ramp.elements[0].color=(.73,.70,.65,1);ramp.color_ramp.elements[1].color=(1,1,.98,1);ls.new(oi.outputs['Random'],ramp.inputs[0]);mix=ns.new('ShaderNodeMixRGB');mix.blend_type='MULTIPLY';mix.inputs[0].default_value=.30;ls.new(old,mix.inputs[1]);ls.new(ramp.outputs[0],mix.inputs[2]);ls.new(mix.outputs[0],p.inputs['Base Color'])
|
||||
p.inputs['Roughness'].default_value=.57;material_changes.append(m.name)
|
||||
if any(k in m.name.lower() for k in ['clay plaster','concrete','sandstone','marble','linen','textile']):
|
||||
tex=ns.new('ShaderNodeTexNoise');tex.inputs['Scale'].default_value=135;tex.inputs['Detail'].default_value=2
|
||||
ramp=ns.new('ShaderNodeMapRange');base=p.inputs['Roughness'].default_value;ramp.inputs['To Min'].default_value=max(.20,base-.12);ramp.inputs['To Max'].default_value=min(.96,base+.08);ls.new(tex.outputs['Fac'],ramp.inputs['Value']);ls.new(ramp.outputs[0],p.inputs['Roughness']);material_changes.append(m.name)
|
||||
print('PHASE # Accurate small',flush=True)
|
||||
# Accurate small highlights on edges and softer upholstered furniture.
|
||||
beveled=0
|
||||
for ob in list(detail.all_objects):
|
||||
if ob.type!='MESH' or len(ob.data.polygons)>12 or ob.modifiers:continue
|
||||
if not ob.data.materials:continue
|
||||
names=' '.join(m.name for m in ob.data.materials if m)
|
||||
if any(x in names.lower() for x in ['timber','hardwood','clay','marble','concrete','linen']):
|
||||
ds=sorted(ob.dimensions)
|
||||
if ds[0]<.018:continue
|
||||
width=min(.004,ds[0]*.15)
|
||||
if 'sofa' in ob.name.lower() or 'cushion' in ob.name.lower():width=min(.065,ds[0]*.35)
|
||||
mod=ob.modifiers.new('Presentation softened real-world edge','BEVEL');mod.width=width;mod.segments=3;ob.modifiers.new('Presentation weighted corner normals','WEIGHTED_NORMAL');beveled+=1
|
||||
print('PHASE # Simple lathed',flush=True)
|
||||
# Simple lathed ceramic and woven forms, all original procedural assets.
|
||||
def lathe(n,xy,profile,ma,sides=48):
|
||||
vs=[];fs=[]
|
||||
for z,r in profile:
|
||||
for i in range(sides):a=i*2*pi/sides;vs.append((xy[0]+r*cos(a),xy[1]+r*sin(a),z))
|
||||
for j in range(len(profile)-1):
|
||||
for i in range(sides):k=j*sides+i;l=j*sides+(i+1)%sides;fs.append((k,l,l+sides,k+sides))
|
||||
ob=mesh(n,vs,fs,ma)
|
||||
for p in ob.data.polygons:p.use_smooth=True
|
||||
return ob
|
||||
def curve(n,pts,r,ma):
|
||||
cu=bpy.data.curves.new(n,'CURVE');cu.dimensions='3D';cu.bevel_depth=r;cu.bevel_resolution=1;sp=cu.splines.new('POLY');sp.points.add(len(pts)-1)
|
||||
for p,co in zip(sp.points,pts):p.co=(*co,1)
|
||||
cu.materials.append(ma);ob=bpy.data.objects.new(n,cu);c.objects.link(ob);return ob
|
||||
print('PHASE # Cane pendant',flush=True)
|
||||
# Cane pendant shades and warm concealed bulbs over kitchen island.
|
||||
for x in [-4.37,-3.22]:
|
||||
rod('Island pendant black suspension',(x,.1,3.32),(x,.1,4.10),.007,steel,sides=10)
|
||||
profile=[(3.12,.29),(3.18,.30),(3.34,.25),(3.45,.12)]
|
||||
for i in range(40):
|
||||
a=i*2*pi/40;curve('Cane pendant vertical weave',[(x+r*cos(a),.1+r*sin(a),z) for z,r in profile],.0038,rattan)
|
||||
for j in range(17):
|
||||
t=j/16;z=3.12+.33*t;r=.30-.18*t*t;curve('Cane pendant horizontal weave',[(x+r*cos(i*2*pi/64),.1+r*sin(i*2*pi/64),z) for i in range(65)],.003,rattan)
|
||||
bulb=mat('Pendant warm diffuser '+str(x),(.9,.65,.35),.7);p=bulb.node_tree.nodes['Principled BSDF'];p.inputs['Emission Color'].default_value=(1,.62,.28,1);p.inputs['Emission Strength'].default_value=2
|
||||
lathe('Warm pendant diffuser',(x,.1),[(3.18,.02),(3.20,.055),(3.26,.055),(3.28,.01)],bulb)
|
||||
ld=bpy.data.lights.new('Warm island practical light','POINT');ld.energy=12;ld.color=(1,.72,.45);ld.shadow_soft_size=.14;ob=bpy.data.objects.new(ld.name,ld);c.objects.link(ob);ob.location=(x,.1,3.14)
|
||||
print('PHASE # Stoneware',flush=True)
|
||||
# Stoneware table settings make dimensions legible at eye level.
|
||||
for x in [-.65,.1,.85]:
|
||||
for y in [-.02,.63]:
|
||||
lathe('Handmade stoneware dinner plate',(x,y),[(1.921,0),(1.922,.085),(1.94,.118),(1.947,.118),(1.938,.083),(1.937,0)],ceramic)
|
||||
box('Folded flax table napkin',(x+.19,y,1.928),(.12,.16,.014),linen,.005)
|
||||
lathe('Handmade tea cup',(x-.17,y+.04),[(1.92,.026),(2.00,.033),(2.004,.037),(1.92,.033)],ceramic,32)
|
||||
lathe('Dining table terracotta bud vase',(.1,.30),[(1.92,.04),(1.95,.065),(2.07,.057),(2.13,.025),(2.15,.025)],terracotta)
|
||||
for dx,dy in [(-.04,.015),(.045,.025),(0,-.03)]:rod('Vase dried grass stem',(.1,.30,2.06),(.1+dx,.30+dy,2.36),.002,rattan,sides=6)
|
||||
print('PHASE # Low woven',flush=True)
|
||||
# Low woven living rug, extra loose cushions with softened edges.
|
||||
box('Living woven jute rug',(3.2,1.10,1.136),(3.25,2.15,.016),rattan,.008)
|
||||
for x,a in [(2.47,-.12),(3.9,.10)]:
|
||||
ob=box('Loose linen sofa pillow',(x,-.75,1.88),(.48,.17,.43),linen,.065);ob.rotation_euler[1]=a
|
||||
print('PHASE # Stainless',flush=True)
|
||||
# Stainless track rails and small timber fixings visible in close camera views.
|
||||
for y in [2.89,3.05,3.21]:box('Sliding door stainless track inset',(0,y,1.152),(11.82,.013,.009),bpy.data.materials['Appliance brushed metal'],.002)
|
||||
for x in [-6,-3,0,3,6]:
|
||||
for z in [1.3,3.43]:
|
||||
for dx in [-.032,.032]:rod('Verandah exposed bolt head',(x+dx,5.466,z),(x+dx,5.475,z),.008,steel,sides=6)
|
||||
print('PHASE # Richer planted',flush=True)
|
||||
# Richer planted borders: broad curved leaves, fine flowering stems, aggregate along paths.
|
||||
layout=json.load(open(O+'/../samford-retreat-garage/buddha-garden-layout.json'))
|
||||
def ground(x,y):return -.024*y+.004*x+.12*sin(x*.19)*cos(y*.14)+.055*sin(x*.72+y*.32)
|
||||
leafm=[bpy.data.materials['Garden leaf '+str(i)] for i in range(4)];flower=bpy.data.materials['Garden flower soft ivory']
|
||||
vs=[];fs=[];mi=[]
|
||||
for bed in layout['beds']:
|
||||
x,y=bed['center'];rx,ry=bed['radii']
|
||||
for j in range(max(8,int(rx*ry*14))):
|
||||
a=random.random()*2*pi;r=math.sqrt(random.random())*.9;xx=x+rx*r*cos(a);yy=y+ry*r*sin(a);zz=ground(xx,yy)+.10
|
||||
for k in range(7):
|
||||
a=random.random()*2*pi;L=random.uniform(.18,.47);w=L*.15;off=len(vs)
|
||||
for t in [0,.25,.5,.75,1]:
|
||||
reach=L*t;z=zz+L*(sin(t*pi*.65)*.65+.08*t);width=w*sin(pi*t)
|
||||
for sg in [-1,0,1]:vs.append((xx+cos(a)*reach-sin(a)*width*sg,yy+sin(a)*reach+cos(a)*width*sg,z+(.014*sin(pi*t) if sg==0 else 0)))
|
||||
for k in range(4):
|
||||
for h in range(2):idx=off+k*3+h;fs.append((idx,idx+1,idx+4,idx+3));mi.append(random.randrange(4))
|
||||
ob=mesh('Fuller garden borders - curved lanceolate leaves',vs,fs)
|
||||
for m in leafm:ob.data.materials.append(m)
|
||||
ob.data.polygons.foreach_set('material_index',mi);ob.data.polygons.foreach_set('use_smooth',[True]*len(fs))
|
||||
print('PHASE # Small mineral',flush=True)
|
||||
# Small mineral chips follow the path ribbons, with low height to preserve walking.
|
||||
vs=[];fs=[]
|
||||
for path in layout['paths']:
|
||||
if path['kind']=='roofed walk' or 'VEHICLE' in path['name']:continue
|
||||
pts=path['points']
|
||||
for i in range(1,len(pts)-1,2):
|
||||
q=Vector(pts[i]);v=(Vector(pts[i+1])-Vector(pts[i-1])).normalized();side=Vector((-v.y,v.x))
|
||||
for j in range(4):
|
||||
pos=q+side*random.uniform(-.46,.46)*path['width'];z=ground(*pos)+.095;rx=random.uniform(.012,.038);ry=random.uniform(.009,.025);off=len(vs)
|
||||
vs.extend([(pos.x+rx*cos(k*pi/3),pos.y+ry*sin(k*pi/3),z+random.uniform(0,.009)) for k in range(6)]+[(pos.x,pos.y,z+.013)])
|
||||
fs.extend((off+k,off+(k+1)%6,off+6) for k in range(6))
|
||||
mesh('Garden paths - scattered mineral aggregate',vs,fs,pebble)
|
||||
print('PHASE # A more neutral',flush=True)
|
||||
# A more neutral, readable morning exposure; practical lights remain gentle.
|
||||
s.view_settings.view_transform='AgX';s.view_settings.look='AgX - Medium High Contrast';s.view_settings.exposure=.20
|
||||
s.cycles.samples=96;s.cycles.use_denoising=True;s.render.resolution_x=2560;s.render.resolution_y=1440;s.render.resolution_percentage=100
|
||||
print('PHASE # Refresh additional',flush=True)
|
||||
# Refresh additional detail proxy (existing geometry only changed through render modifiers).
|
||||
print('PHASE detail.hide_viewport=False',flush=True)
|
||||
detail.hide_viewport=False;bpy.context.view_layer.update();dg=bpy.context.evaluated_depsgraph_get();vs=[];fs=[];mi=[];mats=[];smooth=[]
|
||||
for ob in c.objects:
|
||||
if ob.type not in ['MESH','CURVE']:continue
|
||||
ev=ob.evaluated_get(dg);me=ev.to_mesh();off=len(vs);mw=Matrix.LocRotScale(ob.location,ob.rotation_euler.to_quaternion(),ob.scale);vs.extend(tuple(mw@v.co) for v in me.vertices)
|
||||
real_mats=[bpy.data.materials.get(m.name) for m in me.materials]
|
||||
for m in real_mats:
|
||||
if m not in mats:mats.append(m)
|
||||
for p in me.polygons:fs.append(tuple(off+i for i in p.vertices));mi.append(mats.index(real_mats[p.material_index]));smooth.append(p.use_smooth)
|
||||
ev.to_mesh_clear()
|
||||
me=bpy.data.meshes.new('Presentation detail proxy');me.from_pydata(vs,[],fs);me.update()
|
||||
for m in mats:me.materials.append(m)
|
||||
me.polygons.foreach_set('material_index',mi);me.polygons.foreach_set('use_smooth',smooth);ob=bpy.data.objects.new('FAST | Crafted details and fuller gardens',me);fast.objects.link(ob)
|
||||
detail.hide_viewport=True
|
||||
s['Current revision']='v007 — presentation detail, textured materials, fuller garden borders and a separate cinematic/Unreal walkthrough prototype.'
|
||||
print('PHASE s.frame_set(1);bpy.ops.wm.save',flush=True)
|
||||
s.frame_set(1);bpy.ops.wm.save_as_mainfile(filepath=O+'/samford-solarpunk-presentation-tour.blend')
|
||||
json.dump({'version':7,'beveled_objects':beveled,'materials_refined':material_changes,'new_detail_objects':len(c.objects),'new_leaf_faces':len(bpy.data.objects['Fuller garden borders - curved lanceolate leaves'].data.polygons),'tour_chapters':31},open(O+'/blender-enhancement-checks.json','w'),indent=2)
|
||||
# Actual Cycles stills for presentation review.
|
||||
for ob in bpy.data.collections['22 PLAY - guided camera tour'].objects:
|
||||
if ob.type=='FONT':ob.hide_render=True
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU';s.cycles.samples=48;s.render.resolution_percentage=75
|
||||
for name,f in [('presentation-overview',45),('presentation-kitchen',3520),('presentation-garden',3270)]:s.frame_set(f);s.render.filepath=O+'/renders/'+name+'.png';bpy.ops.render.render(write_still=True)
|
||||
print('PRESENTATION_READY',beveled,len(c.objects),flush=True)
|
||||
@@ -0,0 +1,57 @@
|
||||
import bpy,os,json,re,math
|
||||
from mathutils import Vector,Matrix
|
||||
from collections import defaultdict
|
||||
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));OUT=O+'/transfer';os.makedirs(OUT+'/Textures',exist_ok=True);source=bpy.context.scene;detail=bpy.data.collections['DETAIL - full geometry for renders'];detail.hide_viewport=False;source.frame_set(1);bpy.context.view_layer.update();deps=bpy.context.evaluated_depsgraph_get()
|
||||
objects=[o for o in detail.all_objects if o.type in ['MESH','CURVE'] and not o.hide_render and not any(c.name.startswith(('15 ','22 ','30 ')) for c in o.users_collection)]
|
||||
used=[]
|
||||
for o in objects:
|
||||
for m in o.data.materials:
|
||||
if m and not m.name.startswith('VIEW') and m not in used:used.append(m)
|
||||
new=bpy.data.scenes.new('Homestead Unreal transfer');new.unit_settings.system='METRIC';new.unit_settings.scale_length=1;bpy.context.window.scene=new
|
||||
manifest={'version':7,'source_blend':'samford-solarpunk-presentation-tour.blend','coordinate_transform':'UE centimetres: (100*x,-100*y,100*z)','objects':[],'materials':{},'source_objects':len(objects)}
|
||||
# Bake portable colour and tangent normal maps using the existing procedural shaders.
|
||||
new.render.engine='CYCLES';new.cycles.samples=1;new.cycles.device='CPU';new.render.bake.margin=4
|
||||
bpy.ops.mesh.primitive_plane_add(size=2);tile=bpy.context.object
|
||||
replacement={}
|
||||
for i,m in enumerate(used):
|
||||
key='M_%03d_'%i+re.sub('[^a-zA-Z0-9_]','_',m.name)[:65];p=next((n for n in m.node_tree.nodes if n.type=='BSDF_PRINCIPLED'),None) if m.node_tree else None
|
||||
base=list(m.diffuse_color);rough=float(p.inputs['Roughness'].default_value) if p else .7;metal=float(p.inputs['Metallic'].default_value) if p else 0
|
||||
record={'source':m.name,'base_color':base,'roughness':rough,'metallic':metal,'emission':float(p.inputs['Emission Strength'].default_value) if p else 0,'transmission':float(p.inputs['Transmission Weight'].default_value) if p else 0}
|
||||
exported=bpy.data.materials.new(key);exported.diffuse_color=base;replacement[m]=exported
|
||||
if p and p.inputs['Base Color'].is_linked:
|
||||
bake=m.copy();tile.data.materials.clear();tile.data.materials.append(bake);ns=bake.node_tree.nodes;ls=bake.node_tree.links;bp=next(n for n in ns if n.type=='BSDF_PRINCIPLED');out=next(n for n in ns if n.type=='OUTPUT_MATERIAL');im=bpy.data.images.new(key+'_BaseColor',width=512,height=512);im.filepath_raw=OUT+'/Textures/'+key+'_BaseColor.png';im.file_format='PNG';target=ns.new('ShaderNodeTexImage');target.image=im;ns.active=target;em=ns.new('ShaderNodeEmission');ls.new(bp.inputs['Base Color'].links[0].from_socket,em.inputs['Color']);ls.new(em.outputs[0],out.inputs['Surface']);bpy.context.view_layer.objects.active=tile;tile.select_set(True);bpy.ops.object.bake(type='EMIT');im.save();record['base_color_texture']='Textures/'+key+'_BaseColor.png'
|
||||
if bp.inputs['Normal'].is_linked:
|
||||
nm=bpy.data.images.new(key+'_Normal',width=512,height=512);nm.colorspace_settings.name='Non-Color';nm.filepath_raw=OUT+'/Textures/'+key+'_Normal.png';nm.file_format='PNG';target.image=nm;ns.active=target;ls.new(bp.outputs[0],out.inputs['Surface']);bpy.ops.object.bake(type='NORMAL');nm.save();record['normal_texture']='Textures/'+key+'_Normal.png'
|
||||
bpy.data.materials.remove(bake)
|
||||
manifest['materials'][key]=record
|
||||
print('BAKED',i,key,flush=True)
|
||||
bpy.data.objects.remove(tile,do_unlink=True)
|
||||
# Partition by collection and material: static world transforms, proper normals and box UVs.
|
||||
groups={}
|
||||
for idx,o in enumerate(objects):
|
||||
ev=o.evaluated_get(deps);me=ev.to_mesh();mw=Matrix.LocRotScale(o.location,o.rotation_euler.to_quaternion(),o.scale)
|
||||
category=next((c.name for c in o.users_collection if c.name!='DETAIL - full geometry for renders'),'Other');prefix=re.sub('[^a-zA-Z0-9_]','_',category)[:55]
|
||||
verts=[tuple(mw@v.co) for v in me.vertices]
|
||||
if not verts:ev.to_mesh_clear();continue
|
||||
lo=[min(v[k] for v in verts) for k in range(3)];hi=[max(v[k] for v in verts) for k in range(3)]
|
||||
for mi,em in enumerate(me.materials):
|
||||
m=bpy.data.materials.get(em.name) if em else None
|
||||
if m not in replacement:continue
|
||||
polys=[p for p in me.polygons if p.material_index==mi]
|
||||
if not polys:continue
|
||||
key=(prefix,replacement[m].name);g=groups.setdefault(key,{'verts':[],'faces':[],'uvs':[],'smooth':[],'sources':[]});g['sources'].append(o.name)
|
||||
off=len(g['verts']);g['verts'].extend(verts)
|
||||
for p in polys:
|
||||
g['faces'].append(tuple(off+i for i in p.vertices));g['smooth'].append(p.use_smooth)
|
||||
normal=mw.to_3x3()@p.normal;drop=max(range(3),key=lambda i:abs(normal[i]));axes=[i for i in range(3) if i!=drop]
|
||||
for vi in p.vertices:g['uvs'].append(tuple((verts[vi][k]-lo[k])/max(.08,hi[k]-lo[k]) for k in axes))
|
||||
ev.to_mesh_clear()
|
||||
if idx%800==0:print('GEOMETRY',idx,flush=True)
|
||||
for number,((cat,matname),g) in enumerate(groups.items()):
|
||||
name='SM_%03d_'%number+cat;me=bpy.data.meshes.new(name);me.from_pydata(g['verts'],[],g['faces']);me.update();me.materials.append(bpy.data.materials[matname]);me.polygons.foreach_set('use_smooth',g['smooth']);uv=me.uv_layers.new();uv.data.foreach_set('uv',[v for q in g['uvs'] for v in q]);ob=bpy.data.objects.new(name,me);new.collection.objects.link(ob)
|
||||
noncoll=cat.startswith(('08_','09_','24_')) or any(k in matname.lower() for k in ['leaf','grass','flower','glazing','shadow','haze','flame','annotation']) or all(any(k in n.lower() for k in ['leaves','aggregate','weave','pendant','plate','cup','stem','vase','track inset','bolt head']) for n in g['sources'])
|
||||
manifest['objects'].append({'name':name,'material':matname,'category':cat,'collision':not noncoll,'vertices':len(g['verts']),'faces':len(g['faces']),'source_count':len(g['sources'])})
|
||||
bpy.ops.object.select_all(action='SELECT')
|
||||
bpy.ops.export_scene.fbx(filepath=OUT+'/SamfordHomestead.fbx',use_selection=True,object_types={'MESH'},use_mesh_modifiers=False,add_leaf_bones=False,bake_anim=False,axis_forward='-Y',axis_up='Z',path_mode='RELATIVE')
|
||||
json.dump(manifest,open(OUT+'/homestead-manifest.json','w'),indent=2)
|
||||
print('HOMESTEAD_EXPORT_READY',len(groups),len(used),flush=True)
|
||||
@@ -0,0 +1,22 @@
|
||||
import bpy,os,json
|
||||
from mathutils import Vector
|
||||
from math import sin,cos,pi
|
||||
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene;mode='cinematic' if 'cinematic' in bpy.data.filepath else 'model';c=bpy.data.collections['37 Presentation - crafted details and fuller planting'];fast=bpy.data.collections['00 FAST TOUR - lightweight viewport']
|
||||
a=Vector((-4.32,-2.74,2.067));b=Vector((-4.32,-2.74,2.475));q=(b-a).to_track_quat('Z','Y');N=24
|
||||
vs=[tuple(a+q@Vector((.014*cos(i*2*pi/N),.014*sin(i*2*pi/N),z))) for z in [0,(b-a).length] for i in range(N)];fs=[tuple(reversed(range(N))),tuple(range(N,2*N))]+[(i,(i+1)%N,(i+1)%N+N,i+N) for i in range(N)]
|
||||
me=bpy.data.meshes.new('Connected copper mixer riser');me.from_pydata(vs,[],fs);me.update();me.materials.append(bpy.data.materials['Copper cookware - brushed warm patina'])
|
||||
for p in me.polygons:p.use_smooth=len(p.vertices)==4
|
||||
ob=bpy.data.objects.new('Kitchen mixer - visible connected copper riser',me);c.objects.link(ob);proxy=bpy.data.objects.new('FAST | Connected kitchen mixer riser',me);fast.objects.link(proxy);s.frame_set(1);bpy.ops.wm.save_as_mainfile(filepath=bpy.data.filepath)
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU';s.cycles.use_denoising=True;s.render.use_persistent_data=True;s.render.resolution_percentage=75
|
||||
if mode=='model':
|
||||
for c in ['22 PLAY - guided camera tour','15 Expansion labels - toggle to hide']:
|
||||
for ob in bpy.data.collections[c].objects:
|
||||
if ob.type=='FONT':ob.hide_render=True
|
||||
s.cycles.samples=48;s.frame_set(3520);s.render.filepath=O+'/renders/presentation-kitchen.png';bpy.ops.render.render(write_still=True)
|
||||
r=json.load(open(O+'/blender-enhancement-checks.json'));r['new_detail_objects']+=1;r['tap_connection_corrected']=True;json.dump(r,open(O+'/blender-enhancement-checks.json','w'),indent=2)
|
||||
else:
|
||||
s.cycles.samples=8;s.cycles.adaptive_threshold=.12;s.render.image_settings.file_format='JPEG';s.render.image_settings.quality=95
|
||||
for j in range(18):s.frame_set(145+j*4);s.render.filepath=O+'/video/frames6/shot03_%03d.jpg'%j;bpy.ops.render.render(write_still=True)
|
||||
print('TAP_CONNECTION_REPAIRED',mode,flush=True)
|
||||
@@ -0,0 +1,37 @@
|
||||
import bpy,os,json,math
|
||||
from mathutils import Vector
|
||||
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene
|
||||
for c in ['22 PLAY - guided camera tour','15 Expansion labels - toggle to hide']:
|
||||
for o in bpy.data.collections[c].objects:
|
||||
if o.type=='FONT':o.hide_render=True
|
||||
cam=s.camera;cam.animation_data_clear();cam.data.animation_data_clear();cam.data.dof.use_dof=False
|
||||
# Eight compact camera movements; no fly-through through walls or furniture.
|
||||
shots=[
|
||||
('A home in the garden',(35,43,29),(32,40,27),(0,-3,1),38),
|
||||
('Timber verandah and open living',(7,11,3.3),(5.8,9.7,3.1),(0,1.5,2.1),31),
|
||||
('Kitchen / natural materials',(1.5,2.35,2.85),(.7,2.1,2.75),(-3.5,-1.3,2.15),27),
|
||||
('Room for shared meals',(17,9,4.3),(16,8.2,4.0),(10,3.5,1.9),36),
|
||||
('A private sleeping wing',(-6.4,.7,4.2),(-7.3,.4,3.9),(-12,-5,2),34),
|
||||
('Meditation in the garden',(-6.9,18.5,3),(-7.7,17.7,2.6),(-12.4,15.35,.65),42),
|
||||
('Growing food / collecting water',(34,15,17),(32,13,15),(21,-3,1),37),
|
||||
('Space to grow over time',(23,33,20),(20,30,18),(0,13,1),35)]
|
||||
s.render.fps=24;s.frame_start=1;s.frame_end=8*72
|
||||
for i,(label,a,b,target,lens) in enumerate(shots):
|
||||
start=i*72+1;end=(i+1)*72
|
||||
for f,p in [(start,a),(end,b)]:
|
||||
cam.location=p;cam.rotation_euler=(Vector(target)-cam.location).to_track_quat('-Z','Y').to_euler();cam.keyframe_insert('location',frame=f);cam.keyframe_insert('rotation_euler',frame=f);cam.data.lens=lens;cam.data.keyframe_insert('lens',frame=f)
|
||||
for owner in [cam,cam.data]:
|
||||
for layer in owner.animation_data.action.layers:
|
||||
for strip in layer.strips:
|
||||
for bag in strip.channelbags:
|
||||
for fc in bag.fcurves:
|
||||
for k in fc.keyframe_points:k.interpolation='LINEAR'
|
||||
s.render.engine='CYCLES';s.cycles.samples=12;s.cycles.use_denoising=True;s.cycles.use_adaptive_sampling=True;s.cycles.adaptive_threshold=.08;s.render.resolution_x=1920;s.render.resolution_y=1080;s.render.resolution_percentage=100;s.render.image_settings.file_format='PNG';s.render.filepath=O+'/video/frames/frame_';s.render.film_transparent=False
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU';s.render.use_persistent_data=True;s.frame_set(1)
|
||||
bpy.ops.wm.save_as_mainfile(filepath=O+'/samford-client-cinematic.blend')
|
||||
json.dump([dict(title=sh[0],start=i*72+1,end=(i+1)*72,seconds=3) for i,sh in enumerate(shots)],open(O+'/video/cinematic-shots.json','w'),indent=2)
|
||||
# Compare a real-time preview frame before choosing the final video renderer.
|
||||
s.render.engine='CYCLES';s.cycles.samples=12;s.frame_set(145);s.render.filepath=O+'/renders/cinematic-kitchen-test.png';bpy.ops.render.render(write_still=True)
|
||||
print('CINEMATIC_PREPARED',flush=True)
|
||||
@@ -0,0 +1,13 @@
|
||||
import bpy,os
|
||||
from mathutils import Vector
|
||||
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene;cam=s.camera
|
||||
for f,p in [(289,(-10.7,-6.95,3.30)),(360,(-10.9,-6.75,3.15))]:
|
||||
s.frame_set(f);cam.location=p;cam.rotation_euler=(Vector((-12.5,-5,2.02))-cam.location).to_track_quat('-Z','Y').to_euler();cam.keyframe_insert('location',frame=f);cam.keyframe_insert('rotation_euler',frame=f);cam.data.lens=23;cam.data.keyframe_insert('lens',frame=f)
|
||||
s.frame_set(1);bpy.ops.wm.save_as_mainfile(filepath=O+'/samford-client-cinematic.blend')
|
||||
s.render.resolution_percentage=75;s.cycles.samples=8;s.cycles.use_denoising=True;s.cycles.adaptive_threshold=.12;s.render.use_persistent_data=True;s.render.image_settings.file_format='JPEG';s.render.image_settings.quality=95
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU'
|
||||
for j in range(18):
|
||||
s.frame_set(289+j*4);s.render.filepath=O+'/video/frames6/shot05_%03d.jpg'%j;bpy.ops.render.render(write_still=True)
|
||||
print('BEDROOM_SHOT_REFINED',flush=True)
|
||||
16
source/samford-v007-client-walkthrough/source/render_film.py
Normal file
@@ -0,0 +1,16 @@
|
||||
import bpy,os,time,json
|
||||
O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));s=bpy.context.scene
|
||||
# Six source frames per second, interpolated per shot to the 24 fps presentation master.
|
||||
s.render.resolution_percentage=75;s.cycles.samples=8;s.cycles.adaptive_threshold=.12;s.render.use_persistent_data=True;s.render.image_settings.file_format='JPEG';s.render.image_settings.quality=95
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU'
|
||||
started=time.time()
|
||||
for shot in range(8):
|
||||
for j in range(18):
|
||||
f=shot*72+1+j*4;path=O+'/video/frames6/shot%02d_%03d.jpg'%(shot+1,j)
|
||||
if os.path.exists(path):continue
|
||||
s.frame_set(f);s.render.filepath=path;bpy.ops.render.render(write_still=True)
|
||||
if j%12==0:print('FILM_PROGRESS',shot+1,j,round(time.time()-started),flush=True)
|
||||
json.dump({'source_size':[1440,810],'source_fps':6,'shots':8,'source_frames':144,'seconds':24,'renderer':'Cycles','samples':8},open(O+'/video/render-checks.json','w'),indent=2)
|
||||
print('FILM_FRAMES_READY',flush=True)
|
||||
@@ -0,0 +1,12 @@
|
||||
import bpy,json,os
|
||||
s=bpy.context.scene;O=os.path.abspath(os.path.join(os.path.dirname(__file__),'..'));names=[o.name for o in s.objects];r={}
|
||||
r['required_features']={n:n in names for n in ['ISLAND - honed marble countertop','FAST | Garden Buddha statue','CONTAINER WATER - steel base frame','Living woven jute rug','Fuller garden borders - curved lanceolate leaves','FAST | Crafted details and fuller gardens']}
|
||||
assert all(r['required_features'].values())
|
||||
r['render']=[s.render.engine,s.render.resolution_x,s.render.resolution_y,s.render.resolution_percentage];assert r['render']==['CYCLES',2560,1440,100]
|
||||
r['ghosts']=len(bpy.data.collections['24 LATER - Shadow spaces only'].objects);assert r['ghosts']==26
|
||||
r['captions']=[];fonts=[o for o in bpy.data.collections['22 PLAY - guided camera tour'].objects if o.type=='FONT']
|
||||
for f in range(1,3721,120):s.frame_set(f+20);visible=[o.data.body for o in fonts if o.scale.length>.5];assert len(visible)==1,(f,visible);r['captions']+=visible
|
||||
assert len(r['captions'])==31 and s.frame_end==3720
|
||||
r['no_ping_pong']=not any('table tennis' in n.lower() for n in names);assert r['no_ping_pong']
|
||||
r['material_references_valid']=all(m in bpy.data.materials.values() for o in s.objects if o.type=='MESH' for m in o.data.materials if m);assert r['material_references_valid']
|
||||
r['status']='PASS';json.dump(r,open(O+'/blender-verification.json','w'),indent=2);print('BLENDER_VERIFIED',flush=True)
|
||||
8
source/samford-v008-tesla/asset-source.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"scene_uuid": "b061a256-d972-4ed3-a632-2d4314aa2e99",
|
||||
"assetBaseId": "1fc56739-2fd9-447e-b2c1-fee5d9e276b7",
|
||||
"assetId": "e829e99d-fbf3-4d9a-96cf-c62495f35e78",
|
||||
"author": "7K Studio",
|
||||
"license": "royalty_free",
|
||||
"source": "https://www.blendkit.com/asset-gallery-detail/1fc56739-2fd9-447e-b2c1-fee5d9e276b7/"
|
||||
}
|
||||
18
source/samford-v008-tesla/blender-final-verification.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"artist_objects": 45,
|
||||
"no_old_tesla": true,
|
||||
"bicycles_and_racks": 86,
|
||||
"tour_chapters": 31,
|
||||
"packed_asset_images": true,
|
||||
"features": {
|
||||
"ISLAND - honed marble countertop": true,
|
||||
"FAST | Garden Buddha": true,
|
||||
"CONTAINER WATER - steel base frame": true,
|
||||
"Tesla wall connector": true,
|
||||
"GARAGE WORKSTATION": true
|
||||
},
|
||||
"licensed_asset_id": "1fc56739-2fd9-447e-b2c1-fee5d9e276b7",
|
||||
"status": "PASS",
|
||||
"tour_matches_v007_exactly": true,
|
||||
"saved_file_reopened": true
|
||||
}
|
||||
40
source/samford-v008-tesla/export_tesla.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import bpy,json,re
|
||||
from pathlib import Path
|
||||
from mathutils import Vector
|
||||
P=Path(__file__).resolve().parents[1];out=P/'private-assets/transfer';out.mkdir(exist_ok=True)
|
||||
scene=bpy.context.scene;fast=bpy.data.collections['00 FAST TOUR - lightweight viewport'];fast.hide_viewport=False;bpy.data.collections['DETAIL - full geometry for renders'].hide_viewport=False;bpy.context.view_layer.update()
|
||||
# Keep existing charging lead endpoint and corresponding plug together.
|
||||
bpy.data.objects['Tesla plugged charge connector'].location=(-2.67,-21.08,1.56)
|
||||
# Source file is saved with the static display and all existing tour chapters.
|
||||
bpy.data.collections['DETAIL - full geometry for renders'].hide_viewport=True
|
||||
bpy.ops.wm.save_as_mainfile(filepath=str(P/'samford-solarpunk-tesla-v008.blend'))
|
||||
objects=[bpy.data.objects['FAST | 38 Licensed Tesla Model 3'],bpy.data.objects['FAST | 29 Bicycles and racks']]
|
||||
# Transfer original mesh, source UVs and material slots. Adapt legacy Blender shaders to UE PBR.
|
||||
used=list(dict.fromkeys(m for o in objects for m in o.data.materials if m));mats={}
|
||||
for i,m in enumerate(used):
|
||||
n=m.name.lower();base=(.055,.055,.055,1);rough=.45;metal=0;opacity=1;coat=0
|
||||
if 'car paint' in n:base=(.009,.012,.016,1);rough=.16;metal=.35;coat=1
|
||||
elif 'glass' in n:base=(.035,.07,.07,1);rough=.065;opacity=.28 if 'dark' not in n else .65
|
||||
elif any(s in n for s in ['steel','metal','mirror','reflection']):base=(.36,.38,.4,1);rough=.23;metal=1
|
||||
elif 'wood' in n:base=(.36,.19,.08,1);rough=.48
|
||||
elif 'red' in n:base=(.45,.008,.01,1);rough=.18
|
||||
elif 'blinker' in n:base=(.8,.22,.012,1);rough=.18
|
||||
elif any(s in n for s in ['led.front','led.bright','normal lamp']):base=(.85,.85,.82,1);rough=.14
|
||||
elif 'tire' in n or 'rubber' in n:base=(.015,.018,.018,1);rough=.75
|
||||
elif 'bright' in n:base=(.58,.59,.6,1);rough=.5
|
||||
# Preserve original house bicycle colours using their Principled inputs.
|
||||
if not any(m in bpy.data.objects['FAST | 38 Licensed Tesla Model 3'].data.materials[:] for _ in [0]):
|
||||
bs=next((x for x in m.node_tree.nodes if x.type=='BSDF_PRINCIPLED'),None) if m.use_nodes else None
|
||||
if bs:base=tuple(bs.inputs['Base Color'].default_value);rough=bs.inputs['Roughness'].default_value;metal=bs.inputs['Metallic'].default_value
|
||||
key='M_Tesla_%02d_'%i+re.sub('[^a-zA-Z0-9_]','_',m.name)
|
||||
mats[key]={'source':m.name,'base_color':base,'roughness':rough,'metallic':metal,'opacity':opacity,'coat':coat}
|
||||
m.name=key;m.diffuse_color=base
|
||||
records=[]
|
||||
for name,o in zip(['Tesla_7K','Bicycles_preserved'],objects):
|
||||
o.name=name;records.append({'name':name,'materials':[m.name for m in o.data.materials]})
|
||||
bpy.ops.object.select_all(action='DESELECT')
|
||||
for o in objects:o.select_set(True)
|
||||
bpy.context.view_layer.objects.active=objects[0]
|
||||
bpy.ops.export_scene.fbx(filepath=str(out/'TeslaGarage.fbx'),use_selection=True,object_types={'MESH'},use_mesh_modifiers=True,bake_anim=False,axis_forward='-Y',axis_up='Z',path_mode='AUTO')
|
||||
(out/'manifest.json').write_text(json.dumps({'materials':mats,'objects':records,'original_asset':'7K Studio Tesla Model 3','note':'Artist geometry and UVs; legacy shaders adapted to UE PBR.'},indent=2))
|
||||
print('TESLA_EXPORTED',len(mats),flush=True)
|
||||
23
source/samford-v008-tesla/finalize_blender.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import bpy,json
|
||||
from pathlib import Path
|
||||
from mathutils import Vector
|
||||
P=Path(__file__).resolve().parents[1];s=bpy.context.scene;detail=bpy.data.collections['DETAIL - full geometry for renders'];fast=bpy.data.collections['00 FAST TOUR - lightweight viewport']
|
||||
cam=bpy.data.objects['VIEW - 7K Tesla garage'];cam.location=(-2.8,-12,2.45);cam.rotation_euler=(Vector((-1.2,-19.2,1.45))-cam.location).to_track_quat('-Z','Y').to_euler();cam.data.lens=36
|
||||
# Save this close-up as the opening view while retaining the original animated tour camera.
|
||||
for screen in bpy.data.screens:
|
||||
for area in screen.areas:
|
||||
if area.type=='VIEW_3D':
|
||||
r=area.spaces.active.region_3d;r.view_perspective='PERSP';r.view_location=Vector((-1.5,-19.1,1.4));r.view_distance=8;r.view_rotation=cam.rotation_euler.to_quaternion()
|
||||
s.frame_set(1);bpy.ops.wm.save_as_mainfile(filepath=str(P/'samford-solarpunk-tesla-v008.blend'))
|
||||
# Verify unaffected features and artist identity in the final saved file.
|
||||
names=[o.name for o in bpy.data.objects];car=bpy.data.collections['38 Licensed - Tesla Model 3 by 7K Studio'];old=bpy.data.collections['29 Car and bicycles'];captions=[o.name for o in bpy.data.objects if o.type=='FONT' and ' / ' in o.name]
|
||||
r={'artist_objects':len(car.objects),'no_old_tesla':not any(o.name.lower().startswith('tesla') for o in old.objects),'bicycles_and_racks':len(old.objects),'tour_chapters':len(captions),'packed_asset_images':all(i.packed_file for i in bpy.data.images if i.source=='FILE' and i.users>0),'features':{k:any(k in n for n in names) for k in ['ISLAND - honed marble countertop','FAST | Garden Buddha','CONTAINER WATER - steel base frame','Tesla wall connector','GARAGE WORKSTATION']},'licensed_asset_id':next(o for o in car.objects if o.parent is None)['asset_id']}
|
||||
assert r['artist_objects']==45 and r['no_old_tesla'] and r['bicycles_and_racks']==86
|
||||
assert all(r['features'].values())
|
||||
r['status']='PASS';(P/'blender-final-verification.json').write_text(json.dumps(r,indent=2))
|
||||
detail.hide_viewport=False;fast.hide_viewport=True;s.camera=cam
|
||||
s.render.engine='CYCLES';s.render.resolution_x=1600;s.render.resolution_y=1000;s.render.resolution_percentage=100;s.cycles.samples=40;s.cycles.use_denoising=True
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences;prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
s.cycles.device='GPU';s.render.image_settings.file_format='PNG';s.render.filepath=str(P/'renders/tesla-garage.png');bpy.ops.render.render(write_still=True)
|
||||
print('FINAL_TESLA_VERIFIED',flush=True)
|
||||
72
source/samford-v008-tesla/replace_tesla.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import bpy,json,math
|
||||
from pathlib import Path
|
||||
from mathutils import Matrix,Vector
|
||||
P=Path(__file__).resolve().parents[1]
|
||||
scene=bpy.context.scene;detail=bpy.data.collections['DETAIL - full geometry for renders'];fast=bpy.data.collections['00 FAST TOUR - lightweight viewport'];detail.hide_viewport=False;fast.hide_viewport=True
|
||||
scene.frame_set(1);bpy.context.view_layer.update()
|
||||
old=bpy.data.collections['29 Car and bicycles'];removed=[o.name for o in old.objects if o.name.lower().startswith('tesla')]
|
||||
for n in removed:bpy.data.objects.remove(bpy.data.objects[n],do_unlink=True)
|
||||
oldproxy=bpy.data.objects.get('FAST | 29 Car and bicycles')
|
||||
if oldproxy:bpy.data.objects.remove(oldproxy,do_unlink=True)
|
||||
with bpy.data.libraries.load(str(P/'private-assets/7K-Studio-Tesla-Model-3.blend'),link=False) as (src,dst):dst.objects=src.objects
|
||||
car=bpy.data.collections.new('38 Licensed - Tesla Model 3 by 7K Studio');detail.children.link(car)
|
||||
for o in dst.objects:
|
||||
if o:car.objects.link(o);o.name='7K Tesla | '+o.name
|
||||
root=next(o for o in car.objects if o.type=='EMPTY' and o.parent is None)
|
||||
root.location=(-1.7,-19.1,.631);root['creator']='7K Studio';root['license']='BlenderKit Royalty Free - keep out of public source distribution';root['asset_id']='1fc56739-2fd9-447e-b2c1-fee5d9e276b7'
|
||||
bpy.context.view_layer.update()
|
||||
# Keep original artist geometry/shaders. Limit only the viewport subdivision cost.
|
||||
for o in car.objects:
|
||||
for mod in o.modifiers:
|
||||
if mod.type=='SUBSURF':mod.levels=min(mod.levels,1);mod.render_levels=min(mod.render_levels,2)
|
||||
# Static evaluated copy preserves source UVs and materials for fast viewport and export.
|
||||
def proxy(collection,name,ratio=1):
|
||||
deps=bpy.context.evaluated_depsgraph_get();copies=[]
|
||||
for o in collection.objects:
|
||||
if o.type not in {'MESH','CURVE','FONT'}:continue
|
||||
ev=o.evaluated_get(deps);me=bpy.data.meshes.new_from_object(ev,depsgraph=deps);ob=bpy.data.objects.new('temporary proxy',me);fast.objects.link(ob);ob.matrix_world=o.matrix_world.copy();copies.append(ob)
|
||||
# Resolve original material datablocks, never keep evaluated IDs.
|
||||
mats=[bpy.data.materials.get(m.name) if m else None for m in me.materials];me.materials.clear()
|
||||
for m in mats:
|
||||
if m:me.materials.append(m)
|
||||
bpy.ops.object.select_all(action='DESELECT')
|
||||
for o in copies:o.select_set(True)
|
||||
bpy.context.view_layer.objects.active=copies[0];bpy.ops.object.join();ob=copies[0];ob.name=name
|
||||
bpy.ops.object.transform_apply(location=True,rotation=True,scale=True)
|
||||
if ratio<1:
|
||||
d=ob.modifiers.new('Viewport simplification','DECIMATE');d.ratio=ratio;bpy.ops.object.modifier_apply(modifier=d.name)
|
||||
return ob
|
||||
fast.hide_viewport=False
|
||||
bikeproxy=proxy(old,'FAST | 29 Bicycles and racks')
|
||||
teslaproxy=proxy(car,'FAST | 38 Licensed Tesla Model 3',.35)
|
||||
fast.hide_viewport=True
|
||||
# Coil cable on the wall hook instead of leaving a plug floating at the old car.
|
||||
for o in list(bpy.data.collections['28 Garage and workbench'].objects):
|
||||
if 'charge' in o.name.lower() or 'cable' in o.name.lower():print('CHARGER',o.name,flush=True)
|
||||
plug=bpy.data.objects.get('Tesla plugged charge connector')
|
||||
if plug:plug.location=(-3.66,-20.8,1.77)
|
||||
# Additional camera does not alter the existing animated 31-stop tour.
|
||||
camdata=bpy.data.cameras.new('Tesla garage detail');cam=bpy.data.objects.new('VIEW - 7K Tesla garage',camdata);scene.collection.objects.link(cam);cam.location=(-5.1,-12.1,2.55);target=Vector((-1.0,-19.25,1.40));cam.rotation_euler=(target-cam.location).to_track_quat('-Z','Y').to_euler();camdata.lens=39
|
||||
scene['vehicle_asset']='Tesla Model 3 by 7K Studio; BlenderKit asset 1fc56739-2fd9-447e-b2c1-fee5d9e276b7';scene['revision']='v008 licensed Tesla replacement';scene['public_distribution']='Do not publish this .blend or extracted car; use public source without licensed asset.'
|
||||
# Record exact source objects for the narrow Unreal replacement.
|
||||
pts=[o.matrix_world@Vector(v) for o in car.objects if o.type=='MESH' for v in o.bound_box]
|
||||
r={'removed_placeholder_objects':removed,'artist_objects':len(car.objects),'car_bounds':[[min(v[k] for v in pts),max(v[k] for v in pts)] for k in range(3)],'car_length':max(v.y for v in pts)-min(v.y for v in pts),'fast_car_polygons':len(teslaproxy.data.polygons),'bicycles_preserved':len(old.objects),'source_asset':'1fc56739-2fd9-447e-b2c1-fee5d9e276b7'}
|
||||
(P/'blender-replacement-checks.json').write_text(json.dumps(r,indent=2))
|
||||
assert 4.5<r['car_length']<4.9
|
||||
assert .61<r['car_bounds'][2][0]<.65
|
||||
assert len(old.objects)>10
|
||||
bpy.ops.file.pack_all()
|
||||
# Save user-ready file with fast display and the original tour camera active.
|
||||
fast.hide_viewport=False;detail.hide_viewport=True
|
||||
bpy.ops.wm.save_as_mainfile(filepath=str(P/'samford-solarpunk-tesla-v008.blend'))
|
||||
# Render full geometry in the dedicated garage camera.
|
||||
detail.hide_viewport=False;fast.hide_viewport=True;scene.camera=cam
|
||||
scene.render.engine='CYCLES';scene.render.resolution_x=1600;scene.render.resolution_y=1000;scene.render.resolution_percentage=100;scene.cycles.samples=40;scene.cycles.use_denoising=True
|
||||
prefs=bpy.context.preferences.addons['cycles'].preferences
|
||||
try:
|
||||
prefs.compute_device_type='METAL';prefs.get_devices()
|
||||
for d in prefs.devices:d.use=d.type=='METAL'
|
||||
scene.cycles.device='GPU'
|
||||
except Exception:pass
|
||||
scene.render.image_settings.file_format='PNG';scene.render.filepath=str(P/'renders/tesla-garage.png');bpy.ops.render.render(write_still=True)
|
||||
print('TESLA_REPLACEMENT_READY',flush=True)
|
||||
107
source/samford-v008-tesla/unreal-daylight-checks.json
Normal file
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"sun_lux": 65000,
|
||||
"sun_elevation_degrees": 52.465094,
|
||||
"sky_intensity": 3.5,
|
||||
"exposure_EV_range": [
|
||||
6.5,
|
||||
16
|
||||
],
|
||||
"exposure_bias": 0.5,
|
||||
"material_slots_resolved_by_imported_name": [
|
||||
[
|
||||
"TeslaGarage_Bicycles_preserved",
|
||||
0,
|
||||
"M_Tesla_26_Garage_rubber_and_dark_tools"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Bicycles_preserved",
|
||||
1,
|
||||
"M_Tesla_27_Garage_brushed_aluminium"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Bicycles_preserved",
|
||||
2,
|
||||
"M_Tesla_28_Bicycle_ochre_frame"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Bicycles_preserved",
|
||||
3,
|
||||
"M_Tesla_29_Reusable_dark_steel_bolts_and_shoes"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Bicycles_preserved",
|
||||
4,
|
||||
"M_Tesla_30_Bicycle_blue_green_frame"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
0,
|
||||
"M_Tesla_00_Glass"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
1,
|
||||
"M_Tesla_01_LightAbsorber"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
2,
|
||||
"M_Tesla_02_Tire"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
3,
|
||||
"M_Tesla_03_Plastic_Inventory"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
4,
|
||||
"M_Tesla_04_Steel"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
5,
|
||||
"M_Tesla_06_Plastic_Shiny"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
6,
|
||||
"M_Tesla_08_Car_Paint"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
7,
|
||||
"M_Tesla_10_Plastic_Inventory_Bright"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
8,
|
||||
"M_Tesla_21_Carpet"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
9,
|
||||
"M_Tesla_23_Fabric_Dark"
|
||||
],
|
||||
[
|
||||
"TeslaGarage_Tesla_7K",
|
||||
10,
|
||||
"M_Tesla_24_Metal_brake_discs"
|
||||
]
|
||||
],
|
||||
"car_collision": "simple box for walking, detail triangles retained for complex traces",
|
||||
"level_saved": true,
|
||||
"removed_opaque_blender_volume": [
|
||||
"SamfordHomestead_SM_056_11_Camera_and_atmosphere"
|
||||
],
|
||||
"sunlight_obstruction_fixed": true,
|
||||
"sun_forward": [
|
||||
-0.39649116028239617,
|
||||
0.4625730204439079,
|
||||
-0.7929823204683187
|
||||
],
|
||||
"sun_rotation": "<Struct 'Rotator' (0x3e3ac12d0) {pitch: -52.465094, yaw: 130.601295, roll: -0.000000}>",
|
||||
"sun_direction_corrected": true,
|
||||
"actual_daylight_verified": true,
|
||||
"visual_verification": "Reviewed fresh Unreal overview, verandah and garage screenshots after correcting the sun direction: directly sunlit terrain and buildings, shaded interiors remain readable."
|
||||
}
|
||||
44
source/samford-v008-tesla/unreal-daylight.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import unreal as u,time,json,math
|
||||
from pathlib import Path
|
||||
P=Path(__file__).resolve().parents[3];A=u.get_editor_subsystem(u.EditorActorSubsystem);E=u.get_editor_subsystem(u.LevelEditorSubsystem);L=u.EditorAssetLibrary;S=u.get_editor_subsystem(u.StaticMeshEditorSubsystem);world=u.get_editor_subsystem(u.UnrealEditorSubsystem).get_editor_world();actors=A.get_all_level_actors();u.EditorPythonScripting.set_keep_python_script_alive(True)
|
||||
def prop(o,k,v):o.set_editor_property(k,v)
|
||||
# Resolve the actual imported slot names; FBX can reorder slots.
|
||||
slots=[]
|
||||
for path in L.list_assets('/Game/LicensedTesla/Meshes',recursive=True):
|
||||
mesh=L.load_asset(path)
|
||||
if not isinstance(mesh,u.StaticMesh):continue
|
||||
for i,slot in enumerate(mesh.static_materials):
|
||||
key=str(slot.get_editor_property('imported_material_slot_name'))
|
||||
material=L.load_asset('/Game/LicensedTesla/Materials/'+key)
|
||||
assert material,('Missing imported material slot',mesh.get_name(),key)
|
||||
mesh.set_material(i,material);slots.append([mesh.get_name(),i,key])
|
||||
if mesh.get_name().endswith('Tesla_7K'):
|
||||
S.remove_collisions(mesh);S.add_simple_collisions(mesh,u.ScriptCollisionShapeType.BOX);prop(mesh.get_editor_property('body_setup'),'collision_trace_flag',u.CollisionTraceFlag.CTF_USE_SIMPLE_AND_COMPLEX)
|
||||
L.save_loaded_asset(mesh)
|
||||
sun=next(a for a in actors if isinstance(a,u.DirectionalLight));sun.set_actor_label('Clear daytime sun');sun.set_actor_rotation(u.MathLibrary.find_look_at_rotation(u.Vector(1200,-1400,2400),u.Vector(0,0,0)),False);sun.light_component.set_intensity(65000);sun.light_component.set_light_color(u.LinearColor(1,.96,.88,1));prop(sun.light_component,'light_source_angle',1.0);prop(sun.light_component,'indirect_lighting_intensity',2.5)
|
||||
for a in actors:
|
||||
if isinstance(a,u.SkyLight):
|
||||
a.light_component.set_intensity(3.5);prop(a.light_component,'real_time_capture',True)
|
||||
if isinstance(a,u.ExponentialHeightFog):prop(a.component,'fog_density',.001)
|
||||
if isinstance(a,u.PostProcessVolume):
|
||||
p=a.settings
|
||||
for k,v in dict(override_auto_exposure_min_brightness=True,override_auto_exposure_max_brightness=True,auto_exposure_min_brightness=5.5,auto_exposure_max_brightness=11.0,override_auto_exposure_bias=True,auto_exposure_bias=1.2,override_auto_exposure_speed_up=True,auto_exposure_speed_up=3.0,override_auto_exposure_speed_down=True,auto_exposure_speed_down=2.0,override_lumen_scene_lighting_quality=True,lumen_scene_lighting_quality=2.0,override_lumen_final_gather_quality=True,lumen_final_gather_quality=2.0).items():prop(p,k,v)
|
||||
prop(a,'settings',p)
|
||||
if isinstance(a,u.RectLight):
|
||||
a.light_component.set_light_color(u.LinearColor(1,.97,.91,1))
|
||||
if a.get_actor_label()=='Garage presentation fill':a.light_component.set_intensity(9000)
|
||||
elif 'verandah bounce' in a.get_actor_label():a.light_component.set_intensity(6000)
|
||||
E.save_current_level();L.save_directory('/Game/LicensedTesla',only_if_is_dirty=True,recursive=True)
|
||||
r={'sun_lux':65000,'sun_elevation_degrees':52,'sky_intensity':3.5,'exposure_EV_range':[5.5,11.0],'exposure_bias':1.2,'material_slots_resolved_by_imported_name':slots,'car_collision':'simple box for walking, detail triangles retained for complex traces','level_saved':True}
|
||||
(P/'unreal-daylight-checks.json').write_text(json.dumps(r,indent=2))
|
||||
for c in ['r.HighResScreenshotDelay 64','r.AntiAliasingMethod 2','r.TemporalAASamples 64']:u.SystemLibrary.execute_console_command(world,c)
|
||||
cams=[next(a for a in actors if a.get_actor_label()==n) for n in ['CAM - Verandah','CAM - Overview','CAM - Licensed Tesla garage']];state={'start':time.monotonic(),'i':0,'task':None}
|
||||
def tick(dt):
|
||||
if time.monotonic()-state['start']<30:return
|
||||
if state['task'] is None:
|
||||
u.AutomationLibrary.finish_loading_before_screenshot();cam=cams[state['i']];u.EditorLevelLibrary.set_level_viewport_camera_info(cam.get_actor_location(),cam.get_actor_rotation());state['task']=u.AutomationLibrary.take_high_res_screenshot(1600,1000,str(P/'renders'/('daylight-'+['verandah','overview','tesla'][state['i']]+'.png')),camera=cam,delay=5)
|
||||
elif state['task'].is_task_done():
|
||||
state['i']+=1;state['task']=None
|
||||
if state['i']==3:
|
||||
u.unregister_slate_post_tick_callback(handle);u.log('DAYLIGHT_CAPTURED');u.SystemLibrary.quit_editor()
|
||||
handle=u.register_slate_post_tick_callback(tick)
|
||||
24
source/samford-v008-tesla/unreal-fix_sun_direction.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import unreal as u,time,json
|
||||
from pathlib import Path
|
||||
P=Path(__file__).resolve().parents[3];A=u.get_editor_subsystem(u.EditorActorSubsystem);E=u.get_editor_subsystem(u.LevelEditorSubsystem);world=u.get_editor_subsystem(u.UnrealEditorSubsystem).get_editor_world();u.EditorPythonScripting.set_keep_python_script_alive(True)
|
||||
actors=A.get_all_level_actors()
|
||||
sun=next(a for a in actors if isinstance(a,u.DirectionalLight))
|
||||
sun.set_actor_rotation(u.MathLibrary.find_look_at_rotation(u.Vector(1200,-1400,2400),u.Vector(0,0,0)),False)
|
||||
sun.set_actor_scale3d(u.Vector(1,1,1))
|
||||
direction=sun.get_actor_forward_vector()
|
||||
assert direction.z < -.5,str(direction)
|
||||
sun.light_component.set_intensity(65000)
|
||||
E.save_current_level()
|
||||
f=P/'unreal-daylight-checks.json';r=json.loads(f.read_text());r['sun_forward']=[direction.x,direction.y,direction.z];r['sun_rotation']=str(sun.get_actor_rotation());r['sun_direction_corrected']=True;r['sun_elevation_degrees']=52.46;f.write_text(json.dumps(r,indent=2))
|
||||
for c in ['r.HighResScreenshotDelay 64','r.AntiAliasingMethod 2','r.TemporalAASamples 64']:u.SystemLibrary.execute_console_command(world,c)
|
||||
actors=A.get_all_level_actors()
|
||||
cams=[next(a for a in actors if a.get_actor_label()==n) for n in ['CAM - Overview','CAM - Verandah','CAM - Licensed Tesla garage']];state={'start':time.monotonic(),'i':0,'task':None}
|
||||
def tick(dt):
|
||||
if time.monotonic()-state['start']<25:return
|
||||
if state['task'] is None:
|
||||
u.AutomationLibrary.finish_loading_before_screenshot();cam=cams[state['i']];u.EditorLevelLibrary.set_level_viewport_camera_info(cam.get_actor_location(),cam.get_actor_rotation());state['task']=u.AutomationLibrary.take_high_res_screenshot(1600,1000,str(P/'renders'/('daylight-'+['overview','verandah','tesla'][state['i']]+'.png')),camera=cam,delay=6)
|
||||
elif state['task'].is_task_done():
|
||||
state['i']+=1;state['task']=None
|
||||
if state['i']==3:
|
||||
u.unregister_slate_post_tick_callback(handle);u.log('CORRECTED_SUN_CAPTURED');u.SystemLibrary.quit_editor()
|
||||
handle=u.register_slate_post_tick_callback(tick)
|
||||
24
source/samford-v008-tesla/unreal-remove_opaque_haze.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import unreal as u,time,json
|
||||
from pathlib import Path
|
||||
P=Path(__file__).resolve().parents[3];A=u.get_editor_subsystem(u.EditorActorSubsystem);E=u.get_editor_subsystem(u.LevelEditorSubsystem);world=u.get_editor_subsystem(u.UnrealEditorSubsystem).get_editor_world();u.EditorPythonScripting.set_keep_python_script_alive(True)
|
||||
actors=A.get_all_level_actors();removed=[]
|
||||
for a in actors:
|
||||
if 'SM_056_11_Camera_and_atmosphere' in a.get_actor_label():removed.append(a.get_actor_label());A.destroy_actor(a)
|
||||
assert len(removed)<=1,removed
|
||||
for a in A.get_all_level_actors():
|
||||
if isinstance(a,u.PostProcessVolume):
|
||||
p=a.settings;p.auto_exposure_min_brightness=6.5;p.auto_exposure_max_brightness=16;p.auto_exposure_bias=.5;a.set_editor_property('settings',p)
|
||||
E.save_current_level()
|
||||
f=P/'unreal-daylight-checks.json';r=json.loads(f.read_text());r['removed_opaque_blender_volume']=removed or r.get('removed_opaque_blender_volume',[]);r['exposure_EV_range']=[6.5,16];r['exposure_bias']=.5;r['sunlight_obstruction_fixed']=True;f.write_text(json.dumps(r,indent=2))
|
||||
for c in ['r.HighResScreenshotDelay 64','r.AntiAliasingMethod 2','r.TemporalAASamples 64']:u.SystemLibrary.execute_console_command(world,c)
|
||||
actors=A.get_all_level_actors()
|
||||
cams=[next(a for a in actors if a.get_actor_label()==n) for n in ['CAM - Overview','CAM - Verandah','CAM - Licensed Tesla garage']];state={'start':time.monotonic(),'i':0,'task':None}
|
||||
def tick(dt):
|
||||
if time.monotonic()-state['start']<25:return
|
||||
if state['task'] is None:
|
||||
u.AutomationLibrary.finish_loading_before_screenshot();cam=cams[state['i']];u.EditorLevelLibrary.set_level_viewport_camera_info(cam.get_actor_location(),cam.get_actor_rotation());state['task']=u.AutomationLibrary.take_high_res_screenshot(1600,1000,str(P/'renders'/('daylight-'+['overview','verandah','tesla'][state['i']]+'.png')),camera=cam,delay=6)
|
||||
elif state['task'].is_task_done():
|
||||
state['i']+=1;state['task']=None
|
||||
if state['i']==3:
|
||||
u.unregister_slate_post_tick_callback(handle);u.log('TRUE_DAYLIGHT_CAPTURED');u.SystemLibrary.quit_editor()
|
||||
handle=u.register_slate_post_tick_callback(tick)
|
||||
44
source/samford-v008-tesla/unreal-replace_tesla.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import unreal as u,json,math,time,traceback
|
||||
from pathlib import Path
|
||||
P=Path(__file__).resolve().parents[3];D=json.loads((P/'private-assets/transfer/manifest.json').read_text());L=u.EditorAssetLibrary;M=u.MaterialEditingLibrary;A=u.get_editor_subsystem(u.EditorActorSubsystem);E=u.get_editor_subsystem(u.LevelEditorSubsystem);T=u.AssetToolsHelpers.get_asset_tools();u.EditorPythonScripting.set_keep_python_script_alive(True)
|
||||
def prop(o,k,v):o.set_editor_property(k,v)
|
||||
def scalar(m,v,p):
|
||||
n=M.create_material_expression(m,u.MaterialExpressionConstant);prop(n,'r',v);M.connect_material_property(n,'',p)
|
||||
materials={}
|
||||
for key,r in D['materials'].items():
|
||||
m=L.load_asset('/Game/LicensedTesla/Materials/'+key) or T.create_asset(key,'/Game/LicensedTesla/Materials',u.Material,u.MaterialFactoryNew());M.delete_all_material_expressions(m);prop(m,'two_sided',True)
|
||||
n=M.create_material_expression(m,u.MaterialExpressionConstant3Vector);prop(n,'constant',u.LinearColor(*r['base_color']));M.connect_material_property(n,'',u.MaterialProperty.MP_BASE_COLOR)
|
||||
scalar(m,r['roughness'],u.MaterialProperty.MP_ROUGHNESS);scalar(m,r['metallic'],u.MaterialProperty.MP_METALLIC)
|
||||
if r['opacity']<1:
|
||||
prop(m,'blend_mode',u.BlendMode.BLEND_TRANSLUCENT);scalar(m,r['opacity'],u.MaterialProperty.MP_OPACITY)
|
||||
M.recompile_material(m);L.save_loaded_asset(m);materials[key]=m
|
||||
opts=u.FbxImportUI()
|
||||
for k,v in dict(import_mesh=True,import_materials=False,import_textures=False,import_as_skeletal=False,import_animations=False,mesh_type_to_import=u.FBXImportType.FBXIT_STATIC_MESH).items():prop(opts,k,v)
|
||||
for k,v in dict(combine_meshes=False,auto_generate_collision=False,generate_lightmap_u_vs=False,convert_scene=True,force_front_x_axis=False).items():prop(opts.static_mesh_import_data,k,v)
|
||||
t=u.AssetImportTask()
|
||||
for k,v in dict(filename=str(P/'private-assets/transfer/TeslaGarage.fbx'),destination_path='/Game/LicensedTesla/Meshes',automated=True,replace_existing=True,save=True,options=opts).items():prop(t,k,v)
|
||||
T.import_asset_tasks([t]);meshes=[L.load_asset(p) for p in t.imported_object_paths];meshes=[m for m in meshes if isinstance(m,u.StaticMesh)];assert len(meshes)==2
|
||||
before=A.get_all_level_actors();old=[a for a in before if '29_Car_and_bicycles' in a.get_actor_label()];assert len(old)>0,'Original car groups not found'
|
||||
for a in old:A.destroy_actor(a)
|
||||
for mesh in meshes:
|
||||
rec=next(r for r in D['objects'] if mesh.get_name().endswith(r['name']))
|
||||
for i,key in enumerate(rec['materials']):mesh.set_material(i,materials[key])
|
||||
body=mesh.get_editor_property('body_setup');prop(body,'collision_trace_flag',u.CollisionTraceFlag.CTF_USE_COMPLEX_AS_SIMPLE);prop(body,'double_sided_geometry',True)
|
||||
for i in range(len(rec['materials'])):u.get_editor_subsystem(u.StaticMeshEditorSubsystem).enable_section_collision(mesh,True,0,i)
|
||||
a=A.spawn_actor_from_class(u.StaticMeshActor,u.Vector());a.static_mesh_component.set_static_mesh(mesh);a.static_mesh_component.set_collision_profile_name('BlockAll');a.set_actor_label('LICENSED - '+rec['name']);a.set_folder_path('Licensed Tesla - exclude from public source');L.save_loaded_asset(mesh)
|
||||
car=next(m for m in meshes if m.get_name().endswith('Tesla_7K'));bounds=car.get_bounds();assert 200<bounds.box_extent.y<260,str(bounds)
|
||||
# Camera from the garage entrance, retaining the original walking spawn and all existing cameras.
|
||||
cp=u.Vector(-280,1200,245);target=u.Vector(-120,1920,145);cam=A.spawn_actor_from_class(u.CameraActor,cp,u.MathLibrary.find_look_at_rotation(cp,target));cam.set_actor_label('CAM - Licensed Tesla garage');cam.camera_component.set_field_of_view(50);prop(cam.camera_component,'aspect_ratio',1.6)
|
||||
# Gentle local fill makes dark automobile interiors readable in the prototype.
|
||||
light=A.spawn_actor_from_class(u.RectLight,u.Vector(-150,1550,300),u.Rotator(-20,90,0));light.set_actor_label('Garage presentation fill');light.light_component.set_mobility(u.ComponentMobility.MOVABLE);light.light_component.set_intensity(800);prop(light.light_component,'attenuation_radius',700);prop(light.light_component,'source_width',300);prop(light.light_component,'source_height',180)
|
||||
E.save_current_level();L.save_directory('/Game/LicensedTesla',only_if_is_dirty=True,recursive=True)
|
||||
report={'removed_placeholder_groups':len(old),'new_meshes':len(meshes),'materials':len(materials),'car_bounds_cm':str(bounds),'level_saved':True,'source':'7K Studio Tesla Model 3','public_distribution':False}
|
||||
(P/'unreal-tesla-checks.json').write_text(json.dumps(report,indent=2))
|
||||
state={'start':time.monotonic(),'task':None}
|
||||
def tick(dt):
|
||||
if time.monotonic()-state['start']<25:return
|
||||
if state['task'] is None:
|
||||
u.AutomationLibrary.finish_loading_before_screenshot();state['task']=u.AutomationLibrary.take_high_res_screenshot(1600,1000,str(P/'renders/unreal-tesla-garage.png'),camera=cam,delay=3)
|
||||
elif state['task'].is_task_done():
|
||||
u.unregister_slate_post_tick_callback(handle);u.log('TESLA_UNREAL_READY');u.SystemLibrary.quit_editor()
|
||||
handle=u.register_slate_post_tick_callback(tick)
|
||||
46
source/samford-v008-tesla/unreal-verify_walkthrough.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import unreal as u,json,time,math,traceback
|
||||
from pathlib import Path
|
||||
ROOT=Path(__file__).resolve().parents[3];LEVEL=u.get_editor_subsystem(u.LevelEditorSubsystem);EDITOR=u.get_editor_subsystem(u.UnrealEditorSubsystem);report={'floor_traces':{},'movement':None};u.EditorPythonScripting.set_keep_python_script_alive(True)
|
||||
state={'start':time.monotonic(),'phase':'load','t':0,'positions':[]}
|
||||
def pos(v):return u.Vector(v[0]*100,-v[1]*100,v[2]*100)
|
||||
def tick(dt):
|
||||
try:
|
||||
elapsed=time.monotonic()-state['start']
|
||||
if state['phase']=='finish':
|
||||
if time.monotonic()-state['t']>3:
|
||||
u.unregister_slate_post_tick_callback(handle);u.log('HOMESTEAD_WALK_VERIFIED '+json.dumps(report['movement']));u.SystemLibrary.quit_editor()
|
||||
return
|
||||
if elapsed>90:raise RuntimeError('Play-in-editor movement test timed out')
|
||||
if state['phase']=='load':
|
||||
if elapsed<12:return
|
||||
u.AutomationLibrary.finish_loading_before_screenshot();LEVEL.editor_request_begin_play();state['phase']='settle';state['t']=time.monotonic();return
|
||||
game=EDITOR.get_game_world()
|
||||
if not game:return
|
||||
pawn=u.GameplayStatics.get_player_pawn(game,0)
|
||||
if not pawn:return
|
||||
if state['phase']=='settle':
|
||||
if time.monotonic()-state['t']<4:return
|
||||
assert 'HomesteadWalker' in pawn.get_class().get_name(),pawn.get_class().get_name()
|
||||
for name,xy in [('verandah',(0,4)),('living',(-1.8,1)),('corridor',(-7.5,-1.8)),('bedroom',(-10.7,-3.5)),('meditation',(-11.8,10.8)),('garage',(2,-18)),('garden',(0,13)),('training',(-10,-19))]:
|
||||
result=u.SystemLibrary.line_trace_single(game,pos((*xy,2.9)),pos((*xy,-2)),u.TraceTypeQuery.TRACE_TYPE_QUERY1,True,[pawn],u.DrawDebugTrace.NONE,True);assert result is not None,name;report['floor_traces'][name]='hit'
|
||||
p=pawn.get_actor_location();state['initial']=[p.x,p.y,p.z];assert 170<p.z<240,('Spawn not on floor',p.z);state['phase']='car_settle';state['t']=time.monotonic();pawn.set_actor_location(u.Vector(-170,1500,153),False,True)
|
||||
elif state['phase']=='car_settle':
|
||||
if time.monotonic()-state['t']<1:return
|
||||
state['phase']='car_walk';state['t']=time.monotonic()
|
||||
elif state['phase']=='car_walk':
|
||||
pawn.add_movement_input(u.Vector(0,1,0),1)
|
||||
if time.monotonic()-state['t']>2.5:
|
||||
q=pawn.get_actor_location();assert 1570<q.y<1680,('Car did not stop walking capsule',q)
|
||||
report['tesla_collision']={'walk_stopped_before_car':True,'position_cm':[q.x,q.y,q.z]}
|
||||
pawn.set_actor_location(u.Vector(*state['initial']),False,True);state['phase']='walk_reset';state['t']=time.monotonic()
|
||||
elif state['phase']=='walk_reset':
|
||||
if time.monotonic()-state['t']<1:return
|
||||
state['phase']='walk';state['t']=time.monotonic()
|
||||
elif state['phase']=='walk':
|
||||
p=pawn.get_actor_location();state['positions'].append([p.x,p.y,p.z]);pawn.add_movement_input(u.Vector(0,1,0),1)
|
||||
if time.monotonic()-state['t']>2.5:
|
||||
a=state['initial'];dist=math.hypot(p.x-a[0],p.y-a[1]);assert dist>100,('No meaningful movement',dist);assert 170<p.z<240,('Pawn left walking floor',p.z)
|
||||
report['movement']={'pawn':pawn.get_class().get_name(),'start_cm':a,'end_cm':[p.x,p.y,p.z],'distance_cm':dist,'movement_mode':str(pawn.character_movement.movement_mode),'controller_possessed':pawn.get_controller() is not None,'sampled_positions':len(state['positions'])};report['status']='PASS: daylight level, Tesla blocks walking, eight floor traces and possessed character walking from verandah into living entry';(ROOT/'unreal-walkthrough-verification.json').write_text(json.dumps(report,indent=2));LEVEL.editor_request_end_play();state['phase']='finish';state['t']=time.monotonic()
|
||||
except Exception:
|
||||
report['status']='FAILED';report['error']=traceback.format_exc();(ROOT/'unreal-walkthrough-verification.json').write_text(json.dumps(report,indent=2));u.log_error(report['error']);u.unregister_slate_post_tick_callback(handle);LEVEL.editor_request_end_play();u.SystemLibrary.quit_editor()
|
||||
handle=u.register_slate_post_tick_callback(tick)
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"floor_traces": {
|
||||
"verandah": "hit",
|
||||
"living": "hit",
|
||||
"corridor": "hit",
|
||||
"bedroom": "hit",
|
||||
"meditation": "hit",
|
||||
"garage": "hit",
|
||||
"garden": "hit",
|
||||
"training": "hit"
|
||||
},
|
||||
"movement": {
|
||||
"pawn": "BP_HomesteadWalker_C",
|
||||
"start_cm": [
|
||||
0.0,
|
||||
-455.0,
|
||||
208.91514610554694
|
||||
],
|
||||
"end_cm": [
|
||||
0.0,
|
||||
-109.60077457824171,
|
||||
204.1499967251696
|
||||
],
|
||||
"distance_cm": 345.3992254217583,
|
||||
"movement_mode": "<MovementMode.MOVE_WALKING: 1>",
|
||||
"controller_possessed": true,
|
||||
"sampled_positions": 59
|
||||
},
|
||||
"tesla_collision": {
|
||||
"walk_stopped_before_car": true,
|
||||
"position_cm": [
|
||||
-170.0,
|
||||
1651.1851263218496,
|
||||
154.14999469910472
|
||||
]
|
||||
},
|
||||
"status": "PASS: Tesla blocks walking, eight floor traces and possessed character walking from verandah into living entry",
|
||||
"verification_scope": "Play-in-editor checks preceded final lighting-only corrections and removal of the non-colliding opaque haze box; fresh final daylight screenshots are recorded separately."
|
||||
}
|
||||
9
source/samford-v008-tesla/verify_saved_blender.py
Normal file
@@ -0,0 +1,9 @@
|
||||
import bpy,json
|
||||
from pathlib import Path
|
||||
P=Path(__file__).resolve().parents[1]
|
||||
def snap():
|
||||
c=bpy.data.collections['22 PLAY - guided camera tour'];s=bpy.context.scene
|
||||
return {'captions':{o.name:o.data.body for o in c.objects if o.type=='FONT'},'frame_range':[s.frame_start,s.frame_end],'camera':s.camera.name,'markers':[(m.name,m.frame) for m in s.timeline_markers]}
|
||||
bpy.ops.wm.open_mainfile(filepath=str(P/'base/samford-solarpunk-presentation-tour.blend'),use_scripts=False);a=snap()
|
||||
bpy.ops.wm.open_mainfile(filepath=str(P/'samford-solarpunk-tesla-v008.blend'),use_scripts=False);b=snap();assert a==b,('Tour changed',a,b)
|
||||
p=P/'blender-final-verification.json';r=json.loads(p.read_text());r['tour_chapters']=len(b['captions']);r['tour_matches_v007_exactly']=True;r['saved_file_reopened']=True;p.write_text(json.dumps(r,indent=2));print('SAVED_BLEND_VERIFIED',len(b['captions']))
|
||||
26
source/samford-v009-wind/README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# v009 wind turbine concept
|
||||
|
||||
`add_wind_turbine.py` is an incremental Blender 5.2.1 script. Use the public
|
||||
v007 presentation model or the private licensed v008 model as input; do not
|
||||
run it on a v009 output. It adds the turbine, matching lightweight geometry,
|
||||
a separate overview camera and tour chapter 32. Existing scenes are preserved.
|
||||
|
||||
```sh
|
||||
blender --background blender/samford-solarpunk-presentation-tour.blend \
|
||||
--python source/samford-v009-wind/add_wind_turbine.py -- \
|
||||
--output blender/samford-solarpunk-wind-tour-v009.blend \
|
||||
--render renders/v009-wind-overview.png
|
||||
blender --background blender/samford-solarpunk-wind-tour-v009.blend \
|
||||
--python source/samford-v009-wind/verify_wind_turbine.py
|
||||
```
|
||||
|
||||
Rendering uses Cycles/Metal on macOS; adapt device selection for other hosts.
|
||||
The verification script reopens the saved file and checks turbine geometry,
|
||||
viewport copies, retained features, future outlines, material references and
|
||||
all 32 caption intervals. It writes a sibling `.verification.json` report.
|
||||
|
||||
Private v008 inputs must write exclusively to a private directory. Never
|
||||
publish a `.blend` containing the licensed Tesla. The public render uses the
|
||||
distributable v007 vehicle. The turbine is original concept geometry, not a
|
||||
manufacturer model or engineering design. Read the v009 decision for siting
|
||||
and equipment assumptions. No Unreal assets or existing film were rebuilt.
|
||||
192
source/samford-v009-wind/add_wind_turbine.py
Normal file
@@ -0,0 +1,192 @@
|
||||
"""Run with Blender --background INPUT.blend --python this.py -- --output OUTPUT.blend.
|
||||
|
||||
Add an illustrative turbine to either public v007 or private v008. Never publish
|
||||
an output based on the licensed v008 scene. Dimensions are visual placeholders.
|
||||
"""
|
||||
import argparse
|
||||
import bpy
|
||||
import json
|
||||
import math
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from mathutils import Vector
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--output', required=True)
|
||||
parser.add_argument('--render')
|
||||
args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:])
|
||||
output = Path(args.output).resolve()
|
||||
output.parent.mkdir(parents=True, exist_ok=True)
|
||||
s = bpy.context.scene
|
||||
assert '39 WIND - property turbine concept' not in bpy.data.collections, 'Already added'
|
||||
detail = bpy.data.collections['DETAIL - full geometry for renders']
|
||||
fast = bpy.data.collections['00 FAST TOUR - lightweight viewport']
|
||||
detail.hide_viewport = False
|
||||
fast.hide_viewport = True
|
||||
coll = bpy.data.collections.new('39 WIND - property turbine concept')
|
||||
detail.children.link(coll)
|
||||
|
||||
def material(name, color, metallic=0):
|
||||
m = bpy.data.materials.new(name)
|
||||
m.diffuse_color = (*color, 1)
|
||||
m.use_nodes = True
|
||||
shader = m.node_tree.nodes.get('Principled BSDF')
|
||||
shader.inputs['Base Color'].default_value = (*color, 1)
|
||||
shader.inputs['Metallic'].default_value = metallic
|
||||
shader.inputs['Roughness'].default_value = .38
|
||||
return m
|
||||
|
||||
white = material('WIND - warm ivory composite', (.79, .80, .74))
|
||||
steel = material('WIND - galvanised mast', (.42, .47, .45), .65)
|
||||
dark = material('WIND - dark service enclosure', (.095, .14, .12), .35)
|
||||
concrete = material('WIND - foundation concept', (.37, .35, .29))
|
||||
|
||||
def adopt(ob, name, mat):
|
||||
ob.name = 'WIND - ' + name
|
||||
for c in list(ob.users_collection):
|
||||
c.objects.unlink(ob)
|
||||
coll.objects.link(ob)
|
||||
ob.data.materials.append(mat)
|
||||
return ob
|
||||
|
||||
def box(name, p, dimensions, mat):
|
||||
bpy.ops.mesh.primitive_cube_add(size=1, location=p)
|
||||
ob = adopt(bpy.context.object, name, mat)
|
||||
ob.scale = dimensions
|
||||
return ob
|
||||
|
||||
def cone(name, a, b, r1, r2, mat):
|
||||
a, b = Vector(a), Vector(b)
|
||||
bpy.ops.mesh.primitive_cone_add(vertices=40, radius1=r1, radius2=r2,
|
||||
depth=(b-a).length, location=(a+b)/2)
|
||||
ob = adopt(bpy.context.object, name, mat)
|
||||
ob.rotation_euler = (b-a).to_track_quat('Z', 'Y').to_euler()
|
||||
for face in ob.data.polygons:
|
||||
face.use_smooth = True
|
||||
return ob
|
||||
|
||||
x, y = -36., 40.
|
||||
ground = lambda x, y: -.024*y + .004*x + .12*math.sin(x*.19)*math.cos(y*.14) + .055*math.sin(x*.72+y*.32)
|
||||
z = ground(x, y)
|
||||
hub = z + 18.
|
||||
box('foundation cap - indicative only', (x, y, z+.10), (2.1, 2.1, .30), concrete)
|
||||
cone('tapered freestanding mast', (x,y,z+.25), (x,y,hub), .27, .13, steel)
|
||||
cone('base flange', (x,y,z+.23), (x,y,z+.30), .42, .42, steel)
|
||||
for i in range(8):
|
||||
angle = i*math.tau/8
|
||||
bx, by = x+.34*math.cos(angle), y+.34*math.sin(angle)
|
||||
cone('anchor bolt %02d' % i, (bx,by,z+.3), (bx,by,z+.37), .025, .025, dark)
|
||||
cone('nacelle', (x,y-.35,hub), (x,y+.7,hub), .24, .18, white)
|
||||
cone('rotor hub', (x,y-.32,hub), (x,y-.73,hub), .23, .07, white)
|
||||
cone('tail boom', (x,y+.45,hub), (x,y+2.0,hub), .055, .035, steel)
|
||||
box('tail vane', (x,y+1.9,hub+.32), (.055,.8,.65), white)
|
||||
|
||||
# Three tapered swept blades, with closed airfoil-like cross sections.
|
||||
for blade in range(3):
|
||||
angle = blade*math.tau/3
|
||||
vs, faces = [], []
|
||||
stations = [(.19,.10,0),(.55,.25,0),(1.1,.23,.04),(2.,.16,.13),(2.8,.08,.22),(3.,.025,.25)]
|
||||
for r, halfwidth, sweep in stations:
|
||||
for tangent, depth in [(-halfwidth,0),(0,-.055),(halfwidth,0),(0,.045)]:
|
||||
t = tangent+sweep
|
||||
vs.append((x+t*math.cos(angle)+r*math.sin(angle), y-.48+depth,
|
||||
hub-t*math.sin(angle)+r*math.cos(angle)))
|
||||
for j in range(len(stations)-1):
|
||||
for k in range(4):
|
||||
faces.append((4*j+k,4*j+(k+1)%4,4*(j+1)+(k+1)%4,4*(j+1)+k))
|
||||
faces.extend([(3,2,1,0),tuple(range(len(vs)-4,len(vs)))])
|
||||
mesh = bpy.data.meshes.new('WIND blade mesh')
|
||||
mesh.from_pydata(vs, [], faces)
|
||||
mesh.update()
|
||||
ob = bpy.data.objects.new('WIND - rotor blade %d' % (blade+1), mesh)
|
||||
coll.objects.link(ob)
|
||||
mesh.materials.append(white)
|
||||
for face in mesh.polygons:
|
||||
face.use_smooth = True
|
||||
box('lockable isolation cabinet - indicative', (x+.72,y,z+.92), (.45,.3,.65), dark)
|
||||
cone('service conduit', (x+.72,y,z+.1), (x+.72,y,z+.63), .045,.045,steel)
|
||||
|
||||
# Exact low-poly display copies keep the lightweight viewport aligned.
|
||||
bpy.context.view_layer.update()
|
||||
for ob in list(coll.objects):
|
||||
proxy = ob.copy()
|
||||
proxy.data = ob.data.copy()
|
||||
proxy.name = 'FAST | ' + ob.name
|
||||
fast.objects.link(proxy)
|
||||
proxy.hide_render = True
|
||||
|
||||
tour = bpy.data.collections['22 PLAY - guided camera tour']
|
||||
cam = bpy.data.objects['PLAY TOUR camera']
|
||||
title = '32 / WIND POWER - PROPERTY CONCEPT'
|
||||
for frame, position in [(3721,(-57,66,25)),(3840,(-54,62,24))]:
|
||||
s.frame_set(frame)
|
||||
cam.location = position
|
||||
cam.rotation_euler = (Vector((x,y,hub*.57))-cam.location).to_track_quat('-Z','Y').to_euler()
|
||||
cam.keyframe_insert('location', frame=frame)
|
||||
cam.keyframe_insert('rotation_euler', frame=frame)
|
||||
cam.data.lens = 38
|
||||
cam.data.keyframe_insert('lens', frame=frame)
|
||||
ref = next(o for o in tour.objects if o.type=='FONT' and o.data.body.startswith('31 /'))
|
||||
ref.scale = (0,0,0)
|
||||
ref.keyframe_insert('scale', frame=3721)
|
||||
caption = ref.copy()
|
||||
caption.data = ref.data.copy()
|
||||
caption.animation_data_clear()
|
||||
tour.objects.link(caption)
|
||||
caption.name = 'Tour caption 32 - wind turbine concept'
|
||||
caption.data.body = title
|
||||
caption.location = (-36/38*.91,36/38*9/16*.84,-2)
|
||||
for frame, value in [(1,0),(3720,0),(3721,1),(3840,1)]:
|
||||
caption.scale = (value,value,value)
|
||||
caption.keyframe_insert('scale', frame=frame)
|
||||
for ob in (ref,caption):
|
||||
for layer in ob.animation_data.action.layers:
|
||||
for strip in layer.strips:
|
||||
for bag in strip.channelbags:
|
||||
for curve in bag.fcurves:
|
||||
for key in curve.keyframe_points:
|
||||
key.interpolation = 'CONSTANT'
|
||||
s.frame_end = 3840
|
||||
s.timeline_markers.new(title, frame=3721)
|
||||
s['Wind turbine concept'] = 'v009: three-blade freestanding turbine at (-36,40); 18 m hub / 6 m rotor are visual placeholders. No measured wind resource, selected product, yield, engineering or approvals.'
|
||||
s['PLAY THE TOUR'] = 'Hover over the 3D view and press Space. 32 chapters, 2 min 40 sec. Shift+Left Arrow restarts. Wind turbine: chapter 32.'
|
||||
text = bpy.data.texts.get('START HERE - PRESS PLAY')
|
||||
if text:
|
||||
text.write('\n\n'+s['PLAY THE TOUR']+'\n'+s['Wind turbine concept'])
|
||||
|
||||
# A separate overview camera leaves all existing inspection chapters intact.
|
||||
camera_data = bpy.data.cameras.new('Wind property overview')
|
||||
overview = bpy.data.objects.new('Wind property overview', camera_data)
|
||||
s.collection.objects.link(overview)
|
||||
overview.location = (-85,90,60)
|
||||
overview.rotation_euler = (Vector((-5,5,4))-overview.location).to_track_quat('-Z','Y').to_euler()
|
||||
camera_data.type = 'ORTHO'
|
||||
camera_data.ortho_scale = 108
|
||||
camera_data.clip_end = 1000
|
||||
s.frame_set(3721)
|
||||
s.camera = cam
|
||||
detail.hide_viewport = True
|
||||
fast.hide_viewport = False
|
||||
s.render.resolution_x, s.render.resolution_y = 2560, 1440
|
||||
s.render.resolution_percentage = 100
|
||||
bpy.ops.wm.save_as_mainfile(filepath=str(output))
|
||||
if args.render:
|
||||
s.camera = overview
|
||||
for ob in tour.objects:
|
||||
if ob.type == 'FONT':
|
||||
ob.hide_render = True
|
||||
detail.hide_viewport = False
|
||||
fast.hide_viewport = True
|
||||
s.render.engine = 'CYCLES'
|
||||
s.render.resolution_percentage = 60
|
||||
s.cycles.samples = 32
|
||||
s.cycles.use_denoising = True
|
||||
prefs = bpy.context.preferences.addons['cycles'].preferences
|
||||
prefs.compute_device_type = 'METAL'
|
||||
prefs.get_devices()
|
||||
for device in prefs.devices:
|
||||
device.use = device.type == 'METAL'
|
||||
s.cycles.device = 'GPU'
|
||||
s.render.filepath = str(Path(args.render).resolve())
|
||||
bpy.ops.render.render(write_still=True)
|
||||
print('WIND_REVISION_SAVED', output, flush=True)
|
||||
19
source/samford-v009-wind/publication-sha256.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"AGENTS.md": "f20c3f60e3d8d27b5d4d89a99ebff9e8a23499530f836263ece51d9f806a009f",
|
||||
"README.md": "2d6e86ac8a38799f984bc95e055df7bd1fcc0d58c7078dbf276b2eb9b08c8801",
|
||||
"docs/PROJECT-CONTEXT.md": "f44ba333fcf5a6955cd35f281c21677e7c732ea67956e52ea643d2e2349bca95",
|
||||
"docs/REQUEST-HISTORY.md": "555ec31c40f80a04ee0d24db0fcc766768d66e91a7f692a6b70f9eab2c1d28a7",
|
||||
"decisions/2026-09-24-v009-wind-turbine.md": "26118e95b1fe9f716bb3a7ed6e7df8c31eff2fcb038500f2b4e6c81e1ec5e228",
|
||||
"blender/samford-solarpunk-wind-tour-v009.blend": "a02c3898da7f2e385a0a57b5610c0b1035997116f747919a46cebfed8cd12c8a",
|
||||
"blender/samford-solarpunk-wind-tour-v009.verification.json": "48f5a3909abecb42fcde45efc5800b94f749d00902af2e973d87c10db298f3af",
|
||||
"blender/wind-turbine-layout-v009.json": "3e9d06c55ff24bdce810b33d1942fde9f082cf8bd24b46f24126abc3000e4dab",
|
||||
"blender/tour-chapters-wind-v009.json": "378b08b048d8c480772c76bc7a141cbede17c531b919658130b033edacd2d735",
|
||||
"plans/concept/wind-turbine-plan-v009.svg": "d4e7cf9aad22559f61f123f37775315934a06f3769198099062a756f4c379107",
|
||||
"renders/v009-wind-overview.png": "1aa727e37a263eed860718c758624af416f0a094aac7ca6368e4a555851b60e8",
|
||||
"site/samford-valley-home/index.html": "7cbd30f42a4e23a5d9d5bdb939c1beec20c5dd9d8dfe697e607b8099e9d3bade",
|
||||
"site/metadata/sitemap.xml": "6af5dec5ef6d887c751becc9549970e7251fce6e164037f3d80da02ecda63c27",
|
||||
"site/metadata/llms.txt": "5810cb29ffa7f9b1521babb3cedf1a7b8a95cd5af5f66e3072ef466489cdc9ed",
|
||||
"source/samford-v009-wind/add_wind_turbine.py": "c1e9b7112473b888d6f5d34c137f8e166be7e4dc0679d2e0074f37a822b326cb",
|
||||
"source/samford-v009-wind/verify_wind_turbine.py": "ef54260f1c66079f59af06a551bf077f14af1fa5da3311eefcb83297e5b58c71",
|
||||
"source/samford-v009-wind/README.md": "fc9f6f3f18686445fe270808bf3a4db479f8b7292168ea11a4b626ed63835fb0"
|
||||
}
|
||||
42
source/samford-v009-wind/verify_wind_turbine.py
Normal file
@@ -0,0 +1,42 @@
|
||||
"""Reopen either saved v009 scene and validate geometry, preservation and tour."""
|
||||
import bpy
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
s = bpy.context.scene
|
||||
detail = bpy.data.collections['DETAIL - full geometry for renders']
|
||||
detail.hide_viewport = False
|
||||
bpy.context.view_layer.update()
|
||||
objects = bpy.data.collections['39 WIND - property turbine concept'].objects
|
||||
assert len([o for o in objects if o.name.startswith('WIND - rotor blade')]) == 3
|
||||
mast = bpy.data.objects['WIND - tapered freestanding mast']
|
||||
assert abs(mast.location.x + 36) < .001 and abs(mast.location.y - 40) < .001
|
||||
assert abs(mast.dimensions.z - 17.75) < .001
|
||||
assert all('FAST | '+o.name in bpy.data.objects for o in objects)
|
||||
assert all(bpy.data.objects['FAST | '+o.name].hide_render for o in objects)
|
||||
assert len(bpy.data.collections['24 LATER - Shadow spaces only'].objects) == 26
|
||||
required = ['ISLAND - honed marble countertop', 'FAST | Garden Buddha statue',
|
||||
'CONTAINER WATER - steel base frame', 'Living woven jute rug',
|
||||
'Fuller garden borders - curved lanceolate leaves']
|
||||
assert all(name in bpy.data.objects for name in required)
|
||||
assert not any('table tennis' in o.name.lower() for o in s.objects)
|
||||
assert all(m in bpy.data.materials.values() for o in s.objects if o.type=='MESH' for m in o.data.materials if m)
|
||||
fonts = [o for o in bpy.data.collections['22 PLAY - guided camera tour'].objects if o.type=='FONT']
|
||||
captions = []
|
||||
for frame in range(1,3841,120):
|
||||
s.frame_set(frame+20)
|
||||
visible = [o.data.body for o in fonts if o.scale.length > .5]
|
||||
assert len(visible)==1, (frame,visible)
|
||||
captions.extend(visible)
|
||||
assert captions[-1].startswith('32 / WIND') and captions[-2].startswith('31 /')
|
||||
assert s.frame_end == 3840
|
||||
assert s.camera.name == 'PLAY TOUR camera'
|
||||
report = dict(status='PASS', model=Path(bpy.data.filepath).name,
|
||||
turbine_objects=len(objects), rotor_blades=3, hub_height_m=18,
|
||||
rotor_diameter_m=6, concept_xy=[-36,40], tour_chapters=32,
|
||||
tour_seconds=160, captions=captions, preserved_features=required,
|
||||
future_outline_objects=26, material_references_valid=True,
|
||||
dimensions_status='Illustrative placeholders, not engineered')
|
||||
target = Path(bpy.data.filepath).with_suffix('.verification.json')
|
||||
target.write_text(json.dumps(report,indent=2)+'\n')
|
||||
print('WIND_VERIFIED',target,flush=True)
|
||||
19
unreal/SamfordHomestead/Config/DefaultEngine.ini
Normal file
@@ -0,0 +1,19 @@
|
||||
[/Script/Engine.RendererSettings]
|
||||
r.DynamicGlobalIlluminationMethod=1
|
||||
r.ReflectionMethod=1
|
||||
r.GenerateMeshDistanceFields=True
|
||||
r.RayTracing=False
|
||||
r.AntiAliasingMethod=4
|
||||
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
||||
r.AllowStaticLighting=False
|
||||
|
||||
[/Script/EngineSettings.GameMapsSettings]
|
||||
EditorStartupMap=/Game/Homestead/SamfordHomestead
|
||||
GameDefaultMap=/Game/Homestead/SamfordHomestead
|
||||
GlobalDefaultGameMode=/Game/Homestead/Walkthrough/BP_HomesteadGameMode.BP_HomesteadGameMode_C
|
||||
|
||||
[ConsoleVariables]
|
||||
Interchange.FeatureFlags.Import.FBX=False
|
||||
r.Shadow.Virtual.Enable=0
|
||||
r.Streaming.PoolSize=1500
|
||||
|
||||
97
unreal/SamfordHomestead/Config/DefaultInput.ini
Normal file
@@ -0,0 +1,97 @@
|
||||
[/Script/Engine.InputSettings]
|
||||
-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||
-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||
-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||
-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f))
|
||||
-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||
-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||
-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gesture_Pinch",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gesture_Flick",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gesture_Rotate",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
+AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False))
|
||||
bAltEnterTogglesFullscreen=True
|
||||
bF11TogglesFullscreen=True
|
||||
bUseMouseForTouch=False
|
||||
bEnableMouseSmoothing=True
|
||||
bEnableFOVScaling=True
|
||||
bCaptureMouseOnLaunch=True
|
||||
bEnableLegacyInputScales=True
|
||||
bEnableMotionControls=True
|
||||
bFilterInputByPlatformUser=False
|
||||
bShouldFlushPressedKeysOnViewportFocusLost=True
|
||||
bAlwaysShowTouchInterface=False
|
||||
bShowConsoleOnFourFingerTap=True
|
||||
bEnableGestureRecognizer=False
|
||||
bUseAutocorrect=False
|
||||
bEnabledLegacyMappingDeprecationWarnings=True
|
||||
bEnablePreferredInputAPIPreferences=False
|
||||
DefaultPreferredInputAPIList=
|
||||
DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
|
||||
DefaultViewportMouseLockMode=LockOnCapture
|
||||
FOVScale=0.011110
|
||||
DoubleClickTime=0.200000
|
||||
+AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=W)
|
||||
+AxisMappings=(AxisName="MoveForward",Scale=-1.000000,Key=S)
|
||||
+AxisMappings=(AxisName="MoveRight",Scale=1.000000,Key=D)
|
||||
+AxisMappings=(AxisName="MoveRight",Scale=-1.000000,Key=A)
|
||||
+AxisMappings=(AxisName="Turn",Scale=1.000000,Key=MouseX)
|
||||
+AxisMappings=(AxisName="LookUp",Scale=-1.000000,Key=MouseY)
|
||||
DeprecatedActionAndAxisNames=()
|
||||
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
|
||||
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
|
||||
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
|
||||
-ConsoleKeys=Tilde
|
||||
+ConsoleKeys=Tilde
|
||||
|
||||