@fps-games/vfx 0.3.2 → 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 (231) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +5 -4
  3. package/tooling/vfx-cli.mjs +8 -1
  4. package/docs/AUTHORING_EFFECTS.md +0 -297
  5. package/docs/INTEGRATION.md +0 -194
  6. package/docs/VFX_LIBRARY_ARCHITECTURE_chatgpt.md +0 -1580
  7. package/docs/VFX_LIBRARY_EXECUTION_PLAN.md +0 -229
  8. package/docs/VFX_LIBRARY_PLAN.md +0 -546
  9. package/docs/hit-flash-red-method.md +0 -155
  10. package/docs/treasure_attention_fx_babylonjs_guide.md +0 -901
  11. package/docs/vfx-ab/RESULTS.md +0 -35
  12. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/after.png +0 -0
  13. package/docs/vfx-ab/lumber-order/vehicle-exhaust-smoke/before.png +0 -0
  14. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/after.png +0 -0
  15. package/docs/vfx-ab/lumber-truck/vehicle-exhaust-smoke/before.png +0 -0
  16. package/docs/vfx-integration_chatgpt.md +0 -462
  17. package/docs/vfx-placement-design.md +0 -164
  18. package/docs/weapon-trail-visualization.html +0 -241
  19. package/packages/EffectPackageService.ts +0 -346
  20. package/packages/SceneVfxService.ts +0 -96
  21. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/runtime/simpleMeshEffect.v1.js +0 -333
  22. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.frag.glsl +0 -25
  23. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/shaders/mesh-effect-preview.vert.glsl +0 -11
  24. package/packages/build.mesh.yellow_build_upgrade_indicator/assets/textures/effect_jianbian.png +0 -0
  25. package/packages/build.mesh.yellow_build_upgrade_indicator/effect.json +0 -927
  26. package/packages/build.mesh.yellow_build_upgrade_indicator/media/contact-sheet.png +0 -0
  27. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.gif +0 -0
  28. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.mp4 +0 -0
  29. package/packages/build.mesh.yellow_build_upgrade_indicator/media/preview.webm +0 -0
  30. package/packages/build.mesh.yellow_build_upgrade_indicator/media/thumbnail.png +0 -0
  31. package/packages/build.mesh.yellow_build_upgrade_indicator/metadata/description.json +0 -197
  32. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-effect.original.json +0 -895
  33. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/03-normalized-vfx-to-babylon-report.json +0 -241
  34. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-overrides.json +0 -542
  35. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/04-preview-tuning-report.json +0 -69
  36. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/asset-map.json +0 -125
  37. package/packages/build.mesh.yellow_build_upgrade_indicator/provenance/lineage.json +0 -44
  38. package/packages/build.particle.golden_upgrade_starburst/assets/runtime/particleEmitter.v1.js +0 -210
  39. package/packages/build.particle.golden_upgrade_starburst/assets/textures/effect_guangdian.png +0 -0
  40. package/packages/build.particle.golden_upgrade_starburst/effect.json +0 -880
  41. package/packages/build.particle.golden_upgrade_starburst/media/contact-sheet.png +0 -0
  42. package/packages/build.particle.golden_upgrade_starburst/media/preview.gif +0 -0
  43. package/packages/build.particle.golden_upgrade_starburst/media/preview.mp4 +0 -0
  44. package/packages/build.particle.golden_upgrade_starburst/media/preview.webm +0 -0
  45. package/packages/build.particle.golden_upgrade_starburst/media/thumbnail.png +0 -0
  46. package/packages/build.particle.golden_upgrade_starburst/metadata/description.json +0 -161
  47. package/packages/build.particle.golden_upgrade_starburst/provenance/03-effect.original.json +0 -762
  48. package/packages/build.particle.golden_upgrade_starburst/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  49. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-overrides.json +0 -436
  50. package/packages/build.particle.golden_upgrade_starburst/provenance/04-preview-tuning-report.json +0 -40
  51. package/packages/build.particle.golden_upgrade_starburst/provenance/asset-map.json +0 -115
  52. package/packages/build.particle.golden_upgrade_starburst/provenance/lineage.json +0 -40
  53. package/packages/build.particle.orange_upgrade_transform_sparks/assets/runtime/particleEmitter.v1.js +0 -210
  54. package/packages/build.particle.orange_upgrade_transform_sparks/assets/textures/b5b27ab1-e740-4398-b407-848fc2b2c897.png +0 -0
  55. package/packages/build.particle.orange_upgrade_transform_sparks/effect.json +0 -887
  56. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.gif +0 -0
  57. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.mp4 +0 -0
  58. package/packages/build.particle.orange_upgrade_transform_sparks/media/preview.webm +0 -0
  59. package/packages/build.particle.orange_upgrade_transform_sparks/media/thumbnail.png +0 -0
  60. package/packages/build.particle.orange_upgrade_transform_sparks/metadata/description.json +0 -179
  61. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-effect.original.json +0 -859
  62. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/03-normalized-vfx-to-babylon-report.json +0 -260
  63. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-overrides.json +0 -478
  64. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/04-preview-tuning-report.json +0 -40
  65. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/asset-map.json +0 -114
  66. package/packages/build.particle.orange_upgrade_transform_sparks/provenance/lineage.json +0 -41
  67. package/packages/build.particle.wood_chip_dust_burst/assets/runtime/particleEmitter.v1.js +0 -210
  68. package/packages/build.particle.wood_chip_dust_burst/assets/textures/effect_yanwu4.png +0 -0
  69. package/packages/build.particle.wood_chip_dust_burst/assets/textures/suipian3.png +0 -0
  70. package/packages/build.particle.wood_chip_dust_burst/effect.json +0 -1400
  71. package/packages/build.particle.wood_chip_dust_burst/media/contact-sheet.png +0 -0
  72. package/packages/build.particle.wood_chip_dust_burst/media/preview.gif +0 -0
  73. package/packages/build.particle.wood_chip_dust_burst/media/preview.mp4 +0 -0
  74. package/packages/build.particle.wood_chip_dust_burst/media/preview.webm +0 -0
  75. package/packages/build.particle.wood_chip_dust_burst/media/thumbnail.png +0 -0
  76. package/packages/build.particle.wood_chip_dust_burst/metadata/description.json +0 -173
  77. package/packages/build.particle.wood_chip_dust_burst/provenance/03-effect.original.json +0 -1277
  78. package/packages/build.particle.wood_chip_dust_burst/provenance/03-normalized-vfx-to-babylon-report.json +0 -329
  79. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-overrides.json +0 -749
  80. package/packages/build.particle.wood_chip_dust_burst/provenance/04-preview-tuning-report.json +0 -60
  81. package/packages/build.particle.wood_chip_dust_burst/provenance/asset-map.json +0 -146
  82. package/packages/build.particle.wood_chip_dust_burst/provenance/lineage.json +0 -69
  83. package/packages/effects/building-upgrade/effect.json +0 -6
  84. package/packages/effects/building-upgrade/index.ts +0 -387
  85. package/packages/effects/character-entrance/effect.json +0 -6
  86. package/packages/effects/character-entrance/index.ts +0 -308
  87. package/packages/effects/coin-burst/index.ts +0 -48
  88. package/packages/effects/comet-trail-flame/assets/textures/trail_5x4.webp +0 -0
  89. package/packages/effects/comet-trail-flame/index.ts +0 -107
  90. package/packages/effects/conveyor-upgrade/effect.json +0 -6
  91. package/packages/effects/conveyor-upgrade/index.ts +0 -401
  92. package/packages/effects/debris-smoke/assets/models/rock_debris.glb +0 -0
  93. package/packages/effects/debris-smoke/assets/textures/smoke22.webp +0 -0
  94. package/packages/effects/debris-smoke/index.ts +0 -102
  95. package/packages/effects/door_open_gold_flakes/assets/runtime/goldFlakes.v1.js +0 -397
  96. package/packages/effects/door_open_gold_flakes/door_open_gold_flakes.json +0 -498
  97. package/packages/effects/door_open_gold_flakes/index.ts +0 -11
  98. package/packages/effects/electric-arc/assets/textures/spark_4x4.webp +0 -0
  99. package/packages/effects/electric-arc/index.ts +0 -63
  100. package/packages/effects/energy-shield/effect.json +0 -7
  101. package/packages/effects/energy-shield/index.ts +0 -432
  102. package/packages/effects/explosion/assets/textures/baozha29.webp +0 -0
  103. package/packages/effects/explosion/assets/textures/glow01.webp +0 -0
  104. package/packages/effects/explosion/assets/textures/lizi01.webp +0 -0
  105. package/packages/effects/explosion/assets/textures/xulie_lizibaozha02_5x5.webp +0 -0
  106. package/packages/effects/explosion/index.ts +0 -115
  107. package/packages/effects/ground-tile-upgrade/effect.json +0 -6
  108. package/packages/effects/ground-tile-upgrade/index.ts +0 -410
  109. package/packages/effects/hit-flash/index.ts +0 -77
  110. package/packages/effects/laser-beam/assets/textures/laser_glow.webp +0 -0
  111. package/packages/effects/laser-beam/assets/textures/laser_noise.webp +0 -0
  112. package/packages/effects/laser-beam/index.ts +0 -6
  113. package/packages/effects/laser-beam-factory.ts +0 -146
  114. package/packages/effects/lumber-cart-suction/effect.json +0 -6
  115. package/packages/effects/lumber-cart-suction/index.ts +0 -399
  116. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb +0 -0
  117. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/.active +0 -1
  118. package/packages/effects/lumber-debris-scatter/assets/models/lumber_prop_model.glb.versions/1781589063890_upload.glb +0 -0
  119. package/packages/effects/lumber-debris-scatter/assets/runtime/solidParticleScatter.v1.js +0 -236
  120. package/packages/effects/lumber-debris-scatter/effect.json +0 -228
  121. package/packages/effects/lumber-debris-scatter/index.ts +0 -780
  122. package/packages/effects/lumber_vehicle_gear_spin/assets/runtime/gearSpin.v1.js +0 -202
  123. package/packages/effects/lumber_vehicle_gear_spin/index.ts +0 -11
  124. package/packages/effects/lumber_vehicle_gear_spin/lumber_vehicle_gear_spin.json +0 -338
  125. package/packages/effects/lumber_vehicle_upgrade_aura/assets/runtime/upgradeAura.v1.js +0 -353
  126. package/packages/effects/lumber_vehicle_upgrade_aura/index.ts +0 -13
  127. package/packages/effects/lumber_vehicle_upgrade_aura/lumber_vehicle_upgrade_aura.json +0 -365
  128. package/packages/effects/lumber_vehicle_wood_chips/assets/runtime/solidParticleScatter.v1.js +0 -310
  129. package/packages/effects/lumber_vehicle_wood_chips/index.ts +0 -11
  130. package/packages/effects/lumber_vehicle_wood_chips/lumber_vehicle_wood_chips.json +0 -335
  131. package/packages/effects/monster-hit/index.ts +0 -129
  132. package/packages/effects/player-upgrade/effect.json +0 -6
  133. package/packages/effects/player-upgrade/index.ts +0 -640
  134. package/packages/effects/pulse-laser-volley/assets/textures/bolt_guangshu.webp +0 -0
  135. package/packages/effects/pulse-laser-volley/index.ts +0 -215
  136. package/packages/effects/resource-collect-sparkles/effect.json +0 -6
  137. package/packages/effects/resource-collect-sparkles/index.ts +0 -254
  138. package/packages/effects/run-footstep-dust/assets/runtime/runFootstepDust.v1.js +0 -215
  139. package/packages/effects/run-footstep-dust/effect.json +0 -183
  140. package/packages/effects/run-footstep-dust/index.ts +0 -377
  141. package/packages/effects/space-shared.ts +0 -120
  142. package/packages/effects/thruster-flame/index.ts +0 -306
  143. package/packages/effects/treasure-attention/effect.json +0 -7
  144. package/packages/effects/treasure-attention/index.ts +0 -630
  145. package/packages/effects/tree-chop-dust/assets/textures/tree_chop_dust_atlas.png +0 -0
  146. package/packages/effects/tree-chop-dust/effect.json +0 -8
  147. package/packages/effects/tree-chop-dust/index.ts +0 -202
  148. package/packages/effects/tree-leaf-chop-burst/assets/runtime/particleEmitter.v1.js +0 -303
  149. package/packages/effects/tree-leaf-chop-burst/assets/textures/tree_leaf_chop_burst_leaf_atlas.png +0 -0
  150. package/packages/effects/tree-leaf-chop-burst/effect.json +0 -498
  151. package/packages/effects/tree-leaf-chop-burst/index.ts +0 -294
  152. package/packages/effects/tree_chop_dust_burst/assets/runtime/particleEmitter.v1.js +0 -318
  153. package/packages/effects/tree_chop_dust_burst/assets/textures/tree_chop_dust_burst_dust.png +0 -0
  154. package/packages/effects/tree_chop_dust_burst/index.ts +0 -13
  155. package/packages/effects/tree_chop_dust_burst/tree_chop_dust_burst.json +0 -412
  156. package/packages/effects/ufo-thread-flame/assets/textures/flame_flow.webp +0 -0
  157. package/packages/effects/ufo-thread-flame/assets/textures/flame_spike.webp +0 -0
  158. package/packages/effects/ufo-thread-flame/index.ts +0 -153
  159. package/packages/effects/vehicle-exhaust-smoke/assets/textures/vehicle_exhaust_smoke_atlas.png +0 -0
  160. package/packages/effects/vehicle-exhaust-smoke/effect.json +0 -8
  161. package/packages/effects/vehicle-exhaust-smoke/index.ts +0 -298
  162. package/packages/effects/vehicle-upgrade/effect.json +0 -6
  163. package/packages/effects/vehicle-upgrade/index.ts +0 -404
  164. package/packages/effects/weapon-trail/assets/textures/trail_wedge.png +0 -0
  165. package/packages/effects/weapon-trail/index.ts +0 -317
  166. package/packages/effects/wood-crusher-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  167. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  168. package/packages/effects/wood-crusher-sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  169. package/packages/effects/wood-crusher-sawdust/index.ts +0 -43
  170. package/packages/effects/wood-crusher-sawdust/wood_crusher_sawdust.json +0 -592
  171. package/packages/effects/wood-cutter-sawdust/assets/runtime/particleEmitter.v1.js +0 -312
  172. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  173. package/packages/effects/wood-cutter-sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  174. package/packages/effects/wood-cutter-sawdust/index.ts +0 -43
  175. package/packages/effects/wood-cutter-sawdust/wood_cutter_sawdust.json +0 -592
  176. package/packages/effects/wood-sawdust-effect-factory.ts +0 -194
  177. package/packages/effects/wood_crusher_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  178. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_dust.png +0 -0
  179. package/packages/effects/wood_crusher_sawdust/assets/textures/wood_crusher_sawdust_fiber.png +0 -0
  180. package/packages/effects/wood_crusher_sawdust/index.ts +0 -29
  181. package/packages/effects/wood_crusher_sawdust/wood_crusher_sawdust.json +0 -592
  182. package/packages/effects/wood_cutter_sawdust/assets/runtime/particleEmitter.v1.js +0 -318
  183. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_chip.png +0 -0
  184. package/packages/effects/wood_cutter_sawdust/assets/textures/wood_cutter_sawdust_dust.png +0 -0
  185. package/packages/effects/wood_cutter_sawdust/index.ts +0 -29
  186. package/packages/effects/wood_cutter_sawdust/wood_cutter_sawdust.json +0 -592
  187. package/packages/effects/wood_peel_material_test/assets/runtime/woodPeelMaterialTest.v1.js +0 -196
  188. package/packages/effects/wood_peel_material_test/index.ts +0 -11
  189. package/packages/effects/wood_peel_material_test/wood_peel_material_test.json +0 -136
  190. package/packages/env.particle.forest_edge_fog/assets/runtime/particleEmitter.v1.js +0 -210
  191. package/packages/env.particle.forest_edge_fog/assets/textures/f12a23c4-b924-4322-a260-3d982428f1e8.png +0 -0
  192. package/packages/env.particle.forest_edge_fog/assets/textures/yuan.png +0 -0
  193. package/packages/env.particle.forest_edge_fog/effect.json +0 -854
  194. package/packages/env.particle.forest_edge_fog/media/preview.gif +0 -0
  195. package/packages/env.particle.forest_edge_fog/media/preview.mp4 +0 -0
  196. package/packages/env.particle.forest_edge_fog/media/preview.webm +0 -0
  197. package/packages/env.particle.forest_edge_fog/media/thumbnail.png +0 -0
  198. package/packages/env.particle.forest_edge_fog/metadata/description.json +0 -148
  199. package/packages/env.particle.forest_edge_fog/provenance/03-effect.original.json +0 -827
  200. package/packages/env.particle.forest_edge_fog/provenance/03-normalized-vfx-to-babylon-report.json +0 -196
  201. package/packages/env.particle.forest_edge_fog/provenance/04-preview-overrides.json +0 -432
  202. package/packages/env.particle.forest_edge_fog/provenance/04-preview-tuning-report.json +0 -28
  203. package/packages/env.particle.forest_edge_fog/provenance/asset-map.json +0 -124
  204. package/packages/env.particle.forest_edge_fog/provenance/lineage.json +0 -41
  205. package/packages/generation.ts +0 -14
  206. package/packages/index.ts +0 -14
  207. package/packages/legacy-particle-runtime.ts +0 -113
  208. package/packages/manifestRuntimePackage.ts +0 -519
  209. package/packages/registry.ts +0 -85
  210. package/packages/rendering.ts +0 -13
  211. package/packages/resource.particle.viscous_oil_suction/assets/runtime/top_disk_suction/particleEmitter.v1.js +0 -424
  212. package/packages/resource.particle.viscous_oil_suction/assets/textures/Glow ad.png +0 -0
  213. package/packages/resource.particle.viscous_oil_suction/effect.json +0 -1254
  214. package/packages/resource.particle.viscous_oil_suction/media/preview.gif +0 -0
  215. package/packages/resource.particle.viscous_oil_suction/media/preview.mp4 +0 -0
  216. package/packages/resource.particle.viscous_oil_suction/media/preview.webm +0 -0
  217. package/packages/resource.particle.viscous_oil_suction/media/thumbnail.png +0 -0
  218. package/packages/resource.particle.viscous_oil_suction/metadata/description.json +0 -122
  219. package/packages/resource.particle.viscous_oil_suction/provenance/03-effect.original.json +0 -1051
  220. package/packages/resource.particle.viscous_oil_suction/provenance/03-normalized-vfx-to-babylon-report.json +0 -200
  221. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-overrides.json +0 -581
  222. package/packages/resource.particle.viscous_oil_suction/provenance/04-preview-tuning-report.json +0 -28
  223. package/packages/resource.particle.viscous_oil_suction/provenance/asset-map.json +0 -111
  224. package/packages/resource.particle.viscous_oil_suction/provenance/lineage.json +0 -45
  225. package/packages/types.ts +0 -195
  226. package/tooling/check-dist-runtime.mjs +0 -166
  227. package/tooling/generate-index.mjs +0 -55
  228. package/tooling/test-guardrails.mjs +0 -157
  229. package/tooling/validate-boundary.mjs +0 -92
  230. package/tooling/validate-effects.mjs +0 -304
  231. package/tooling/validate.mjs +0 -53
@@ -1,412 +0,0 @@
1
- {
2
- "schemaVersion": "vfx-effect-package/1.0",
3
- "id": "build.particle.tree_chop_dust_burst",
4
- "name": {
5
- "zh": "树倒地的烟尘",
6
- "en": "Tree Fall Dust Burst"
7
- },
8
- "source": {
9
- "engine": "babylon",
10
- "engineVersion": "8.56.2",
11
- "projectPath": "D:/project/loy_babylon_particle_test",
12
- "rootAsset": "src/effects/treeChopDustBurst.ts",
13
- "sourceId": "loy-babylon-particle-test/treeChopDustBurst",
14
- "extractedAt": "2026-06-01T00:00:00.000Z",
15
- "extractorVersion": "manual-babylon-particle-package/0.1.0",
16
- "canonicalSource": "local",
17
- "sourceArchivePrefix": "gs://fps-vfx-library/packages/build.particle.tree_chop_dust_burst/source",
18
- "legacyId": null,
19
- "previousIds": []
20
- },
21
- "assets": {
22
- "textures": [
23
- {
24
- "kind": "texture",
25
- "id": "tree_chop_dust_burst_dust",
26
- "packagePath": "assets/textures/tree_chop_dust_burst_dust.png",
27
- "sourcePath": "D:/project/loy_babylon_particle_test/public/textures/particles/tree-chop-dust-burst-dust.png",
28
- "sourceId": "generated-soft-dust-alpha",
29
- "width": 128,
30
- "height": 128
31
- }
32
- ],
33
- "materials": [],
34
- "meshes": [],
35
- "shaders": [],
36
- "sounds": [],
37
- "scripts": [
38
- {
39
- "kind": "script",
40
- "id": "particle_emitter_v1",
41
- "packagePath": "assets/runtime/particleEmitter.v1.js",
42
- "runtimeId": "particleEmitter/v1",
43
- "engine": "babylon",
44
- "moduleFormat": "esm",
45
- "exports": [
46
- "createParticleEmitterRuntime",
47
- "runtimeContract"
48
- ],
49
- "mimeType": "text/javascript"
50
- }
51
- ],
52
- "raw": [
53
- {
54
- "kind": "raw",
55
- "id": "02-normalized-vfx",
56
- "packagePath": "source/02-normalized-vfx.json",
57
- "sourcePath": "D:/project/loy_babylon_particle_test/out_particle/build.particle.tree_chop_dust_burst/source/02-normalized-vfx.json"
58
- },
59
- {
60
- "kind": "raw",
61
- "id": "01-source-dump",
62
- "packagePath": "source/01-source-dump.json",
63
- "sourcePath": "D:/project/loy_babylon_particle_test/out_particle/build.particle.tree_chop_dust_burst/source/01-source-dump.json"
64
- },
65
- {
66
- "kind": "raw",
67
- "id": "tree_chop_dust_burst_source_ts",
68
- "packagePath": "source/src/effects/treeChopDustBurst.ts",
69
- "sourcePath": "D:/project/loy_babylon_particle_test/src/effects/treeChopDustBurst.ts"
70
- },
71
- {
72
- "kind": "raw",
73
- "id": "tree_chop_dust_burst_dust_texture_source",
74
- "packagePath": "source/textures/tree-chop-dust-burst-dust.png",
75
- "sourcePath": "D:/project/loy_babylon_particle_test/public/textures/particles/tree-chop-dust-burst-dust.png"
76
- }
77
- ]
78
- },
79
- "emitters": [
80
- {
81
- "name": "tree_chop_dust_burst_dust",
82
- "sourceNodeName": "tree_chop_dust_burst_dust",
83
- "enabled": true,
84
- "deterministic": true,
85
- "blendMode": "STANDARD",
86
- "particleTexturePath": "assets/textures/tree_chop_dust_burst_dust.png",
87
- "capacity": 108,
88
- "manualEmitCount": 36,
89
- "emitRate": 0,
90
- "effectScale": 1,
91
- "minSize": 0.24,
92
- "maxSize": 0.24,
93
- "minLifeTime": 0.58,
94
- "maxLifeTime": 0.58,
95
- "minEmitPower": 1.225,
96
- "maxEmitPower": 1.225,
97
- "updateSpeed": 0.016666666666666666,
98
- "gravity": {
99
- "x": 0,
100
- "y": -0.85,
101
- "z": 0
102
- },
103
- "shape": {
104
- "sourceType": "Box",
105
- "sourceEnum": 0,
106
- "radius": 1,
107
- "angle": 0,
108
- "type": "Box",
109
- "direction1": {
110
- "x": -1.548,
111
- "y": 0.1,
112
- "z": -0.612
113
- },
114
- "direction2": {
115
- "x": 0.108,
116
- "y": 0.86,
117
- "z": 0.612
118
- },
119
- "minEmitBox": {
120
- "x": -0.1,
121
- "y": -0.03,
122
- "z": -0.12
123
- },
124
- "maxEmitBox": {
125
- "x": 0.12,
126
- "y": 0.1,
127
- "z": 0.12
128
- },
129
- "radiusRange": 0
130
- },
131
- "spriteSheet": {
132
- "enabled": false
133
- },
134
- "alphaKeys": [
135
- {
136
- "time": 0,
137
- "alpha": 0
138
- },
139
- {
140
- "time": 0.08,
141
- "alpha": 0.68
142
- },
143
- {
144
- "time": 0.42,
145
- "alpha": 0.42
146
- },
147
- {
148
- "time": 1,
149
- "alpha": 0
150
- }
151
- ],
152
- "colorKeys": [
153
- {
154
- "time": 0,
155
- "color": {
156
- "r": 0.8,
157
- "g": 0.65,
158
- "b": 0.45,
159
- "a": 0.72
160
- }
161
- },
162
- {
163
- "time": 1,
164
- "color": {
165
- "r": 0.5,
166
- "g": 0.45,
167
- "b": 0.38,
168
- "a": 0
169
- }
170
- }
171
- ],
172
- "sizeKeys": [
173
- {
174
- "time": 0,
175
- "size": 1.8125
176
- },
177
- {
178
- "time": 0.35,
179
- "size": 5
180
- },
181
- {
182
- "time": 1,
183
- "size": 8.125
184
- }
185
- ],
186
- "renderColor": {
187
- "color": {
188
- "r": 0.8,
189
- "g": 0.65,
190
- "b": 0.45,
191
- "a": 0.72
192
- },
193
- "colorIntensity": 1,
194
- "alphaIntensity": 1
195
- },
196
- "minInitialRotation": 0,
197
- "maxInitialRotation": 0,
198
- "minAngularSpeed": 0,
199
- "maxAngularSpeed": 0,
200
- "source": {
201
- "simulationSpace": 1,
202
- "renderMode": 0,
203
- "alignSpace": 2,
204
- "normalizedVfxEmitterId": "tree_chop_dust_burst_dust"
205
- },
206
- "sourceMap": null,
207
- "runtime": {
208
- "stopAfterSeconds": 1.1,
209
- "disposeOnComplete": true
210
- }
211
- }
212
- ],
213
- "runtime": {
214
- "driver": "particle",
215
- "defaultMesh": null,
216
- "defaultOffset": {
217
- "x": 0,
218
- "y": 0,
219
- "z": 0
220
- },
221
- "start": [
222
- "Instantiate Babylon runtime for tree_chop_dust_burst"
223
- ],
224
- "update": [
225
- "Apply Babylon tunable parameter overrides"
226
- ],
227
- "stop": [
228
- "Stop and dispose runtime resources"
229
- ],
230
- "adapters": [
231
- {
232
- "id": "particleEmitter/v1",
233
- "engine": "babylon",
234
- "entry": "assets/runtime/particleEmitter.v1.js",
235
- "moduleFormat": "esm",
236
- "exports": [
237
- "createParticleEmitterRuntime",
238
- "runtimeContract"
239
- ]
240
- }
241
- ]
242
- },
243
- "tunableParams": [
244
- {
245
- "key": "tree_chop_dust_burst_dust.manualEmitCount",
246
- "labelZh": "烟尘数量",
247
- "type": "number",
248
- "default": 36,
249
- "min": 1,
250
- "max": 120,
251
- "step": 1,
252
- "target": {
253
- "emitter": "tree_chop_dust_burst_dust",
254
- "property": "manualEmitCount",
255
- "operator": "set"
256
- }
257
- },
258
- {
259
- "key": "tree_chop_dust_burst_dust.renderColor.color",
260
- "labelZh": "烟尘颜色",
261
- "type": "color",
262
- "default": "#caa473",
263
- "target": {
264
- "emitter": "tree_chop_dust_burst_dust",
265
- "property": "renderColor.color",
266
- "operator": "set"
267
- }
268
- },
269
- {
270
- "key": "tree_chop_dust_burst_dust.effectScale",
271
- "labelZh": "整体缩放",
272
- "type": "number",
273
- "default": 1,
274
- "min": 0.1,
275
- "max": 8,
276
- "step": 0.1,
277
- "target": {
278
- "emitter": "tree_chop_dust_burst_dust",
279
- "property": "effectScale",
280
- "operator": "set"
281
- }
282
- },
283
- {
284
- "key": "tree_chop_dust_burst_dust.minLifeTime",
285
- "labelZh": "烟尘最短生命周期",
286
- "type": "number",
287
- "default": 0.34,
288
- "min": 0.05,
289
- "max": 3,
290
- "step": 0.01,
291
- "unit": "s",
292
- "target": {
293
- "emitter": "tree_chop_dust_burst_dust",
294
- "property": "minLifeTime",
295
- "operator": "set"
296
- }
297
- },
298
- {
299
- "key": "tree_chop_dust_burst_dust.maxLifeTime",
300
- "labelZh": "烟尘最长生命周期",
301
- "type": "number",
302
- "default": 0.82,
303
- "min": 0.05,
304
- "max": 3,
305
- "step": 0.01,
306
- "unit": "s",
307
- "target": {
308
- "emitter": "tree_chop_dust_burst_dust",
309
- "property": "maxLifeTime",
310
- "operator": "set"
311
- }
312
- },
313
- {
314
- "key": "tree_chop_dust_burst_dust.minEmitPower",
315
- "labelZh": "烟尘最低速度",
316
- "type": "number",
317
- "default": 0.7,
318
- "min": 0,
319
- "max": 12,
320
- "step": 0.01,
321
- "target": {
322
- "emitter": "tree_chop_dust_burst_dust",
323
- "property": "minEmitPower",
324
- "operator": "set"
325
- }
326
- },
327
- {
328
- "key": "tree_chop_dust_burst_dust.maxEmitPower",
329
- "labelZh": "烟尘最高速度",
330
- "type": "number",
331
- "default": 1.75,
332
- "min": 0,
333
- "max": 16,
334
- "step": 0.01,
335
- "target": {
336
- "emitter": "tree_chop_dust_burst_dust",
337
- "property": "maxEmitPower",
338
- "operator": "set"
339
- }
340
- }
341
- ],
342
- "babylon": {
343
- "driver": "particle",
344
- "entryFile": "apps/vfx_asset_library/frontend/src/runtime/drivers/particleDriver.ts",
345
- "previewConfig": {
346
- "textureUrl": "assets/textures/tree_chop_dust_burst_dust.png",
347
- "emitterCount": 1,
348
- "effectFile": "tree_chop_dust_burst.json",
349
- "normalizedVfx": "source/02-normalized-vfx.json"
350
- }
351
- },
352
- "review": {
353
- "status": "tweaked",
354
- "artistNotes": [
355
- "Built from the local Babylon tree chop dust prototype.",
356
- "Uses a soft smoke puff layer for casual UA game feedback."
357
- ],
358
- "approvedBy": null,
359
- "approvedAt": null,
360
- "history": [
361
- {
362
- "at": "2026-06-01T00:00:00.000Z",
363
- "from": "prototype",
364
- "to": "tweaked",
365
- "note": "Packaged for fps-vfx-library."
366
- }
367
- ]
368
- },
369
- "recording": {
370
- "provider": "local-screenshot",
371
- "recordedAt": "2026-06-01T00:00:00.000Z",
372
- "mimeType": "image/png",
373
- "durationSec": 1.1,
374
- "fps": 0,
375
- "media": {
376
- "previewVideo": null,
377
- "previewWebm": null,
378
- "previewMp4": null,
379
- "previewGif": null,
380
- "thumbnail": "media/thumbnail.png",
381
- "contactSheet": "media/contact-sheet.png",
382
- "gcsUri": null
383
- }
384
- },
385
- "aiDescription": null,
386
- "search": {
387
- "tags": [
388
- "babylon",
389
- "particle",
390
- "tree",
391
- "chop",
392
- "dust",
393
- "casual"
394
- ],
395
- "descriptionZh": "砍树命中时从命中点贴地喷出的简化烟尘团,带少量木屑飞溅,适合买量小游戏里的资源采集反馈。",
396
- "descriptionEn": "A simple ground-hugging dust puff for tree falling impact feedback in casual UA games.",
397
- "useCases": [
398
- "tree falling impact",
399
- "tree chopping dust feedback",
400
- "casual resource collection"
401
- ],
402
- "negativeUseCases": [
403
- "large explosion",
404
- "continuous smoke plume",
405
- "realistic cinematic dust"
406
- ]
407
- },
408
- "legacyIds": [],
409
- "gcsPrefix": "gs://fps-vfx-library/packages/build.particle.tree_chop_dust_burst",
410
- "sourceArchivePrefix": "gs://fps-vfx-library/packages/build.particle.tree_chop_dust_burst/source",
411
- "fullProvenancePrefix": "gs://fps-vfx-library/packages/build.particle.tree_chop_dust_burst/provenance"
412
- }
@@ -1,153 +0,0 @@
1
- // UFO 丝束尾焰(移植自 babylon-laser loadShip 尾焰, 特效#13)。
2
- // 双贴图分工范式:flame_spike(刺形 alpha)走 opacityTexture(V-CLAMP 静止保轮廓);
3
- // flame_flow(蓝亮纹)走 emissiveTexture(V-WRAP,vOffset 递减让亮纹从根部向尾端流)。
4
- // 双层 NO_CAP 锥筒共享 StandardMaterial,ALPHA_ADD + 反向自转 + x/z 脉冲。沿 root 局部 -Z 喷出。
5
- import { TransformNode } from '@babylonjs/core/Meshes/transformNode';
6
- import { Mesh } from '@babylonjs/core/Meshes/mesh';
7
- import { CreateCylinder } from '@babylonjs/core/Meshes/Builders/cylinderBuilder';
8
- import { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';
9
- import { Texture } from '@babylonjs/core/Materials/Textures/texture';
10
- import { Color3 } from '@babylonjs/core/Maths/math.color';
11
- import { Constants } from '@babylonjs/core/Engines/constants';
12
- import type { Scene } from '@babylonjs/core/scene';
13
- import type { AbstractMesh } from '@babylonjs/core/Meshes/abstractMesh';
14
- import type { VfxColorValue, VfxEffectPackage, VfxParamValues } from '../../types';
15
- import flameSpikeUrl from './assets/textures/flame_spike.webp?url';
16
- import flameFlowUrl from './assets/textures/flame_flow.webp?url';
17
- import { LIFETIME_DEBUG_PARAMS, LIFETIME_DEFAULTS, scheduleLifetime } from '../space-shared';
18
-
19
- interface UfoThreadFlameParams extends VfxParamValues {
20
- lifetimeMode: string; lifetime: number;
21
- flameColor: VfxColorValue;
22
- flameLen: number;
23
- flameWidth: number;
24
- flameSpeed: number;
25
- flamePulse: number;
26
- innerW: number; innerLen: number; innerOff: number;
27
- outerW: number; outerLen: number; outerOff: number;
28
- posX: number; posY: number; posZ: number;
29
- }
30
-
31
- const DEFAULT_PARAMS: UfoThreadFlameParams = {
32
- ...LIFETIME_DEFAULTS,
33
- flameColor: { r: 0.102, g: 0.427, b: 1.0 }, // #1a6dff
34
- flameLen: 1.0, flameWidth: 1.0, flameSpeed: 1.0, flamePulse: 0.025,
35
- innerW: 1.0, innerLen: 2.9, innerOff: 0,
36
- outerW: 0.87, outerLen: 2.0, outerOff: 0.05,
37
- posX: -0.02, posY: 0, posZ: -1.72,
38
- };
39
-
40
- // 双层锥筒基准直径(根/尾):里层箍中央喷口、外层略小于尾盘外缘
41
- const CONE_BASE: Array<{ dB: number; dT: number }> = [{ dB: 1.2, dT: 1.12 }, { dB: 2.5, dT: 2.3 }];
42
-
43
- function colorVec(c: VfxColorValue): Color3 { return new Color3(c.r, c.g, c.b); }
44
- function excludeFromGlow(scene: Scene, mesh: AbstractMesh): void {
45
- for (const layer of scene.effectLayers ?? []) {
46
- const add = (layer as unknown as { addExcludedMesh?: (m: AbstractMesh) => void }).addExcludedMesh;
47
- if (typeof add === 'function') add.call(layer, mesh);
48
- }
49
- }
50
-
51
- export const ufoThreadFlameEffectPackage: VfxEffectPackage<UfoThreadFlameParams> = {
52
- id: 'ufo-thread-flame',
53
- nameZh: 'UFO丝束尾焰',
54
- placement: 'socket',
55
- debugAnchor: 'player',
56
- defaultParams: DEFAULT_PARAMS,
57
- debugParams: [
58
- ...LIFETIME_DEBUG_PARAMS,
59
- { key: 'flameColor', label: '尾焰颜色', kind: 'color' },
60
- { key: 'flameLen', label: '长度倍率', kind: 'scale', min: 0.2, max: 4, step: 0.01 },
61
- { key: 'flameWidth', label: '宽度倍率', kind: 'scale', min: 0.3, max: 3, step: 0.01 },
62
- { key: 'flameSpeed', label: '自转/流速', kind: 'number', min: 0, max: 6, step: 0.05 },
63
- { key: 'flamePulse', label: '脉冲幅度', kind: 'number', min: 0, max: 0.3, step: 0.005 },
64
- { key: 'innerW', label: '里圈口径', kind: 'number', min: 0.2, max: 4, step: 0.01 },
65
- { key: 'innerLen', label: '里圈长度', kind: 'number', min: 0.3, max: 8, step: 0.05 },
66
- { key: 'innerOff', label: '里圈轴向偏移', kind: 'number', min: -2, max: 2, step: 0.01 },
67
- { key: 'outerW', label: '外圈口径', kind: 'number', min: 0.2, max: 4, step: 0.01 },
68
- { key: 'outerLen', label: '外圈长度', kind: 'number', min: 0.3, max: 8, step: 0.05 },
69
- { key: 'outerOff', label: '外圈轴向偏移', kind: 'number', min: -2, max: 2, step: 0.01 },
70
- { key: 'posX', label: '挂点X', kind: 'number', min: -2, max: 2, step: 0.01 },
71
- { key: 'posY', label: '挂点Y', kind: 'number', min: -2, max: 2, step: 0.01 },
72
- { key: 'posZ', label: '挂点Z(机尾后)', kind: 'number', min: -5, max: 2, step: 0.01 },
73
- ],
74
-
75
- create({ scene, root, position, rotationY, params }) {
76
- root.position.copyFrom(position);
77
- root.rotation.y = rotationY;
78
-
79
- // 形状贴图:刺形 alpha,V-CLAMP 静止保轮廓
80
- const spikeTex = new Texture(flameSpikeUrl, scene);
81
- spikeTex.hasAlpha = true;
82
- spikeTex.wrapU = Texture.WRAP_ADDRESSMODE;
83
- spikeTex.wrapV = Texture.CLAMP_ADDRESSMODE;
84
- spikeTex.uScale = 1; spikeTex.vScale = 1; spikeTex.vOffset = 0;
85
- // 流动贴图:蓝亮纹,V-WRAP 可滚;level 压暗白纹让蓝基底主导(ADD 下白不受 emissiveColor 控)
86
- const flowTex = new Texture(flameFlowUrl, scene);
87
- flowTex.wrapU = Texture.WRAP_ADDRESSMODE;
88
- flowTex.wrapV = Texture.WRAP_ADDRESSMODE;
89
- flowTex.level = 0.62;
90
-
91
- const mat = new StandardMaterial('vfx_ufo_flameMat', scene);
92
- mat.emissiveTexture = flowTex;
93
- mat.opacityTexture = spikeTex;
94
- mat.emissiveColor = colorVec(params.flameColor);
95
- mat.disableLighting = true;
96
- mat.backFaceCulling = false;
97
- mat.disableDepthWrite = true;
98
- mat.alphaMode = Constants.ALPHA_ADD;
99
- mat.alpha = 0.78;
100
-
101
- const flameRoot = new TransformNode('vfx_ufo_flameRoot', scene);
102
- flameRoot.parent = root;
103
- flameRoot.rotation.x = -Math.PI / 2; // 筒轴 +Y → 机尾后方 -Z
104
-
105
- const cones: Mesh[] = [];
106
- for (const { dB, dT } of CONE_BASE) {
107
- const c = CreateCylinder('vfx_ufo_flameTube', { diameterBottom: dB, diameterTop: dT, height: 1, tessellation: 36, cap: Mesh.NO_CAP }, scene);
108
- c.isPickable = false;
109
- c.parent = flameRoot;
110
- c.material = mat;
111
- excludeFromGlow(scene, c);
112
- cones.push(c);
113
- }
114
-
115
- function applyShape(): void {
116
- cones.forEach((c, i) => {
117
- const inner = i === 0;
118
- const len = (inner ? params.innerLen : params.outerLen) * params.flameLen;
119
- const off = inner ? params.innerOff : params.outerOff;
120
- const w = inner ? params.innerW : params.outerW;
121
- c.scaling.y = len;
122
- c.scaling.x = c.scaling.z = w;
123
- c.position.y = len / 2 - 0.05 + off; // 根部微嵌喷口消缝
124
- });
125
- flameRoot.position.set(params.posX, params.posY, params.posZ);
126
- }
127
- applyShape();
128
-
129
- let t = 0;
130
- const observer = scene.onBeforeRenderObservable.add(() => {
131
- const dt = Math.min(scene.getEngine().getDeltaTime() / 1000, 0.05);
132
- t += dt;
133
- cones.forEach((c, i) => { c.rotation.y += (i ? -2.0 : 1.5) * params.flameSpeed * dt; });
134
- flowTex.vOffset -= 1.6 * params.flameSpeed * dt; // 亮纹从根部向尾端推进
135
- const ps = 1 + Math.sin(t * 14) * params.flamePulse;
136
- flameRoot.scaling.set(ps * params.flameWidth, 1, ps * params.flameWidth);
137
- });
138
-
139
- let disposed = false;
140
- let ltTimer = 0;
141
- const dispose = (): void => {
142
- if (disposed) return; disposed = true;
143
- if (ltTimer) window.clearTimeout(ltTimer);
144
- scene.onBeforeRenderObservable.remove(observer);
145
- for (const c of cones) c.dispose();
146
- flameRoot.dispose();
147
- mat.dispose(); spikeTex.dispose(); flowTex.dispose();
148
- root.dispose();
149
- };
150
- ltTimer = scheduleLifetime(params, dispose);
151
- return { root, dispose };
152
- },
153
- };
@@ -1,8 +0,0 @@
1
- {
2
- "id": "vehicle-exhaust-smoke",
3
- "nameZh": "小车尾气",
4
- "source": "runtime-generated",
5
- "assets": [
6
- "assets/textures/vehicle_exhaust_smoke_atlas.png"
7
- ]
8
- }