@forgeax/engine-vfx 0.1.28 → 0.1.29
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/README.md +62 -14
- package/dist/assets/particle-effect-decoder.d.ts.map +1 -1
- package/dist/authoring-descriptor.d.ts +4 -4
- package/dist/authoring-descriptor.d.ts.map +1 -1
- package/dist/code-source-v3.d.ts +101 -0
- package/dist/code-source-v3.d.ts.map +1 -0
- package/dist/code-source.d.ts +12 -11
- package/dist/code-source.d.ts.map +1 -1
- package/dist/data-interface.d.ts +17 -1
- package/dist/data-interface.d.ts.map +1 -1
- package/dist/effect-contract.d.ts +11 -1
- package/dist/effect-contract.d.ts.map +1 -1
- package/dist/gpu-loader.d.ts +5 -5
- package/dist/gpu-loader.d.ts.map +1 -1
- package/dist/gpu-program.d.ts +52 -27
- package/dist/gpu-program.d.ts.map +1 -1
- package/dist/gpu-runtime.d.ts +32 -7
- package/dist/gpu-runtime.d.ts.map +1 -1
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +647 -117
- package/dist/index.mjs.map +1 -1
- package/dist/particle-layout.d.ts +62 -0
- package/dist/particle-layout.d.ts.map +1 -0
- package/package.json +5 -5
- package/src/__tests__/authoring-descriptor.unit.test.ts +18 -8
- package/src/__tests__/channel-input.unit.test.ts +4 -1
- package/src/__tests__/channel-overflow-policy-owner.test-d.ts +2 -2
- package/src/__tests__/code-source-v2.unit.test.ts +15 -14
- package/src/__tests__/data-interface-contract.unit.test.ts +41 -2
- package/src/__tests__/effect-contract.unit.test.ts +6 -3
- package/src/__tests__/gpu-program-simulation-culling-owner.test-d.ts +6 -6
- package/src/__tests__/gpu-reflection-vocabulary-owner.test-d.ts +2 -2
- package/src/__tests__/gpu-runtime.integration.test.ts +244 -11
- package/src/__tests__/instance-public-api.unit.test.ts +4 -1
- package/src/__tests__/instance.unit.test.ts +4 -1
- package/src/__tests__/loader-v1-rejection.unit.test.ts +14 -14
- package/src/__tests__/player-reflection.unit.test.ts +2 -2
- package/src/__tests__/player-type.test-d.ts +4 -1
- package/src/__tests__/renderer-source.unit.test.ts +6 -6
- package/src/__tests__/replay-canonical.unit.test.ts +4 -1
- package/src/__tests__/vfx-data-interface-vocabulary-owner.test-d.ts +3 -8
- package/src/assets/particle-effect-decoder.ts +4 -3
- package/src/authoring-descriptor.ts +26 -28
- package/src/code-source-v3.ts +460 -0
- package/src/code-source.ts +23 -27
- package/src/data-interface.ts +66 -1
- package/src/effect-contract.ts +73 -20
- package/src/gpu-loader.ts +61 -35
- package/src/gpu-program.ts +57 -35
- package/src/gpu-runtime.ts +115 -42
- package/src/index.ts +53 -9
- package/src/particle-layout.ts +214 -0
package/README.md
CHANGED
|
@@ -24,10 +24,10 @@ artifact must be cold-cooked instead of being treated as current.
|
|
|
24
24
|
## Author source
|
|
25
25
|
|
|
26
26
|
```ts
|
|
27
|
-
import {
|
|
27
|
+
import { defineParticleEffectSourceV3 } from '@forgeax/engine-vfx';
|
|
28
28
|
|
|
29
|
-
export const sparks =
|
|
30
|
-
schemaVersion:
|
|
29
|
+
export const sparks = defineParticleEffectSourceV3({
|
|
30
|
+
schemaVersion: 3,
|
|
31
31
|
emitters: [{
|
|
32
32
|
id: 'sparks',
|
|
33
33
|
capacity: 100_000,
|
|
@@ -57,6 +57,48 @@ A mesh renderer selects exactly one draw surface with `submesh` (default `0`):
|
|
|
57
57
|
`{ kind: 'mesh', mesh, material, submesh: 2 }`. An out-of-range index fails
|
|
58
58
|
preparation instead of silently drawing another submesh.
|
|
59
59
|
|
|
60
|
+
## Program v3 data plane
|
|
61
|
+
|
|
62
|
+
The minimum-fidelity slice exposes a schema-driven Program v3 authoring boundary
|
|
63
|
+
through `defineParticleEffectSourceV3`. Its fixed Core record is 112 bytes
|
|
64
|
+
(`VfxParticle`); effect snapshot values live in `VfxParameters`, while optional
|
|
65
|
+
`VfxCustom` values use a persistent GPU storage record capped at four
|
|
66
|
+
`vec4`-equivalent lanes. The compiler derives the WGSL declarations, reflection,
|
|
67
|
+
host stride, and renderer projections from these schemas. Reflected member
|
|
68
|
+
offsets preserve authored WGSL declaration order. Custom storage array stride
|
|
69
|
+
uses the struct's natural WGSL alignment; the vec4 lane count is a budget,
|
|
70
|
+
not an extra padding requirement (one scalar has a 4-byte stride).
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { defineParticleEffectSourceV3 } from '@forgeax/engine-vfx';
|
|
74
|
+
|
|
75
|
+
export const effect = defineParticleEffectSourceV3({
|
|
76
|
+
schemaVersion: 3,
|
|
77
|
+
emitters: [{
|
|
78
|
+
id: 'embers', capacity: 4096, backend: { required: 'gpu' }, space: 'world',
|
|
79
|
+
bounds: { kind: 'sphere', center: [0, 0, 0], radius: 8 },
|
|
80
|
+
schedule: { rate: 120 }, program: { module: 'embers.vfx.wgsl' },
|
|
81
|
+
renderers: [{
|
|
82
|
+
kind: 'billboard', material: 'ember-material', sorting: 'view-depth',
|
|
83
|
+
materialInputs: ['heat'],
|
|
84
|
+
}],
|
|
85
|
+
}],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Program v3 keeps the existing bounded `channels`/`events` and sub-emitter
|
|
90
|
+
path. The unused `vfx:channel` Data Interface token is not part of the v3
|
|
91
|
+
vocabulary; `camera`, single-sample `scene-depth`, and `noise` are
|
|
92
|
+
generation-owned resources and must be supplied by the renderer host.
|
|
93
|
+
Scene-depth is intentionally accepted only with `sampleCount: 1`; no implicit
|
|
94
|
+
MSAA resolve is performed.
|
|
95
|
+
|
|
96
|
+
Mesh renderers expose semantic Quaternion/Scale3 attributes and Standard
|
|
97
|
+
lighting/shadow intent. Billboard, Ribbon, Trail, and Beam retain their
|
|
98
|
+
topology-specific projection paths. Invalid or missing semantic/material input
|
|
99
|
+
references fail at cook time, and undeclared Parameters, Custom, and data
|
|
100
|
+
interface resources do not allocate a GPU binding.
|
|
101
|
+
|
|
60
102
|
## Batch B renderers and control
|
|
61
103
|
|
|
62
104
|
```ts
|
|
@@ -65,7 +107,7 @@ renderers: [
|
|
|
65
107
|
kind: 'billboard', material: SPARK_MATERIAL, blend: 'additive',
|
|
66
108
|
capacity: 4096, overflow: 'drop-oldest',
|
|
67
109
|
textureSheet: { columns: 4, rows: 4, frameRate: 12 },
|
|
68
|
-
pivot: [0.5, 0.25], softParticle: {
|
|
110
|
+
pivot: [0.5, 0.25], softParticle: { fadeDistance: 0.4 }, sorting: 'view-depth',
|
|
69
111
|
},
|
|
70
112
|
{ kind: 'ribbon', stripKey: 'alive-index', capacity: 1024, overflow: 'drop-newest', width: 0.2 },
|
|
71
113
|
{ kind: 'trail', historyLength: 8, capacity: 1024, overflow: 'drop-oldest', width: 0.15 },
|
|
@@ -92,13 +134,13 @@ scene-depth provider. Capacity overflow is reported through inspection.
|
|
|
92
134
|
|
|
93
135
|
fn vfx_spawn(ctx: VfxSpawnContext, particle: ptr<function, VfxParticle>) {
|
|
94
136
|
let angle = vfx_random_spawn(ctx, 0u) * 6.2831853;
|
|
95
|
-
(*particle).velocity =
|
|
137
|
+
(*particle).velocity = vec3<f32>(cos(angle), 2.0, sin(angle));
|
|
96
138
|
(*particle).lifetime = 1.5;
|
|
97
139
|
}
|
|
98
140
|
|
|
99
141
|
fn vfx_update(ctx: VfxUpdateContext, particle: ptr<function, VfxParticle>) {
|
|
100
142
|
(*particle).velocity.y -= 9.8 * ctx.delta;
|
|
101
|
-
(*particle).
|
|
143
|
+
(*particle).sprite_rotation += ctx.delta * 2.0;
|
|
102
144
|
vfx_integrate(ctx, particle);
|
|
103
145
|
}
|
|
104
146
|
```
|
|
@@ -107,11 +149,13 @@ The managed shell exposes this stable particle surface:
|
|
|
107
149
|
|
|
108
150
|
| Field | Meaning |
|
|
109
151
|
|:--|:--|
|
|
110
|
-
| `position
|
|
111
|
-
| `velocity
|
|
152
|
+
| `position` | Emitter-local or world position |
|
|
153
|
+
| `velocity` | Velocity used by `vfx_integrate` |
|
|
112
154
|
| `color` | Linear HDR color and alpha |
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
155
|
+
| `sprite_size` | Billboard width/height |
|
|
156
|
+
| `sprite_rotation` | Billboard rotation in radians |
|
|
157
|
+
| `mesh_orientation` / `mesh_scale` | Mesh Quaternion (x, y, z, w) and Scale3 |
|
|
158
|
+
| `material_random` | Stable material random scalar |
|
|
115
159
|
| `age`, `lifetime` | Engine advances age and kills at `age >= lifetime` |
|
|
116
160
|
| `alive` | Set to `0u` for explicit death |
|
|
117
161
|
| `id` | Stable spawn identity for addressable random |
|
|
@@ -164,7 +208,8 @@ responsibility.
|
|
|
164
208
|
|
|
165
209
|
> [!IMPORTANT]
|
|
166
210
|
> The descriptor is an inspection/read-model contract, not a second authoring
|
|
167
|
-
> language.
|
|
211
|
+
> language. Program v3 source plus `.vfx.wgsl` is authoritative. Older payloads
|
|
212
|
+
> are rejected at the loader boundary and must be cold-cooked before publication.
|
|
168
213
|
|
|
169
214
|
## Runtime invariants
|
|
170
215
|
|
|
@@ -183,6 +228,8 @@ program/layout fingerprints, parameter generation, pending patch count, channel
|
|
|
183
228
|
counters, `cameraVisible`, `sessionEnabled`, phase/global ticks, schedule, bounds, renderer/stage metadata and the latest
|
|
184
229
|
committed tick intent per emitter. Observation never selects a single global
|
|
185
230
|
“latest intent,” so two players and multi-emitter effects remain distinguishable.
|
|
231
|
+
The renderer may use `forEachEmitterSource()` to refresh frustum visibility from
|
|
232
|
+
live emitters even when a paused player has no pending fixed-tick intent.
|
|
186
233
|
|
|
187
234
|
## Culling policy
|
|
188
235
|
|
|
@@ -204,10 +251,11 @@ Camera culling and editor preview masking are independent runtime axes:
|
|
|
204
251
|
|
|
205
252
|
| Code | Repair |
|
|
206
253
|
|:--|:--|
|
|
207
|
-
| `vfx-source-version-unsupported` | Migrate behavior to WGSL and cold-cook schema
|
|
254
|
+
| `vfx-source-version-unsupported` | Migrate behavior to WGSL and cold-cook the supported schema |
|
|
208
255
|
| `vfx-source-invalid` | Repair `detail.path`; unknown and unsupported fields fail closed |
|
|
209
|
-
| `vfx-asset-
|
|
210
|
-
| `vfx-asset-
|
|
256
|
+
| `vfx-asset-version-unsupported` | Cold-cook the older source and publish a Program v3 payload |
|
|
257
|
+
| `vfx-asset-v3-program-missing` | Republish the Program v3 asset-local `particle-effect/program.json` artifact |
|
|
258
|
+
| `vfx-asset-v3-fingerprint-mismatch` | Cold-cook the v3 payload and program atomically |
|
|
211
259
|
| `vfx-effect-unavailable` | Load the shared effect before the first FixedUpdate |
|
|
212
260
|
| `vfx-intent-queue-overflow` | Recover the Renderer or restart the player; inspect render readiness |
|
|
213
261
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle-effect-decoder.d.ts","sourceRoot":"","sources":["../../src/assets/particle-effect-decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAI7B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,CAC/D,mBAAmB,EACnB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"particle-effect-decoder.d.ts","sourceRoot":"","sources":["../../src/assets/particle-effect-decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAI7B,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,0BAA0B,EAAE,wBAAwB,CAC/D,mBAAmB,EACnB,iBAAiB,CAwBlB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { VfxGpuEffectAssetAny } from './gpu-program.js';
|
|
2
2
|
export type VfxAuthoringValue = null | string | number | boolean | readonly VfxAuthoringValue[] | {
|
|
3
3
|
readonly [key: string]: VfxAuthoringValue;
|
|
4
4
|
};
|
|
@@ -43,7 +43,7 @@ export interface VfxAuthoringCapabilityDescriptor {
|
|
|
43
43
|
export interface VfxAuthoringDescriptor {
|
|
44
44
|
readonly version: 1;
|
|
45
45
|
readonly assetGuid: string;
|
|
46
|
-
readonly schemaVersion:
|
|
46
|
+
readonly schemaVersion: 3;
|
|
47
47
|
readonly artifactFingerprint: string;
|
|
48
48
|
readonly emitters: readonly VfxAuthoringEmitterDescriptor[];
|
|
49
49
|
readonly timeline: readonly VfxAuthoringTimelineDescriptor[];
|
|
@@ -54,7 +54,7 @@ export interface VfxAuthoringDescriptor {
|
|
|
54
54
|
* the cooked program shape. This deliberately validates the stable producer
|
|
55
55
|
* discriminants only; detailed artifact validation remains the pack loader's
|
|
56
56
|
* responsibility. */
|
|
57
|
-
export declare function isVfxGpuEffectAsset(value: unknown): value is
|
|
57
|
+
export declare function isVfxGpuEffectAsset(value: unknown): value is VfxGpuEffectAssetAny;
|
|
58
58
|
/** Project the cooked runtime asset into a compiler-free, UI-neutral authoring read model. */
|
|
59
|
-
export declare function describeVfxGpuEffect(effect:
|
|
59
|
+
export declare function describeVfxGpuEffect(effect: VfxGpuEffectAssetAny): VfxAuthoringDescriptor;
|
|
60
60
|
//# sourceMappingURL=authoring-descriptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-descriptor.d.ts","sourceRoot":"","sources":["../src/authoring-descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"authoring-descriptor.d.ts","sourceRoot":"","sources":["../src/authoring-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Result } from '@forgeax/engine-types';
|
|
2
|
+
import { type ParticleBoundsSource, type ParticleChannelSource, type ParticleCodeSourceError, type ParticleEmitterSourceStructure, type ParticleEventSource, type ParticleRendererOverflowPolicy } from './code-source.js';
|
|
3
|
+
import type { VfxParticleCoreAttribute } from './particle-layout.js';
|
|
4
|
+
/** Renderer sorting modes in Program v3. Segment topology order is unaffected. */
|
|
5
|
+
export type ParticleRendererSortingV3 = 'none' | 'view-depth' | 'view-distance' | 'custom-ascending' | 'custom-descending';
|
|
6
|
+
export type ParticleAttributeRef = {
|
|
7
|
+
readonly source: 'core';
|
|
8
|
+
readonly name: VfxParticleCoreAttribute;
|
|
9
|
+
} | {
|
|
10
|
+
readonly source: 'custom';
|
|
11
|
+
readonly name: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Renderer fields with a concrete Program v3 projection. Keep this union
|
|
15
|
+
* execution-backed; renderer.materialInputs is the separate material bridge.
|
|
16
|
+
*/
|
|
17
|
+
export type ParticleRendererSemantic = 'position' | 'color' | 'size' | 'rotation' | 'subImage' | 'age' | 'sort' | 'orientation' | 'scale' | 'visibility' | 'width' | 'taper' | 'endpoint';
|
|
18
|
+
export type ParticleRendererSemanticMap = Readonly<Partial<Record<ParticleRendererSemantic, ParticleAttributeRef>>>;
|
|
19
|
+
export interface ParticleRendererSourceV3Base {
|
|
20
|
+
readonly material: string;
|
|
21
|
+
readonly enabled?: boolean;
|
|
22
|
+
readonly capacity?: number;
|
|
23
|
+
readonly overflow?: ParticleRendererOverflowPolicy;
|
|
24
|
+
readonly width?: number;
|
|
25
|
+
readonly attributes?: ParticleRendererSemanticMap;
|
|
26
|
+
/** Names must match the cooked MaterialShaderArtifact particleInputs declaration. */
|
|
27
|
+
readonly materialInputs?: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
export type ParticleRendererSourceV3 = (ParticleRendererSourceV3Base & {
|
|
30
|
+
readonly kind: 'billboard';
|
|
31
|
+
readonly blend?: 'additive' | 'alpha' | 'opaque-cutout';
|
|
32
|
+
readonly textureSheet?: {
|
|
33
|
+
readonly columns: number;
|
|
34
|
+
readonly rows: number;
|
|
35
|
+
readonly frameRate: number;
|
|
36
|
+
readonly frameCount?: number;
|
|
37
|
+
};
|
|
38
|
+
readonly pivot?: readonly [number, number];
|
|
39
|
+
readonly softParticle?: {
|
|
40
|
+
readonly fadeDistance: number;
|
|
41
|
+
};
|
|
42
|
+
readonly sorting?: ParticleRendererSortingV3;
|
|
43
|
+
}) | (ParticleRendererSourceV3Base & {
|
|
44
|
+
readonly kind: 'mesh';
|
|
45
|
+
readonly mesh: string;
|
|
46
|
+
readonly submesh?: number;
|
|
47
|
+
readonly lighting?: 'unlit' | 'standard';
|
|
48
|
+
readonly castShadows?: boolean;
|
|
49
|
+
readonly receiveShadows?: boolean;
|
|
50
|
+
}) | (ParticleRendererSourceV3Base & {
|
|
51
|
+
readonly kind: 'ribbon';
|
|
52
|
+
readonly stripKey: 'alive-index';
|
|
53
|
+
readonly capacity: number;
|
|
54
|
+
readonly twist?: number;
|
|
55
|
+
readonly facing?: 'camera' | 'velocity' | 'custom';
|
|
56
|
+
}) | (ParticleRendererSourceV3Base & {
|
|
57
|
+
readonly kind: 'trail';
|
|
58
|
+
readonly historyLength: number;
|
|
59
|
+
readonly capacity: number;
|
|
60
|
+
readonly taper?: number;
|
|
61
|
+
}) | (ParticleRendererSourceV3Base & {
|
|
62
|
+
readonly kind: 'beam';
|
|
63
|
+
readonly endpointField: 'velocity';
|
|
64
|
+
readonly capacity: number;
|
|
65
|
+
readonly taper?: number;
|
|
66
|
+
});
|
|
67
|
+
export interface ParticleEmitterSourceV3 {
|
|
68
|
+
readonly id: string;
|
|
69
|
+
readonly capacity: number;
|
|
70
|
+
readonly backend: {
|
|
71
|
+
readonly required: 'gpu';
|
|
72
|
+
};
|
|
73
|
+
readonly space: 'local' | 'world';
|
|
74
|
+
readonly bounds: ParticleBoundsSource;
|
|
75
|
+
readonly schedule: ParticleEmitterSourceStructure['schedule'];
|
|
76
|
+
readonly program: {
|
|
77
|
+
readonly module: string;
|
|
78
|
+
};
|
|
79
|
+
readonly renderers: readonly ParticleRendererSourceV3[];
|
|
80
|
+
/** Existing channels/events are intentionally carried unchanged into v3. */
|
|
81
|
+
readonly channels?: readonly ParticleChannelSource[];
|
|
82
|
+
readonly events?: readonly ParticleEventSource[];
|
|
83
|
+
readonly simulationWhenCulled?: ParticleEmitterSourceStructure['simulationWhenCulled'];
|
|
84
|
+
}
|
|
85
|
+
export interface ParticleEffectRootSourceV3 {
|
|
86
|
+
readonly schemaVersion: 3;
|
|
87
|
+
readonly emitters: readonly ParticleEmitterSourceV3[];
|
|
88
|
+
}
|
|
89
|
+
export type ParticleEffectSourceV3 = ParticleEffectRootSourceV3;
|
|
90
|
+
/**
|
|
91
|
+
* Renderer semantic vocabulary shared by source validation and compiler
|
|
92
|
+
* reflection. Keeping the allowed keys here prevents a parser/compiler drift
|
|
93
|
+
* where a typo is accepted by one boundary and ignored by the other.
|
|
94
|
+
*/
|
|
95
|
+
export declare const PARTICLE_RENDERER_SEMANTICS: Readonly<Record<ParticleRendererSourceV3['kind'], readonly ParticleRendererSemantic[]>>;
|
|
96
|
+
/** Default mapping for fields with implicit runtime behavior; overrides merge in the compiler. */
|
|
97
|
+
export declare function defaultParticleRendererAttributes(kind: ParticleRendererSourceV3['kind']): ParticleRendererSemanticMap;
|
|
98
|
+
/** Parse the single Program v3 source shape. Older source versions are rejected. */
|
|
99
|
+
export declare function parseParticleEffectSourceV3(value: unknown): Result<ParticleEffectSourceV3, ParticleCodeSourceError>;
|
|
100
|
+
export declare function defineParticleEffectSourceV3<T extends ParticleEffectSourceV3>(source: T): T;
|
|
101
|
+
//# sourceMappingURL=code-source-v3.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-source-v3.d.ts","sourceRoot":"","sources":["../src/code-source-v3.ts"],"names":[],"mappings":"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"}
|
package/dist/code-source.d.ts
CHANGED
|
@@ -11,7 +11,8 @@ export type ParticleBoundsSource = {
|
|
|
11
11
|
readonly radius: number;
|
|
12
12
|
};
|
|
13
13
|
export type ParticleRendererOverflowPolicy = 'drop-newest' | 'drop-oldest';
|
|
14
|
-
|
|
14
|
+
/** Internal structural projection used while validating the v3 source. */
|
|
15
|
+
export type ParticleRendererSortingStructure = 'none' | 'emitter' | 'back-to-front';
|
|
15
16
|
export interface ParticleTextureSheetSource {
|
|
16
17
|
readonly columns: number;
|
|
17
18
|
readonly rows: number;
|
|
@@ -21,7 +22,7 @@ export interface ParticleTextureSheetSource {
|
|
|
21
22
|
export interface ParticleSoftParticleSource {
|
|
22
23
|
readonly fadeDistance: number;
|
|
23
24
|
}
|
|
24
|
-
export type
|
|
25
|
+
export type ParticleRendererSourceStructure = {
|
|
25
26
|
readonly kind: 'billboard';
|
|
26
27
|
readonly material: string;
|
|
27
28
|
readonly blend?: 'additive' | 'alpha' | 'opaque-cutout';
|
|
@@ -31,7 +32,7 @@ export type ParticleRendererSource = {
|
|
|
31
32
|
readonly textureSheet?: ParticleTextureSheetSource;
|
|
32
33
|
readonly pivot?: readonly [number, number];
|
|
33
34
|
readonly softParticle?: ParticleSoftParticleSource;
|
|
34
|
-
readonly sorting?:
|
|
35
|
+
readonly sorting?: ParticleRendererSortingStructure;
|
|
35
36
|
} | {
|
|
36
37
|
readonly kind: 'mesh';
|
|
37
38
|
readonly material: string;
|
|
@@ -92,7 +93,7 @@ export interface ParticleEventSource {
|
|
|
92
93
|
readonly fanOut: number;
|
|
93
94
|
readonly recursionDepth: number;
|
|
94
95
|
}
|
|
95
|
-
export interface
|
|
96
|
+
export interface ParticleEmitterSourceStructure {
|
|
96
97
|
readonly id: string;
|
|
97
98
|
readonly capacity: number;
|
|
98
99
|
readonly backend: {
|
|
@@ -111,16 +112,16 @@ export interface ParticleEmitterSourceV2 {
|
|
|
111
112
|
readonly program: {
|
|
112
113
|
readonly module: string;
|
|
113
114
|
};
|
|
114
|
-
readonly renderers: readonly
|
|
115
|
+
readonly renderers: readonly ParticleRendererSourceStructure[];
|
|
115
116
|
readonly channels?: readonly ParticleChannelSource[];
|
|
116
117
|
readonly events?: readonly ParticleEventSource[];
|
|
117
118
|
readonly simulationWhenCulled?: 'continue' | 'pause' | 'restart-on-visible';
|
|
118
119
|
}
|
|
119
|
-
export interface
|
|
120
|
-
readonly schemaVersion:
|
|
121
|
-
readonly emitters: readonly
|
|
120
|
+
export interface ParticleEffectRootSourceStructure {
|
|
121
|
+
readonly schemaVersion: 3;
|
|
122
|
+
readonly emitters: readonly ParticleEmitterSourceStructure[];
|
|
122
123
|
}
|
|
123
|
-
export type
|
|
124
|
+
export type ParticleEffectSourceStructure = ParticleEffectRootSourceStructure;
|
|
124
125
|
export interface ParticleCodeSourceInvalidDetail {
|
|
125
126
|
readonly path: string;
|
|
126
127
|
readonly emitterId?: string;
|
|
@@ -135,6 +136,6 @@ export interface ParticleCodeSourceError {
|
|
|
135
136
|
}
|
|
136
137
|
/** Parse compiler-owned stage metadata from authored WGSL comments. */
|
|
137
138
|
export declare function parseVfxStageDeclarations(source: string): Result<readonly ParticleStageSource[], ParticleCodeSourceError>;
|
|
138
|
-
|
|
139
|
-
export declare function
|
|
139
|
+
/** Validate the fields shared by the canonical Program v3 source parser. */
|
|
140
|
+
export declare function parseParticleEffectSourceStructure(value: unknown): Result<ParticleEffectSourceStructure, ParticleCodeSourceError>;
|
|
140
141
|
//# sourceMappingURL=code-source.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-source.d.ts","sourceRoot":"","sources":["../src/code-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wEAAwE;AACxE,eAAO,MAAM,+BAA+B,EAAG,sBAA+B,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAC5B;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,8BAA8B,GAAG,aAAa,GAAG,aAAa,CAAC;AAC3E,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"code-source.d.ts","sourceRoot":"","sources":["../src/code-source.ts"],"names":[],"mappings":"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"}
|
package/dist/data-interface.d.ts
CHANGED
|
@@ -2,11 +2,11 @@ import { type Result } from '@forgeax/engine-types';
|
|
|
2
2
|
export type VfxDataInterfaceKind = keyof VfxDataInterfaceBindingTypeByKind;
|
|
3
3
|
export type VfxDataInterfaceToken = `vfx:${VfxDataInterfaceKind}`;
|
|
4
4
|
export type VfxDataInterfaceBindingType = VfxDataInterfaceBindingTypeByKind[VfxDataInterfaceKind];
|
|
5
|
+
export type VfxDataInterfaceResourceKind = 'buffer' | 'texture-view' | 'sampler';
|
|
5
6
|
type VfxDataInterfaceBindingTypeByKind = {
|
|
6
7
|
readonly camera: 'uniform';
|
|
7
8
|
readonly 'scene-depth': 'sampled-depth';
|
|
8
9
|
readonly noise: 'sampled-float';
|
|
9
|
-
readonly channel: 'storage-read';
|
|
10
10
|
};
|
|
11
11
|
export type VfxDataInterfaceLifetime = 'generation';
|
|
12
12
|
export interface VfxDataInterfaceRequirement {
|
|
@@ -15,12 +15,26 @@ export interface VfxDataInterfaceRequirement {
|
|
|
15
15
|
readonly binding: number;
|
|
16
16
|
readonly bindingType: VfxDataInterfaceBindingType;
|
|
17
17
|
readonly lifetime: VfxDataInterfaceLifetime;
|
|
18
|
+
/** Scene-depth composition is intentionally proven only for single-sample targets. */
|
|
19
|
+
readonly sampleCount?: 1;
|
|
18
20
|
}
|
|
19
21
|
export interface VfxDataInterfaceResource {
|
|
20
22
|
readonly token: VfxDataInterfaceToken;
|
|
21
23
|
readonly kind: VfxDataInterfaceKind;
|
|
22
24
|
readonly bindingType: VfxDataInterfaceBindingType;
|
|
23
25
|
readonly generation: number;
|
|
26
|
+
readonly sampleCount?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Provider-owned opaque resource. Render owners refine this to their typed
|
|
29
|
+
* prepared-resource reference; VFX never inspects a backend handle.
|
|
30
|
+
*/
|
|
31
|
+
readonly resource?: {
|
|
32
|
+
readonly kind: 'buffer' | 'texture-view' | 'sampler';
|
|
33
|
+
readonly value: unknown;
|
|
34
|
+
/** Required when a provider supplies an external buffer to a compute bind group. */
|
|
35
|
+
readonly size?: number;
|
|
36
|
+
readonly usage?: 'uniform' | 'storage';
|
|
37
|
+
};
|
|
24
38
|
}
|
|
25
39
|
export interface VfxDataInterfaceErrorDetail {
|
|
26
40
|
readonly token: VfxDataInterfaceToken;
|
|
@@ -29,6 +43,8 @@ export interface VfxDataInterfaceErrorDetail {
|
|
|
29
43
|
readonly actualGeneration?: number;
|
|
30
44
|
readonly expectedBindingType?: VfxDataInterfaceBindingType;
|
|
31
45
|
readonly actualBindingType?: VfxDataInterfaceBindingType;
|
|
46
|
+
readonly expectedResourceKind?: VfxDataInterfaceResourceKind;
|
|
47
|
+
readonly actualResourceKind?: VfxDataInterfaceResourceKind;
|
|
32
48
|
}
|
|
33
49
|
export interface VfxDataInterfaceError {
|
|
34
50
|
readonly code: 'vfx-data-interface-missing' | 'vfx-data-interface-wrong-type' | 'vfx-data-interface-stale' | 'vfx-data-interface-duplicate';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-interface.d.ts","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,qBAAqB,GAAG,OAAO,oBAAoB,EAAE,CAAC;AAElE,MAAM,MAAM,2BAA2B,GAAG,iCAAiC,CAAC,oBAAoB,CAAC,CAAC;AAElG,KAAK,iCAAiC,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"data-interface.d.ts","sourceRoot":"","sources":["../src/data-interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Result } from '@forgeax/engine-types';
|
|
2
2
|
import type { VfxDataInterfaceRequirement } from './data-interface.js';
|
|
3
|
+
import type { VfxCustomLayout, VfxParticleCoreLayout } from './particle-layout.js';
|
|
3
4
|
export type VfxValue = number | readonly number[];
|
|
4
5
|
export type VfxValueMap = Readonly<Record<string, VfxValue>>;
|
|
5
6
|
export interface VfxReflectedField {
|
|
@@ -17,9 +18,12 @@ export interface VfxReflectedStruct {
|
|
|
17
18
|
readonly alignment: number;
|
|
18
19
|
}
|
|
19
20
|
export interface VfxEffectReflection {
|
|
20
|
-
|
|
21
|
+
/** The single executable particle data ABI. */
|
|
22
|
+
readonly version: 3;
|
|
21
23
|
readonly parameters: VfxReflectedStruct;
|
|
22
24
|
readonly custom: VfxReflectedStruct;
|
|
25
|
+
readonly core: VfxParticleCoreLayout;
|
|
26
|
+
readonly customLayout: VfxCustomLayout;
|
|
23
27
|
readonly dataInterfaces?: readonly VfxDataInterfaceRequirement[];
|
|
24
28
|
readonly fingerprint: string;
|
|
25
29
|
}
|
|
@@ -37,10 +41,16 @@ export interface VfxEffectContract<Values extends VfxValueMap = VfxValueMap> {
|
|
|
37
41
|
readonly reflection: VfxEffectReflection;
|
|
38
42
|
readonly fingerprint: string;
|
|
39
43
|
readonly packedSize: number;
|
|
44
|
+
/** Bytes in the effect-instance Parameters uniform. */
|
|
45
|
+
readonly parameterSize: number;
|
|
46
|
+
/** Bytes in one persistent per-particle Custom record. */
|
|
47
|
+
readonly customStride: number;
|
|
40
48
|
readonly defaults: Values;
|
|
41
49
|
createValues(initial?: Partial<Values>): Result<Values, VfxEffectContractError>;
|
|
42
50
|
validateValues(values: VfxValueMap): Result<Values, VfxEffectContractError>;
|
|
43
51
|
pack(values: Values): Result<Uint8Array, VfxEffectContractError>;
|
|
52
|
+
packParameters(values: Values): Result<Uint8Array, VfxEffectContractError>;
|
|
53
|
+
packCustom(values: VfxValueMap): Result<Uint8Array, VfxEffectContractError>;
|
|
44
54
|
}
|
|
45
55
|
declare const VECTOR_LENGTH: {
|
|
46
56
|
f32: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect-contract.d.ts","sourceRoot":"","sources":["../src/effect-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"effect-contract.d.ts","sourceRoot":"","sources":["../src/effect-contract.ts"],"names":[],"mappings":"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"}
|
package/dist/gpu-loader.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { AssetRegistry as LegacyAssetRegistry, RuntimeAssetRegistry } from '@forgeax/engine-assets-runtime';
|
|
2
2
|
import type { AssetDecoderContribution, LoadContext, Result } from '@forgeax/engine-types';
|
|
3
|
-
import { type
|
|
3
|
+
import { type VfxGpuEffectAssetAny } from './gpu-program.js';
|
|
4
4
|
export interface VfxGpuAssetError {
|
|
5
|
-
readonly code: 'vfx-asset-
|
|
5
|
+
readonly code: 'vfx-asset-version-unsupported' | 'vfx-asset-v3-invalid' | 'vfx-asset-v3-program-missing' | 'vfx-asset-v3-fingerprint-mismatch';
|
|
6
6
|
readonly expected: string;
|
|
7
7
|
readonly hint: string;
|
|
8
8
|
readonly detail: {
|
|
@@ -24,10 +24,10 @@ interface PackLoaderInput {
|
|
|
24
24
|
}
|
|
25
25
|
export declare const vfxGpuEffectPackLoader: {
|
|
26
26
|
kind: string;
|
|
27
|
-
load(input: PackLoaderInput, _context: LoadContext): Promise<Result<
|
|
27
|
+
load(input: PackLoaderInput, _context: LoadContext): Promise<Result<VfxGpuEffectAssetAny, VfxGpuAssetError>>;
|
|
28
28
|
};
|
|
29
29
|
/** VFX owner decoder contribution for the core registry's typed map. */
|
|
30
|
-
export declare const vfxGpuEffectContribution: AssetDecoderContribution<
|
|
31
|
-
export declare function loadVfxGpuEffect(registry: LegacyAssetRegistry | RuntimeAssetRegistry, guid: string): Promise<Result<
|
|
30
|
+
export declare const vfxGpuEffectContribution: AssetDecoderContribution<VfxGpuEffectAssetAny, 'particle-effect'>;
|
|
31
|
+
export declare function loadVfxGpuEffect(registry: LegacyAssetRegistry | RuntimeAssetRegistry, guid: string): Promise<Result<VfxGpuEffectAssetAny, unknown>>;
|
|
32
32
|
export {};
|
|
33
33
|
//# sourceMappingURL=gpu-loader.d.ts.map
|
package/dist/gpu-loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gpu-loader.d.ts","sourceRoot":"","sources":["../src/gpu-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,mBAAmB,EACpC,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,wBAAwB,EAGxB,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"gpu-loader.d.ts","sourceRoot":"","sources":["../src/gpu-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,mBAAmB,EACpC,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EACV,wBAAwB,EAGxB,WAAW,EACX,MAAM,EACP,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EACT,+BAA+B,GAC/B,sBAAsB,GACtB,8BAA8B,GAC9B,mCAAmC,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAC1B,MAAM,CACJ,MAAM,EACN;QACE,QAAQ,CAAC,UAAU,EAAE;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;KAC5B,CACF,CACF,CAAC;CACH;AAmFD,eAAO,MAAM,sBAAsB;;gBAGxB,eAAe,YACZ,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;CAgI3D,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,wBAAwB,CAC7D,oBAAoB,EACpB,iBAAiB,CAoClB,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,mBAAmB,GAAG,oBAAoB,EACpD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAWhD"}
|