Add Agrarian asset pipeline policy
This commit is contained in:
@@ -948,6 +948,7 @@ Required order:
|
|||||||
|
|
||||||
- [x] Replace or upgrade the terrain material first so Ground Zero no longer reads as flat tan placeholder ground. Rebuilt `M_AGR_GZ_Terrain_CoastalScrub` as a procedural coastal scrub material that blends dry soil, scrub green, and sandy path color families with broad and fine noise, documented the visual baseline, and extended the natural-environment verifier so flat constant-color terrain fails.
|
- [x] Replace or upgrade the terrain material first so Ground Zero no longer reads as flat tan placeholder ground. Rebuilt `M_AGR_GZ_Terrain_CoastalScrub` as a procedural coastal scrub material that blends dry soil, scrub green, and sandy path color families with broad and fine noise, documented the visual baseline, and extended the natural-environment verifier so flat constant-color terrain fails.
|
||||||
- [x] Replace or upgrade grasses, shrubs, and trees with believable coastal-scrub vegetation assets, density, color variation, scale variation, and LOD/performance limits. Added native generated coastal oak, coyote brush, and dry grass clump mesh assets under `/Game/Agrarian/Environment/Vegetation`, switched the Ground Zero foliage patch off engine basic shapes, rebuilt foliage materials with per-instance color variation, preserved investor-facing density and scale variation, added explicit HISM cull/shadow performance limits, and extended verifiers so basic-shape vegetation or missing cull limits fail.
|
- [x] Replace or upgrade grasses, shrubs, and trees with believable coastal-scrub vegetation assets, density, color variation, scale variation, and LOD/performance limits. Added native generated coastal oak, coyote brush, and dry grass clump mesh assets under `/Game/Agrarian/Environment/Vegetation`, switched the Ground Zero foliage patch off engine basic shapes, rebuilt foliage materials with per-instance color variation, preserved investor-facing density and scale variation, added explicit HISM cull/shadow performance limits, and extended verifiers so basic-shape vegetation or missing cull limits fail.
|
||||||
|
- [x] Add the Asset acquisition and ingest pipeline before pulling more visuals: created approved staging folders, added `Docs/Art/AssetLicenses.md`, documented the pipeline in `Docs/Art/AgrarianAssetPipeline.md`, added `Scripts/verify_asset_pipeline_policy.py`, defaulted to Fab/free, Quixel, CC0/public-domain, team-created, or Nathan-supplied assets only, rejected random scraped internet assets, and prioritized trees, shrubs, grass, water, rocks, character bodies/outfits, and old abandoned equipment being reclaimed by nature.
|
||||||
- [ ] Replace or upgrade freshwater visuals with readable water surface, edge treatment, bank dressing, reflection/roughness tuning, and collectability cues.
|
- [ ] Replace or upgrade freshwater visuals with readable water surface, edge treatment, bank dressing, reflection/roughness tuning, and collectability cues.
|
||||||
- [ ] Replace or upgrade character bodies and clothing so selected characters read as realistic near-future post-collapse frontier people rather than template mannequins or proxy stacks.
|
- [ ] Replace or upgrade character bodies and clothing so selected characters read as realistic near-future post-collapse frontier people rather than template mannequins or proxy stacks.
|
||||||
- [ ] Replace or upgrade resource objects so wood, stone, fiber, edible plants, pickups, and gathered items look like world objects rather than debug primitives.
|
- [ ] Replace or upgrade resource objects so wood, stone, fiber, edible plants, pickups, and gathered items look like world objects rather than debug primitives.
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
# Agrarian Asset Pipeline
|
||||||
|
|
||||||
|
Purpose: replace placeholder visuals with realistic, licensed, performant
|
||||||
|
assets while keeping the project clean enough to scale across Earth-sized
|
||||||
|
tiles.
|
||||||
|
|
||||||
|
## Visual Direction
|
||||||
|
|
||||||
|
Agrarian should read as realistic modern post-collapse frontier survival:
|
||||||
|
damaged but recoverable, practical, lived-in, and grounded. The world should
|
||||||
|
not look cartoonish, old-west, or exaggerated apocalypse junkyard.
|
||||||
|
|
||||||
|
## First Asset Priorities
|
||||||
|
|
||||||
|
1. Coastal scrub trees.
|
||||||
|
2. Shrubs and bushes.
|
||||||
|
3. Grasses and ground cover.
|
||||||
|
4. Water, banks, wet edges, and shoreline dressing.
|
||||||
|
5. Rocks, terrain decals, and material detail.
|
||||||
|
6. Two to four human character bodies/outfits.
|
||||||
|
7. Old abandoned equipment starting to be overtaken by nature.
|
||||||
|
|
||||||
|
## Approved Sources
|
||||||
|
|
||||||
|
- Fab free assets or assets explicitly owned for this project.
|
||||||
|
- Quixel/Megascans assets available under the current Epic/Unreal terms.
|
||||||
|
- CC0/public-domain art libraries.
|
||||||
|
- Assets created internally.
|
||||||
|
- Assets Nathan manually adds to the staging folder with permission to use.
|
||||||
|
|
||||||
|
Do not scrape random internet images or models. If an asset cannot be traced to
|
||||||
|
a usable license, reject it.
|
||||||
|
|
||||||
|
## Staging Workflow
|
||||||
|
|
||||||
|
1. Place downloaded/manual assets in:
|
||||||
|
`/home/nathan/AssetStaging/Agrarian/Incoming`
|
||||||
|
2. Save license evidence in:
|
||||||
|
`/home/nathan/AssetStaging/Agrarian/LicenseEvidence`
|
||||||
|
3. Review license and visual fit.
|
||||||
|
4. Move acceptable assets to:
|
||||||
|
`/home/nathan/AssetStaging/Agrarian/Approved`
|
||||||
|
5. Import into Unreal under the correct project path:
|
||||||
|
`/Game/Agrarian/Environment`, `/Game/Agrarian/Characters`,
|
||||||
|
`/Game/Agrarian/Props`, or `/Game/Agrarian/Effects`.
|
||||||
|
6. Rename using Agrarian naming policy.
|
||||||
|
7. Generate or verify:
|
||||||
|
- materials/material instances
|
||||||
|
- collision
|
||||||
|
- LODs or Nanite settings
|
||||||
|
- texture size limits
|
||||||
|
- foliage cull distances where relevant
|
||||||
|
- gameplay tags or placement metadata where relevant
|
||||||
|
8. Record the asset in `Docs/Art/AssetLicenses.md`.
|
||||||
|
9. Run visual and placeholder verifiers before packaging a demo.
|
||||||
|
|
||||||
|
## Unreal Import Notes
|
||||||
|
|
||||||
|
- Foliage should use HISM/foliage-friendly meshes with cull distances and
|
||||||
|
sensible material complexity.
|
||||||
|
- Nanite may be used for rigid static meshes where it improves visual density,
|
||||||
|
but grass and alpha-heavy foliage still need performance testing.
|
||||||
|
- Characters and animals must not be imported as static showcase meshes if
|
||||||
|
gameplay requires animation. They need skeletal meshes, animation targets,
|
||||||
|
collision, and gameplay integration.
|
||||||
|
- Water should be handled as a shader/system problem, not a generated model.
|
||||||
|
|
||||||
|
## Rejection Rules
|
||||||
|
|
||||||
|
Reject or quarantine assets that:
|
||||||
|
|
||||||
|
- have unclear licensing.
|
||||||
|
- require attribution we cannot satisfy in-game or in shipped notices.
|
||||||
|
- are visibly stylized against the realism target.
|
||||||
|
- are too high-poly or texture-heavy without a practical optimization path.
|
||||||
|
- include unrelated branding, logos, watermarks, or embedded marketplace demo
|
||||||
|
content.
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Agrarian Asset License Register
|
||||||
|
|
||||||
|
Every non-original art asset imported into Agrarian must be recorded here
|
||||||
|
before it is used in a playable map, packaged demo, screenshot, or trailer.
|
||||||
|
|
||||||
|
Allowed default sources:
|
||||||
|
|
||||||
|
- Fab assets explicitly marked free or otherwise purchased/owned for this
|
||||||
|
project.
|
||||||
|
- Quixel/Megascans assets available under the current Epic/Unreal terms for
|
||||||
|
this project.
|
||||||
|
- CC0 or public-domain assets.
|
||||||
|
- Assets created by the Agrarian team.
|
||||||
|
- Assets manually supplied by Nathan with permission to use in the game.
|
||||||
|
|
||||||
|
Do not import random internet images, models, scans, or textures unless the
|
||||||
|
license is clear, compatible with commercial game use, and recorded below.
|
||||||
|
|
||||||
|
## Staging Policy
|
||||||
|
|
||||||
|
Asset staging root on the Unreal Ubuntu VM:
|
||||||
|
|
||||||
|
`/home/nathan/AssetStaging/Agrarian`
|
||||||
|
|
||||||
|
Expected subfolders:
|
||||||
|
|
||||||
|
- `Incoming`: newly downloaded or manually supplied assets.
|
||||||
|
- `LicenseEvidence`: screenshots, text exports, or links proving license terms.
|
||||||
|
- `Approved`: assets reviewed and ready for Unreal import.
|
||||||
|
- `Processed`: assets imported, optimized, renamed, and verified.
|
||||||
|
- `Rejected`: assets that should not be used.
|
||||||
|
|
||||||
|
## Naming Policy
|
||||||
|
|
||||||
|
Use project-readable names before import:
|
||||||
|
|
||||||
|
- Static meshes: `SM_<Category>_<SpeciesOrObject>_<Variant>`
|
||||||
|
- Skeletal meshes: `SK_<Category>_<Name>_<Variant>`
|
||||||
|
- Materials: `M_<Category>_<Name>` or `MI_<Category>_<Name>_<Variant>`
|
||||||
|
- Textures: `T_<Category>_<Name>_<MapType>`
|
||||||
|
- Niagara systems: `NS_<Effect>_<Variant>`
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- `SM_Tree_CoastalOak_A`
|
||||||
|
- `SM_Shrub_CoyoteBrush_B`
|
||||||
|
- `MI_Ground_CoastalScrub_Dry`
|
||||||
|
- `SK_Human_FrontierAdult_A`
|
||||||
|
- `SM_Equipment_OvergrownTractor_A`
|
||||||
|
|
||||||
|
## License Entries
|
||||||
|
|
||||||
|
| Asset | Type | Source | License | Cost | Imported Path | Notes |
|
||||||
|
| --- | --- | --- | --- | --- | --- | --- |
|
||||||
|
| Native Ground Zero proxy vegetation | Tree/shrub/grass placeholders | Created in project | Project-owned | N/A | `/Game/Agrarian/Environment/Vegetation` | Generated proxy meshes; replace with licensed/production assets during 0.2.0 visual credibility work. |
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Verify Agrarian asset pipeline policy docs are present and explicit."""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
REQUIRED = {
|
||||||
|
"Docs/Art/AssetLicenses.md": [
|
||||||
|
"Fab assets explicitly marked free",
|
||||||
|
"Quixel/Megascans",
|
||||||
|
"CC0 or public-domain",
|
||||||
|
"/home/nathan/AssetStaging/Agrarian",
|
||||||
|
"Do not import random internet images",
|
||||||
|
"Native Ground Zero proxy vegetation",
|
||||||
|
],
|
||||||
|
"Docs/Art/AgrarianAssetPipeline.md": [
|
||||||
|
"realistic modern post-collapse frontier survival",
|
||||||
|
"Old abandoned equipment",
|
||||||
|
"Do not scrape random internet images or models",
|
||||||
|
"LicenseEvidence",
|
||||||
|
"Run visual and placeholder verifiers",
|
||||||
|
"Water should be handled as a shader/system problem",
|
||||||
|
],
|
||||||
|
"AGRARIAN_DEVELOPMENT_ROADMAP.md": [
|
||||||
|
"Asset acquisition and ingest pipeline",
|
||||||
|
"Fab/free, Quixel, CC0/public-domain",
|
||||||
|
"old abandoned equipment",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
missing: list[str] = []
|
||||||
|
for relative_path, snippets in REQUIRED.items():
|
||||||
|
path = ROOT / relative_path
|
||||||
|
if not path.exists():
|
||||||
|
missing.append(f"missing file: {relative_path}")
|
||||||
|
continue
|
||||||
|
text = path.read_text(encoding="utf-8")
|
||||||
|
for snippet in snippets:
|
||||||
|
if snippet not in text:
|
||||||
|
missing.append(f"{relative_path}: missing snippet {snippet!r}")
|
||||||
|
|
||||||
|
if missing:
|
||||||
|
raise SystemExit("\n".join(missing))
|
||||||
|
|
||||||
|
print("Asset pipeline policy verification complete.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user