hilo3d 2.0.0-alpha.3 → 2.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +331 -13
- package/README.md +179 -302
- package/README_ZH.md +171 -277
- package/dist/Hilo3d.d.ts +3225 -1007
- package/dist/Hilo3d.d.ts.map +1 -1
- package/dist/Hilo3d.js +49159 -26844
- package/dist/Hilo3d.js.map +1 -1
- package/dist/{web_naga-CFIYl7dc.js → web_naga-B71-0Gwu.js} +2 -2
- package/dist/{web_naga-CFIYl7dc.js.map → web_naga-B71-0Gwu.js.map} +1 -1
- package/package.json +7 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,313 @@
|
|
|
1
|
+
# Unreleased
|
|
2
|
+
|
|
3
|
+
### Breaking changes
|
|
4
|
+
|
|
5
|
+
- Integrate typed particle parameters into emission and spawn initialization across CPU, stateless,
|
|
6
|
+
and stateful WebGPU command generation; runtime value changes no longer require recompilation.
|
|
7
|
+
Apply `ParticleBudgetManager` decisions directly to live capacity, spawn rate, sorting, soft
|
|
8
|
+
particles, collision, and ribbon work. Connect the bounded stateless WebGPU generator to Render
|
|
9
|
+
Graph compute, indirect storage raster, and device-loss regeneration, with explicit CPU fallback
|
|
10
|
+
for unsupported definitions and manual emission. Explicit stateful GPU emitters now reject
|
|
11
|
+
`replace-oldest`; unsupported module/backend pairs fail compilation instead of doing nothing.
|
|
12
|
+
- Replace the mutable `Material` monolith with immutable `MaterialDefinition` plus
|
|
13
|
+
`MaterialInstance`. Remove legacy topology mutation, WebGL-style blend/side fields, material-owned
|
|
14
|
+
render order and shadow participation, material display transforms, shared UV matrices, shadow
|
|
15
|
+
proxy materials, `onBeforeCompile`, and `shaderCacheId`. Move object ordering and shadow flags to
|
|
16
|
+
`Mesh`; require construction-time topology, explicit coverage/compositing, typed
|
|
17
|
+
`MaterialAttributeSemantic`/`MaterialUniformSemantic`/`MaterialTextureSemantic` bindings, and
|
|
18
|
+
explicit pass pipeline state. This is a direct migration with no compatibility adapter.
|
|
19
|
+
- Split per-texture-slot std140 metadata out of `MaterialBlock` into the fixed
|
|
20
|
+
`MaterialTextureBlock`. The material scalar block is now 448 bytes and includes
|
|
21
|
+
`u_temporalReactiveFactor`; the texture-slot block is 1,920 bytes, WebGPU material textures begin
|
|
22
|
+
at binding 2, and custom uniform block registrations begin after ten built-in WebGL2 binding
|
|
23
|
+
points.
|
|
24
|
+
- Advance the shared GPU PBR material record to `builtin-pbr-storage-v3`. The byte length is
|
|
25
|
+
unchanged, but the third surface vector's formerly reserved W component now stores authored
|
|
26
|
+
temporal reactivity for the fused GPU Scene depth/motion pass.
|
|
27
|
+
- Expand the fixed Camera/Model/Skinning/Morph/Instance std140 ABI with current/previous transforms,
|
|
28
|
+
stable and jittered camera projections, render origins, and per-domain history/depth flags. Custom
|
|
29
|
+
shaders that redeclare built-in blocks must use the updated field order and capacities.
|
|
30
|
+
- Make forward feature color encoding explicit. `replaceColor()` now requires `linear` or `srgb`,
|
|
31
|
+
and the default Forward pipeline always routes surface presentation through the Render Graph so
|
|
32
|
+
the final output transfer is owned by the output stage rather than individual materials.
|
|
33
|
+
- Replace the Forward-specific color-encoding type with the shared `RenderColorEncoding`. Manual
|
|
34
|
+
RenderTarget presentation now accepts an explicit `colorEncoding`; linear inputs receive the final
|
|
35
|
+
sRGB transfer, while display-transformed `srgb` inputs are preserved without a second conversion.
|
|
36
|
+
|
|
37
|
+
### Changes
|
|
38
|
+
|
|
39
|
+
- Update the standalone `hilo3d-game` skill for immutable material topology, Mesh-owned ordering and
|
|
40
|
+
shadow participation, and the completed portable/WebGPU particle authoring workflow.
|
|
41
|
+
- Normalize managed particle textures through the shared top-left UV boundary for CPU and WebGPU
|
|
42
|
+
sprite, mesh, motion-vector, ribbon, and trail shaders. Fix WebGPU 2D Sprite orientation when
|
|
43
|
+
`Texture.flipY` is false, and extend the asymmetric row-direction fixture across WebGL 2/WebGPU
|
|
44
|
+
render targets, ordinary materials, 2D Sprites, particles, and cube textures.
|
|
45
|
+
|
|
46
|
+
- Add the versioned public `ParticleSystemDefinition`/`ParticleSystem` API through P0-P3. Compile
|
|
47
|
+
immutable fixed modules into liveness-based SoA layouts with deterministic counter RNG and shared
|
|
48
|
+
curve/gradient LUTs; provide portable CPU fixed-step simulation with one interleaved instanced
|
|
49
|
+
sprite draw on WebGL 2/WebGPU; and add renderer-owned stateful WebGPU simulation, alive/dead
|
|
50
|
+
compaction, spawn commands, indirect arguments, Bitonic/distance-bucket sorting, recovery-aware
|
|
51
|
+
commit/rollback, and constrained storage-aware sprite raster through the default Forward Render
|
|
52
|
+
Graph. Keep the existing specialized compute-particle showcase unchanged until the remaining
|
|
53
|
+
particle phases are complete. Add stateless eligibility metadata and asset-level diagnostics,
|
|
54
|
+
absolute-time CPU reconstruction, a no-state Naga-validated WebGPU renderer-data generator,
|
|
55
|
+
deterministic live budget/quality application, and reusable short-effect system pooling.
|
|
56
|
+
- Extend the particle runtime through P4 with analytic collision and triggers, WebGPU scene-depth
|
|
57
|
+
collision, sampled-depth soft sprites with fragment depth comparison, compact bounded CPU events,
|
|
58
|
+
typed `ParticleEventChannel`, asynchronous aggregate reads, and GPU-resident event
|
|
59
|
+
capture/sub-emitter routing without count or state readback. Allow constrained storage graphics
|
|
60
|
+
shaders to specialize ordinary GLSL numeric depth samplers into WGSL depth textures.
|
|
61
|
+
- Complete particle P5 with portable mesh instancing and per-mesh buckets, ribbon/trail topology and
|
|
62
|
+
dense segment streams, WebGPU mesh scatter plus per-asset indirect draws, per-view GPU ribbon
|
|
63
|
+
topology sorting/segment compaction/indirect raster, ambient plus bounded directional Lambert
|
|
64
|
+
lighting, soft ribbons, explicit Bloom/TAA composition semantics, and opt-in motion vectors for
|
|
65
|
+
supported portable opaque/masked mesh output. Add fail-closed advanced quality gates instead of
|
|
66
|
+
silently degrading unsupported tiers. Allow the built-in opaque GPU particle boundary to request
|
|
67
|
+
opaque/transparent Forward splitting only on frames that actually draw eligible particles.
|
|
68
|
+
- Add the first particle P6 authoring slice with normalized versioned JSON serialization, strict
|
|
69
|
+
parsing and compiler validation, sequential application-owned upgrades, document-local shared
|
|
70
|
+
parameter identities, and stable application-resolved Texture/Geometry references. Reject future
|
|
71
|
+
versions, missing or skipped upgrades, unknown schema fields/tags, and unresolved or wrong-kind
|
|
72
|
+
resources before runtime construction.
|
|
73
|
+
- Add versioned reusable in-memory particle simulation checkpoints. Capture and restore CPU SoA,
|
|
74
|
+
fixed-step scheduler, pending manual emission, bounded events, playback/budget/culling state, and
|
|
75
|
+
stateless GPU absolute time without production-loop readback. Bind checkpoints to definition,
|
|
76
|
+
compiled plan, seed, parameter identity/revision, and event capacity; reject stateful GPU capture
|
|
77
|
+
until an explicit asynchronous device-state transfer contract exists.
|
|
78
|
+
- Add bounded deterministic particle baking APIs. Export stable-ID/generation-sorted frame-major
|
|
79
|
+
mesh instance caches with motion/orientation inputs and bounds, and pack application-rendered,
|
|
80
|
+
tightly packed render-target readbacks into native-format flipbook atlases. Restore the caller's
|
|
81
|
+
simulation checkpoint after success or failure, bound frame/particle/atlas work, and reject
|
|
82
|
+
stateful GPU baking rather than introducing synchronous device-state readback.
|
|
83
|
+
- Complete particle P6 external authoring with a published fixed-module graph JSON Schema,
|
|
84
|
+
deterministic definition-to-graph conversion, strict ownership/compiler validation,
|
|
85
|
+
node-addressable diagnostics, normalized inspector IR, and a versioned preview controller for
|
|
86
|
+
compile/play/pause/restart/seek/step/inspect/dispose without GPU particle readback.
|
|
87
|
+
- Allow a Forward feature runtime to request sampled single-sample scene depth per frame before
|
|
88
|
+
attachment allocation, so scene-dependent effects do not force unrelated RenderTarget frames
|
|
89
|
+
through an intermediate depth path.
|
|
90
|
+
- Add an integrated WebGPU physical atmosphere and weather chain to Clustered Forward+: cached
|
|
91
|
+
Rayleigh/Mie/ozone transmittance and multiple-scattering LUTs, a per-frame sky-view LUT, aerial
|
|
92
|
+
perspective, physical sun disc, procedural weather map, quality-tier Perlin/Worley volumetric
|
|
93
|
+
cloud ray marching, blue-noise sampling, representative-depth temporal reprojection, cloud shadows
|
|
94
|
+
for registered PBR directional light and froxel scattering, and storm lightning/sun-shaft
|
|
95
|
+
lighting. Add GPU histogram percentile exposure with asymmetric eye adaptation, on-demand
|
|
96
|
+
diagnostics, and submission-aware `rgba16float` exposure history; add configurable filmic Color
|
|
97
|
+
Uber and Clustered display transforms. Add the interactive Stormfront Observatory WebGPU example
|
|
98
|
+
with solar time, cloud, wind, storm, quality, debug, and camera controls.
|
|
99
|
+
- Add production dynamic resolution and authored reactive masks to `TemporalAA` and the integrated
|
|
100
|
+
Clustered Forward+ temporal path. Dynamic resolution is explicitly gated by WebGPU
|
|
101
|
+
`timestamp-query`, consumes asynchronous Render Graph GPU pass durations without stalling the
|
|
102
|
+
frame, and applies EWMA smoothing, hysteresis, quantized steps, warmup, settling, min/max bounds,
|
|
103
|
+
duplicate-sample rejection, and fail-closed handling for unavailable, failed, or saturated
|
|
104
|
+
timings. Resolution changes synchronously resize scene color/depth/motion/reactive, Hi-Z,
|
|
105
|
+
clusters, GTAO/SSGI/SSR, volumetric, atmosphere and cloud resources while invalidating
|
|
106
|
+
size-dependent history; color/depth history, transparent/UI composition and presentation remain
|
|
107
|
+
output resolution. Add `MaterialInstance.temporalReactiveFactor`, write it through a second
|
|
108
|
+
`r8unorm` motion MRT in ordinary Forward and the fused GPU Scene prepass, conservatively dilate it
|
|
109
|
+
3×3, and combine it with luminance reactivity during TAA/TAAU rejection. Expose single-runtime
|
|
110
|
+
Forward diagnostics and Clustered scale/GPU-time diagnostics, with tests for controller stability,
|
|
111
|
+
ABI validation, material revisions, shared GPU packing, fallback and resource requirements.
|
|
112
|
+
- Complete the native GPU Scene/Clustered Forward+ coverage slice for alpha-masked PBR, shared
|
|
113
|
+
shadows, and area lights. Alpha coverage now uses base-color/opacity slot transforms, channels,
|
|
114
|
+
encodings, factors, and cutoff consistently in indirect depth, motion, material-attribute, and
|
|
115
|
+
color passes. Directional, spot, and point lights keep GPU Scene objects on the clustered path
|
|
116
|
+
while sampling the renderer's exact shared shadow-atlas graph texture with standard/reversed-depth
|
|
117
|
+
3×3 PCF, cascades, slope bias, shadow strength, and per-mesh `receiveShadows`. Area lights use the
|
|
118
|
+
ordinary Forward LTC LUTs as global storage-light records with explicit-LOD WebGPU sampling rather
|
|
119
|
+
than point-light approximation or whole-camera fallback. `RenderPipelineContext.recordShadows()`
|
|
120
|
+
now returns frame-scoped atlas, light order, bias, cascade, and matrix data for custom pipelines;
|
|
121
|
+
the atlas remains renderer-owned, recovery-aware, and submission-tracked.
|
|
122
|
+
- Add production screen-space diffuse global illumination to ordinary Forward on WebGPU/WebGL 2 and
|
|
123
|
+
to the WebGPU Clustered Forward+ profile. The opt-in path reuses GTAO/GPU Scene material
|
|
124
|
+
attributes and motion/log-depth when available, traces configurable stochastic view-space
|
|
125
|
+
hemisphere rays against opaque depth, transports bounded linear HDR scene radiance, applies
|
|
126
|
+
motion/depth/normal history rejection with YCoCg variance clipping, runs one to three
|
|
127
|
+
depth/normal/luminance-aware a-trous filters, performs bilateral full-resolution upsampling, and
|
|
128
|
+
composites before transparent, Bloom, and display. Keep per-camera history submission-aware across
|
|
129
|
+
cuts, resize, discarded frames and recovery; use explicit-LOD sampling so translated WGSL remains
|
|
130
|
+
valid in non-uniform ray/filter control flow; and keep the disabled path resource- and pass-free.
|
|
131
|
+
Add the dual-backend Prismatic Vespers procedural chapel with cyan, vermilion, violet, and warm
|
|
132
|
+
emissive architecture, same-view on/off controls, responsive editorial UI, and WebGL 2/WebGPU
|
|
133
|
+
render-health and GPU-validation coverage.
|
|
134
|
+
- Add production WebGPU high-end froxel volumetric lighting to
|
|
135
|
+
`ClusteredForwardPlusPipelineFactory`. The opt-in path expands the bounded local-light allocator
|
|
136
|
+
from surface depth ranges to the complete camera cluster volume, tiles logarithmic Z slices into a
|
|
137
|
+
dimension-validated `rgba16float` atlas, injects directional/point/spot radiance plus exponential
|
|
138
|
+
height and sphere/box local fog, cumulatively integrates each froxel column once, reconstructs
|
|
139
|
+
depth-bounded radiance/transmittance in constant texture-fetch cost, and performs previous-view
|
|
140
|
+
reprojection, depth/reactive temporal rejection, neighborhood clamping, and linear HDR
|
|
141
|
+
transmittance/scattering composition before TAA/TAAU, transparent fallback, Bloom, and display.
|
|
142
|
+
Add bounded screen-space light visibility, low/medium/high/ultra budgets, radiance/transmittance
|
|
143
|
+
debug views, submission-aware diagnostics, camera-cut/resize/failure/device-recovery history, and
|
|
144
|
+
fail-closed storage/format/texture-dimension requirements. Keep explicit shadow-atlas and
|
|
145
|
+
transparent-volume participation as documented future ABIs rather than silently approximating
|
|
146
|
+
either contract. Add Neon Reliquary around the repository-bundled Khronos Sponza with a cinematic
|
|
147
|
+
40px surface grid, 0.375-scale froxel XY/20-slice volume, 0.72-scale TAAU, animated chromatic
|
|
148
|
+
spotlights, seven local fog fields, camera/debug controls, and a physical-WebGPU
|
|
149
|
+
stability/on-off/GPU-validation gate.
|
|
150
|
+
- Add production ground-truth ambient occlusion to ordinary Forward on WebGPU/WebGL 2 and to the
|
|
151
|
+
WebGPU Clustered Forward+ profile. The opt-in path records shared depth/material-attribute/motion
|
|
152
|
+
producers, configurable rotated horizon search, bent-normal visibility, submission-aware temporal
|
|
153
|
+
rejection, two edge-aware filters, and bounded depth/normal upsampling before applying the result
|
|
154
|
+
only to PBR ambient/IBL. Keep direct lights and emission unoccluded, reset or roll back per-camera
|
|
155
|
+
history across cuts, resize, discarded frames and recovery, and keep the disabled path resource-
|
|
156
|
+
and pass-free. Add The Silent Dragon museum study around the repository-bundled 1.2 MB Stanford
|
|
157
|
+
Dragon, with same-page GTAO A/B switching, responsive art direction, and real WebGPU/WebGL 2
|
|
158
|
+
non-black and on/off pixel coverage. Keep the deployed glTF beside its external binary payload,
|
|
159
|
+
and make the site link gate validate nested glTF buffer, image, and extension URIs before publish.
|
|
160
|
+
- Add production WebGPU high-end screen-space reflections to `ClusteredForwardPlusPipelineFactory`.
|
|
161
|
+
The opt-in path adds a strict built-in `material-attributes` `rgba16float` ABI, GPU Scene MRT and
|
|
162
|
+
ordinary Forward fallback coverage, RG32F min/max Hi-Z, hierarchical coarse-to-fine tracing,
|
|
163
|
+
roughness radiance cones, edge/distance/roughness confidence, motion/log-depth temporal rejection
|
|
164
|
+
and confidence-aware depth/normal à-trous filtering before HDR composition and TAA/TAAU. Keep the
|
|
165
|
+
disabled path allocation- and pass-free, fail closed without Hi-Z or TemporalAA, and reset history
|
|
166
|
+
across camera cuts/identity changes, resize, discarded frames and device recovery. Feed ordinary
|
|
167
|
+
Forward opaque through a `depth-only` fallback prepass before current Hi-Z construction so layered
|
|
168
|
+
PBR objects are present in both the radiance source and hierarchical depth trace. Add `rg32float`
|
|
169
|
+
to the public compute storage-texture formats, add the repository-bundled Khronos Car Concept to
|
|
170
|
+
the dedicated Afterimage SSR showcase, and cover real WebGPU on/off pixels plus GPU validation.
|
|
171
|
+
The existing Temporal Observatory remains focused on TAA/TAAU.
|
|
172
|
+
- Add the `TemporalAA` Forward feature with native-resolution TAA and fixed-scale TAAU. Built-in
|
|
173
|
+
opaque/masked materials now expose a strict single-sample `rgba16float` motion pass containing
|
|
174
|
+
current-to-previous UV velocity, expected previous logarithmic view depth, and current logarithmic
|
|
175
|
+
view depth. Camera, model, instance, skin, morph, visibility, and failed-frame history are
|
|
176
|
+
submission-aware. TAA runs after opaque and before transparent/Bloom with `rgba16float` color
|
|
177
|
+
history, `r32float` logarithmic-depth history, conservative depth rejection, YCoCg variance
|
|
178
|
+
clipping, motion/luminance-reactive history weight, resolve-only sharpening,
|
|
179
|
+
projection-cut/resize/device-loss invalidation, and deterministic jitter rollback. Clustered
|
|
180
|
+
Forward+ can opt into the same resolve; GPU Scene fuses motion output into its existing depth
|
|
181
|
+
prepass, double-buffers visibility, and composes ordinary Forward fallback opaque before TAA and
|
|
182
|
+
fallback transparent afterward. Add the WebGPU Temporal Observatory example and real-pixel
|
|
183
|
+
convergence/camera-cut/GPU-validation coverage. `TemporalAAOptions.renderScale` accepts 0.5–1;
|
|
184
|
+
sub-native modes render opaque color, depth, motion, Clustered Forward+ Hi-Z, and cluster sizing
|
|
185
|
+
at the fixed internal scale, then reconstruct Catmull-Rom current color into output-resolution
|
|
186
|
+
color/depth history and a full-resolution depth attachment before transparent composition. Dynamic
|
|
187
|
+
resolution, authored reactive masks, and transparent history remain deferred.
|
|
188
|
+
|
|
189
|
+
- Add canonical built-in material definitions, stable material IDs and revisions, explicit
|
|
190
|
+
forward/depth-only/shadow-caster/picking roles, role-aware shader variants, per-slot texture/UV
|
|
191
|
+
transform/encoding/channel data, and deterministic coverage/transmission/compositing ownership.
|
|
192
|
+
Shadow rendering now requests the original material's shadow role, glTF constructs layered PBR
|
|
193
|
+
topology and all texture transforms before instantiation, and display conversion remains solely in
|
|
194
|
+
post-processing/output.
|
|
195
|
+
- Add the renderer-local shared GPU Material Database. Deduplicate material identities into stable
|
|
196
|
+
family/layout handles, coalesce revision-driven dirty record uploads, commit texture slot state
|
|
197
|
+
only after valid submission, retry discarded frames, and retain recovery through the
|
|
198
|
+
renderer-owned CPU shadow. Migrate Clustered Forward+ from its private per-bucket PBR table so GPU
|
|
199
|
+
Scene objects keep independent geometry-bucket and shared-material indices.
|
|
200
|
+
- Complete the Forward+/Clustered/Hi-Z/batching remediation audit. Preserve one global direct/batch
|
|
201
|
+
draw order, pack per-slot PBR texture metadata, use a single compact visible table with aligned
|
|
202
|
+
per-bucket storage offsets and zero indirect `firstInstance`, make overflow membership
|
|
203
|
+
deterministic, keep directional lights global, route AreaLight and shadow-enabled lights through
|
|
204
|
+
exact Forward fallback, restrict previous-frame Hi-Z to stable conservative LOD bounds, compose
|
|
205
|
+
fallback in linear HDR before separable Bloom/display, elide Bloom resources and passes at zero
|
|
206
|
+
strength, cache static batch normal matrices, and separate CPU record timing from GPU completion
|
|
207
|
+
in the 110k-object scale fixture.
|
|
208
|
+
- Add a repository-bundled Khronos Sponza Clustered Forward+ lighting lab with 202 animated local
|
|
209
|
+
lights, including 10 slow chromatic runners that curve through a wall-height central volume, GPU
|
|
210
|
+
Scene diagnostics, HDR bloom, a multi-region OrbitControls camera tour, responsive controls, and
|
|
211
|
+
an offline-friendly asset path with native WebGPU release coverage.
|
|
212
|
+
- Avoid repeated scene traversal, camera refresh, LightManager packing, and built-in semantic-block
|
|
213
|
+
activation while preparing resource-only compute, GPU-driven, and fullscreen passes. Their shared
|
|
214
|
+
buffer/texture/resource-use transaction remains submission-aware; scene passes activate semantics
|
|
215
|
+
only when an actual renderer list or mesh draw needs them. Clustered Forward+ now also batches all
|
|
216
|
+
fixed-bucket depth draws and all color draws into one native render pass each while retaining
|
|
217
|
+
independent indirect arguments, pipelines, bindings, and graph-declared dependencies.
|
|
218
|
+
- Make previous-frame Hi-Z occlusion conservative for moving and stationary cameras. Disable it for
|
|
219
|
+
the first frame after a view-projection or depth change, project bounds from the sphere's nearest
|
|
220
|
+
depth and all eight corners of its view-space bounding cube, select a mip covering the full
|
|
221
|
+
projected extent, and cover the full configured viewport with a specialized pyramid of up to
|
|
222
|
+
thirteen levels. Only transform- and bounds-stable objects consume previous history. The current
|
|
223
|
+
pyramid is still retained so culling resumes immediately on the next stable frame without temporal
|
|
224
|
+
disocclusion holes, off-axis under-bounds, or large-geometry false positives. GPU Scene frustum
|
|
225
|
+
culling now tests the exact view-space side-plane radius instead of underestimating large spheres
|
|
226
|
+
near a screen edge, and honors each mesh's `frustumTest` opt-out.
|
|
227
|
+
- Keep GPU Scene depth-prepass and color-pass clip-space transforms byte-identical so reversed-depth
|
|
228
|
+
testing remains stable while the camera moves instead of exposing stippled, checkerboard, or large
|
|
229
|
+
missing regions from cross-program floating-point rounding.
|
|
230
|
+
- Keep default Forward lighting, clear colors, transparent blending, and intermediate effects in
|
|
231
|
+
linear space, then apply one exact linear-to-sRGB transfer at the browser surface. Multi-camera
|
|
232
|
+
load/blend stays in a renderer-owned linear composition target, while already transformed Color
|
|
233
|
+
Uber output is presented without a second conversion. Single-camera MSAA resolves into the
|
|
234
|
+
persistent single-sample composition target; multi-camera stacks use one single-sample
|
|
235
|
+
color/depth/stencil composition contract so later cameras can load prior contents exactly.
|
|
236
|
+
- Keep ShaderMaterial scene output linear and make custom pipeline presentation encoding explicit.
|
|
237
|
+
ShaderToy now relies on the shared Forward output transfer, while the compute particle field and
|
|
238
|
+
crystal path tracer declare their display-referred output so their authored grading is not
|
|
239
|
+
transferred twice.
|
|
240
|
+
- Advance the RHI benchmark manifest to schema 4 and model fixed surface-output draws separately
|
|
241
|
+
from primary scene and post-process draws; immutable snapshots from earlier schemas remain
|
|
242
|
+
historical evidence and are not rewritten.
|
|
243
|
+
- Route opaque-composited transmission surfaces through the after-opaque forward queue so their
|
|
244
|
+
scene-color dependency is satisfied without conflating transmission with alpha blending. Apply
|
|
245
|
+
texture-slot encoding consistently to 2D, cube, and environment samples, including explicit sRGB
|
|
246
|
+
decoding for the LDR studio IBL. WebGPU shader lowering now retains the managed material sampler
|
|
247
|
+
for single-UV shaders instead of bypassing texture transforms, decoding, and channel remapping,
|
|
248
|
+
restoring WebGL2/WebGPU material parity.
|
|
249
|
+
- Add the `high-end` rendering profile, per-camera standard/reversed depth modes, finite/infinite
|
|
250
|
+
reversed-Z projection, depth-convention-aware surfaces, render targets, shadows, storage graphics,
|
|
251
|
+
and GPU picking. Add optional camera-relative GPU transforms while preserving CPU world identity,
|
|
252
|
+
plus submission-transactional current/previous camera, mesh, instance, skinning, and morph state.
|
|
253
|
+
`Node.invalidateTransformHistory()` resets discontinuous motion deterministically.
|
|
254
|
+
- Add the WebGPU-only `ClusteredForwardPlusPipelineFactory` high-end opaque-scene slice. Registered
|
|
255
|
+
ordinary Mesh buckets now use stable dirty GPU Scene records, full-viewport previous-frame Hi-Z
|
|
256
|
+
occlusion, projected-size LOD compaction, fixed indexed-indirect draws, depth-driven logarithmic
|
|
257
|
+
3D clusters, a bounded count/prefix/write light allocator, storage GGX PBR, HDR Bloom, ACES
|
|
258
|
+
display, and on-demand visibility/overflow diagnostics. Add real WebGPU renderer coverage for the
|
|
259
|
+
compute/dispatch/indirect-draw path. Make Hi-Z conservative for both standard and reversed depth,
|
|
260
|
+
use the committed previous view/projection/depth convention for temporal occlusion, preserve the
|
|
261
|
+
depth prepass during color shading, and use inverse-transpose object normal matrices. Registered
|
|
262
|
+
buckets now migrate at runtime between the GPU path and a shared Forward compatibility path for
|
|
263
|
+
material/geometry replacement, alpha, transparency, skinning, morphing, unregistered meshes, and
|
|
264
|
+
object-capacity overflow; the fallback preserves normal opaque/transparent sorting, shadows, and
|
|
265
|
+
transmission scene-color input without double-drawing GPU-managed meshes. Device limit
|
|
266
|
+
requirements cover every configured geometry/cluster buffer and dispatch dimension. Add a real
|
|
267
|
+
WebGPU 100k-static + 10k-dynamic + 256-light scale/recovery acceptance fixture and deterministic
|
|
268
|
+
cluster-overflow coverage. Share metallic/roughness surface evaluation and the BRDF between
|
|
269
|
+
ordinary Forward and clustered storage shaders so Forward+ replaces only light-list iteration. Add
|
|
270
|
+
native GPU Scene base-color, metallic, roughness, combined metallic-roughness, occlusion,
|
|
271
|
+
emission, and normal maps with UV0/UV1, UV matrices, tangent streams, sampler mutation, runtime
|
|
272
|
+
texture replacement, and device-recovery coverage; incompatible alpha/layered/deformed inputs
|
|
273
|
+
continue to use the Forward fallback.
|
|
274
|
+
- Let scriptable pipeline factories create persistent renderer-owned storage buffers, stage dirty
|
|
275
|
+
writes before graph import, and commit or discard CPU temporal state at the actual submission
|
|
276
|
+
boundary through `frameSubmitted()` and `frameDiscarded()`. Pipeline-owned buffers retain normal
|
|
277
|
+
device-loss recipes and submission-aware destruction. Frame completion still runs when a
|
|
278
|
+
post-submission pipeline callback throws, so presentation, events, diagnostics, and temporal
|
|
279
|
+
cleanup are not skipped after GPU work has already been submitted.
|
|
280
|
+
- Let scriptable render graphs import engine-managed `Texture` objects as sampled persistent
|
|
281
|
+
resources while preserving renderer upload/recovery/submission ownership. Expose the public
|
|
282
|
+
per-stage sampler limit alongside the existing sampled-texture limit.
|
|
283
|
+
|
|
284
|
+
- Add modern WebGPU capability discovery for `subgroups`, adapter subgroup-size limits,
|
|
285
|
+
`shader-f16`, and `timestamp-query`; expose renderer feature queries for explicit f32/workgroup
|
|
286
|
+
fallback selection. Direct WGSL f16 now preserves the exact native artifact while completing Naga
|
|
287
|
+
validation through an equivalent f32 specialization. Compute buffer `minBindingSize` is derived
|
|
288
|
+
from WGSL store types, including the required one-element runtime-array minimum.
|
|
289
|
+
- Add submission-aware timestamp QuerySets, pass timestamp writes, explicit resolves, and validated
|
|
290
|
+
debug groups/markers to the portable RHI. Opt-in renderer diagnostics now publish Render Graph
|
|
291
|
+
record/compile/prepare/execute CPU timing, per-pass asynchronous GPU timing, and compiled resource
|
|
292
|
+
lifetime intervals through a non-blocking three-slot readback ring; the default diagnostics-off
|
|
293
|
+
path creates no query resources.
|
|
294
|
+
- Add explicit Render Graph texture views for mip, array-layer, dimension, compatible-format, and
|
|
295
|
+
depth/stencil-aspect access across sampled, storage, attachment, and copy paths. Add
|
|
296
|
+
renderer-owned double/triple-buffer history textures whose recipes survive device recovery, whose
|
|
297
|
+
contents invalidate on descriptor or device-generation changes, and whose current/history rotation
|
|
298
|
+
commits only after a successful submitted writer frame. History recipes initially accept one
|
|
299
|
+
single-sample 2D color mip/layer so slot validity always means complete initialization.
|
|
300
|
+
- Add camera-relative cascaded shadows for directional lights on the shared WebGL 2/WebGPU shadow
|
|
301
|
+
atlas path. `DirectionalLight.shadow` now supports one to four cascades, practical split
|
|
302
|
+
weighting, a maximum shadow distance, cross-cascade blending, and texel stabilization while
|
|
303
|
+
preserving the existing single-shadow default. Filtered directional shadow contrast is
|
|
304
|
+
art-directable through `shadowStrength`. Add an interactive pastel sunset geometry-garden example
|
|
305
|
+
with live cascade count, stabilization, orbit controls, split, blend, strength, distance, and 4×
|
|
306
|
+
MSAA.
|
|
307
|
+
- Promote `OrbitControls` from an example helper to the public `src/controls` API, add constrained
|
|
308
|
+
`setView()` support for scripted tours, and make maintained examples reuse the engine control
|
|
309
|
+
instead of carrying local camera gesture implementations.
|
|
310
|
+
|
|
1
311
|
# 2.0.0-alpha.2 (2026-07-26)
|
|
2
312
|
|
|
3
313
|
### Breaking changes
|
|
@@ -46,6 +356,8 @@
|
|
|
46
356
|
|
|
47
357
|
### Fixes
|
|
48
358
|
|
|
359
|
+
- Preserve GLSL comparison shadow samplers during storage-graphics WGSL lowering instead of
|
|
360
|
+
incorrectly sending already translated depth textures through numeric-depth specialization.
|
|
49
361
|
- Keep float scene-color variants linear by suppressing material-local gamma encoding and legacy
|
|
50
362
|
per-material tone mapping until the final display transform. Preserve HDR Bloom energy with
|
|
51
363
|
normalized Karis weights, remove the non-physical far-distance light floor, and use refracted
|
|
@@ -58,6 +370,9 @@
|
|
|
58
370
|
storage rows, pointer input, and readback. Apply it to Bloom, Color Uber, graph present,
|
|
59
371
|
transmission, ShaderToy, Life Game, the compute particle field, the compute path tracer, and
|
|
60
372
|
built-in material/environment sampling so WebGL 2 and WebGPU retain the same Y orientation.
|
|
373
|
+
- Keep shared Shadow Atlas rectangles in positive top-left coordinates and convert light-space UVs
|
|
374
|
+
through the portable render-target helper. WebGL 2 no longer samples a vertically mirrored depth
|
|
375
|
+
atlas that made moving shadows appear to rotate opposite their casters.
|
|
61
376
|
- Correct `SpriteFrame`'s top-left atlas-row offset for `flipY` textures on both backends. Full
|
|
62
377
|
textures were unaffected, but subframes previously selected the vertically opposite source row,
|
|
63
378
|
swapping nine-slice top/bottom pieces and requiring reversed character-direction maps. Use a
|
|
@@ -86,9 +401,10 @@
|
|
|
86
401
|
|
|
87
402
|
### Changes
|
|
88
403
|
|
|
89
|
-
- Add a portable `
|
|
90
|
-
and hybrid games, stable-first `2.0.0` dependency resolution, focused public-API
|
|
91
|
-
repository checks that keep bundled examples and version-selection behavior valid
|
|
404
|
+
- Add a portable `hilo3d-game` Agent Skill under `skills/` with strict TypeScript/Vite starters for
|
|
405
|
+
2D, 3D, and hybrid games, stable-first `2.0.0` dependency resolution, focused public-API
|
|
406
|
+
references, and repository checks that keep bundled examples and version-selection behavior valid
|
|
407
|
+
without treating the skill as repository-scoped Codex guidance.
|
|
92
408
|
- Separate the full release gate from npm's publish lifecycle: `npm run release:check` retains the
|
|
93
409
|
complete validation matrix, while `prepublishOnly` performs only fast deterministic checks before
|
|
94
410
|
`prepack` builds the tarball, avoiding repeated browser suites and expired publish OTPs.
|
|
@@ -149,19 +465,21 @@
|
|
|
149
465
|
forces, boundary physics, GPU-authored indirect arguments, and three particle raster layers stay
|
|
150
466
|
on the public Render Graph/RHI path. Its deterministic test mode drives real pointer input without
|
|
151
467
|
reading particle state back to the CPU.
|
|
152
|
-
- Keep
|
|
153
|
-
write
|
|
154
|
-
state uses externally owned renderer `StorageBuffer` objects
|
|
155
|
-
accepts one pending storage-buffer readback. `cpu-shadow`
|
|
156
|
-
later GPU mutations, and Direct WGSL `f16` remains
|
|
157
|
-
validate it end to end. Storage-aware graphics
|
|
158
|
-
|
|
468
|
+
- Keep storage texture writes write-only and complete for the selected single-mip view; overlapping
|
|
469
|
+
sampled/write feedback remains invalid. Persistent texture state uses renderer-owned history
|
|
470
|
+
recipes, while persistent buffer state uses externally owned renderer `StorageBuffer` objects
|
|
471
|
+
imported per frame; each Renderer accepts one pending storage-buffer readback. `cpu-shadow`
|
|
472
|
+
recovery restores CPU bytes rather than later GPU mutations, and Direct WGSL `f16` remains
|
|
473
|
+
fail-closed until the Naga validation path can validate it end to end. Storage-aware graphics
|
|
474
|
+
retains broader Material/Scene texture reflection, while `GPUDrivenRenderPass` validates explicit
|
|
475
|
+
graph view dimension, format, and sample type before backend execution.
|
|
159
476
|
- Expose the built-in forward culling results to features, reject feature runtimes shared across
|
|
160
477
|
Renderers, and preserve selected RenderTarget color/depth/stencil clear/load/store operations
|
|
161
478
|
across feature-enabled scene, intermediate-color, and output passes.
|
|
162
|
-
- Reject pre-opaque scene-color sampling and
|
|
163
|
-
|
|
164
|
-
storage-aware Scene pass for
|
|
479
|
+
- Reject pre-opaque scene-color sampling and support built-in Forward `sampledDepth` through
|
|
480
|
+
single-sample sampleable depth plus portable non-filtering fullscreen bindings. A custom SRP can
|
|
481
|
+
still explicitly compose depth prepass, compute culling, and a storage-aware Scene pass for
|
|
482
|
+
Forward+.
|
|
165
483
|
- Add backend-neutral `Renderer.waitForIdle()` for application completion fences. Native WebGL 2 or
|
|
166
484
|
WebGPU interoperability is opt-in through `Renderer.getExtension()` instead of public `gl` or
|
|
167
485
|
`gpuDevice` fields.
|