pelican-engine 0.3.13 → 0.3.15
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/AGENTS.md +28 -11
- package/distribution.json +17 -15
- package/docs/STATUS.md +3 -3
- package/docs/api/REFERENCE.md +127 -93
- package/docs/api/index.json +125 -95
- package/docs/npm/GAME-AUTHOR.md +28 -11
- package/engine.manifest.json +1 -1
- package/lib/physics/index.js +20 -7
- package/lib/renderer/browser.js +24 -3
- package/lib/renderer/geometry.js +26 -16
- package/lib/renderer/rope-visuals.js +122 -0
- package/lib/sdk/index.d.ts +26 -4
- package/lib/sdk/index.js +1 -1
- package/lib/simulation/rope-body-coupling.js +107 -0
- package/lib/simulation/rope-plugin.js +49 -28
- package/lib/simulation/rope.js +32 -16
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -137,12 +137,28 @@ all earlier automatic ropes from that phase; the host tick may still have other
|
|
|
137
137
|
partial changes and must be recovered from a known-good checkpoint. The source
|
|
138
138
|
checkout includes `examples/rope-particles`.
|
|
139
139
|
|
|
140
|
+
For optional visual presentation, declare a material in `defineGame({ materials:
|
|
141
|
+
[...] })` and create the rope with `visual: { material: "your-material-id" }`.
|
|
142
|
+
The renderer draws capped cylindrical instances between consecutive simulated
|
|
143
|
+
particles and updates their transforms as the rope moves. `radius` defaults to
|
|
144
|
+
the particle collision radius (or 0.025); `radialSegments` defaults to 8 and
|
|
145
|
+
accepts 3–32. `castShadow` and `receiveShadow` default to true. A collapsed
|
|
146
|
+
zero-length segment has no visible surface. `ctx.ropes.visuals()` returns
|
|
147
|
+
detached descriptions, not renderer objects. Visual configuration is included
|
|
148
|
+
in the rope snapshot and is disposed with the owning content.
|
|
149
|
+
|
|
150
|
+
This is segmented geometry with overlapping caps, not a continuous deformable
|
|
151
|
+
tube. Large ropes may be expensive. Raster, ray-traced modes, GPU resource
|
|
152
|
+
lifecycle and snapshot restoration have not been runtime validated.
|
|
153
|
+
|
|
140
154
|
To bind a rope to existing dynamic sphere bodies, create it with `autoStep: true`
|
|
141
155
|
and `bodyColliders: [{ id: "rope-collider-id", entity: "body-id" }]`. After the
|
|
142
156
|
rigid-body physics phase, the host samples each bound sphere's actual collider
|
|
143
|
-
center
|
|
144
|
-
|
|
145
|
-
|
|
157
|
+
center, radius, velocity and effective inverse mass/inertia, then steps the rope
|
|
158
|
+
and applies the resulting normal contact impulse to the body. At detected overlaps,
|
|
159
|
+
particle and virtual body corrections share effective mass and address closing
|
|
160
|
+
normal velocity; contacts are not predicted before overlap.
|
|
161
|
+
The actual body's displacement responds on the next body step. Bindings require live dynamic non-trigger spheres and unique
|
|
146
162
|
collider ids and body entities within each rope. Do not use a bound collider id
|
|
147
163
|
in `setColliders`; its manual planes and spheres remain separate. A destroyed body
|
|
148
164
|
is unbound at the next automatic step, and a new entity with the same id is not
|
|
@@ -150,13 +166,15 @@ implicitly rebound. Bindings are saved with Host snapshots.
|
|
|
150
166
|
|
|
151
167
|
Do not manually apply the same contact's reaction when using a body binding: the
|
|
152
168
|
host already applies it. A native failure can still leave the host tick partially
|
|
153
|
-
changed, so restore a known-good checkpoint. This is
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
changed, so restore a known-good checkpoint. This is an approximate split-step
|
|
170
|
+
solver: virtual positions use a first-order update and the real body moves on its
|
|
171
|
+
next step. Ropes are processed sequentially, without globally coupled substeps;
|
|
172
|
+
friction, restitution and continuous collision are not included. Penetration
|
|
173
|
+
correction can inject energy; stability, conservation, runtime and snapshot
|
|
174
|
+
compatibility have not been validated.
|
|
157
175
|
|
|
158
176
|
For each latest-tick contact, `reactionImpulse` and `reactionAngularImpulse`
|
|
159
|
-
report the opposite impulse produced by the particle's
|
|
177
|
+
report the opposite impulse produced by the particle's contact response,
|
|
160
178
|
and its moment about the world origin. These optional fields are absent when
|
|
161
179
|
restoring older contact snapshots. Contacts from unbound manual colliders do not
|
|
162
180
|
automatically act on a rigid body.
|
|
@@ -174,9 +192,8 @@ operations and is not transactional if a tick fails; recover from a known-good
|
|
|
174
192
|
checkpoint. It must not be represented as complete two-way rigid-body interaction.
|
|
175
193
|
|
|
176
194
|
This is an unverified development-stage increment, not complete rope physics:
|
|
177
|
-
|
|
178
|
-
or tearing.
|
|
179
|
-
coupled physics. Plane normals must be unit length; `offset` is the signed
|
|
195
|
+
the optional segmented visual does not provide a continuous deformable rope mesh,
|
|
196
|
+
general rigid-body coupling, segment or self collision, or tearing. Plane normals must be unit length; `offset` is the signed
|
|
180
197
|
normal distance from the origin. Host intervals must be between 1/1000 and
|
|
181
198
|
1/30 seconds inclusive.
|
|
182
199
|
|
package/distribution.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "pelican.npm-distribution",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"files": {
|
|
5
|
-
"AGENTS.md": "
|
|
5
|
+
"AGENTS.md": "e12abbd5320cd6823a1689c5d76a260b1e9f2293f6d9c871ec11ed0c497bcd3e",
|
|
6
6
|
"CONTRIBUTING.md": "0ffad5d841d90f319fc50a75b81d3c0ad6dab8d5d9bec2846c65c7f8358d5a50",
|
|
7
7
|
"docs/AI-WORKFLOW.md": "aa992686df93f791795f6f3fce01713d812eea6a1b9556f07411ac5847278efa",
|
|
8
|
-
"docs/api/index.json": "
|
|
9
|
-
"docs/api/REFERENCE.md": "
|
|
8
|
+
"docs/api/index.json": "72cb96387ddbb933920a3589457e585cf16335ac13a95868b1306ff606818136",
|
|
9
|
+
"docs/api/REFERENCE.md": "af4f340f6209272eceb6136942642f2c5f090db3fe15666ec31dc1c12ac71c46",
|
|
10
10
|
"docs/ARCHITECTURE.md": "3184b73592d466390e7793b1cf39bbb80d6052b523fba7e7cb377b5207074627",
|
|
11
11
|
"docs/assets/pelican-mark.svg": "407b10cd7e292ea83cf5dba4046fb2f01c7d566a14014c55deda3a2984562b4d",
|
|
12
12
|
"docs/CAPABILITIES.md": "92950817497d8c63db07830db96dc93c877befa8d038320feed1ae1f1a053cb1",
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
"docs/GETTING-STARTED.md": "5519ebe4e513e8ae4517c04948ee9dc70bcb1e3d04a65d468a6537c838502663",
|
|
15
15
|
"docs/GRAPHICS-GUIDE.md": "e3d0f7df6189ca3f88d81af5ffaf393f5d6bf39b9e66167bb2f64b39194b514c",
|
|
16
16
|
"docs/npm/DISTRIBUTION.md": "ff25e039921a85ba253c27608c77ed614a036117d7a04f908a78d1e3ed3f19ef",
|
|
17
|
-
"docs/npm/GAME-AUTHOR.md": "
|
|
17
|
+
"docs/npm/GAME-AUTHOR.md": "e12abbd5320cd6823a1689c5d76a260b1e9f2293f6d9c871ec11ed0c497bcd3e",
|
|
18
18
|
"docs/PELICAN-MIGRATION.md": "c5d6ab8e5186f4d36720a0a01d1a7e4157a5d386c5400e2db99571a7d10a1e49",
|
|
19
19
|
"docs/PHYSICS-LIFECYCLE-ISSUE.md": "cc78917462de4e7e9b68e77c742192ce213b4be5b516d2ba943251fff46977ac",
|
|
20
20
|
"docs/RENDER-BACKENDS.md": "d981ea94742a835d028db37d536fb7fba05102e37bc6274a37baf74f5034b954",
|
|
21
21
|
"docs/ROADMAP.md": "29ac1c54f36064e23c17cfe7f549d6860889257a57d1227e322958aa9c281568",
|
|
22
|
-
"docs/STATUS.md": "
|
|
22
|
+
"docs/STATUS.md": "cd0ff5eb4bdcad4ef9d040f91f1239827e25e47e12d36e68a82f7f230e0b27f9",
|
|
23
23
|
"docs/THIRD-PARTY-NOTICES.md": "58f9b72e2b4dfaaaf2a4c08b9bde9ecef3d2b7e7d65fccd782ed54f39fa76fdc",
|
|
24
|
-
"engine.manifest.json": "
|
|
24
|
+
"engine.manifest.json": "57443c5c26e312da99a6d224eaec66e964282cdfbffb167d76d0b4242ade0a69",
|
|
25
25
|
"lib/assets/audio.js": "6facdce4e053afd172af5b9407569b035169844ea17b49f93f8b67f72b78895f",
|
|
26
26
|
"lib/assets/errors.js": "70572678655c6e53179d31920d71f29882d373a0e12d560220bb0fc2cd74f2cc",
|
|
27
27
|
"lib/assets/glb.js": "b808479a36299c154db97f50c16863a3b5a2c61f725e66bf01d01a5f62a288a5",
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"lib/experiments/world/types.js": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
|
|
52
52
|
"lib/experiments/world/world.js": "e335a96b1a2b217b69077f8e4b01aed7fd54b87e39bd5ac4138555d27ad9afe1",
|
|
53
53
|
"lib/navigation/index.js": "5ee447333ff2152b1f08b34a68e16dd058448b0a4d2f8b3eae0fb8e76f52a1a9",
|
|
54
|
-
"lib/physics/index.js": "
|
|
54
|
+
"lib/physics/index.js": "d2f61506b26078c75ac12ea73a6ee17c62b833145dfe950fd66835659ede30b3",
|
|
55
55
|
"lib/protocol/index.js": "875c9f7ba4e67adc182aa177bc5017da0907ff9c584ba523021a219b26e38c89",
|
|
56
56
|
"lib/renderer/acceleration.js": "50ccafc9bc5b463470a23cffbdff8dc1a29a77bada44d21caf1eb0c3f9de2c65",
|
|
57
|
-
"lib/renderer/browser.js": "
|
|
57
|
+
"lib/renderer/browser.js": "46e7fd62b7751f3168c171459641dcccfefe9888b60945062b999998d842a672",
|
|
58
58
|
"lib/renderer/bsdf.js": "d6d3cd69dadb418dfb794367ac8158ef242799e248b13f4f88edeeb67ee08c69",
|
|
59
59
|
"lib/renderer/checkpoint.js": "7d6b0447b924eb260aa6a8724d17ad69e2949186b2f639dff5f6bbea388f8c62",
|
|
60
60
|
"lib/renderer/compute-executor.js": "7a9d199a1ab4f56fc99c50f82760e18169a905e63a8fa24011fb86c03e8c890a",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"lib/renderer/environment-importance.js": "b192af1173eb8235ab3f8cbe34fe7de92fe35bf970c214d7d3a122a5c77006d9",
|
|
68
68
|
"lib/renderer/environment.js": "e7eff454f49e969f188d58e936cb41c217413902af5de4d9fefa3212c3394692",
|
|
69
69
|
"lib/renderer/gameplay.js": "e77b116413339af97d1e24f59b77035eeea8297ddc29963bbe21173c10077673",
|
|
70
|
-
"lib/renderer/geometry.js": "
|
|
70
|
+
"lib/renderer/geometry.js": "8f331cb3547751a70099d80441b146e5a66072c94e23cc9f5716694d0efa1019",
|
|
71
71
|
"lib/renderer/graph-expressions.js": "3cc20d472f3894976b6c8e503b915c3eaf12de9c6d93bae45edb12b0f7e0dc4e",
|
|
72
72
|
"lib/renderer/graph-tsl.js": "d698d22fd2977aabd3f7331e8f3d46d8cbf80695ea503b9326cff470859e84b4",
|
|
73
73
|
"lib/renderer/graph.js": "1d5e9afff7d4f43c26c0bb82f3b6cb475a75af2750101114f0d7b03193bccfa7",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"lib/renderer/postprocess.js": "bac52cbec8449b66e35c6ff0b80486b062a7d7d52961b9ae5073b3fb9f24622a",
|
|
83
83
|
"lib/renderer/render-buffers.js": "db61cb80f691616b45ddb98231805469d54c12237497f6e4c709c1affc23cbf9",
|
|
84
84
|
"lib/renderer/render-textures.js": "fe98d2657701350eaeb731c2158db22e44e9a8a308f92e661f780f66fa46428c",
|
|
85
|
+
"lib/renderer/rope-visuals.js": "4bceb1c55ffc7283b24136e126c07e7e28fb631a2f4cb3afd619b1eab6db80fa",
|
|
85
86
|
"lib/renderer/startup.js": "2e4f8de3362358aad23504304219533f8ef25825abb3bb702bc960e2cfa79a1d",
|
|
86
87
|
"lib/renderer/surface-capture.js": "847edf8c764a4e8b586bee9a441013ba362875e83a957c65ad51433ae623e59f",
|
|
87
88
|
"lib/renderer/surface-gpu.js": "0db76e8873999c6b5ee3da0456e4b60d5df8d5154886a29bc0895782fdd9036b",
|
|
@@ -123,10 +124,11 @@
|
|
|
123
124
|
"lib/runtime/world.js": "c43621fbaca8bd2b0d6477a96e60e895312f0f7b1eb97614b6e4f9b716129ea1",
|
|
124
125
|
"lib/schema/index.js": "594429eecb4494c4af2f3d04537be3211f2c9297a1fc555bbba5d028d8627965",
|
|
125
126
|
"lib/sdk/graph-values.js": "a58c00f127cb82aba5fd2824981942844e06d9a59a88a05e35d1d3df2fc7ed2f",
|
|
126
|
-
"lib/sdk/index.d.ts": "
|
|
127
|
-
"lib/sdk/index.js": "
|
|
128
|
-
"lib/simulation/rope-
|
|
129
|
-
"lib/simulation/rope.js": "
|
|
127
|
+
"lib/sdk/index.d.ts": "6108606fb38dae6c044e34d7589baa205bec472b2eff1181f1df278c21deb56f",
|
|
128
|
+
"lib/sdk/index.js": "950429d5fdcd8e8ad7dfee727c859d127d4f26f45ac0065bbcb938629a3784af",
|
|
129
|
+
"lib/simulation/rope-body-coupling.js": "70694b73d17c79f223803a51fbf4a4dae551b717cd29bbea1fa38386ac98d621",
|
|
130
|
+
"lib/simulation/rope-plugin.js": "000f2d74d8ec95eeb27baf556d1d97ead80babbe212eaf5a3117f2a65e81694c",
|
|
131
|
+
"lib/simulation/rope.js": "1a9dff898d43d9e9a39f0be4ece5a17761cf8aae4a287de9da4b95d26235d441",
|
|
130
132
|
"lib/tools/api-index.js": "6aedc153a0ce8eaf18239b0368a76a8ae8e4397bd8e6cdf571889bc39265be5d",
|
|
131
133
|
"lib/tools/browser-session.js": "1fa7f78d4752d8a59a55dc2283b4d42cd1df230f0d5a5dc80c6d78ade45b4cdb",
|
|
132
134
|
"lib/tools/cli.js": "ad5e915f046cc2e6bf612edd1a88cc33758b1d2b0ce2f057be50e0a2c4770062",
|
|
@@ -197,7 +199,7 @@
|
|
|
197
199
|
"licenses/undici-types/LICENSE": "a6db8096b2707bc0102d256917d4d33f298ba36d8c3f25de067a2b5bb379db27",
|
|
198
200
|
"licenses/uniq/LICENSE": "e67aed7df22dc8031e4fcf5338fe91cb33e3817e5c58a99a2a2802eea9069791",
|
|
199
201
|
"licenses/vite/LICENSE.md": "a22152baa1aef74402443008e767e7c689a524c0909d19b0431d97f5ab066a13",
|
|
200
|
-
"package.json": "
|
|
202
|
+
"package.json": "c2ee39a9767bcaac74cc5f3d10ad1617ae5078b332dde7f709a4dde6952c0e79",
|
|
201
203
|
"README.md": "ff25e039921a85ba253c27608c77ed614a036117d7a04f908a78d1e3ed3f19ef",
|
|
202
204
|
"web/index.html": "d89d6a5b5be3beae3627a8ed506ac308b165d264fb8696be3afd79fcca2f26ee"
|
|
203
205
|
}
|
package/docs/STATUS.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 版本与发布
|
|
4
4
|
|
|
5
|
-
- 当前版本为 `0.3.
|
|
5
|
+
- 当前版本为 `0.3.15`,包、锁文件、引擎、SDK、编译器和示例中的版本保持一致。下一项功能完成后统一递增并推送;相同版本不能重复发布。
|
|
6
6
|
- 推送主线会通过 GitHub Actions 和 npm 可信发布更新 `latest`;GitHub Release 用于记录里程碑。历史版本和旧标签保持原样,不代表当前源码通过。
|
|
7
7
|
- 当前按用户要求仅允许编译和构建,不运行测试、浏览器、GPU、性能或其他验证。普通版本号不意味着运行行为、硬件或完整引擎已验收。
|
|
8
8
|
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
- 动态光追、路径追踪、受控图形计算和 WebGL2 回退已有研发实现,但当前源码的完整画质、性能、兼容性和资源生命周期未验证,不能称为完整首发。
|
|
13
13
|
- 刚体首步前删除存在已知缺陷;历史候选存在旧快照兼容及危险历史回放风险,不得通过修改夹具或在主进程回放危险历史掩盖。有关背景与原始证据保留在历史任务文档中。
|
|
14
14
|
- 正交网格导航新增批量障碍更新接口;它只处理单个网格的阻挡状态,不等于世界流送、实体变换或物理联动。该增量尚未进行运行行为验证。
|
|
15
|
-
- CPU 粒子绳索已接入 `ctx.ropes` 和 Host
|
|
16
|
-
-
|
|
15
|
+
- CPU 粒子绳索已接入 `ctx.ropes` 和 Host 快照,支持手动或自动固定步进。显式绑定的动态非触发球体可在物理阶段后被采样,并接收绳索投影产生的反冲量;其他采样球体/平面仍为单向。可选分段圆柱实例随粒子位置更新;它不是连续变形绳索网格。尚无完整双向求解、绳段/自碰撞或撕裂;渲染、运行行为和快照兼容均未验证。
|
|
16
|
+
- 动态球体绑定的接触响应已纳入刚体接触点速度、有效逆质量和转动惯量;绳索阶段使用虚拟状态、按绳索顺序求解并延迟提交冲量。真实刚体位移在下一物理步更新,仍无全局耦合子步、摩擦、恢复系数或连续碰撞,不代表完整双向物理。稳定性、守恒、运行和快照兼容尚未验证。
|
|
17
17
|
- 布料、绳索、软体、流体、连续世界、导航、动画、音频和其他首发能力仍需按各自依赖完成,不能把独立候选或局部实现写成整项完成。
|
|
18
18
|
|
|
19
19
|
## 单线接续
|