@fps-games/vfx 0.1.1 → 0.3.3

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 (250) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/README.md +41 -0
  3. package/dist/effects/coin-burst/index.js +6 -2
  4. package/dist/effects/comet-trail-flame/index.js +3 -1
  5. package/dist/effects/debris-smoke/index.js +1 -0
  6. package/dist/effects/electric-arc/index.js +1 -0
  7. package/dist/effects/energy-shield/index.js +1 -0
  8. package/dist/effects/explosion/index.js +3 -2
  9. package/dist/effects/hit-flash/index.js +12 -4
  10. package/dist/effects/laser-beam/index.js +14 -2
  11. package/dist/effects/lumber_vehicle_upgrade_aura/index.js +1 -0
  12. package/dist/effects/monster-hit/index.js +2 -1
  13. package/dist/effects/player-upgrade/index.js +5 -3
  14. package/dist/effects/pulse-laser-volley/index.js +14 -4
  15. package/dist/effects/thruster-flame/index.js +3 -1
  16. package/dist/effects/treasure-attention/index.d.ts +54 -0
  17. package/dist/effects/treasure-attention/index.js +535 -0
  18. package/dist/effects/ufo-thread-flame/index.js +1 -0
  19. package/dist/effects/vehicle-upgrade/index.js +4 -1
  20. package/dist/effects/weapon-trail/index.js +8 -3
  21. package/dist/effects/wood_crusher_sawdust/index.d.ts +4 -0
  22. package/dist/effects/wood_cutter_sawdust/index.d.ts +4 -0
  23. package/dist/index.js +85 -17
  24. package/dist/types.d.ts +80 -0
  25. package/index.json +19 -1
  26. package/package.json +9 -4
  27. package/packages/effects/treasure-attention/vfx-params.json +49 -0
  28. package/tooling/vfx-cli.mjs +8 -1
  29. package/docs/AUTHORING_EFFECTS.md +0 -297
  30. package/docs/VFX_LIBRARY_ARCHITECTURE_chatgpt.md +0 -1580
  31. package/docs/VFX_LIBRARY_EXECUTION_PLAN.md +0 -229
  32. package/docs/VFX_LIBRARY_PLAN.md +0 -546
  33. package/docs/vfx-ab/RESULTS.md +0 -35
  34. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/after.png +0 -0
  35. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/before.png +0 -0
  36. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/after.png +0 -0
  37. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/before.png +0 -0
  38. package/docs/vfx-integration_chatgpt.md +0 -462
  39. package/docs/weapon-trail-visualization.html +0 -241
  40. package/packages/EffectPackageService.ts +0 -240
  41. package/packages/SceneVfxService.ts +0 -96
  42. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/runtime/simpleMeshEffect.v1.js +0 -333
  43. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.frag.glsl +0 -25
  44. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.vert.glsl +0 -11
  45. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/textures/effect_jianbian.png +0 -0
  46. package/packages/build.mesh.yellow_build_upgrade_indicator/effect.json +0 -927
  47. package/packages/build.mesh.yellow_build_upgrade_indicator/media/contact-sheet.png +0 -0
  48. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.gif +0 -0
  49. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.mp4 +0 -0
  50. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.webm +0 -0
  51. package/packages/build.mesh.yellow_build_upgrade_indicator/media/thumbnail.png +0 -0
  52. package/packages/build.mesh.yellow_build_upgrade_indicator/metadata/description.json +0 -197
  53. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-effect.original.json +0 -895
  54. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-normalized-vfx-to-babylon-report.json +0 -241
  55. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-overrides.json +0 -542
  56. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-tuning-report.json +0 -69
  57. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/asset-map.json +0 -125
  58. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/lineage.json +0 -44
  59. package/packages/build.particle.golden_upgrade_starburst/assets/runtime/particleEmitter.v1.js +0 -210
  60. package/packages/build.particle.golden_upgrade_starburst/assets/textures/effect_guangdian.png +0 -0
  61. package/packages/build.particle.golden_upgrade_starburst/effect.json +0 -880
  62. package/packages/build.particle.golden_upgrade_starburst/media/contact-sheet.png +0 -0
  63. package/packages/build.particle.golden_upgrade_starburst/media/preview.gif +0 -0
  64. package/packages/build.particle.golden_upgrade_starburst/media/preview.mp4 +0 -0
  65. package/packages/build.particle.golden_upgrade_starburst/media/preview.webm +0 -0
  66. package/packages/build.particle.golden_upgrade_starburst/media/thumbnail.png +0 -0
  67. package/packages/build.particle.golden_upgrade_starburst/metadata/description.json +0 -161
  68. package/packages/build.particle.golden_upgrade_starburst/provenance/03-effect.original.json +0 -762
  69. package/packages/build.particle.golden_upgrade_starburst/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  70. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-overrides.json +0 -436
  71. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-tuning-report.json +0 -40
  72. package/packages/build.particle.golden_upgrade_starburst/provenance/asset-map.json +0 -115
  73. package/packages/build.particle.golden_upgrade_starburst/provenance/lineage.json +0 -40
  74. package/packages/build.particle.orange_upgrade_transform_sparks/assets/runtime/particleEmitter.v1.js +0 -210
  75. package/packages/build.particle.orange_upgrade_transform_sparks/assets/textures/b5b27ab1-e740-4398-b407-848fc2b2c897.png +0 -0
  76. package/packages/build.particle.orange_upgrade_transform_sparks/effect.json +0 -887
  77. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.gif +0 -0
  78. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.mp4 +0 -0
  79. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.webm +0 -0
  80. package/packages/build.particle.orange_upgrade_transform_sparks/media/thumbnail.png +0 -0
  81. package/packages/build.particle.orange_upgrade_transform_sparks/metadata/description.json +0 -179
  82. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-effect.original.json +0 -859
  83. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  84. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-overrides.json +0 -478
  85. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-tuning-report.json +0 -40
  86. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/asset-map.json +0 -114
  87. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/lineage.json +0 -41
  88. package/packages/build.particle.wood_chip_dust_burst/assets/runtime/particleEmitter.v1.js +0 -210
  89. package/packages/build.particle.wood_chip_dust_burst/assets/textures/effect_yanwu4.png +0 -0
  90. package/packages/build.particle.wood_chip_dust_burst/assets/textures/suipian3.png +0 -0
  91. package/packages/build.particle.wood_chip_dust_burst/effect.json +0 -1400
  92. package/packages/build.particle.wood_chip_dust_burst/media/contact-sheet.png +0 -0
  93. package/packages/build.particle.wood_chip_dust_burst/media/preview.gif +0 -0
  94. package/packages/build.particle.wood_chip_dust_burst/media/preview.mp4 +0 -0
  95. package/packages/build.particle.wood_chip_dust_burst/media/preview.webm +0 -0
  96. package/packages/build.particle.wood_chip_dust_burst/media/thumbnail.png +0 -0
  97. package/packages/build.particle.wood_chip_dust_burst/metadata/description.json +0 -173
  98. package/packages/build.particle.wood_chip_dust_burst/provenance/03-effect.original.json +0 -1277
  99. package/packages/build.particle.wood_chip_dust_burst/provenance/03-normalized-vfx-to-babylon-report.json +0 -329
  100. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-overrides.json +0 -749
  101. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-tuning-report.json +0 -60
  102. package/packages/build.particle.wood_chip_dust_burst/provenance/asset-map.json +0 -146
  103. package/packages/build.particle.wood_chip_dust_burst/provenance/lineage.json +0 -69
  104. package/packages/effects/building-upgrade/effect.json +0 -6
  105. package/packages/effects/building-upgrade/index.ts +0 -387
  106. package/packages/effects/character-entrance/effect.json +0 -6
  107. package/packages/effects/character-entrance/index.ts +0 -308
  108. package/packages/effects/coin-burst/index.ts +0 -43
  109. package/packages/effects/comet-trail-flame/assets/textures/trail_5x4.webp +0 -0
  110. package/packages/effects/comet-trail-flame/index.ts +0 -106
  111. package/packages/effects/conveyor-upgrade/effect.json +0 -6
  112. package/packages/effects/conveyor-upgrade/index.ts +0 -401
  113. package/packages/effects/debris-smoke/assets/models/rock_debris.glb +0 -0
  114. package/packages/effects/debris-smoke/assets/textures/smoke22.webp +0 -0
  115. package/packages/effects/debris-smoke/index.ts +0 -101
  116. package/packages/effects/door_open_gold_flakes/assets/runtime/goldFlakes.v1.js +0 -397
  117. package/packages/effects/door_open_gold_flakes/door_open_gold_flakes.json +0 -498
  118. package/packages/effects/door_open_gold_flakes/index.ts +0 -11
  119. package/packages/effects/electric-arc/assets/textures/spark_4x4.webp +0 -0
  120. package/packages/effects/electric-arc/index.ts +0 -62
  121. package/packages/effects/energy-shield/effect.json +0 -7
  122. package/packages/effects/energy-shield/index.ts +0 -431
  123. package/packages/effects/explosion/assets/textures/baozha29.webp +0 -0
  124. package/packages/effects/explosion/assets/textures/glow01.webp +0 -0
  125. package/packages/effects/explosion/assets/textures/lizi01.webp +0 -0
  126. package/packages/effects/explosion/assets/textures/xulie_lizibaozha02_5x5.webp +0 -0
  127. package/packages/effects/explosion/index.ts +0 -114
  128. package/packages/effects/ground-tile-upgrade/effect.json +0 -6
  129. package/packages/effects/ground-tile-upgrade/index.ts +0 -410
  130. package/packages/effects/hit-flash/index.ts +0 -69
  131. package/packages/effects/laser-beam/assets/textures/laser_glow.webp +0 -0
  132. package/packages/effects/laser-beam/assets/textures/laser_noise.webp +0 -0
  133. package/packages/effects/laser-beam/index.ts +0 -6
  134. package/packages/effects/laser-beam-factory.ts +0 -135
  135. package/packages/effects/lumber-cart-suction/effect.json +0 -6
  136. package/packages/effects/lumber-cart-suction/index.ts +0 -399
  137. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb +0 -0
  138. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/.active +0 -1
  139. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/1781589063890_upload.glb +0 -0
  140. package/packages/effects/lumber-debris-scatter/assets/runtime/solidParticleScatter.v1.js +0 -236
  141. package/packages/effects/lumber-debris-scatter/effect.json +0 -228
  142. package/packages/effects/lumber-debris-scatter/index.ts +0 -780
  143. package/packages/effects/lumber_vehicle_gear_spin/assets/runtime/gearSpin.v1.js +0 -202
  144. package/packages/effects/lumber_vehicle_gear_spin/index.ts +0 -11
  145. package/packages/effects/lumber_vehicle_gear_spin/lumber_vehicle_gear_spin.json +0 -338
  146. package/packages/effects/lumber_vehicle_upgrade_aura/assets/runtime/upgradeAura.v1.js +0 -353
  147. package/packages/effects/lumber_vehicle_upgrade_aura/index.ts +0 -11
  148. package/packages/effects/lumber_vehicle_upgrade_aura/lumber_vehicle_upgrade_aura.json +0 -365
  149. package/packages/effects/lumber_vehicle_wood_chips/assets/runtime/solidParticleScatter.v1.js +0 -310
  150. package/packages/effects/lumber_vehicle_wood_chips/index.ts +0 -11
  151. package/packages/effects/lumber_vehicle_wood_chips/lumber_vehicle_wood_chips.json +0 -335
  152. package/packages/effects/monster-hit/index.ts +0 -128
  153. package/packages/effects/player-upgrade/effect.json +0 -6
  154. package/packages/effects/player-upgrade/index.ts +0 -635
  155. package/packages/effects/pulse-laser-volley/assets/textures/bolt_guangshu.webp +0 -0
  156. package/packages/effects/pulse-laser-volley/index.ts +0 -204
  157. package/packages/effects/resource-collect-sparkles/effect.json +0 -6
  158. package/packages/effects/resource-collect-sparkles/index.ts +0 -254
  159. package/packages/effects/run-footstep-dust/assets/runtime/runFootstepDust.v1.js +0 -215
  160. package/packages/effects/run-footstep-dust/effect.json +0 -183
  161. package/packages/effects/run-footstep-dust/index.ts +0 -377
  162. package/packages/effects/space-shared.ts +0 -120
  163. package/packages/effects/thruster-flame/index.ts +0 -305
  164. package/packages/effects/tree-chop-dust/assets/textures/tree_chop_dust_atlas.png +0 -0
  165. package/packages/effects/tree-chop-dust/effect.json +0 -8
  166. package/packages/effects/tree-chop-dust/index.ts +0 -202
  167. package/packages/effects/tree-leaf-chop-burst/assets/runtime/particleEmitter.v1.js +0 -303
  168. package/packages/effects/tree-leaf-chop-burst/assets/textures/tree_leaf_chop_burst_leaf_atlas.png +0 -0
  169. package/packages/effects/tree-leaf-chop-burst/effect.json +0 -498
  170. package/packages/effects/tree-leaf-chop-burst/index.ts +0 -294
  171. package/packages/effects/tree_chop_dust_burst/assets/runtime/particleEmitter.v1.js +0 -318
  172. package/packages/effects/tree_chop_dust_burst/assets/textures/tree_chop_dust_burst_dust.png +0 -0
  173. package/packages/effects/tree_chop_dust_burst/index.ts +0 -13
  174. package/packages/effects/tree_chop_dust_burst/tree_chop_dust_burst.json +0 -412
  175. package/packages/effects/ufo-thread-flame/assets/textures/flame_flow.webp +0 -0
  176. package/packages/effects/ufo-thread-flame/assets/textures/flame_spike.webp +0 -0
  177. package/packages/effects/ufo-thread-flame/index.ts +0 -152
  178. package/packages/effects/vehicle-exhaust-smoke/assets/textures/vehicle_exhaust_smoke_atlas.png +0 -0
  179. package/packages/effects/vehicle-exhaust-smoke/effect.json +0 -8
  180. package/packages/effects/vehicle-exhaust-smoke/index.ts +0 -298
  181. package/packages/effects/vehicle-upgrade/effect.json +0 -6
  182. package/packages/effects/vehicle-upgrade/index.ts +0 -401
  183. package/packages/effects/weapon-trail/assets/textures/trail_wedge.png +0 -0
  184. package/packages/effects/weapon-trail/index.ts +0 -313
  185. package/packages/effects/wood-crusher-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  186. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  187. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  188. package/packages/effects/wood-crusher-sawdust/index.ts +0 -43
  189. package/packages/effects/wood-crusher-sawdust/wood_crusher_sawdust.json +0 -592
  190. package/packages/effects/wood-cutter-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  191. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  192. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  193. package/packages/effects/wood-cutter-sawdust/index.ts +0 -43
  194. package/packages/effects/wood-cutter-sawdust/wood_cutter_sawdust.json +0 -592
  195. package/packages/effects/wood-sawdust-effect-factory.ts +0 -194
  196. package/packages/effects/wood_crusher_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  197. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  198. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  199. package/packages/effects/wood_crusher_sawdust/index.ts +0 -29
  200. package/packages/effects/wood_crusher_sawdust/wood_crusher_sawdust.json +0 -592
  201. package/packages/effects/wood_cutter_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  202. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  203. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  204. package/packages/effects/wood_cutter_sawdust/index.ts +0 -29
  205. package/packages/effects/wood_cutter_sawdust/wood_cutter_sawdust.json +0 -592
  206. package/packages/effects/wood_peel_material_test/assets/runtime/woodPeelMaterialTest.v1.js +0 -196
  207. package/packages/effects/wood_peel_material_test/index.ts +0 -11
  208. package/packages/effects/wood_peel_material_test/wood_peel_material_test.json +0 -136
  209. package/packages/env.particle.forest_edge_fog/assets/runtime/particleEmitter.v1.js +0 -210
  210. package/packages/env.particle.forest_edge_fog/assets/textures/f12a23c4-b924-4322-a260-3d982428f1e8.png +0 -0
  211. package/packages/env.particle.forest_edge_fog/assets/textures/yuan.png +0 -0
  212. package/packages/env.particle.forest_edge_fog/effect.json +0 -854
  213. package/packages/env.particle.forest_edge_fog/media/preview.gif +0 -0
  214. package/packages/env.particle.forest_edge_fog/media/preview.mp4 +0 -0
  215. package/packages/env.particle.forest_edge_fog/media/preview.webm +0 -0
  216. package/packages/env.particle.forest_edge_fog/media/thumbnail.png +0 -0
  217. package/packages/env.particle.forest_edge_fog/metadata/description.json +0 -148
  218. package/packages/env.particle.forest_edge_fog/provenance/03-effect.original.json +0 -827
  219. package/packages/env.particle.forest_edge_fog/provenance/03-normalized-vfx-to-babylon-report.json +0 -196
  220. package/packages/env.particle.forest_edge_fog/provenance/04-preview-overrides.json +0 -432
  221. package/packages/env.particle.forest_edge_fog/provenance/04-preview-tuning-report.json +0 -28
  222. package/packages/env.particle.forest_edge_fog/provenance/asset-map.json +0 -124
  223. package/packages/env.particle.forest_edge_fog/provenance/lineage.json +0 -41
  224. package/packages/generation.ts +0 -14
  225. package/packages/index.ts +0 -14
  226. package/packages/legacy-particle-runtime.ts +0 -113
  227. package/packages/manifestRuntimePackage.ts +0 -519
  228. package/packages/registry.ts +0 -85
  229. package/packages/rendering.ts +0 -13
  230. package/packages/resource.particle.viscous_oil_suction/assets/runtime/top_disk_suction/particleEmitter.v1.js +0 -424
  231. package/packages/resource.particle.viscous_oil_suction/assets/textures/Glow ad.png +0 -0
  232. package/packages/resource.particle.viscous_oil_suction/effect.json +0 -1254
  233. package/packages/resource.particle.viscous_oil_suction/media/preview.gif +0 -0
  234. package/packages/resource.particle.viscous_oil_suction/media/preview.mp4 +0 -0
  235. package/packages/resource.particle.viscous_oil_suction/media/preview.webm +0 -0
  236. package/packages/resource.particle.viscous_oil_suction/media/thumbnail.png +0 -0
  237. package/packages/resource.particle.viscous_oil_suction/metadata/description.json +0 -122
  238. package/packages/resource.particle.viscous_oil_suction/provenance/03-effect.original.json +0 -1051
  239. package/packages/resource.particle.viscous_oil_suction/provenance/03-normalized-vfx-to-babylon-report.json +0 -200
  240. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-overrides.json +0 -581
  241. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-tuning-report.json +0 -28
  242. package/packages/resource.particle.viscous_oil_suction/provenance/asset-map.json +0 -111
  243. package/packages/resource.particle.viscous_oil_suction/provenance/lineage.json +0 -45
  244. package/packages/types.ts +0 -107
  245. package/tooling/check-dist-runtime.mjs +0 -166
  246. package/tooling/generate-index.mjs +0 -55
  247. package/tooling/test-guardrails.mjs +0 -157
  248. package/tooling/validate-boundary.mjs +0 -92
  249. package/tooling/validate-effects.mjs +0 -304
  250. package/tooling/validate.mjs +0 -53
@@ -1,40 +0,0 @@
1
- {
2
- "schemaVersion": "vfx-preview-tuning-report/1.0",
3
- "stage": "preview-tuning",
4
- "generatedAt": "2026-05-19T04:06:57.379Z",
5
- "effectId": "build.particle.golden_upgrade_starburst",
6
- "sourcePackage": "build.particle.golden_upgrade_starburst",
7
- "inputEffectFile": "effect.json",
8
- "outputPackage": "build.particle.golden_upgrade_starburst.stage4-package.zip",
9
- "packageFiles": {
10
- "tunedEffect": "effect.json",
11
- "overrides": "04-preview-overrides.json",
12
- "report": "04-preview-tuning-report.json"
13
- },
14
- "emitters": [
15
- {
16
- "name": "effect_dian",
17
- "enabled": true,
18
- "capacity": 100,
19
- "emitRate": 0,
20
- "particleTexturePath": "assets/textures/effect_guangdian.png",
21
- "materialSourcePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl",
22
- "shader": null,
23
- "meshEffect": null,
24
- "shape": "Box",
25
- "runtime": {
26
- "adapter": "particleEmitter/v1"
27
- },
28
- "renderColor": {
29
- "color": {
30
- "r": 1,
31
- "g": 1,
32
- "b": 1,
33
- "a": 1
34
- },
35
- "colorIntensity": 1,
36
- "alphaIntensity": 1
37
- }
38
- }
39
- ]
40
- }
@@ -1,115 +0,0 @@
1
- {
2
- "schemaVersion": "vfx-asset-map/1.0",
3
- "generatedAt": "2026-05-19T04:06:57.387Z",
4
- "sourcePackage": "build.particle.golden_upgrade_starburst",
5
- "policy": {
6
- "runtimeAssetsRoot": "assets/",
7
- "sourceAssetsRoot": "source/",
8
- "note": "assets/ contains files loaded by Babylon runtime. source/cocos/assets/ preserves the original Cocos asset tree for traceability and reconversion."
9
- },
10
- "entries": [
11
- {
12
- "id": "effect_guangdian",
13
- "kind": "texture",
14
- "group": "textures",
15
- "role": "babylon-runtime",
16
- "runtimeUse": true,
17
- "packagePath": "assets/textures/effect_guangdian.png",
18
- "sourcePackagePath": "assets/textures/effect_guangdian.png",
19
- "sourceArchivePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/tex/effect_guangdian.png",
20
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/tex/effect_guangdian.png",
21
- "sourceId": "3841c09a-7102-4785-869a-81d7c2209501@6c48a",
22
- "usedBy": [
23
- "emitters.effect_dian.texture"
24
- ],
25
- "originalProjectPath": "assets/ArtResources/Effect/Effect_Build_Up1/tex/effect_guangdian.png"
26
- },
27
- {
28
- "id": "effect_guangdian",
29
- "kind": "material",
30
- "group": "materials",
31
- "role": "source-evidence",
32
- "runtimeUse": false,
33
- "packagePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl",
34
- "sourcePackagePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl",
35
- "sourceArchivePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl",
36
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl",
37
- "sourceId": "a347f6f0-a285-414a-8a8b-04dc48b8a688",
38
- "usedBy": [
39
- "emitters.effect_dian.material"
40
- ],
41
- "originalProjectPath": "assets/ArtResources/Effect/Effect_Build_Up1/mat/effect_guangdian.mtl"
42
- },
43
- {
44
- "id": "particle_emitter_v1",
45
- "kind": "script",
46
- "group": "scripts",
47
- "role": "babylon-runtime",
48
- "runtimeUse": true,
49
- "packagePath": "assets/runtime/particleEmitter.v1.js",
50
- "sourcePackagePath": "assets/runtime/particleEmitter.v1.js",
51
- "sourceArchivePath": null,
52
- "sourcePath": null,
53
- "sourceId": null,
54
- "usedBy": []
55
- },
56
- {
57
- "id": "02-normalized-vfx",
58
- "kind": "raw",
59
- "group": "raw",
60
- "role": "source-evidence",
61
- "runtimeUse": false,
62
- "packagePath": "source/02-normalized-vfx.json",
63
- "sourcePackagePath": "source/02-normalized-vfx.json",
64
- "sourceArchivePath": null,
65
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/02-normalized-vfx.json",
66
- "sourceId": null,
67
- "usedBy": []
68
- },
69
- {
70
- "id": "01-source-dump",
71
- "kind": "raw",
72
- "group": "raw",
73
- "role": "source-evidence",
74
- "runtimeUse": false,
75
- "packagePath": "source/01-source-dump.json",
76
- "sourcePackagePath": "source/01-source-dump.json",
77
- "sourceArchivePath": null,
78
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/01-source-dump.json",
79
- "sourceId": null,
80
- "usedBy": []
81
- },
82
- {
83
- "id": "effect_build_up1",
84
- "kind": "raw",
85
- "group": "raw",
86
- "role": "source-evidence",
87
- "runtimeUse": false,
88
- "packagePath": "source/raw/Effect_Build_Up1.prefab",
89
- "sourcePackagePath": "source/raw/Effect_Build_Up1.prefab",
90
- "sourceArchivePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab",
91
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab",
92
- "sourceId": "f4b9b9eb-a0d0-43aa-ae18-8b702f2d2dec",
93
- "usedBy": [],
94
- "originalProjectPath": "assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab"
95
- },
96
- {
97
- "id": "effect_build_up1.meta",
98
- "kind": "raw",
99
- "group": "raw",
100
- "role": "source-evidence",
101
- "runtimeUse": false,
102
- "packagePath": "source/raw/Effect_Build_Up1.prefab.meta",
103
- "sourcePackagePath": "source/raw/Effect_Build_Up1.prefab.meta",
104
- "sourceArchivePath": "source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab.meta",
105
- "sourcePath": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source/cocos/assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab.meta",
106
- "sourceId": "f4b9b9eb-a0d0-43aa-ae18-8b702f2d2dec",
107
- "usedBy": [],
108
- "originalProjectPath": "assets/ArtResources/Effect/Effect_Build_Up1/prefab/Effect_Build_Up1.prefab.meta"
109
- }
110
- ],
111
- "gcsPrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst",
112
- "sourceArchivePrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source",
113
- "fullProvenancePrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/provenance",
114
- "canonicalSource": "gcs"
115
- }
@@ -1,40 +0,0 @@
1
- {
2
- "schemaVersion": "vfx-library-lineage/1.0",
3
- "savedAt": "2026-05-19T04:06:57.392Z",
4
- "sourcePackage": "build.particle.golden_upgrade_starburst",
5
- "sourceEffect": "effect.json",
6
- "libraryPackage": "packages/build.particle.golden_upgrade_starburst",
7
- "effectId": "build.particle.golden_upgrade_starburst",
8
- "media": {
9
- "previewVideo": "media/preview.webm",
10
- "previewWebm": "media/preview.webm",
11
- "previewMp4": "media/preview.mp4",
12
- "previewGif": "media/preview.gif",
13
- "thumbnail": "media/thumbnail.png",
14
- "contactSheet": "media/contact-sheet.png",
15
- "gcsUri": null
16
- },
17
- "recording": {
18
- "provider": "browser-mediarecorder",
19
- "recordedAt": "2026-05-18T14:25:05.850Z",
20
- "mimeType": "video/webm;codecs=vp9",
21
- "durationSec": 3,
22
- "fps": 30,
23
- "media": {
24
- "previewVideo": "media/preview.webm",
25
- "previewWebm": "media/preview.webm",
26
- "previewMp4": "media/preview.mp4",
27
- "previewGif": "media/preview.gif",
28
- "thumbnail": "media/thumbnail.png",
29
- "contactSheet": "media/contact-sheet.png",
30
- "gcsUri": null
31
- }
32
- },
33
- "description": {
34
- "provider": "gemini",
35
- "status": "pending_description"
36
- },
37
- "gcsPrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst",
38
- "sourceArchivePrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/source",
39
- "fullProvenancePrefix": "gs://fps-vfx-library/packages/build.particle.golden_upgrade_starburst/provenance"
40
- }
@@ -1,210 +0,0 @@
1
- export const runtimeId = "particleEmitter/v1";
2
-
3
- export const runtimeContract = {
4
- runtimeId,
5
- kind: "particleEmitter",
6
- emitterFields: {
7
- capacity: "Maximum Babylon particle capacity.",
8
- particleTexturePath: "Package-relative particle texture path used to load the Babylon ParticleSystem.particleTexture.",
9
- blendMode: "Babylon particle blend mode label: ADD, STANDARD, MULTIPLY, or ONEONE.",
10
- shape: "Emitter shape definition generated by the Cocos conversion stage.",
11
- renderColor: "Converted particle color inputs: one base color plus RGB/alpha intensity before writing Babylon color1/color2/colorDead.",
12
- alphaKeys: "Color alpha gradients sampled over normalized particle lifetime.",
13
- sizeKeys: "Size gradients sampled over normalized particle lifetime.",
14
- },
15
- runtimeBindings: {
16
- "ParticleSystem.particleTexture": "Texture loaded from emitter.particleTexturePath through urlForPackagePath.",
17
- "ParticleSystem.blendMode": "Mapped from emitter.blendMode.",
18
- "ParticleSystem.manualEmitCount": "emitter.manualEmitCount when emitRate is 0.",
19
- "ParticleSystem.emitRate": "emitter.emitRate for sustained emitters.",
20
- "ParticleSystem.shape": "Mapped from emitter.shape.type and shape parameters.",
21
- "ParticleSystem.colorGradient": "emitter.alphaKeys applied to the final ParticleSystem.color1.",
22
- "ParticleSystem.sizeGradient": "emitter.sizeKeys multiplied by emitter.maxSize.",
23
- },
24
- };
25
-
26
- const BABYLON_PARTICLE_UPDATE_SPEED_UNIT = 0.01;
27
-
28
- function num(value, fallback = 0) {
29
- const next = Number(value);
30
- return Number.isFinite(next) ? next : fallback;
31
- }
32
-
33
- function readColor(BABYLON, value, fallback = new BABYLON.Color4(1, 1, 1, 1)) {
34
- if (!value) return fallback;
35
- return new BABYLON.Color4(num(value.r, fallback.r), num(value.g, fallback.g), num(value.b, fallback.b), num(value.a, fallback.a));
36
- }
37
-
38
- function applyRenderColorIntensity(BABYLON, color, renderColor = {}) {
39
- const colorIntensity = Math.max(0, num(renderColor.colorIntensity, 1));
40
- const alphaIntensity = Math.max(0, num(renderColor.alphaIntensity, colorIntensity));
41
- return new BABYLON.Color4(
42
- color.r * colorIntensity,
43
- color.g * colorIntensity,
44
- color.b * colorIntensity,
45
- Math.min(1, color.a * alphaIntensity)
46
- );
47
- }
48
-
49
- function particleColors(BABYLON, emitter) {
50
- const renderColor = emitter.renderColor;
51
- const baseColor = readColor(BABYLON, renderColor?.color, new BABYLON.Color4(1, 1, 1, 1));
52
- const color1 = applyRenderColorIntensity(BABYLON, baseColor, renderColor);
53
- return {
54
- color1,
55
- color2: color1,
56
- colorDead: new BABYLON.Color4(color1.r, color1.g, color1.b, 0),
57
- };
58
- }
59
-
60
- function readVec(BABYLON, value, fallback = new BABYLON.Vector3(0, 0, 0)) {
61
- if (!value) return fallback;
62
- return new BABYLON.Vector3(num(value.x, fallback.x), num(value.y, fallback.y), num(value.z, fallback.z));
63
- }
64
-
65
- function blendMode(BABYLON, value) {
66
- if (value === "STANDARD") return BABYLON.ParticleSystem.BLENDMODE_STANDARD;
67
- if (value === "MULTIPLY") return BABYLON.ParticleSystem.BLENDMODE_MULTIPLY;
68
- if (value === "ONEONE") return BABYLON.ParticleSystem.BLENDMODE_ONEONE;
69
- return BABYLON.ParticleSystem.BLENDMODE_ADD;
70
- }
71
-
72
- function billboardMode(BABYLON, value) {
73
- if (!value || BABYLON.ParticleSystem[value] === undefined) return undefined;
74
- return BABYLON.ParticleSystem[value];
75
- }
76
-
77
- function applyCocosConeEmitFunctions(BABYLON, system, radius, angle, radiusRange) {
78
- const safeRadius = Math.max(0, radius);
79
- const innerSq = (safeRadius * Math.max(0, 1 - radiusRange)) ** 2;
80
- const outerSq = safeRadius * safeRadius;
81
- const halfAngle = Math.min(Math.PI, Math.max(0, angle));
82
- const cosAngle = Math.cos(halfAngle);
83
-
84
- system.startPositionFunction = (worldMatrix, positionToUpdate, _particle, isLocal) => {
85
- const s = Math.random() * Math.PI * 2;
86
- const r2 = innerSq + Math.random() * (outerSq - innerSq);
87
- const r = Math.sqrt(Math.max(0, r2));
88
- const lx = r * Math.cos(s);
89
- const lz = r * Math.sin(s);
90
- if (isLocal) positionToUpdate.set(lx, 0, lz);
91
- else BABYLON.Vector3.TransformCoordinatesFromFloatsToRef(lx, 0, lz, worldMatrix, positionToUpdate);
92
- };
93
-
94
- system.startDirectionFunction = (worldMatrix, directionToUpdate, _particle, isLocal) => {
95
- const phi = Math.random() * Math.PI * 2;
96
- const cosTheta = 1 - Math.random() * (1 - cosAngle);
97
- const sinTheta = Math.sqrt(Math.max(0, 1 - cosTheta * cosTheta));
98
- const dx = sinTheta * Math.cos(phi);
99
- const dy = cosTheta;
100
- const dz = sinTheta * Math.sin(phi);
101
- if (isLocal) directionToUpdate.set(dx, dy, dz);
102
- else BABYLON.Vector3.TransformNormalFromFloatsToRef(dx, dy, dz, worldMatrix, directionToUpdate);
103
- };
104
- }
105
-
106
- function applyEmitterShape(BABYLON, system, emitter) {
107
- const shape = emitter.shape || {};
108
- const type = shape.type;
109
- const radius = num(shape.radius, 1);
110
- const radiusRange = Math.min(1, Math.max(0, num(shape.radiusRange, 1)));
111
- const angle = num(shape.angle, Math.PI / 4);
112
- const direction1 = readVec(BABYLON, shape.direction1, new BABYLON.Vector3(0, 1, 0));
113
- const direction2 = readVec(BABYLON, shape.direction2, new BABYLON.Vector3(0, 1, 0));
114
- const boxMin = readVec(BABYLON, shape.minEmitBox, new BABYLON.Vector3(-radius * 0.5, -radius * 0.5, -radius * 0.5));
115
- const boxMax = readVec(BABYLON, shape.maxEmitBox, new BABYLON.Vector3(radius * 0.5, radius * 0.5, radius * 0.5));
116
-
117
- if (type === "Box") {
118
- system.createBoxEmitter(direction1, direction2, boxMin, boxMax);
119
- } else if (type === "SphereDirected") {
120
- system.createDirectedSphereEmitter(radius, direction1, direction2);
121
- } else if (type === "Sphere") {
122
- system.createSphereEmitter(radius, radiusRange);
123
- } else if (type === "Hemisphere") {
124
- system.createHemisphericEmitter(radius, radiusRange);
125
- } else if (type === "Cone") {
126
- const dirSpread = direction1.subtract(direction2).lengthSquared();
127
- if (dirSpread < 1e-4) {
128
- system.createConeEmitter(Math.max(0.001, radius), angle);
129
- applyCocosConeEmitFunctions(BABYLON, system, radius, angle, radiusRange);
130
- } else {
131
- system.createDirectedConeEmitter(Math.max(0.001, radius), angle, direction1, direction2);
132
- }
133
- }
134
- }
135
-
136
- function addGradients(BABYLON, system, emitter, color1) {
137
- for (const key of emitter.alphaKeys || []) {
138
- const time = Math.min(1, Math.max(0, num(key.time, 0)));
139
- const alpha = Math.min(1, Math.max(0, num(key.alpha, 1)));
140
- system.addColorGradient?.(time, new BABYLON.Color4(color1.r, color1.g, color1.b, Math.min(1, color1.a * alpha)));
141
- }
142
- for (const key of emitter.sizeKeys || []) {
143
- const time = Math.min(1, Math.max(0, num(key.time, 0)));
144
- const size = Math.max(0.001, num(key.size, 1) * num(emitter.maxSize, 1));
145
- system.addSizeGradient?.(time, size);
146
- }
147
- }
148
-
149
- function playbackSpeed(emitter) {
150
- return Math.max(0.001, num(emitter.updateSpeed, BABYLON_PARTICLE_UPDATE_SPEED_UNIT) / BABYLON_PARTICLE_UPDATE_SPEED_UNIT);
151
- }
152
-
153
- function runtimeDuration(emitter) {
154
- return Math.max(0.1, num(emitter.runtime?.stopAfterSeconds, 3) / playbackSpeed(emitter));
155
- }
156
-
157
- export async function createParticleEmitterRuntime({ BABYLON, scene, emitter, index = 0, urlForPackagePath, shouldStart = false }) {
158
- if (!BABYLON) throw new Error("createParticleEmitterRuntime requires BABYLON.");
159
- if (!scene) throw new Error("createParticleEmitterRuntime requires scene.");
160
- if (!emitter) throw new Error("createParticleEmitterRuntime requires emitter.");
161
-
162
- const capacity = Math.max(1, Math.round(num(emitter.capacity, 100)));
163
- const system = new BABYLON.ParticleSystem(`particle-emitter-${emitter.name || index}`, capacity, scene);
164
- const textureUrl = urlForPackagePath ? urlForPackagePath(emitter.particleTexturePath) : emitter.particleTexturePath;
165
- system.particleTexture = new BABYLON.Texture(textureUrl, scene);
166
- system.particleTexture.hasAlpha = true;
167
- system.emitter = BABYLON.Vector3.Zero();
168
- system.blendMode = blendMode(BABYLON, emitter.blendMode);
169
- system.isLocal = emitter.isLocal === true;
170
- system.minSize = Math.max(0.001, num(emitter.minSize, 1));
171
- system.maxSize = Math.max(system.minSize, num(emitter.maxSize, system.minSize));
172
- system.minScaleX = Math.max(0.001, num(emitter.minScaleX, 1));
173
- system.maxScaleX = Math.max(system.minScaleX, num(emitter.maxScaleX, system.minScaleX));
174
- system.minScaleY = Math.max(0.001, num(emitter.minScaleY, 1));
175
- system.maxScaleY = Math.max(system.minScaleY, num(emitter.maxScaleY, system.minScaleY));
176
- system.minLifeTime = Math.max(0.02, num(emitter.minLifeTime, 0.55));
177
- system.maxLifeTime = Math.max(system.minLifeTime, num(emitter.maxLifeTime, system.minLifeTime));
178
- system.minEmitPower = Math.max(0, num(emitter.minEmitPower, 1));
179
- system.maxEmitPower = Math.max(system.minEmitPower, num(emitter.maxEmitPower, system.minEmitPower));
180
- system.updateSpeed = Math.max(0.00001, num(emitter.updateSpeed, BABYLON_PARTICLE_UPDATE_SPEED_UNIT));
181
- system.gravity = readVec(BABYLON, emitter.gravity, new BABYLON.Vector3(0, -6, 0));
182
- system.emitRate = Math.max(0, num(emitter.emitRate, 0));
183
- if (system.emitRate <= 0) system.manualEmitCount = Math.max(0, Math.round(num(emitter.manualEmitCount, 0)));
184
-
185
- const colors = particleColors(BABYLON, emitter);
186
- system.color1 = colors.color1;
187
- system.color2 = colors.color2;
188
- system.colorDead = colors.colorDead;
189
- system.minInitialRotation = num(emitter.minInitialRotation, 0);
190
- system.maxInitialRotation = num(emitter.maxInitialRotation, system.minInitialRotation);
191
- system.minAngularSpeed = num(emitter.minAngularSpeed, 0);
192
- system.maxAngularSpeed = num(emitter.maxAngularSpeed, system.minAngularSpeed);
193
-
194
- const nextBillboardMode = billboardMode(BABYLON, emitter.billboardMode);
195
- if (nextBillboardMode !== undefined) system.billboardMode = nextBillboardMode;
196
-
197
- applyEmitterShape(BABYLON, system, emitter);
198
- addGradients(BABYLON, system, emitter, system.color1);
199
-
200
- const preview = {
201
- start: () => system.start(),
202
- stop: () => system.stop(),
203
- dispose: () => system.dispose(),
204
- isStarted: () => system.isStarted(),
205
- duration: runtimeDuration(emitter),
206
- system,
207
- };
208
- if (shouldStart) preview.start();
209
- return preview;
210
- }