render: extract native M2 animation resource observer
This commit is contained in:
@@ -329,7 +329,7 @@ Native M2 animation first pass for composite doodads:
|
||||
- `M2NativeAnimator` evaluates the selected Stand sequence and applies WoW-style bone matrices:
|
||||
`T(pivot + translation) * R * S * T(-pivot) * parent`.
|
||||
- Vertex influences are resolved through `.skin` local bone indices and the M2 `boneCombos` palette, matching the original section/batch renderer model used by WoW/whoa.
|
||||
- `StreamingWorldLoader` routes only `gryphonroost` through this native path; simple critters still use the existing GLB allowlist and most M2 world props stay on static MultiMesh.
|
||||
- `M2NativeAnimationResourceObserver` routes only `gryphonroost` through this native path; simple critters still use the existing GLB allowlist and most M2 world props stay on static MultiMesh.
|
||||
- Current implementation rebuilds the animated `ArrayMesh` on CPU. This is correct enough for the problematic rare doodads and gives us the same data layout that can later move to shader/GPU skinning.
|
||||
|
||||
Причина: композитные doodad вроде `GryphonRoost` снова ломают визуал при GLB-анимации. До M2-native renderer все world placement M2 должны оставаться статическими. GLB-анимация оставлена только как вручную включаемый debug experiment через allowlist.
|
||||
@@ -1148,12 +1148,28 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
||||
primitive/schema safety validation, request admission and static-only fallback.
|
||||
- The observer produces `M2BuildResourceSnapshot` with the exact borrowed cached
|
||||
prototype or pending state and retains/frees no engine object.
|
||||
- Native GryphonRoost raw-data build/debug logging and all terminal polling,
|
||||
finalization, permits and SceneTree mutation remain loader-owned.
|
||||
- Native GryphonRoost raw-data build/debug logging belongs to the sibling native
|
||||
observer; terminal polling, finalization, permits and SceneTree mutation remain
|
||||
loader-owned.
|
||||
- Defaults, path order, accepted empty/`pivot_prefix_v1` schemas, cache format,
|
||||
metrics and visible behavior are unchanged. Generated GLB metadata fixtures
|
||||
are not private asset, leak, p95/p99 or original-client animation evidence.
|
||||
|
||||
## 2026-07-18 M2 Native Animation Resource Observer Extraction
|
||||
|
||||
- `M2NativeAnimationResourceObserver` now owns the exact case-insensitive
|
||||
`gryphonroost` candidate rule, animated prototype/static-only cache checks,
|
||||
synchronous raw animated read, native builder call, adoption and success log.
|
||||
- The native attempt remains first. Empty raw data/surfaces and null/childless
|
||||
builds retain the same static-only fallback; accepted Nodes remain owned by
|
||||
`M2PrototypeCacheState` until final shutdown.
|
||||
- `StreamingWorldLoader` retains observer order, typed snapshot construction,
|
||||
cached-GLB fallback, terminal ResourceLoader polling/finalize, permits,
|
||||
materialization and SceneTree lifetime.
|
||||
- The historical unfreed childless builder result is deliberately preserved and
|
||||
documented as a leak risk. No parser, cache, profile or visible rule changed;
|
||||
synthetic fixtures are not asset-backed animation or performance evidence.
|
||||
|
||||
## 2026-07-18 M2 Animated Scene Finalizer Extraction
|
||||
|
||||
- `M2AnimatedSceneFinalizer` now owns terminal animated PackedScene candidate
|
||||
@@ -1228,10 +1244,10 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
||||
- `M2RawModelRepository` now owns the repeated extracted-file and optional
|
||||
native `M2Loader` boundary for static `load_m2` and animated
|
||||
`load_m2_animated` raw Dictionaries.
|
||||
- `StreamingWorldLoader` delegates the stale-Mesh refresh, static prototype and
|
||||
native animated prototype reads. It retains normalization, `.tscn/.glb`
|
||||
fallback order, builders, permits and Node/Mesh use; prototype/negative state
|
||||
is now isolated in `M2PrototypeCacheState`.
|
||||
- `StreamingWorldLoader` delegates stale-Mesh refresh and static reads directly;
|
||||
`M2NativeAnimationResourceObserver` delegates native animated reads. The loader
|
||||
retains normalization, `.tscn/.glb` fallback order, permits and Node/Mesh use;
|
||||
prototype/negative state is isolated in `M2PrototypeCacheState`.
|
||||
- The repository retains no path, native object or parsed data. Empty paths,
|
||||
absent files/classes/methods and invalid results produce the same empty-value
|
||||
fallback contract; path join/globalization and native method names are exact.
|
||||
|
||||
Reference in New Issue
Block a user