@fps-games/vfx 0.3.2 → 0.3.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.
Files changed (234) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +5 -5
  3. package/dist/effects/treasure-attention/index.d.ts +1 -1
  4. package/package.json +6 -5
  5. package/tooling/vfx-cli.mjs +31 -22
  6. package/tooling/vfx-package-resolution.mjs +8 -8
  7. package/docs/AUTHORING_EFFECTS.md +0 -297
  8. package/docs/INTEGRATION.md +0 -194
  9. package/docs/VFX_LIBRARY_ARCHITECTURE_chatgpt.md +0 -1580
  10. package/docs/VFX_LIBRARY_EXECUTION_PLAN.md +0 -229
  11. package/docs/VFX_LIBRARY_PLAN.md +0 -546
  12. package/docs/hit-flash-red-method.md +0 -155
  13. package/docs/treasure_attention_fx_babylonjs_guide.md +0 -901
  14. package/docs/vfx-ab/RESULTS.md +0 -35
  15. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/after.png +0 -0
  16. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/before.png +0 -0
  17. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/after.png +0 -0
  18. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/before.png +0 -0
  19. package/docs/vfx-integration_chatgpt.md +0 -462
  20. package/docs/vfx-placement-design.md +0 -164
  21. package/docs/weapon-trail-visualization.html +0 -241
  22. package/packages/EffectPackageService.ts +0 -346
  23. package/packages/SceneVfxService.ts +0 -96
  24. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/runtime/simpleMeshEffect.v1.js +0 -333
  25. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.frag.glsl +0 -25
  26. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.vert.glsl +0 -11
  27. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/textures/effect_jianbian.png +0 -0
  28. package/packages/build.mesh.yellow_build_upgrade_indicator/effect.json +0 -927
  29. package/packages/build.mesh.yellow_build_upgrade_indicator/media/contact-sheet.png +0 -0
  30. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.gif +0 -0
  31. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.mp4 +0 -0
  32. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.webm +0 -0
  33. package/packages/build.mesh.yellow_build_upgrade_indicator/media/thumbnail.png +0 -0
  34. package/packages/build.mesh.yellow_build_upgrade_indicator/metadata/description.json +0 -197
  35. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-effect.original.json +0 -895
  36. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-normalized-vfx-to-babylon-report.json +0 -241
  37. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-overrides.json +0 -542
  38. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-tuning-report.json +0 -69
  39. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/asset-map.json +0 -125
  40. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/lineage.json +0 -44
  41. package/packages/build.particle.golden_upgrade_starburst/assets/runtime/particleEmitter.v1.js +0 -210
  42. package/packages/build.particle.golden_upgrade_starburst/assets/textures/effect_guangdian.png +0 -0
  43. package/packages/build.particle.golden_upgrade_starburst/effect.json +0 -880
  44. package/packages/build.particle.golden_upgrade_starburst/media/contact-sheet.png +0 -0
  45. package/packages/build.particle.golden_upgrade_starburst/media/preview.gif +0 -0
  46. package/packages/build.particle.golden_upgrade_starburst/media/preview.mp4 +0 -0
  47. package/packages/build.particle.golden_upgrade_starburst/media/preview.webm +0 -0
  48. package/packages/build.particle.golden_upgrade_starburst/media/thumbnail.png +0 -0
  49. package/packages/build.particle.golden_upgrade_starburst/metadata/description.json +0 -161
  50. package/packages/build.particle.golden_upgrade_starburst/provenance/03-effect.original.json +0 -762
  51. package/packages/build.particle.golden_upgrade_starburst/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  52. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-overrides.json +0 -436
  53. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-tuning-report.json +0 -40
  54. package/packages/build.particle.golden_upgrade_starburst/provenance/asset-map.json +0 -115
  55. package/packages/build.particle.golden_upgrade_starburst/provenance/lineage.json +0 -40
  56. package/packages/build.particle.orange_upgrade_transform_sparks/assets/runtime/particleEmitter.v1.js +0 -210
  57. package/packages/build.particle.orange_upgrade_transform_sparks/assets/textures/b5b27ab1-e740-4398-b407-848fc2b2c897.png +0 -0
  58. package/packages/build.particle.orange_upgrade_transform_sparks/effect.json +0 -887
  59. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.gif +0 -0
  60. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.mp4 +0 -0
  61. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.webm +0 -0
  62. package/packages/build.particle.orange_upgrade_transform_sparks/media/thumbnail.png +0 -0
  63. package/packages/build.particle.orange_upgrade_transform_sparks/metadata/description.json +0 -179
  64. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-effect.original.json +0 -859
  65. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  66. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-overrides.json +0 -478
  67. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-tuning-report.json +0 -40
  68. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/asset-map.json +0 -114
  69. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/lineage.json +0 -41
  70. package/packages/build.particle.wood_chip_dust_burst/assets/runtime/particleEmitter.v1.js +0 -210
  71. package/packages/build.particle.wood_chip_dust_burst/assets/textures/effect_yanwu4.png +0 -0
  72. package/packages/build.particle.wood_chip_dust_burst/assets/textures/suipian3.png +0 -0
  73. package/packages/build.particle.wood_chip_dust_burst/effect.json +0 -1400
  74. package/packages/build.particle.wood_chip_dust_burst/media/contact-sheet.png +0 -0
  75. package/packages/build.particle.wood_chip_dust_burst/media/preview.gif +0 -0
  76. package/packages/build.particle.wood_chip_dust_burst/media/preview.mp4 +0 -0
  77. package/packages/build.particle.wood_chip_dust_burst/media/preview.webm +0 -0
  78. package/packages/build.particle.wood_chip_dust_burst/media/thumbnail.png +0 -0
  79. package/packages/build.particle.wood_chip_dust_burst/metadata/description.json +0 -173
  80. package/packages/build.particle.wood_chip_dust_burst/provenance/03-effect.original.json +0 -1277
  81. package/packages/build.particle.wood_chip_dust_burst/provenance/03-normalized-vfx-to-babylon-report.json +0 -329
  82. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-overrides.json +0 -749
  83. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-tuning-report.json +0 -60
  84. package/packages/build.particle.wood_chip_dust_burst/provenance/asset-map.json +0 -146
  85. package/packages/build.particle.wood_chip_dust_burst/provenance/lineage.json +0 -69
  86. package/packages/effects/building-upgrade/effect.json +0 -6
  87. package/packages/effects/building-upgrade/index.ts +0 -387
  88. package/packages/effects/character-entrance/effect.json +0 -6
  89. package/packages/effects/character-entrance/index.ts +0 -308
  90. package/packages/effects/coin-burst/index.ts +0 -48
  91. package/packages/effects/comet-trail-flame/assets/textures/trail_5x4.webp +0 -0
  92. package/packages/effects/comet-trail-flame/index.ts +0 -107
  93. package/packages/effects/conveyor-upgrade/effect.json +0 -6
  94. package/packages/effects/conveyor-upgrade/index.ts +0 -401
  95. package/packages/effects/debris-smoke/assets/models/rock_debris.glb +0 -0
  96. package/packages/effects/debris-smoke/assets/textures/smoke22.webp +0 -0
  97. package/packages/effects/debris-smoke/index.ts +0 -102
  98. package/packages/effects/door_open_gold_flakes/assets/runtime/goldFlakes.v1.js +0 -397
  99. package/packages/effects/door_open_gold_flakes/door_open_gold_flakes.json +0 -498
  100. package/packages/effects/door_open_gold_flakes/index.ts +0 -11
  101. package/packages/effects/electric-arc/assets/textures/spark_4x4.webp +0 -0
  102. package/packages/effects/electric-arc/index.ts +0 -63
  103. package/packages/effects/energy-shield/effect.json +0 -7
  104. package/packages/effects/energy-shield/index.ts +0 -432
  105. package/packages/effects/explosion/assets/textures/baozha29.webp +0 -0
  106. package/packages/effects/explosion/assets/textures/glow01.webp +0 -0
  107. package/packages/effects/explosion/assets/textures/lizi01.webp +0 -0
  108. package/packages/effects/explosion/assets/textures/xulie_lizibaozha02_5x5.webp +0 -0
  109. package/packages/effects/explosion/index.ts +0 -115
  110. package/packages/effects/ground-tile-upgrade/effect.json +0 -6
  111. package/packages/effects/ground-tile-upgrade/index.ts +0 -410
  112. package/packages/effects/hit-flash/index.ts +0 -77
  113. package/packages/effects/laser-beam/assets/textures/laser_glow.webp +0 -0
  114. package/packages/effects/laser-beam/assets/textures/laser_noise.webp +0 -0
  115. package/packages/effects/laser-beam/index.ts +0 -6
  116. package/packages/effects/laser-beam-factory.ts +0 -146
  117. package/packages/effects/lumber-cart-suction/effect.json +0 -6
  118. package/packages/effects/lumber-cart-suction/index.ts +0 -399
  119. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb +0 -0
  120. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/.active +0 -1
  121. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/1781589063890_upload.glb +0 -0
  122. package/packages/effects/lumber-debris-scatter/assets/runtime/solidParticleScatter.v1.js +0 -236
  123. package/packages/effects/lumber-debris-scatter/effect.json +0 -228
  124. package/packages/effects/lumber-debris-scatter/index.ts +0 -780
  125. package/packages/effects/lumber_vehicle_gear_spin/assets/runtime/gearSpin.v1.js +0 -202
  126. package/packages/effects/lumber_vehicle_gear_spin/index.ts +0 -11
  127. package/packages/effects/lumber_vehicle_gear_spin/lumber_vehicle_gear_spin.json +0 -338
  128. package/packages/effects/lumber_vehicle_upgrade_aura/assets/runtime/upgradeAura.v1.js +0 -353
  129. package/packages/effects/lumber_vehicle_upgrade_aura/index.ts +0 -13
  130. package/packages/effects/lumber_vehicle_upgrade_aura/lumber_vehicle_upgrade_aura.json +0 -365
  131. package/packages/effects/lumber_vehicle_wood_chips/assets/runtime/solidParticleScatter.v1.js +0 -310
  132. package/packages/effects/lumber_vehicle_wood_chips/index.ts +0 -11
  133. package/packages/effects/lumber_vehicle_wood_chips/lumber_vehicle_wood_chips.json +0 -335
  134. package/packages/effects/monster-hit/index.ts +0 -129
  135. package/packages/effects/player-upgrade/effect.json +0 -6
  136. package/packages/effects/player-upgrade/index.ts +0 -640
  137. package/packages/effects/pulse-laser-volley/assets/textures/bolt_guangshu.webp +0 -0
  138. package/packages/effects/pulse-laser-volley/index.ts +0 -215
  139. package/packages/effects/resource-collect-sparkles/effect.json +0 -6
  140. package/packages/effects/resource-collect-sparkles/index.ts +0 -254
  141. package/packages/effects/run-footstep-dust/assets/runtime/runFootstepDust.v1.js +0 -215
  142. package/packages/effects/run-footstep-dust/effect.json +0 -183
  143. package/packages/effects/run-footstep-dust/index.ts +0 -377
  144. package/packages/effects/space-shared.ts +0 -120
  145. package/packages/effects/thruster-flame/index.ts +0 -306
  146. package/packages/effects/treasure-attention/effect.json +0 -7
  147. package/packages/effects/treasure-attention/index.ts +0 -630
  148. package/packages/effects/tree-chop-dust/assets/textures/tree_chop_dust_atlas.png +0 -0
  149. package/packages/effects/tree-chop-dust/effect.json +0 -8
  150. package/packages/effects/tree-chop-dust/index.ts +0 -202
  151. package/packages/effects/tree-leaf-chop-burst/assets/runtime/particleEmitter.v1.js +0 -303
  152. package/packages/effects/tree-leaf-chop-burst/assets/textures/tree_leaf_chop_burst_leaf_atlas.png +0 -0
  153. package/packages/effects/tree-leaf-chop-burst/effect.json +0 -498
  154. package/packages/effects/tree-leaf-chop-burst/index.ts +0 -294
  155. package/packages/effects/tree_chop_dust_burst/assets/runtime/particleEmitter.v1.js +0 -318
  156. package/packages/effects/tree_chop_dust_burst/assets/textures/tree_chop_dust_burst_dust.png +0 -0
  157. package/packages/effects/tree_chop_dust_burst/index.ts +0 -13
  158. package/packages/effects/tree_chop_dust_burst/tree_chop_dust_burst.json +0 -412
  159. package/packages/effects/ufo-thread-flame/assets/textures/flame_flow.webp +0 -0
  160. package/packages/effects/ufo-thread-flame/assets/textures/flame_spike.webp +0 -0
  161. package/packages/effects/ufo-thread-flame/index.ts +0 -153
  162. package/packages/effects/vehicle-exhaust-smoke/assets/textures/vehicle_exhaust_smoke_atlas.png +0 -0
  163. package/packages/effects/vehicle-exhaust-smoke/effect.json +0 -8
  164. package/packages/effects/vehicle-exhaust-smoke/index.ts +0 -298
  165. package/packages/effects/vehicle-upgrade/effect.json +0 -6
  166. package/packages/effects/vehicle-upgrade/index.ts +0 -404
  167. package/packages/effects/weapon-trail/assets/textures/trail_wedge.png +0 -0
  168. package/packages/effects/weapon-trail/index.ts +0 -317
  169. package/packages/effects/wood-crusher-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  170. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  171. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  172. package/packages/effects/wood-crusher-sawdust/index.ts +0 -43
  173. package/packages/effects/wood-crusher-sawdust/wood_crusher_sawdust.json +0 -592
  174. package/packages/effects/wood-cutter-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  175. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  176. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  177. package/packages/effects/wood-cutter-sawdust/index.ts +0 -43
  178. package/packages/effects/wood-cutter-sawdust/wood_cutter_sawdust.json +0 -592
  179. package/packages/effects/wood-sawdust-effect-factory.ts +0 -194
  180. package/packages/effects/wood_crusher_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  181. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  182. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  183. package/packages/effects/wood_crusher_sawdust/index.ts +0 -29
  184. package/packages/effects/wood_crusher_sawdust/wood_crusher_sawdust.json +0 -592
  185. package/packages/effects/wood_cutter_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  186. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  187. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  188. package/packages/effects/wood_cutter_sawdust/index.ts +0 -29
  189. package/packages/effects/wood_cutter_sawdust/wood_cutter_sawdust.json +0 -592
  190. package/packages/effects/wood_peel_material_test/assets/runtime/woodPeelMaterialTest.v1.js +0 -196
  191. package/packages/effects/wood_peel_material_test/index.ts +0 -11
  192. package/packages/effects/wood_peel_material_test/wood_peel_material_test.json +0 -136
  193. package/packages/env.particle.forest_edge_fog/assets/runtime/particleEmitter.v1.js +0 -210
  194. package/packages/env.particle.forest_edge_fog/assets/textures/f12a23c4-b924-4322-a260-3d982428f1e8.png +0 -0
  195. package/packages/env.particle.forest_edge_fog/assets/textures/yuan.png +0 -0
  196. package/packages/env.particle.forest_edge_fog/effect.json +0 -854
  197. package/packages/env.particle.forest_edge_fog/media/preview.gif +0 -0
  198. package/packages/env.particle.forest_edge_fog/media/preview.mp4 +0 -0
  199. package/packages/env.particle.forest_edge_fog/media/preview.webm +0 -0
  200. package/packages/env.particle.forest_edge_fog/media/thumbnail.png +0 -0
  201. package/packages/env.particle.forest_edge_fog/metadata/description.json +0 -148
  202. package/packages/env.particle.forest_edge_fog/provenance/03-effect.original.json +0 -827
  203. package/packages/env.particle.forest_edge_fog/provenance/03-normalized-vfx-to-babylon-report.json +0 -196
  204. package/packages/env.particle.forest_edge_fog/provenance/04-preview-overrides.json +0 -432
  205. package/packages/env.particle.forest_edge_fog/provenance/04-preview-tuning-report.json +0 -28
  206. package/packages/env.particle.forest_edge_fog/provenance/asset-map.json +0 -124
  207. package/packages/env.particle.forest_edge_fog/provenance/lineage.json +0 -41
  208. package/packages/generation.ts +0 -14
  209. package/packages/index.ts +0 -14
  210. package/packages/legacy-particle-runtime.ts +0 -113
  211. package/packages/manifestRuntimePackage.ts +0 -519
  212. package/packages/registry.ts +0 -85
  213. package/packages/rendering.ts +0 -13
  214. package/packages/resource.particle.viscous_oil_suction/assets/runtime/top_disk_suction/particleEmitter.v1.js +0 -424
  215. package/packages/resource.particle.viscous_oil_suction/assets/textures/Glow ad.png +0 -0
  216. package/packages/resource.particle.viscous_oil_suction/effect.json +0 -1254
  217. package/packages/resource.particle.viscous_oil_suction/media/preview.gif +0 -0
  218. package/packages/resource.particle.viscous_oil_suction/media/preview.mp4 +0 -0
  219. package/packages/resource.particle.viscous_oil_suction/media/preview.webm +0 -0
  220. package/packages/resource.particle.viscous_oil_suction/media/thumbnail.png +0 -0
  221. package/packages/resource.particle.viscous_oil_suction/metadata/description.json +0 -122
  222. package/packages/resource.particle.viscous_oil_suction/provenance/03-effect.original.json +0 -1051
  223. package/packages/resource.particle.viscous_oil_suction/provenance/03-normalized-vfx-to-babylon-report.json +0 -200
  224. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-overrides.json +0 -581
  225. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-tuning-report.json +0 -28
  226. package/packages/resource.particle.viscous_oil_suction/provenance/asset-map.json +0 -111
  227. package/packages/resource.particle.viscous_oil_suction/provenance/lineage.json +0 -45
  228. package/packages/types.ts +0 -195
  229. package/tooling/check-dist-runtime.mjs +0 -166
  230. package/tooling/generate-index.mjs +0 -55
  231. package/tooling/test-guardrails.mjs +0 -157
  232. package/tooling/validate-boundary.mjs +0 -92
  233. package/tooling/validate-effects.mjs +0 -304
  234. package/tooling/validate.mjs +0 -53
@@ -1,365 +0,0 @@
1
- {
2
- "schemaVersion": "vfx-effect-package/1.0",
3
- "id": "build.particle.lumber_vehicle_upgrade_aura",
4
- "name": {
5
- "zh": "螺旋状升级",
6
- "en": "Lumber Vehicle Upgrade Aura"
7
- },
8
- "source": {
9
- "engine": "babylon",
10
- "engineVersion": "8.56.2",
11
- "projectPath": "D:/project/lumber_order",
12
- "rootAsset": "src/assets/vfx/effects/lumber_vehicle_upgrade_aura",
13
- "sourceId": "lumber_order/lumber_vehicle_upgrade_aura",
14
- "extractedAt": "2026-06-02T00:00:00.000Z",
15
- "extractorVersion": "manual-lumber-order-vfx/0.1.0",
16
- "canonicalSource": "local",
17
- "legacyId": null,
18
- "previousIds": []
19
- },
20
- "assets": {
21
- "textures": [],
22
- "materials": [],
23
- "meshes": [],
24
- "shaders": [],
25
- "sounds": [],
26
- "scripts": [
27
- {
28
- "kind": "script",
29
- "id": "upgrade_aura_v1",
30
- "packagePath": "assets/runtime/upgradeAura.v1.js",
31
- "runtimeId": "upgradeAura/v1",
32
- "engine": "babylon",
33
- "moduleFormat": "esm",
34
- "exports": [
35
- "createUpgradeAuraRuntime",
36
- "runtimeContract"
37
- ],
38
- "mimeType": "text/javascript"
39
- }
40
- ],
41
- "raw": []
42
- },
43
- "emitters": [
44
- {
45
- "name": "lumber_vehicle_upgrade_aura_main",
46
- "sourceNodeName": "lumber_vehicle_upgrade_aura_main",
47
- "enabled": true,
48
- "type": "UpgradeAura",
49
- "duration": 1.45,
50
- "effectScale": 1,
51
- "spiralTurns": 3.4,
52
- "ringRadius": 0.72,
53
- "ringThickness": 0.035,
54
- "spiralHeight": 1.12,
55
- "ringRiseHeight": 1.45,
56
- "ringAlpha": 0.78,
57
- "spiralGlowAlpha": 0.08,
58
- "bodyRiseHeight": 1.75,
59
- "bodyGlowAlpha": 0.62,
60
- "sparkleCount": 24,
61
- "sparkleLife": 0.62,
62
- "sparkWidth": 0.045,
63
- "sparkHeight": 0.22,
64
- "sparkAlpha": 0.92,
65
- "ringColor": {
66
- "r": 1,
67
- "g": 0.78,
68
- "b": 0.14,
69
- "a": 1
70
- },
71
- "bodyGlowColor": {
72
- "r": 1,
73
- "g": 0.95,
74
- "b": 0.5,
75
- "a": 1
76
- },
77
- "hdrIntensity": 3,
78
- "runtime": {
79
- "adapter": "upgradeAura/v1",
80
- "stopAfterSeconds": 1.45,
81
- "disposeOnComplete": true
82
- }
83
- }
84
- ],
85
- "runtime": {
86
- "driver": "upgradeAura",
87
- "defaultMesh": null,
88
- "defaultOffset": {
89
- "x": 0,
90
- "y": 0,
91
- "z": 0
92
- },
93
- "start": [
94
- "Instantiate Babylon runtime for lumber_vehicle_upgrade_aura"
95
- ],
96
- "update": [
97
- "Apply Babylon tunable parameter overrides"
98
- ],
99
- "stop": [
100
- "Stop and dispose runtime resources"
101
- ],
102
- "adapters": [
103
- {
104
- "id": "upgradeAura/v1",
105
- "engine": "babylon",
106
- "entry": "assets/runtime/upgradeAura.v1.js",
107
- "moduleFormat": "esm",
108
- "exports": [
109
- "createUpgradeAuraRuntime",
110
- "runtimeContract"
111
- ]
112
- }
113
- ]
114
- },
115
- "tunableParams": [
116
- {
117
- "key": "lumber_vehicle_upgrade_aura.spiralTurns",
118
- "labelZh": "螺旋圈数",
119
- "type": "number",
120
- "default": 3.4,
121
- "min": 1,
122
- "max": 7,
123
- "step": 0.1,
124
- "target": {
125
- "emitter": "lumber_vehicle_upgrade_aura_main",
126
- "property": "spiralTurns",
127
- "operator": "set"
128
- }
129
- },
130
- {
131
- "key": "lumber_vehicle_upgrade_aura.sparkleCount",
132
- "labelZh": "上升光点数量",
133
- "type": "number",
134
- "default": 24,
135
- "min": 0,
136
- "max": 80,
137
- "step": 1,
138
- "target": {
139
- "emitter": "lumber_vehicle_upgrade_aura_main",
140
- "property": "sparkleCount",
141
- "operator": "set"
142
- }
143
- },
144
- {
145
- "key": "lumber_vehicle_upgrade_aura.ringColor",
146
- "labelZh": "螺旋颜色",
147
- "type": "color",
148
- "default": "#ffc723",
149
- "target": {
150
- "emitter": "lumber_vehicle_upgrade_aura_main",
151
- "property": "ringColor",
152
- "operator": "set"
153
- }
154
- },
155
- {
156
- "key": "lumber_vehicle_upgrade_aura.bodyGlowColor",
157
- "labelZh": "身体光效颜色",
158
- "type": "color",
159
- "default": "#fff280",
160
- "target": {
161
- "emitter": "lumber_vehicle_upgrade_aura_main",
162
- "property": "bodyGlowColor",
163
- "operator": "set"
164
- }
165
- },
166
- {
167
- "key": "lumber_vehicle_upgrade_aura.hdrIntensity",
168
- "labelZh": "HDR强度",
169
- "type": "number",
170
- "default": 3,
171
- "min": 0,
172
- "max": 8,
173
- "step": 0.01,
174
- "target": {
175
- "emitter": "lumber_vehicle_upgrade_aura_main",
176
- "property": "hdrIntensity",
177
- "operator": "set"
178
- }
179
- },
180
- {
181
- "key": "lumber_vehicle_upgrade_aura.effectScale",
182
- "labelZh": "整体缩放",
183
- "type": "number",
184
- "default": 1,
185
- "min": 0.2,
186
- "max": 4,
187
- "step": 0.01,
188
- "target": {
189
- "emitter": "lumber_vehicle_upgrade_aura_main",
190
- "property": "effectScale",
191
- "operator": "set"
192
- }
193
- },
194
- {
195
- "key": "lumber_vehicle_upgrade_aura.ringRadius",
196
- "labelZh": "螺旋半径",
197
- "type": "number",
198
- "default": 0.72,
199
- "min": 0.1,
200
- "max": 2,
201
- "step": 0.01,
202
- "target": {
203
- "emitter": "lumber_vehicle_upgrade_aura_main",
204
- "property": "ringRadius",
205
- "operator": "set"
206
- }
207
- },
208
- {
209
- "key": "lumber_vehicle_upgrade_aura.ringRiseHeight",
210
- "labelZh": "螺旋上升高度",
211
- "type": "number",
212
- "default": 1.45,
213
- "min": 0.1,
214
- "max": 4,
215
- "step": 0.01,
216
- "target": {
217
- "emitter": "lumber_vehicle_upgrade_aura_main",
218
- "property": "ringRiseHeight",
219
- "operator": "set"
220
- }
221
- },
222
- {
223
- "key": "lumber_vehicle_upgrade_aura.bodyRiseHeight",
224
- "labelZh": "身体光效高度",
225
- "type": "number",
226
- "default": 1.75,
227
- "min": 0.1,
228
- "max": 4,
229
- "step": 0.01,
230
- "target": {
231
- "emitter": "lumber_vehicle_upgrade_aura_main",
232
- "property": "bodyRiseHeight",
233
- "operator": "set"
234
- }
235
- },
236
- {
237
- "key": "lumber_vehicle_upgrade_aura.duration",
238
- "labelZh": "生命周期",
239
- "type": "number",
240
- "default": 1.45,
241
- "min": 0.2,
242
- "max": 5,
243
- "step": 0.01,
244
- "unit": "s",
245
- "target": {
246
- "emitter": "lumber_vehicle_upgrade_aura_main",
247
- "property": "duration",
248
- "operator": "set"
249
- }
250
- },
251
- {
252
- "key": "lumber_vehicle_upgrade_aura.sparkSize",
253
- "labelZh": "上升光点大小",
254
- "type": "number",
255
- "default": 1,
256
- "min": 0.2,
257
- "max": 4,
258
- "step": 0.01,
259
- "targets": [
260
- {
261
- "emitter": "lumber_vehicle_upgrade_aura_main",
262
- "property": "sparkWidth",
263
- "operator": "scaleDefault",
264
- "defaultValue": 0.045
265
- },
266
- {
267
- "emitter": "lumber_vehicle_upgrade_aura_main",
268
- "property": "sparkHeight",
269
- "operator": "scaleDefault",
270
- "defaultValue": 0.22
271
- }
272
- ]
273
- },
274
- {
275
- "key": "lumber_vehicle_upgrade_aura.ringAlpha",
276
- "labelZh": "螺旋透明度",
277
- "type": "number",
278
- "default": 0.78,
279
- "min": 0,
280
- "max": 1,
281
- "step": 0.01,
282
- "target": {
283
- "emitter": "lumber_vehicle_upgrade_aura_main",
284
- "property": "ringAlpha",
285
- "operator": "set"
286
- }
287
- },
288
- {
289
- "key": "lumber_vehicle_upgrade_aura.bodyGlowAlpha",
290
- "labelZh": "身体光效透明度",
291
- "type": "number",
292
- "default": 0.58,
293
- "min": 0,
294
- "max": 1,
295
- "step": 0.01,
296
- "target": {
297
- "emitter": "lumber_vehicle_upgrade_aura_main",
298
- "property": "bodyGlowAlpha",
299
- "operator": "set"
300
- }
301
- }
302
- ],
303
- "babylon": {
304
- "driver": "upgradeAura",
305
- "previewConfig": {
306
- "textureUrl": null,
307
- "emitterCount": 1,
308
- "effectFile": "lumber_vehicle_upgrade_aura.json",
309
- "normalizedVfx": null
310
- }
311
- },
312
- "debug": {
313
- "playAnchor": "player"
314
- },
315
- "review": {
316
- "status": "draft",
317
- "artistNotes": [
318
- "Upgrade effect with horizontal rings rising around the character.",
319
- "Body glow and small upward light streaks are driven by tunable runtime parameters.",
320
- "No texture dependency; all visuals are Babylon glow materials and primitive meshes."
321
- ],
322
- "approvedBy": null,
323
- "approvedAt": null
324
- },
325
- "recording": {
326
- "provider": "local-placeholder",
327
- "recordedAt": "2026-06-02T00:00:00.000Z",
328
- "mimeType": "image/png",
329
- "durationSec": 1.45,
330
- "fps": 0,
331
- "media": {
332
- "previewVideo": null,
333
- "previewWebm": null,
334
- "previewMp4": null,
335
- "previewGif": null,
336
- "thumbnail": "media/thumbnail.png",
337
- "contactSheet": "media/contact-sheet.png",
338
- "gcsUri": null
339
- }
340
- },
341
- "search": {
342
- "tags": [
343
- "babylon",
344
- "upgrade",
345
- "aura",
346
- "rising ring",
347
- "body glow",
348
- "lumber vehicle",
349
- "casual game"
350
- ],
351
- "descriptionEn": "A character upgrade aura with golden rising rings and vertical body light.",
352
- "useCases": [
353
- "lumber vehicle upgrade",
354
- "character upgrade feedback",
355
- "reward feedback"
356
- ],
357
- "negativeUseCases": [
358
- "wood cutting",
359
- "sawdust",
360
- "dust burst",
361
- "fire explosion"
362
- ]
363
- },
364
- "legacyIds": []
365
- }
@@ -1,310 +0,0 @@
1
- export const runtimeId = "solidParticleScatter/v1";
2
-
3
- export const runtimeContract = {
4
- runtimeId,
5
- kind: "solidParticleScatter",
6
- fields: {
7
- count: "Number of lumber pieces emitted per burst.",
8
- scatterMode: "vertical drops pieces downward; radial throws pieces from the emitter center outward.",
9
- outwardAngleDegrees: "Radial scatter fan angle in degrees, used only when scatterMode is radial.",
10
- scatterGravity: "Higher values pull pieces down sooner and reduce hang time.",
11
- rotationStrength: "Deterministic random rotation around each lumber piece center, not around the emitter.",
12
- effectScale: "Overall spatial scale for piece size, travel distance, and spawn height.",
13
- },
14
- };
15
-
16
- function num(value, fallback = 0) {
17
- const next = Number(value);
18
- return Number.isFinite(next) ? next : fallback;
19
- }
20
-
21
- function clamp(value, min, max) {
22
- return Math.min(max, Math.max(min, value));
23
- }
24
-
25
- function fract(value) {
26
- return value - Math.floor(value);
27
- }
28
-
29
- function sequence01(index, axis) {
30
- if (index === 0) return 0.5;
31
- const strides = [0.618033988749895, 0.414213562373095, 0.732050807568877, 0.324717957244746, 0.754877666246693, 0.569840290998053];
32
- return fract(0.5 + index * strides[axis % strides.length] + axis * 0.173205080756888);
33
- }
34
-
35
- function lerp(start, end, t) {
36
- return start + (end - start) * t;
37
- }
38
-
39
- function readVec(BABYLON, value, fallback = new BABYLON.Vector3(0, 0, 0)) {
40
- if (!value) return fallback;
41
- return new BABYLON.Vector3(num(value.x, fallback.x), num(value.y, fallback.y), num(value.z, fallback.z));
42
- }
43
-
44
- function readColor3(BABYLON, value, fallback = new BABYLON.Color3(1, 1, 1)) {
45
- if (!value) return fallback;
46
- return new BABYLON.Color3(num(value.r, fallback.r), num(value.g, fallback.g), num(value.b, fallback.b));
47
- }
48
-
49
- function rotateVecY(BABYLON, vector, rotationY = 0) {
50
- const sin = Math.sin(num(rotationY, 0));
51
- const cos = Math.cos(num(rotationY, 0));
52
- return new BABYLON.Vector3(
53
- vector.x * cos + vector.z * sin,
54
- vector.y,
55
- -vector.x * sin + vector.z * cos
56
- );
57
- }
58
-
59
- function applyRenderOrder(mesh, material, emitter) {
60
- mesh.renderingGroupId = Math.max(0, Math.round(num(emitter.renderingGroupId, 2)));
61
- mesh.alphaIndex = num(emitter.alphaIndex, 100);
62
- material.disableDepthWrite = emitter.disableDepthWrite !== false;
63
- }
64
-
65
- function splitUrl(url) {
66
- const slashIndex = url.lastIndexOf("/");
67
- if (slashIndex < 0) return { rootUrl: "", fileName: url };
68
- return { rootUrl: url.slice(0, slashIndex + 1), fileName: url.slice(slashIndex + 1) };
69
- }
70
-
71
- function createFallbackSourceMesh(BABYLON, scene, name, emitter = {}) {
72
- const primitive = emitter.primitive || {};
73
- if (primitive.type === "splinter") {
74
- return createSplinterSourceMesh(BABYLON, scene, name, emitter);
75
- }
76
-
77
- const source = BABYLON.MeshBuilder.CreateBox(name, {
78
- width: Math.max(0.001, num(primitive.width, 0.16)),
79
- height: Math.max(0.001, num(primitive.height, 0.018)),
80
- depth: Math.max(0.001, num(primitive.depth, 0.045)),
81
- }, scene);
82
- source.isVisible = false;
83
- source.setEnabled(false);
84
- return source;
85
- }
86
-
87
- function createSplinterSourceMesh(BABYLON, scene, name, emitter = {}) {
88
- const primitive = emitter.primitive || {};
89
- const width = Math.max(0.001, num(primitive.width, 0.1));
90
- const height = Math.max(0.001, num(primitive.height, 0.008));
91
- const depth = Math.max(0.001, num(primitive.depth, 0.02));
92
- const mesh = new BABYLON.Mesh(name, scene);
93
- const halfWidth = width * 0.5;
94
- const halfHeight = height * 0.5;
95
- const halfDepth = depth * 0.5;
96
- const positions = [
97
- -halfWidth, -halfHeight, -halfDepth,
98
- -halfWidth, halfHeight, -halfDepth,
99
- halfWidth, 0, -halfDepth,
100
- -halfWidth, -halfHeight, halfDepth,
101
- -halfWidth, halfHeight, halfDepth,
102
- halfWidth, 0, halfDepth,
103
- ];
104
- const indices = [
105
- 0, 1, 2,
106
- 3, 5, 4,
107
- 0, 3, 4,
108
- 0, 4, 1,
109
- 1, 4, 5,
110
- 1, 5, 2,
111
- 2, 5, 3,
112
- 2, 3, 0,
113
- ];
114
- const normals = [];
115
- BABYLON.VertexData.ComputeNormals(positions, indices, normals);
116
- const vertexData = new BABYLON.VertexData();
117
- vertexData.positions = positions;
118
- vertexData.indices = indices;
119
- vertexData.normals = normals;
120
- vertexData.applyToMesh(mesh);
121
- mesh.isVisible = false;
122
- mesh.setEnabled(false);
123
- return mesh;
124
- }
125
-
126
- async function loadSourceMesh(BABYLON, scene, emitter, urlForPackagePath) {
127
- const modelPath = emitter.modelPath;
128
- if (!modelPath || !BABYLON.SceneLoader) {
129
- return createFallbackSourceMesh(BABYLON, scene, `${emitter.name || "lumber_debris_scatter"}Source`, emitter);
130
- }
131
-
132
- try {
133
- const modelUrl = urlForPackagePath ? urlForPackagePath(modelPath) : modelPath;
134
- const { rootUrl, fileName } = splitUrl(modelUrl);
135
- const result = await BABYLON.SceneLoader.ImportMeshAsync("", rootUrl, fileName, scene);
136
- const meshes = result.meshes.filter((mesh) => mesh instanceof BABYLON.Mesh && mesh.getTotalVertices() > 0);
137
- if (!meshes.length) throw new Error(`No mesh was found in ${modelPath}.`);
138
- const source = meshes.length === 1 ? meshes[0] : BABYLON.Mesh.MergeMeshes(meshes, true, true, undefined, false, true);
139
- if (!source) throw new Error(`Unable to merge meshes from ${modelPath}.`);
140
- source.name = `${emitter.name || "lumber_debris_scatter"}ModelSource`;
141
- source.isVisible = false;
142
- source.setEnabled(false);
143
- source.refreshBoundingInfo();
144
- const size = source.getBoundingInfo().boundingBox.extendSize.scale(2);
145
- const maxDimension = Math.max(size.x, size.y, size.z, 0.0001);
146
- source.scaling.scaleInPlace(0.82 / maxDimension);
147
- source.rotationQuaternion = null;
148
- source.refreshBoundingInfo();
149
- return source;
150
- } catch (error) {
151
- console.warn("Unable to load lumber debris model; using box fallback.", error);
152
- return createFallbackSourceMesh(BABYLON, scene, `${emitter.name || "lumber_debris_scatter"}Source`, emitter);
153
- }
154
- }
155
-
156
- function createState(BABYLON, index, count, origin, emitter) {
157
- const effectScale = Math.max(0.01, num(emitter.effectScale, 1));
158
- const resourceScale = Math.max(0.01, num(emitter.resourceScale, 1));
159
- const speedScale = Math.max(0.1, num(emitter.speedScale, 1));
160
- const duration = Math.max(0.08, num(emitter.duration, 0.74)) / speedScale;
161
- const interval = Math.max(0, num(emitter.intervalMs, 18)) / 1000;
162
- const mode = emitter.scatterMode === "vertical" ? "vertical" : "radial";
163
- const spread = Math.max(0, num(emitter.spread, 0.88)) * effectScale;
164
- const gravity = Math.max(0.05, num(emitter.scatterGravity, 1));
165
- const rotationStrength = Math.max(0, num(emitter.rotationStrength, 1));
166
- const outwardAngleRadians = clamp(num(emitter.outwardAngleDegrees, 240), 0, 360) * (Math.PI / 180);
167
- const emissionDirection = rotateVecY(
168
- BABYLON,
169
- readVec(BABYLON, emitter.emissionDirection, new BABYLON.Vector3(1, 0, 0)),
170
- emitter.rotationY
171
- );
172
-
173
- const angleSeed = sequence01(index, 0);
174
- const radiusSeed = Math.sqrt(sequence01(index, 1));
175
- const sideSeed = sequence01(index, 2) < 0.5 ? -1 : 1;
176
- emissionDirection.y = 0;
177
- if (emissionDirection.lengthSquared() < 0.0001) emissionDirection.set(1, 0, 0);
178
- emissionDirection.normalize();
179
-
180
- const baseAngle = Math.atan2(emissionDirection.z, emissionDirection.x);
181
- const radialAngle = mode === "radial" && outwardAngleRadians < Math.PI * 2 - 0.001
182
- ? baseAngle + (angleSeed - 0.5) * outwardAngleRadians
183
- : angleSeed * Math.PI * 2;
184
- const scatterRadius = spread * (0.35 + radiusSeed * 0.65);
185
- const centerJitter = spread * 0.035;
186
- const startAngle = sequence01(index, 12) * Math.PI * 2;
187
- const startRadius = centerJitter * sequence01(index, 13);
188
- const startPos = new BABYLON.Vector3(
189
- origin.x + Math.cos(startAngle) * startRadius,
190
- origin.y + (0.12 + sequence01(index, 3) * 0.08) * effectScale,
191
- origin.z + Math.sin(startAngle) * startRadius
192
- );
193
- const rotationBase = Math.PI * 2 * rotationStrength;
194
- const particleDuration = duration * (0.88 + sequence01(index, 10) * 0.18);
195
- const gravityAccel = (5.4 + gravity * 2.1) * effectScale;
196
- const horizontalSpeed = scatterRadius / particleDuration;
197
- const verticalVelocity = (1.05 + sequence01(index, 14) * 0.72) * effectScale;
198
- const velocity = new BABYLON.Vector3(
199
- Math.cos(radialAngle) * horizontalSpeed,
200
- verticalVelocity,
201
- Math.sin(radialAngle) * horizontalSpeed
202
- );
203
-
204
- return {
205
- active: index < count,
206
- startPos,
207
- velocity,
208
- groundY: origin.y,
209
- startRotation: new BABYLON.Vector3((sequence01(index, 4) - 0.5) * rotationBase, (sequence01(index, 5) - 0.5) * rotationBase, (sequence01(index, 6) - 0.5) * rotationBase),
210
- rotationDelta: new BABYLON.Vector3(sideSeed * (2.6 + sequence01(index, 7) * 2.2) * rotationStrength, (sequence01(index, 8) - 0.5) * 7.2 * rotationStrength, sideSeed * (1.7 + sequence01(index, 9) * 2.8) * rotationStrength),
211
- duration: particleDuration,
212
- elapsed: -index * interval,
213
- gravityAccel,
214
- scale: resourceScale * effectScale * (0.68 + sequence01(index, 11) * 0.24),
215
- };
216
- }
217
-
218
- export async function createSolidParticleScatterRuntime({ BABYLON, scene, emitter, urlForPackagePath, shouldStart = false }) {
219
- if (!BABYLON) throw new Error("createSolidParticleScatterRuntime requires BABYLON.");
220
- if (!scene) throw new Error("createSolidParticleScatterRuntime requires scene.");
221
- if (!emitter) throw new Error("createSolidParticleScatterRuntime requires emitter.");
222
-
223
- const count = Math.max(0, Math.round(num(emitter.count ?? emitter.particleCount, 18)));
224
- const capacity = Math.max(8, Math.round(num(emitter.capacity, count)));
225
- const origin = readVec(BABYLON, emitter.origin, BABYLON.Vector3.Zero());
226
- const sps = new BABYLON.SolidParticleSystem(emitter.name || "lumber_debris_scatter", scene, { updatable: true, isPickable: false });
227
- const source = await loadSourceMesh(BABYLON, scene, emitter, urlForPackagePath);
228
- sps.addShape(source, capacity);
229
- source.dispose();
230
-
231
- const mesh = sps.buildMesh();
232
- mesh.isPickable = false;
233
- mesh.alwaysSelectAsActiveMesh = true;
234
- const material = new BABYLON.StandardMaterial(`${emitter.name || "lumber_debris_scatter"}Material`, scene);
235
- const materialConfig = emitter.material || {};
236
- material.diffuseColor = readColor3(BABYLON, materialConfig.diffuseColor, new BABYLON.Color3(0.52, 0.31, 0.13));
237
- material.emissiveColor = readColor3(BABYLON, materialConfig.emissiveColor, new BABYLON.Color3(0.08, 0.045, 0.02));
238
- material.specularColor = BABYLON.Color3.Black();
239
- mesh.material = material;
240
- applyRenderOrder(mesh, material, emitter);
241
-
242
- const states = Array.from({ length: capacity }, (_, index) => createState(BABYLON, index, count, origin, emitter));
243
- let activeCount = Math.min(count, capacity);
244
- let elapsed = 0;
245
- let started = false;
246
- const disposeAfter = Math.max(...states.map((state) => Math.max(0, -state.elapsed) + state.duration), 0) + 0.35;
247
-
248
- sps.updateParticle = (particle) => {
249
- const state = states[particle.idx];
250
- if (!state?.active || state.elapsed < 0) {
251
- particle.position.set(0, -9999, 0);
252
- particle.scaling.set(0, 0, 0);
253
- return particle;
254
- }
255
- const t = clamp(state.elapsed / state.duration, 0, 1);
256
- const elapsed = clamp(state.elapsed, 0, state.duration);
257
- const y = state.startPos.y + state.velocity.y * elapsed - 0.5 * state.gravityAccel * elapsed * elapsed;
258
- particle.position.set(
259
- state.startPos.x + state.velocity.x * elapsed,
260
- Math.max(state.groundY, y),
261
- state.startPos.z + state.velocity.z * elapsed
262
- );
263
- particle.rotation.set(state.startRotation.x + state.rotationDelta.x * t, state.startRotation.y + state.rotationDelta.y * t, state.startRotation.z + state.rotationDelta.z * t);
264
- particle.scaling.set(state.scale, state.scale, state.scale);
265
- return particle;
266
- };
267
- sps.setParticles();
268
-
269
- let observer = null;
270
- const start = () => {
271
- if (started) return;
272
- started = true;
273
- observer = scene.onBeforeRenderObservable.add(() => {
274
- const deltaTime = scene.getEngine().getDeltaTime() / 1000;
275
- elapsed += deltaTime;
276
- for (const state of states) {
277
- if (!state.active) continue;
278
- state.elapsed += deltaTime;
279
- if (state.elapsed >= state.duration) {
280
- state.active = false;
281
- activeCount = Math.max(0, activeCount - 1);
282
- }
283
- }
284
- sps.setParticles();
285
- if (activeCount <= 0 && elapsed >= disposeAfter) preview.dispose();
286
- });
287
- };
288
-
289
- const preview = {
290
- start,
291
- stop: () => {
292
- if (observer) scene.onBeforeRenderObservable.remove(observer);
293
- observer = null;
294
- started = false;
295
- },
296
- dispose: () => {
297
- if (observer) scene.onBeforeRenderObservable.remove(observer);
298
- observer = null;
299
- sps.dispose();
300
- material.dispose();
301
- },
302
- isStarted: () => started,
303
- duration: disposeAfter,
304
- mesh,
305
- sps,
306
- };
307
-
308
- if (shouldStart) start();
309
- return preview;
310
- }
@@ -1,11 +0,0 @@
1
- import manifest from './lumber_vehicle_wood_chips.json';
2
- import runtimeUrl from './assets/runtime/solidParticleScatter.v1.js?url';
3
- import { createManifestRuntimeEffectPackage } from '../../manifestRuntimePackage';
4
-
5
- export const lumberVehicleWoodChipsEffectPackage = createManifestRuntimeEffectPackage({
6
- id: 'lumber_vehicle_wood_chips',
7
- manifest,
8
- assetUrls: {
9
- 'assets/runtime/solidParticleScatter.v1.js': runtimeUrl,
10
- },
11
- });