Files
stylized-rock-generator/build.ps1
T
D4rkst3randClaude Opus 4.8 c7154ca690 Neu: Stylized Grass Generator 1.0.0 (drittes Addon im Repo)
Gras-, Blumen- und Farn-Bueschel. Kern ist die WIND-UV nach Vorgabe des Users:
UV0.V = 0 an der Wurzel, 1 an der Spitze - genau die Maske, die UEs
"SimpleGrassWind" als WindWeight braucht.

Am Zielmaterial geprueft (M_Grass.uasset): es nutzt SimpleGrassWind +
WorldPositionOffset + TextureCoordinate, aber KEINE VertexColor. Die Windmaske
kommt deshalb primaer ueber die UV - die Assets laufen damit ohne
Materialaenderung.

Vertex-Farben zusaetzlich, nicht als einzige Quelle:
  R = Kopie der Windmaske (Fallback)
  G = Variation je HALM - Ebene unter dem Biom-Tint, den die Engine bereits ueber
      PerInstanceCustomData 0/1 pro Instanz setzt; im Material multiplizieren
  B = AO (unten dunkel)

Presets gras / gras_hoch / steppengras / farn / blume, Zufalls-Button,
Tri-Budget-Warnung (400 laut ASSETS.md).

Gemessen: UV.V Wurzel 0.000 -> Spitze 1.000, 112 Tris bei 14 Halmen, G hat
exakt 14 verschiedene Werte bei 14 Halmen (also wirklich pro Halm, nicht pro
Vertex), min_z = 0.0000, UV und VCol ueberleben den FBX-Roundtrip.

build.ps1 baut jetzt drei Extensions - dieselbe URL liefert alle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-31 10:46:01 +02:00

59 lines
2.5 KiB
PowerShell

# Baut ALLE Extensions dieses Repos und aktualisiert das Repo-Listing (index.json).
#
# Ein Blender-Extension-Repo kann MEHRERE Extensions ausliefern: "server-generate"
# scannt den dist/-Ordner und listet jedes gefundene Zip. Dadurch liefert EINE
# URL in Blender sowohl den Rock- als auch den Tree-Generator.
#
# Aufruf:
# .\build.ps1 # nutzt "blender" aus dem PATH
# .\build.ps1 -Blender "E:\...\blender.exe"
#
# Update-Workflow:
# 1. version im jeweiligen Manifest erhoehen (und bl_info in der .py)
# 2. .\build.ps1
# 3. git add -A; git commit -m "vX.Y.Z"; git push
# 4. In Blender: Preferences -> Get Extensions -> Repo -> "Check for Updates"
param(
[string]$Blender = "blender"
)
$ErrorActionPreference = "Stop"
$root = $PSScriptRoot
$dist = Join-Path $root "dist"
New-Item -ItemType Directory -Force -Path $dist | Out-Null
# name = Staging-Ordner, manifest = Quelldatei, source = Addon-Code
$extensions = @(
@{ name = "rock"; manifest = "blender_manifest.toml"; source = "stylized_rock_generator.py" },
@{ name = "tree"; manifest = "blender_manifest_tree.toml"; source = "stylized_tree_generator.py" },
@{ name = "grass"; manifest = "blender_manifest_grass.toml"; source = "stylized_grass_generator.py" }
)
# Alte Zips weg, damit geloeschte Versionen nicht im Listing haengen bleiben.
Get-ChildItem $dist -Filter *.zip -ErrorAction SilentlyContinue | Remove-Item -Force
foreach ($ext in $extensions) {
$stage = Join-Path $root ("_extsrc_" + $ext.name)
if (Test-Path $stage) { Remove-Item -Recurse -Force $stage }
New-Item -ItemType Directory -Force -Path $stage | Out-Null
# Extension = Package: Manifest heisst IMMER blender_manifest.toml,
# der Addon-Code IMMER __init__.py.
Copy-Item (Join-Path $root $ext.manifest) (Join-Path $stage "blender_manifest.toml")
Copy-Item (Join-Path $root $ext.source) (Join-Path $stage "__init__.py")
Write-Host ("== build " + $ext.name + " ==") -ForegroundColor Cyan
& $Blender --command extension build --source-dir $stage --output-dir $dist
if ($LASTEXITCODE -ne 0) { throw ("build fehlgeschlagen: " + $ext.name) }
Remove-Item -Recurse -Force $stage
}
Write-Host "== server-generate (index.json) ==" -ForegroundColor Cyan
& $Blender --command extension server-generate --repo-dir $dist
if ($LASTEXITCODE -ne 0) { throw "server-generate fehlgeschlagen" }
Write-Host "Fertig." -ForegroundColor Green
Get-ChildItem $dist | Select-Object Name, Length | Format-Table -AutoSize