@vgai/engine 0.5.0 → 0.5.2

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 (538) hide show
  1. package/package.json +1 -1
  2. package/schemas/engine-capabilities.json +4 -4
  3. package/schemas/vgai-game.schema.json +2 -2
  4. package/src/adapter/authoring.ts +42 -0
  5. package/src/adapter/index.ts +3 -0
  6. package/src/adapter/ingest/overlay-apply.ts +50 -6
  7. package/src/adapter/ingest/scene-capture.ts +51 -2
  8. package/src/adapter/vgai-scene-game-adapter.ts +24 -0
  9. package/src/manifest/schema.ts +7 -3
  10. package/src/runtime/create-runtime.ts +97 -0
  11. package/src/runtime/game.ts +11 -1
  12. package/src/scene/asset-ref-check.ts +1 -1
  13. package/src/scene/scene-loader.ts +2 -2
  14. package/src/scene/user-data.ts +18 -0
  15. package/src/world3d-react/behavior.tsx +19 -11
  16. package/src/world3d-react/r3f-adapter.tsx +8 -0
  17. package/dist/adapter/adapter-surface.d.ts +0 -30
  18. package/dist/adapter/adapter-surface.d.ts.map +0 -1
  19. package/dist/adapter/adapter-surface.js +0 -18
  20. package/dist/adapter/authoring.d.ts +0 -461
  21. package/dist/adapter/authoring.d.ts.map +0 -1
  22. package/dist/adapter/authoring.js +0 -22
  23. package/dist/adapter/colyseus-networking-adapter.d.ts +0 -43
  24. package/dist/adapter/colyseus-networking-adapter.d.ts.map +0 -1
  25. package/dist/adapter/colyseus-networking-adapter.js +0 -38
  26. package/dist/adapter/first-party-systems.d.ts +0 -38
  27. package/dist/adapter/first-party-systems.d.ts.map +0 -1
  28. package/dist/adapter/first-party-systems.js +0 -77
  29. package/dist/adapter/game-adapter.d.ts +0 -133
  30. package/dist/adapter/game-adapter.d.ts.map +0 -1
  31. package/dist/adapter/game-adapter.js +0 -10
  32. package/dist/adapter/host-context.d.ts +0 -71
  33. package/dist/adapter/host-context.d.ts.map +0 -1
  34. package/dist/adapter/host-context.js +0 -16
  35. package/dist/adapter/index.d.ts +0 -22
  36. package/dist/adapter/index.d.ts.map +0 -1
  37. package/dist/adapter/index.js +0 -15
  38. package/dist/adapter/ingest/game-contract.d.ts +0 -53
  39. package/dist/adapter/ingest/game-contract.d.ts.map +0 -1
  40. package/dist/adapter/ingest/game-contract.js +0 -30
  41. package/dist/adapter/ingest/overlay-applier.d.ts +0 -118
  42. package/dist/adapter/ingest/overlay-applier.d.ts.map +0 -1
  43. package/dist/adapter/ingest/overlay-applier.js +0 -132
  44. package/dist/adapter/ingest/overlay-apply.d.ts +0 -60
  45. package/dist/adapter/ingest/overlay-apply.d.ts.map +0 -1
  46. package/dist/adapter/ingest/overlay-apply.js +0 -101
  47. package/dist/adapter/ingest/overlay-file.d.ts +0 -79
  48. package/dist/adapter/ingest/overlay-file.d.ts.map +0 -1
  49. package/dist/adapter/ingest/overlay-file.js +0 -66
  50. package/dist/adapter/ingest/overlay-report.d.ts +0 -113
  51. package/dist/adapter/ingest/overlay-report.d.ts.map +0 -1
  52. package/dist/adapter/ingest/overlay-report.js +0 -103
  53. package/dist/adapter/ingest/scene-capture.d.ts +0 -97
  54. package/dist/adapter/ingest/scene-capture.d.ts.map +0 -1
  55. package/dist/adapter/ingest/scene-capture.js +0 -248
  56. package/dist/adapter/ingest/upstream-pin.d.ts +0 -47
  57. package/dist/adapter/ingest/upstream-pin.d.ts.map +0 -1
  58. package/dist/adapter/ingest/upstream-pin.js +0 -50
  59. package/dist/adapter/loop-gate-report.d.ts +0 -34
  60. package/dist/adapter/loop-gate-report.d.ts.map +0 -1
  61. package/dist/adapter/loop-gate-report.js +0 -37
  62. package/dist/adapter/rapier-physics-adapter.d.ts +0 -12
  63. package/dist/adapter/rapier-physics-adapter.d.ts.map +0 -1
  64. package/dist/adapter/rapier-physics-adapter.js +0 -46
  65. package/dist/adapter/system-adapter.d.ts +0 -206
  66. package/dist/adapter/system-adapter.d.ts.map +0 -1
  67. package/dist/adapter/system-adapter.js +0 -13
  68. package/dist/adapter/transform.d.ts +0 -18
  69. package/dist/adapter/transform.d.ts.map +0 -1
  70. package/dist/adapter/transform.js +0 -1
  71. package/dist/adapter/vgai-scene-game-adapter.d.ts +0 -108
  72. package/dist/adapter/vgai-scene-game-adapter.d.ts.map +0 -1
  73. package/dist/adapter/vgai-scene-game-adapter.js +0 -762
  74. package/dist/ai/navigation.d.ts +0 -64
  75. package/dist/ai/navigation.d.ts.map +0 -1
  76. package/dist/ai/navigation.js +0 -133
  77. package/dist/animation/anim-graph-types.d.ts +0 -25
  78. package/dist/animation/anim-graph-types.d.ts.map +0 -1
  79. package/dist/animation/anim-graph-types.js +0 -1
  80. package/dist/animation/animation-clock.d.ts +0 -213
  81. package/dist/animation/animation-clock.d.ts.map +0 -1
  82. package/dist/animation/animation-clock.js +0 -301
  83. package/dist/animation/blend-node.d.ts +0 -22
  84. package/dist/animation/blend-node.d.ts.map +0 -1
  85. package/dist/animation/blend-node.js +0 -97
  86. package/dist/animation/camera-ownership.d.ts +0 -250
  87. package/dist/animation/camera-ownership.d.ts.map +0 -1
  88. package/dist/animation/camera-ownership.js +0 -169
  89. package/dist/animation/cinematic-cues.d.ts +0 -200
  90. package/dist/animation/cinematic-cues.d.ts.map +0 -1
  91. package/dist/animation/cinematic-cues.js +0 -213
  92. package/dist/animation/clip-map.d.ts +0 -12
  93. package/dist/animation/clip-map.d.ts.map +0 -1
  94. package/dist/animation/clip-map.js +0 -37
  95. package/dist/animation/gsap-registration.d.ts +0 -119
  96. package/dist/animation/gsap-registration.d.ts.map +0 -1
  97. package/dist/animation/gsap-registration.js +0 -92
  98. package/dist/animation/theatre-clock-binding.d.ts +0 -89
  99. package/dist/animation/theatre-clock-binding.d.ts.map +0 -1
  100. package/dist/animation/theatre-clock-binding.js +0 -29
  101. package/dist/animation/theatre-director.d.ts +0 -242
  102. package/dist/animation/theatre-director.d.ts.map +0 -1
  103. package/dist/animation/theatre-director.js +0 -235
  104. package/dist/animation/theatre-object-binding.d.ts +0 -305
  105. package/dist/animation/theatre-object-binding.d.ts.map +0 -1
  106. package/dist/animation/theatre-object-binding.js +0 -351
  107. package/dist/animation/xstate-animation-binding.d.ts +0 -56
  108. package/dist/animation/xstate-animation-binding.d.ts.map +0 -1
  109. package/dist/animation/xstate-animation-binding.js +0 -331
  110. package/dist/animation/xstate-animation-meta.d.ts +0 -266
  111. package/dist/animation/xstate-animation-meta.d.ts.map +0 -1
  112. package/dist/animation/xstate-animation-meta.js +0 -252
  113. package/dist/assets.d.ts +0 -26
  114. package/dist/assets.d.ts.map +0 -1
  115. package/dist/assets.js +0 -55
  116. package/dist/audio/index.d.ts +0 -4
  117. package/dist/audio/index.d.ts.map +0 -1
  118. package/dist/audio/index.js +0 -24
  119. package/dist/audio/tone-clock-binding.d.ts +0 -75
  120. package/dist/audio/tone-clock-binding.d.ts.map +0 -1
  121. package/dist/audio/tone-clock-binding.js +0 -29
  122. package/dist/audio/tone-context.d.ts +0 -114
  123. package/dist/audio/tone-context.d.ts.map +0 -1
  124. package/dist/audio/tone-context.js +0 -39
  125. package/dist/audio/tone-offline-render.d.ts +0 -90
  126. package/dist/audio/tone-offline-render.d.ts.map +0 -1
  127. package/dist/audio/tone-offline-render.js +0 -56
  128. package/dist/audio/wav-encode.d.ts +0 -38
  129. package/dist/audio/wav-encode.d.ts.map +0 -1
  130. package/dist/audio/wav-encode.js +0 -97
  131. package/dist/character/cloth-sim.d.ts +0 -179
  132. package/dist/character/cloth-sim.d.ts.map +0 -1
  133. package/dist/character/cloth-sim.js +0 -334
  134. package/dist/character/spring-chain.d.ts +0 -135
  135. package/dist/character/spring-chain.d.ts.map +0 -1
  136. package/dist/character/spring-chain.js +0 -165
  137. package/dist/core/game-loop.d.ts +0 -42
  138. package/dist/core/game-loop.d.ts.map +0 -1
  139. package/dist/core/game-loop.js +0 -167
  140. package/dist/core/seeded-random.d.ts +0 -69
  141. package/dist/core/seeded-random.d.ts.map +0 -1
  142. package/dist/core/seeded-random.js +0 -121
  143. package/dist/core/system-runner.d.ts +0 -120
  144. package/dist/core/system-runner.d.ts.map +0 -1
  145. package/dist/core/system-runner.js +0 -297
  146. package/dist/core/types.d.ts +0 -92
  147. package/dist/core/types.d.ts.map +0 -1
  148. package/dist/core/types.js +0 -25
  149. package/dist/data/data-asset.d.ts +0 -101
  150. package/dist/data/data-asset.d.ts.map +0 -1
  151. package/dist/data/data-asset.js +0 -122
  152. package/dist/data/data-check-core.d.ts +0 -110
  153. package/dist/data/data-check-core.d.ts.map +0 -1
  154. package/dist/data/data-check-core.js +0 -178
  155. package/dist/data/data-ref.d.ts +0 -79
  156. package/dist/data/data-ref.d.ts.map +0 -1
  157. package/dist/data/data-ref.js +0 -130
  158. package/dist/data/vite-plugin-data.d.ts +0 -79
  159. package/dist/data/vite-plugin-data.d.ts.map +0 -1
  160. package/dist/data/vite-plugin-data.js +0 -217
  161. package/dist/dev/console-bridge.d.ts +0 -22
  162. package/dist/dev/console-bridge.d.ts.map +0 -1
  163. package/dist/dev/console-bridge.js +0 -71
  164. package/dist/dev/debug-draw.d.ts +0 -24
  165. package/dist/dev/debug-draw.d.ts.map +0 -1
  166. package/dist/dev/debug-draw.js +0 -73
  167. package/dist/dev/logger.d.ts +0 -30
  168. package/dist/dev/logger.d.ts.map +0 -1
  169. package/dist/dev/logger.js +0 -90
  170. package/dist/dev/performance-profiler.d.ts +0 -60
  171. package/dist/dev/performance-profiler.d.ts.map +0 -1
  172. package/dist/dev/performance-profiler.js +0 -181
  173. package/dist/dev/webgl-gpu-timer.d.ts +0 -8
  174. package/dist/dev/webgl-gpu-timer.d.ts.map +0 -1
  175. package/dist/dev/webgl-gpu-timer.js +0 -52
  176. package/dist/ecs/component-manager.d.ts +0 -205
  177. package/dist/ecs/component-manager.d.ts.map +0 -1
  178. package/dist/ecs/component-manager.js +0 -706
  179. package/dist/ecs/game-component.d.ts +0 -146
  180. package/dist/ecs/game-component.d.ts.map +0 -1
  181. package/dist/ecs/game-component.js +0 -141
  182. package/dist/ecs/hmr-swap-report.d.ts +0 -53
  183. package/dist/ecs/hmr-swap-report.d.ts.map +0 -1
  184. package/dist/ecs/hmr-swap-report.js +0 -55
  185. package/dist/humanoid/bake.operation.d.ts +0 -119
  186. package/dist/humanoid/bake.operation.d.ts.map +0 -1
  187. package/dist/humanoid/bake.operation.js +0 -228
  188. package/dist/humanoid/body.d.ts +0 -101
  189. package/dist/humanoid/body.d.ts.map +0 -1
  190. package/dist/humanoid/body.js +0 -530
  191. package/dist/humanoid/clips.d.ts +0 -62
  192. package/dist/humanoid/clips.d.ts.map +0 -1
  193. package/dist/humanoid/clips.js +0 -121
  194. package/dist/humanoid/compose.d.ts +0 -75
  195. package/dist/humanoid/compose.d.ts.map +0 -1
  196. package/dist/humanoid/compose.js +0 -176
  197. package/dist/humanoid/generate.d.ts +0 -92
  198. package/dist/humanoid/generate.d.ts.map +0 -1
  199. package/dist/humanoid/generate.js +0 -124
  200. package/dist/humanoid/index.d.ts +0 -24
  201. package/dist/humanoid/index.d.ts.map +0 -1
  202. package/dist/humanoid/index.js +0 -18
  203. package/dist/humanoid/schema.d.ts +0 -35
  204. package/dist/humanoid/schema.d.ts.map +0 -1
  205. package/dist/humanoid/schema.js +0 -87
  206. package/dist/humanoid/skeleton.d.ts +0 -103
  207. package/dist/humanoid/skeleton.d.ts.map +0 -1
  208. package/dist/humanoid/skeleton.js +0 -289
  209. package/dist/index.d.ts +0 -37
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/index.js +0 -30
  212. package/dist/input/input-manager.d.ts +0 -945
  213. package/dist/input/input-manager.d.ts.map +0 -1
  214. package/dist/input/input-manager.js +0 -2207
  215. package/dist/input/input-types.d.ts +0 -174
  216. package/dist/input/input-types.d.ts.map +0 -1
  217. package/dist/input/input-types.js +0 -1
  218. package/dist/input/prompt-labels.d.ts +0 -21
  219. package/dist/input/prompt-labels.d.ts.map +0 -1
  220. package/dist/input/prompt-labels.js +0 -121
  221. package/dist/input/rebind-controller.d.ts +0 -59
  222. package/dist/input/rebind-controller.d.ts.map +0 -1
  223. package/dist/input/rebind-controller.js +0 -85
  224. package/dist/input/schema.d.ts +0 -16
  225. package/dist/input/schema.d.ts.map +0 -1
  226. package/dist/input/schema.js +0 -228
  227. package/dist/loader.d.ts +0 -43
  228. package/dist/loader.d.ts.map +0 -1
  229. package/dist/loader.js +0 -59
  230. package/dist/manifest/index.d.ts +0 -5
  231. package/dist/manifest/index.d.ts.map +0 -1
  232. package/dist/manifest/index.js +0 -8
  233. package/dist/manifest/load-file.d.ts +0 -4
  234. package/dist/manifest/load-file.d.ts.map +0 -1
  235. package/dist/manifest/load-file.js +0 -14
  236. package/dist/manifest/load.d.ts +0 -144
  237. package/dist/manifest/load.d.ts.map +0 -1
  238. package/dist/manifest/load.js +0 -273
  239. package/dist/manifest/schema.d.ts +0 -230
  240. package/dist/manifest/schema.d.ts.map +0 -1
  241. package/dist/manifest/schema.js +0 -394
  242. package/dist/physics/collision-system.d.ts +0 -41
  243. package/dist/physics/collision-system.d.ts.map +0 -1
  244. package/dist/physics/collision-system.js +0 -64
  245. package/dist/physics/physics-registry.d.ts +0 -45
  246. package/dist/physics/physics-registry.d.ts.map +0 -1
  247. package/dist/physics/physics-registry.js +0 -65
  248. package/dist/physics/transform-writer.d.ts +0 -16
  249. package/dist/physics/transform-writer.d.ts.map +0 -1
  250. package/dist/physics/transform-writer.js +0 -38
  251. package/dist/physics/trigger-dispatch.d.ts +0 -24
  252. package/dist/physics/trigger-dispatch.d.ts.map +0 -1
  253. package/dist/physics/trigger-dispatch.js +0 -80
  254. package/dist/react/game-state.d.ts +0 -156
  255. package/dist/react/game-state.d.ts.map +0 -1
  256. package/dist/react/game-state.js +0 -222
  257. package/dist/react/root-adapter.d.ts +0 -11
  258. package/dist/react/root-adapter.d.ts.map +0 -1
  259. package/dist/react/root-adapter.js +0 -41
  260. package/dist/react/unmanaged-root-detector.d.ts +0 -12
  261. package/dist/react/unmanaged-root-detector.d.ts.map +0 -1
  262. package/dist/react/unmanaged-root-detector.js +0 -45
  263. package/dist/react/use-data.d.ts +0 -60
  264. package/dist/react/use-data.d.ts.map +0 -1
  265. package/dist/react/use-data.js +0 -101
  266. package/dist/react/use-selection.d.ts +0 -75
  267. package/dist/react/use-selection.d.ts.map +0 -1
  268. package/dist/react/use-selection.js +0 -90
  269. package/dist/render/auto-batcher.d.ts +0 -34
  270. package/dist/render/auto-batcher.d.ts.map +0 -1
  271. package/dist/render/auto-batcher.js +0 -140
  272. package/dist/render/render-batch-system.d.ts +0 -33
  273. package/dist/render/render-batch-system.d.ts.map +0 -1
  274. package/dist/render/render-batch-system.js +0 -230
  275. package/dist/render/render-features.d.ts +0 -47
  276. package/dist/render/render-features.d.ts.map +0 -1
  277. package/dist/render/render-features.js +0 -105
  278. package/dist/render/render-settings.d.ts +0 -36
  279. package/dist/render/render-settings.d.ts.map +0 -1
  280. package/dist/render/render-settings.js +0 -51
  281. package/dist/runtime/create-runtime.d.ts +0 -249
  282. package/dist/runtime/create-runtime.d.ts.map +0 -1
  283. package/dist/runtime/create-runtime.js +0 -641
  284. package/dist/runtime/debug-bridge.d.ts +0 -257
  285. package/dist/runtime/debug-bridge.d.ts.map +0 -1
  286. package/dist/runtime/debug-bridge.js +0 -224
  287. package/dist/runtime/debug-registry.d.ts +0 -288
  288. package/dist/runtime/debug-registry.d.ts.map +0 -1
  289. package/dist/runtime/debug-registry.js +0 -513
  290. package/dist/runtime/frame-selector-cache.d.ts +0 -41
  291. package/dist/runtime/frame-selector-cache.d.ts.map +0 -1
  292. package/dist/runtime/frame-selector-cache.js +0 -65
  293. package/dist/runtime/game.d.ts +0 -496
  294. package/dist/runtime/game.d.ts.map +0 -1
  295. package/dist/runtime/game.js +0 -741
  296. package/dist/runtime/gameplay-rng-trap.d.ts +0 -48
  297. package/dist/runtime/gameplay-rng-trap.d.ts.map +0 -1
  298. package/dist/runtime/gameplay-rng-trap.js +0 -96
  299. package/dist/runtime/input-router.d.ts +0 -78
  300. package/dist/runtime/input-router.d.ts.map +0 -1
  301. package/dist/runtime/input-router.js +0 -171
  302. package/dist/runtime/mount-game.d.ts +0 -129
  303. package/dist/runtime/mount-game.d.ts.map +0 -1
  304. package/dist/runtime/mount-game.js +0 -152
  305. package/dist/runtime/mount-manifest.d.ts +0 -173
  306. package/dist/runtime/mount-manifest.d.ts.map +0 -1
  307. package/dist/runtime/mount-manifest.js +0 -297
  308. package/dist/runtime/render-audio-control.d.ts +0 -110
  309. package/dist/runtime/render-audio-control.d.ts.map +0 -1
  310. package/dist/runtime/render-audio-control.js +0 -111
  311. package/dist/runtime/render-control.d.ts +0 -291
  312. package/dist/runtime/render-control.d.ts.map +0 -1
  313. package/dist/runtime/render-control.js +0 -264
  314. package/dist/runtime/render-seed.d.ts +0 -57
  315. package/dist/runtime/render-seed.d.ts.map +0 -1
  316. package/dist/runtime/render-seed.js +0 -74
  317. package/dist/runtime/state-bridge.d.ts +0 -61
  318. package/dist/runtime/state-bridge.d.ts.map +0 -1
  319. package/dist/runtime/state-bridge.js +0 -63
  320. package/dist/runtime/types.d.ts +0 -253
  321. package/dist/runtime/types.d.ts.map +0 -1
  322. package/dist/runtime/types.js +0 -1
  323. package/dist/scene/asset-loaders.d.ts +0 -79
  324. package/dist/scene/asset-loaders.d.ts.map +0 -1
  325. package/dist/scene/asset-loaders.js +0 -141
  326. package/dist/scene/asset-paths.d.ts +0 -11
  327. package/dist/scene/asset-paths.d.ts.map +0 -1
  328. package/dist/scene/asset-paths.js +0 -108
  329. package/dist/scene/asset-ref-check.d.ts +0 -88
  330. package/dist/scene/asset-ref-check.d.ts.map +0 -1
  331. package/dist/scene/asset-ref-check.js +0 -214
  332. package/dist/scene/asset-registry.d.ts +0 -38
  333. package/dist/scene/asset-registry.d.ts.map +0 -1
  334. package/dist/scene/asset-registry.js +0 -66
  335. package/dist/scene/collider-dimensions.d.ts +0 -63
  336. package/dist/scene/collider-dimensions.d.ts.map +0 -1
  337. package/dist/scene/collider-dimensions.js +0 -98
  338. package/dist/scene/component-registry.d.ts +0 -22
  339. package/dist/scene/component-registry.d.ts.map +0 -1
  340. package/dist/scene/component-registry.js +0 -37
  341. package/dist/scene/defaults.d.ts +0 -252
  342. package/dist/scene/defaults.d.ts.map +0 -1
  343. package/dist/scene/defaults.js +0 -151
  344. package/dist/scene/geometries/index.d.ts +0 -8
  345. package/dist/scene/geometries/index.d.ts.map +0 -1
  346. package/dist/scene/geometries/index.js +0 -7
  347. package/dist/scene/geometries/terrain.d.ts +0 -2
  348. package/dist/scene/geometries/terrain.d.ts.map +0 -1
  349. package/dist/scene/geometries/terrain.js +0 -37
  350. package/dist/scene/geometry-registry.d.ts +0 -24
  351. package/dist/scene/geometry-registry.d.ts.map +0 -1
  352. package/dist/scene/geometry-registry.js +0 -20
  353. package/dist/scene/instance-registry.d.ts +0 -36
  354. package/dist/scene/instance-registry.d.ts.map +0 -1
  355. package/dist/scene/instance-registry.js +0 -55
  356. package/dist/scene/instancers/grid.d.ts +0 -2
  357. package/dist/scene/instancers/grid.d.ts.map +0 -1
  358. package/dist/scene/instancers/grid.js +0 -36
  359. package/dist/scene/instancers/index.d.ts +0 -8
  360. package/dist/scene/instancers/index.d.ts.map +0 -1
  361. package/dist/scene/instancers/index.js +0 -7
  362. package/dist/scene/light-camera-factory.d.ts +0 -23
  363. package/dist/scene/light-camera-factory.d.ts.map +0 -1
  364. package/dist/scene/light-camera-factory.js +0 -68
  365. package/dist/scene/material-factory.d.ts +0 -17
  366. package/dist/scene/material-factory.d.ts.map +0 -1
  367. package/dist/scene/material-factory.js +0 -197
  368. package/dist/scene/material-registry.d.ts +0 -40
  369. package/dist/scene/material-registry.d.ts.map +0 -1
  370. package/dist/scene/material-registry.js +0 -44
  371. package/dist/scene/materials/index.d.ts +0 -8
  372. package/dist/scene/materials/index.d.ts.map +0 -1
  373. package/dist/scene/materials/index.js +0 -7
  374. package/dist/scene/materials/water.d.ts +0 -2
  375. package/dist/scene/materials/water.d.ts.map +0 -1
  376. package/dist/scene/materials/water.js +0 -54
  377. package/dist/scene/parse.d.ts +0 -23
  378. package/dist/scene/parse.d.ts.map +0 -1
  379. package/dist/scene/parse.js +0 -179
  380. package/dist/scene/particles-factory.d.ts +0 -33
  381. package/dist/scene/particles-factory.d.ts.map +0 -1
  382. package/dist/scene/particles-factory.js +0 -282
  383. package/dist/scene/scene-apply.d.ts +0 -109
  384. package/dist/scene/scene-apply.d.ts.map +0 -1
  385. package/dist/scene/scene-apply.js +0 -370
  386. package/dist/scene/scene-diff-schema.d.ts +0 -285
  387. package/dist/scene/scene-diff-schema.d.ts.map +0 -1
  388. package/dist/scene/scene-diff-schema.js +0 -92
  389. package/dist/scene/scene-diff-types.d.ts +0 -40
  390. package/dist/scene/scene-diff-types.d.ts.map +0 -1
  391. package/dist/scene/scene-diff-types.js +0 -14
  392. package/dist/scene/scene-loader.d.ts +0 -167
  393. package/dist/scene/scene-loader.d.ts.map +0 -1
  394. package/dist/scene/scene-loader.js +0 -1211
  395. package/dist/scene/scene-query.d.ts +0 -11
  396. package/dist/scene/scene-query.d.ts.map +0 -1
  397. package/dist/scene/scene-query.js +0 -63
  398. package/dist/scene/scene-types.d.ts +0 -10
  399. package/dist/scene/scene-types.d.ts.map +0 -1
  400. package/dist/scene/scene-types.js +0 -8
  401. package/dist/scene/scene-version.d.ts +0 -26
  402. package/dist/scene/scene-version.d.ts.map +0 -1
  403. package/dist/scene/scene-version.js +0 -34
  404. package/dist/scene/schema/animation.d.ts +0 -8
  405. package/dist/scene/schema/animation.d.ts.map +0 -1
  406. package/dist/scene/schema/animation.js +0 -42
  407. package/dist/scene/schema/audio.d.ts +0 -13
  408. package/dist/scene/schema/audio.d.ts.map +0 -1
  409. package/dist/scene/schema/audio.js +0 -22
  410. package/dist/scene/schema/camera.d.ts +0 -28
  411. package/dist/scene/schema/camera.d.ts.map +0 -1
  412. package/dist/scene/schema/camera.js +0 -17
  413. package/dist/scene/schema/collider.d.ts +0 -40
  414. package/dist/scene/schema/collider.d.ts.map +0 -1
  415. package/dist/scene/schema/collider.js +0 -55
  416. package/dist/scene/schema/entity-ref.d.ts +0 -31
  417. package/dist/scene/schema/entity-ref.d.ts.map +0 -1
  418. package/dist/scene/schema/entity-ref.js +0 -61
  419. package/dist/scene/schema/entity.d.ts +0 -1036
  420. package/dist/scene/schema/entity.d.ts.map +0 -1
  421. package/dist/scene/schema/entity.js +0 -153
  422. package/dist/scene/schema/environment.d.ts +0 -425
  423. package/dist/scene/schema/environment.d.ts.map +0 -1
  424. package/dist/scene/schema/environment.js +0 -357
  425. package/dist/scene/schema/index.d.ts +0 -37
  426. package/dist/scene/schema/index.d.ts.map +0 -1
  427. package/dist/scene/schema/index.js +0 -19
  428. package/dist/scene/schema/instances.d.ts +0 -14
  429. package/dist/scene/schema/instances.d.ts.map +0 -1
  430. package/dist/scene/schema/instances.js +0 -28
  431. package/dist/scene/schema/joint.d.ts +0 -23
  432. package/dist/scene/schema/joint.d.ts.map +0 -1
  433. package/dist/scene/schema/joint.js +0 -23
  434. package/dist/scene/schema/light.d.ts +0 -38
  435. package/dist/scene/schema/light.d.ts.map +0 -1
  436. package/dist/scene/schema/light.js +0 -26
  437. package/dist/scene/schema/material.d.ts +0 -199
  438. package/dist/scene/schema/material.d.ts.map +0 -1
  439. package/dist/scene/schema/material.js +0 -103
  440. package/dist/scene/schema/mesh.d.ts +0 -48
  441. package/dist/scene/schema/mesh.d.ts.map +0 -1
  442. package/dist/scene/schema/mesh.js +0 -82
  443. package/dist/scene/schema/particles.d.ts +0 -2178
  444. package/dist/scene/schema/particles.d.ts.map +0 -1
  445. package/dist/scene/schema/particles.js +0 -321
  446. package/dist/scene/schema/physics.d.ts +0 -56
  447. package/dist/scene/schema/physics.d.ts.map +0 -1
  448. package/dist/scene/schema/physics.js +0 -37
  449. package/dist/scene/schema/scene-file.d.ts +0 -303
  450. package/dist/scene/schema/scene-file.d.ts.map +0 -1
  451. package/dist/scene/schema/scene-file.js +0 -256
  452. package/dist/scene/schema/shadow.d.ts +0 -28
  453. package/dist/scene/schema/shadow.d.ts.map +0 -1
  454. package/dist/scene/schema/shadow.js +0 -20
  455. package/dist/scene/schema/spline.d.ts +0 -25
  456. package/dist/scene/schema/spline.d.ts.map +0 -1
  457. package/dist/scene/schema/spline.js +0 -15
  458. package/dist/scene/schema/tuples.d.ts +0 -12
  459. package/dist/scene/schema/tuples.d.ts.map +0 -1
  460. package/dist/scene/schema/tuples.js +0 -14
  461. package/dist/scene/user-data.d.ts +0 -185
  462. package/dist/scene/user-data.d.ts.map +0 -1
  463. package/dist/scene/user-data.js +0 -144
  464. package/dist/setup/setup-audio.d.ts +0 -20
  465. package/dist/setup/setup-audio.d.ts.map +0 -1
  466. package/dist/setup/setup-audio.js +0 -41
  467. package/dist/setup/setup-particles.d.ts +0 -17
  468. package/dist/setup/setup-particles.d.ts.map +0 -1
  469. package/dist/setup/setup-particles.js +0 -16
  470. package/dist/setup/setup-physics.d.ts +0 -25
  471. package/dist/setup/setup-physics.d.ts.map +0 -1
  472. package/dist/setup/setup-physics.js +0 -51
  473. package/dist/setup/setup-renderer.d.ts +0 -69
  474. package/dist/setup/setup-renderer.d.ts.map +0 -1
  475. package/dist/setup/setup-renderer.js +0 -363
  476. package/dist/tools/define-tool.d.ts +0 -130
  477. package/dist/tools/define-tool.d.ts.map +0 -1
  478. package/dist/tools/define-tool.js +0 -96
  479. package/dist/world2d/authoring-2d.d.ts +0 -80
  480. package/dist/world2d/authoring-2d.d.ts.map +0 -1
  481. package/dist/world2d/authoring-2d.js +0 -195
  482. package/dist/world2d/capture-to-scene2d.d.ts +0 -5
  483. package/dist/world2d/capture-to-scene2d.d.ts.map +0 -1
  484. package/dist/world2d/capture-to-scene2d.js +0 -49
  485. package/dist/world2d/collision-2d.d.ts +0 -52
  486. package/dist/world2d/collision-2d.d.ts.map +0 -1
  487. package/dist/world2d/collision-2d.js +0 -70
  488. package/dist/world2d/components-2d.d.ts +0 -47
  489. package/dist/world2d/components-2d.d.ts.map +0 -1
  490. package/dist/world2d/components-2d.js +0 -77
  491. package/dist/world2d/index.d.ts +0 -34
  492. package/dist/world2d/index.d.ts.map +0 -1
  493. package/dist/world2d/index.js +0 -32
  494. package/dist/world2d/ingest-iframe-2d.d.ts +0 -82
  495. package/dist/world2d/ingest-iframe-2d.d.ts.map +0 -1
  496. package/dist/world2d/ingest-iframe-2d.js +0 -166
  497. package/dist/world2d/ingest2d.d.ts +0 -97
  498. package/dist/world2d/ingest2d.d.ts.map +0 -1
  499. package/dist/world2d/ingest2d.js +0 -40
  500. package/dist/world2d/physics2d-registry.d.ts +0 -24
  501. package/dist/world2d/physics2d-registry.d.ts.map +0 -1
  502. package/dist/world2d/physics2d-registry.js +0 -38
  503. package/dist/world2d/pixi-game-adapter.d.ts +0 -107
  504. package/dist/world2d/pixi-game-adapter.d.ts.map +0 -1
  505. package/dist/world2d/pixi-game-adapter.js +0 -210
  506. package/dist/world2d/pixi-surface.d.ts +0 -39
  507. package/dist/world2d/pixi-surface.d.ts.map +0 -1
  508. package/dist/world2d/pixi-surface.js +0 -47
  509. package/dist/world2d/scene-capture-2d.d.ts +0 -43
  510. package/dist/world2d/scene-capture-2d.d.ts.map +0 -1
  511. package/dist/world2d/scene-capture-2d.js +0 -92
  512. package/dist/world2d/scene2d-loader.d.ts +0 -27
  513. package/dist/world2d/scene2d-loader.d.ts.map +0 -1
  514. package/dist/world2d/scene2d-loader.js +0 -275
  515. package/dist/world2d/schema/entity2d.d.ts +0 -102
  516. package/dist/world2d/schema/entity2d.d.ts.map +0 -1
  517. package/dist/world2d/schema/entity2d.js +0 -119
  518. package/dist/world2d/schema/physics2d.d.ts +0 -46
  519. package/dist/world2d/schema/physics2d.d.ts.map +0 -1
  520. package/dist/world2d/schema/physics2d.js +0 -45
  521. package/dist/world2d/schema/sprite.d.ts +0 -42
  522. package/dist/world2d/schema/sprite.d.ts.map +0 -1
  523. package/dist/world2d/schema/sprite.js +0 -63
  524. package/dist/world2d/schema/tilemap.d.ts +0 -15
  525. package/dist/world2d/schema/tilemap.d.ts.map +0 -1
  526. package/dist/world2d/schema/tilemap.js +0 -19
  527. package/dist/world2d/schema/tuples2d.d.ts +0 -20
  528. package/dist/world2d/schema/tuples2d.d.ts.map +0 -1
  529. package/dist/world2d/schema/tuples2d.js +0 -19
  530. package/dist/world2d/system-adapters-2d.d.ts +0 -16
  531. package/dist/world2d/system-adapters-2d.d.ts.map +0 -1
  532. package/dist/world2d/system-adapters-2d.js +0 -37
  533. package/dist/world2d/transform-writer-2d.d.ts +0 -16
  534. package/dist/world2d/transform-writer-2d.d.ts.map +0 -1
  535. package/dist/world2d/transform-writer-2d.js +0 -22
  536. package/dist/world2d/types.d.ts +0 -59
  537. package/dist/world2d/types.d.ts.map +0 -1
  538. package/dist/world2d/types.js +0 -1
@@ -1,230 +0,0 @@
1
- import * as THREE from 'three';
2
- import { getUserData } from '../scene/user-data';
3
- // Structural signature — groups meshes that are VALUE-identical, not object-identical.
4
- // The engine scene-loader instantiates a fresh geometry+material per entity (no dedup),
5
- // so keying on .uuid would never batch a real scene. Keying on geometry type+parameters
6
- // and material type+key-props groups identical authored primitives (e.g. 10k boxes of
7
- // the same size+color → one batch). Non-primitive geometry (GLTF, no `.parameters`)
8
- // falls back to uuid → it simply won't group, which is the safe default.
9
- const geoKey = (g) => {
10
- const params = g.parameters;
11
- return params ? `${g.type}:${JSON.stringify(params)}` : `uuid:${g.uuid}`;
12
- };
13
- const matKey = (m) => {
14
- const s = m;
15
- const col = s.color?.getHexString?.() ?? '';
16
- const map = s.map?.uuid ?? '';
17
- return `${m.type}:${col}:${s.roughness ?? ''}:${s.metalness ?? ''}:${map}:${m.side}:${m.transparent}:${m.vertexColors}`;
18
- };
19
- const SIG = (m) =>
20
- // include shadow flags: meshes with different cast/receive must not share a batch
21
- // (the InstancedMesh carries one flag for the whole group).
22
- `${geoKey(m.geometry)}|${matKey(m.material)}|${m.castShadow ? 1 : 0}${m.receiveShadow ? 1 : 0}`;
23
- /** Nearest self/ancestor entity descriptor, if any. */
24
- function nearestEntity(obj) {
25
- let cur = obj;
26
- while (cur) {
27
- const entity = getUserData(cur, 'entity');
28
- if (entity)
29
- return entity;
30
- cur = cur.parent;
31
- }
32
- return undefined;
33
- }
34
- /** Explicit per-entity opt-out (`render.autoBatch === false`). */
35
- function entityOptOut(obj) {
36
- return nearestEntity(obj)?.render?.autoBatch === false;
37
- }
38
- /**
39
- * Static-batching eligibility: only entities that won't move are safe to freeze
40
- * and instance. An entity with physics, behavior components, or its own animation
41
- * is a likely mover → left as an ordinary draw. Plain scenery (no def, or a def
42
- * with none of those) is eligible. This is the safe, transparent default; a future
43
- * dynamic-batch path (markMoved-driven) can include movers.
44
- */
45
- function isLikelyStatic(obj) {
46
- const e = nearestEntity(obj);
47
- if (!e)
48
- return true; // un-tagged scenery
49
- if (e.physics)
50
- return false;
51
- if (e.animation)
52
- return false;
53
- if (e.components && Object.keys(e.components).length > 0)
54
- return false;
55
- return true;
56
- }
57
- export class RenderBatchSystem {
58
- scene;
59
- settings;
60
- root = new THREE.Group();
61
- groups = [];
62
- dynamicGroups = []; // subset needing per-frame sync
63
- // Original parent of each detached (static) source, to re-attach on teardown.
64
- parentOf = new WeakMap();
65
- // instanceId mapping for raycast: which group + slot an InstancedMesh belongs to.
66
- membersOf = new WeakMap();
67
- constructor(scene, settings) {
68
- this.scene = scene;
69
- this.settings = settings;
70
- this.root.name = 'RenderBatchSystem';
71
- this.root.matrixAutoUpdate = false; // instances carry world matrices directly
72
- }
73
- /** Scan the scene and build instanced groups. Idempotent (rebuilds). */
74
- build() {
75
- this.teardown();
76
- this.scene.add(this.root);
77
- this.scene.updateMatrixWorld(true);
78
- // collect eligible candidates, grouped by (geometry, material)
79
- const buckets = new Map();
80
- this.scene.traverse((obj) => {
81
- const m = obj;
82
- if (!m.isMesh)
83
- return;
84
- if (m.isInstancedMesh)
85
- return;
86
- if (m.isSkinnedMesh)
87
- return;
88
- if (m.isBatchedMesh)
89
- return;
90
- if (!m.visible)
91
- return;
92
- if (!m.geometry || !m.material || Array.isArray(m.material))
93
- return;
94
- if (m.material.transparent)
95
- return;
96
- if (this.root === m.parent)
97
- return; // our own instances
98
- if (entityOptOut(m))
99
- return;
100
- const key = SIG(m);
101
- const arr = buckets.get(key) ?? [];
102
- arr.push(m);
103
- buckets.set(key, arr);
104
- });
105
- // Each signature bucket is partitioned into STATIC (detached, zero-cost) and
106
- // DYNAMIC (kept in-place, dirty-synced) members, each ≥2 forming its own batch.
107
- for (const bucket of buckets.values()) {
108
- const staticMembers = [];
109
- const dynamicMembers = [];
110
- for (const m of bucket)
111
- (isLikelyStatic(m) ? staticMembers : dynamicMembers).push(m);
112
- if (staticMembers.length >= 2)
113
- this.makeGroup(staticMembers, false);
114
- if (dynamicMembers.length >= 2)
115
- this.makeGroup(dynamicMembers, true);
116
- }
117
- }
118
- makeGroup(sources, dynamic) {
119
- const frustum = this.settings['frustumCulling'] !== false;
120
- const tmp = new THREE.Matrix4();
121
- const proto = sources[0];
122
- const inst = new THREE.InstancedMesh(proto.geometry, proto.material, sources.length);
123
- inst.frustumCulled = frustum && !dynamic; // moving batches can leave the padded sphere
124
- // Inherit shadow flags from the prototype so batched objects still cast/receive
125
- // shadows (otherwise detaching the sources would silently drop them from shadows).
126
- inst.castShadow = proto.castShadow;
127
- inst.receiveShadow = proto.receiveShadow;
128
- const cache = dynamic ? new Float32Array(sources.length * 16) : undefined;
129
- for (let i = 0; i < sources.length; i++) {
130
- const s = sources[i];
131
- tmp.copy(s.matrixWorld);
132
- inst.setMatrixAt(i, tmp);
133
- if (dynamic) {
134
- // keep the source in the graph (physics/animation still updates its matrixWorld),
135
- // just hide its own draw; we copy its world matrix into the instance each frame.
136
- cache.set(tmp.elements, i * 16);
137
- s.visible = false;
138
- }
139
- else if (s.parent) {
140
- // static: detach entirely so the renderer never walks it (zero per-frame cost)
141
- this.parentOf.set(s, s.parent);
142
- s.parent.remove(s);
143
- }
144
- }
145
- inst.instanceMatrix.needsUpdate = true;
146
- if (frustum && !dynamic)
147
- inst.computeBoundingSphere();
148
- this.membersOf.set(inst, sources);
149
- this.root.add(inst);
150
- const group = cache
151
- ? { instanced: inst, sources, dynamic, cache }
152
- : { instanced: inst, sources, dynamic };
153
- this.groups.push(group);
154
- if (dynamic)
155
- this.dynamicGroups.push(group);
156
- }
157
- /**
158
- * Per-frame sync for DYNAMIC groups only (static are detached & immutable → free).
159
- * Called in the preRender phase. Refreshes world matrices once (the engine's movers
160
- * set matrixWorldNeedsUpdate via physics/animation), then re-writes only the instances
161
- * whose source moved (element-wise cache compare). No-op when there are no movers.
162
- */
163
- update() {
164
- if (this.dynamicGroups.length === 0)
165
- return;
166
- this.scene.updateMatrixWorld(false); // refresh moved subtrees (force=false → cheap)
167
- for (const g of this.dynamicGroups) {
168
- const cache = g.cache;
169
- let dirty = false;
170
- for (let i = 0; i < g.sources.length; i++) {
171
- const el = g.sources[i].matrixWorld.elements;
172
- const off = i * 16;
173
- let changed = false;
174
- for (let k = 0; k < 16; k++) {
175
- if (el[k] !== cache[off + k]) {
176
- changed = true;
177
- break;
178
- }
179
- }
180
- if (!changed)
181
- continue;
182
- g.instanced.setMatrixAt(i, g.sources[i].matrixWorld);
183
- cache.set(el, off);
184
- dirty = true;
185
- }
186
- if (dirty)
187
- g.instanced.instanceMatrix.needsUpdate = true;
188
- }
189
- }
190
- /**
191
- * Raycast against the batched instances, mapping a hit back to the logical source
192
- * Object3D (so editor/gameplay picking still resolves a detached entity).
193
- */
194
- raycast(raycaster) {
195
- const hits = raycaster.intersectObject(this.root, true);
196
- for (const h of hits) {
197
- const members = this.membersOf.get(h.object);
198
- if (members && h.instanceId != null)
199
- return members[h.instanceId] ?? null;
200
- }
201
- return null;
202
- }
203
- /** Number of draw calls the batcher contributes (1 per group). */
204
- get drawCalls() {
205
- return this.groups.length;
206
- }
207
- /** How many source meshes were collapsed into instances. */
208
- get batchedCount() {
209
- return this.groups.reduce((n, g) => n + g.sources.length, 0);
210
- }
211
- teardown() {
212
- for (const g of this.groups) {
213
- for (const s of g.sources) {
214
- if (g.dynamic)
215
- s.visible = true; // dynamic sources stayed in-graph, hidden
216
- else {
217
- const parent = this.parentOf.get(s); // static sources were detached — re-attach
218
- if (parent)
219
- parent.add(s);
220
- }
221
- }
222
- g.instanced.dispose();
223
- this.root.remove(g.instanced);
224
- }
225
- this.groups = [];
226
- this.dynamicGroups = [];
227
- if (this.root.parent)
228
- this.root.parent.remove(this.root);
229
- }
230
- }
@@ -1,47 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * The render-feature registry — single source of truth for every togglable render
4
- * setting. The scene schema (`SceneEnvironment.rendering`, `SceneEntity.render`),
5
- * the cascade resolver (`resolveRenderSettings`), the editor UI, and the stats
6
- * overlay are all derived from this list, so "everything togglable" stays
7
- * consistent by construction (same posture as the component/material/instancer
8
- * registries). Adding a feature here gives it a schema field + cascade entry for
9
- * free. See docs/research/RENDER-SETTINGS-UX.md.
10
- */
11
- export type RenderFeatureValue = boolean | number | string;
12
- export interface RenderFeature {
13
- /** Stable key used in schema, cascade, and UI. */
14
- key: string;
15
- /** Editor display label. */
16
- label: string;
17
- /** Schema `.describe()` text (powers JSON Schema / inspector docs). */
18
- description: string;
19
- /** Control shape. */
20
- kind: 'toggle' | 'number' | 'enum';
21
- /** Engine default — the "fast by default" baseline. */
22
- default: RenderFeatureValue;
23
- /**
24
- * `live` re-applies on change; `reload` needs a renderer re-init (e.g. backend,
25
- * antialias). The editor badges `reload` features and re-inits the viewport.
26
- */
27
- apply: 'live' | 'reload';
28
- /** Whether this feature may be overridden per-entity (the entity cascade layer). */
29
- perEntity: boolean;
30
- /** Allowed values for `enum` kind. */
31
- options?: readonly string[];
32
- /** [min, max] for `number` kind. */
33
- range?: readonly [number, number];
34
- }
35
- export declare const RENDER_FEATURES: readonly RenderFeature[];
36
- /** Map for O(1) lookup by key. */
37
- export declare const RENDER_FEATURE_BY_KEY: ReadonlyMap<string, RenderFeature>;
38
- /**
39
- * Build a Zod object for the render settings, derived from the registry so the
40
- * schema can never drift from the feature list. All fields optional — absence
41
- * means "inherit" in the cascade. `perEntityOnly` builds the per-entity override
42
- * schema (only features whose `perEntity` is true).
43
- */
44
- export declare function buildRenderingZod(opts?: {
45
- perEntityOnly?: boolean;
46
- }): z.ZodTypeAny;
47
- //# sourceMappingURL=render-features.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-features.d.ts","sourceRoot":"","sources":["../../src/render/render-features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AAEH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,uDAAuD;IACvD,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,oFAAoF;IACpF,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,oCAAoC;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA6EnD,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAEpE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,CAAC,CAAC,UAAU,CAiBtF"}
@@ -1,105 +0,0 @@
1
- import { z } from 'zod';
2
- export const RENDER_FEATURES = [
3
- {
4
- key: 'autoBatch',
5
- label: 'Auto-batching',
6
- description: 'Automatically batch entities sharing geometry+material into one draw call (InstancedMesh/BatchedMesh) while keeping each Object3D as the handle. The headline perf win; opt out per-entity for custom-shader/skinned meshes.',
7
- kind: 'toggle',
8
- default: true,
9
- apply: 'live',
10
- perEntity: true,
11
- },
12
- {
13
- key: 'frustumCulling',
14
- label: 'Frustum culling',
15
- description: 'Per-instance frustum culling for batched content.',
16
- kind: 'toggle',
17
- default: true,
18
- apply: 'live',
19
- perEntity: true,
20
- },
21
- {
22
- key: 'lod',
23
- label: 'Level of detail',
24
- description: 'Distance-based geometry swap (LOD) for eligible entities.',
25
- kind: 'toggle',
26
- default: true,
27
- apply: 'live',
28
- perEntity: true,
29
- },
30
- {
31
- key: 'shadows',
32
- label: 'Shadows',
33
- description: 'Enable the shadow map. Per-entity cast/receive still applies.',
34
- kind: 'toggle',
35
- default: true,
36
- apply: 'live',
37
- perEntity: true,
38
- },
39
- {
40
- key: 'postProcessing',
41
- label: 'Post-processing',
42
- description: 'Master switch for the post-processing stack (individual effects nest beneath it).',
43
- kind: 'toggle',
44
- default: true,
45
- apply: 'live',
46
- perEntity: false,
47
- },
48
- {
49
- key: 'resolutionScale',
50
- label: 'Resolution scale',
51
- description: 'Device-pixel-ratio multiplier (1.0 = native). The cheapest perf dial.',
52
- kind: 'number',
53
- default: 1,
54
- apply: 'live',
55
- perEntity: false,
56
- range: [0.25, 2],
57
- },
58
- {
59
- key: 'antialias',
60
- label: 'Antialiasing',
61
- description: 'MSAA via renderer construction. Applies on reload (renderer re-init).',
62
- kind: 'toggle',
63
- default: true,
64
- apply: 'reload',
65
- perEntity: false,
66
- },
67
- {
68
- key: 'backend',
69
- label: 'Renderer backend',
70
- description: 'GPU backend: auto picks WebGPU when available, else WebGL2. Applies on reload.',
71
- kind: 'enum',
72
- default: 'auto',
73
- apply: 'reload',
74
- perEntity: false,
75
- options: ['auto', 'webgl', 'webgpu'],
76
- },
77
- ];
78
- /** Map for O(1) lookup by key. */
79
- export const RENDER_FEATURE_BY_KEY = new Map(RENDER_FEATURES.map((f) => [f.key, f]));
80
- /**
81
- * Build a Zod object for the render settings, derived from the registry so the
82
- * schema can never drift from the feature list. All fields optional — absence
83
- * means "inherit" in the cascade. `perEntityOnly` builds the per-entity override
84
- * schema (only features whose `perEntity` is true).
85
- */
86
- export function buildRenderingZod(opts = {}) {
87
- const shape = {};
88
- for (const f of RENDER_FEATURES) {
89
- if (opts.perEntityOnly && !f.perEntity)
90
- continue;
91
- let base;
92
- if (f.kind === 'toggle')
93
- base = z.boolean();
94
- else if (f.kind === 'number')
95
- base = z.number();
96
- else
97
- base = z.enum(f.options);
98
- shape[f.key] = base.optional().describe(f.description);
99
- }
100
- return z
101
- .object(shape)
102
- .describe(opts.perEntityOnly
103
- ? 'Per-entity render overrides (omit a field to inherit from the scene/engine default)'
104
- : 'Scene render settings (omit a field to inherit the engine default)');
105
- }
@@ -1,36 +0,0 @@
1
- import { type RenderFeatureValue } from './render-features';
2
- /**
3
- * Cascade resolution for render settings: engine default → scene → entity, with
4
- * tri-state inherit (an absent value inherits from the next level up). See
5
- * docs/research/RENDER-SETTINGS-UX.md.
6
- */
7
- /** A partial override map (scene-level or entity-level). Absent key = inherit. */
8
- export type RenderScope = Partial<Record<string, RenderFeatureValue>>;
9
- /** Fully-resolved settings: every registry key present. */
10
- export type ResolvedRenderSettings = Record<string, RenderFeatureValue>;
11
- /**
12
- * Resolve effective settings. `entity` overrides only apply to features whose
13
- * `perEntity` flag is set; non-per-entity features resolve across engine→scene
14
- * only. `??` walks up the chain on `undefined` (inherit) but lets an explicit
15
- * `false`/`0` override (they are not nullish).
16
- */
17
- export declare function resolveRenderSettings(scene?: RenderScope, entity?: RenderScope): ResolvedRenderSettings;
18
- /**
19
- * A small observable holding the live scene-level resolved settings. Live
20
- * features re-apply when a value changes (subscribers are notified with the
21
- * changed key). This is the seam a future player-facing graphics menu would
22
- * drive — for now it backs the editor toggles + the runtime systems.
23
- */
24
- export declare class RenderSettings {
25
- private values;
26
- private listeners;
27
- constructor(scene?: RenderScope);
28
- get(key: string): RenderFeatureValue;
29
- /** Set a scene-level value; notifies subscribers if it changed. */
30
- set(key: string, value: RenderFeatureValue): void;
31
- /** Resolve the effective value for an entity (entity override → scene → default). */
32
- forEntity(key: string, entity?: RenderScope): RenderFeatureValue;
33
- subscribe(fn: (key: string, value: RenderFeatureValue) => void): () => void;
34
- snapshot(): ResolvedRenderSettings;
35
- }
36
- //# sourceMappingURL=render-settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"render-settings.d.ts","sourceRoot":"","sources":["../../src/render/render-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE7E;;;;GAIG;AAEH,kFAAkF;AAClF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAEtE,2DAA2D;AAC3D,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,sBAAsB,CAOxB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAA+D;gBAEpE,KAAK,CAAC,EAAE,WAAW;IAI/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAIpC,mEAAmE;IACnE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAMjD,qFAAqF;IACrF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,kBAAkB;IAKhE,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,IAAI;IAK3E,QAAQ,IAAI,sBAAsB;CAGnC"}
@@ -1,51 +0,0 @@
1
- import { RENDER_FEATURES } from './render-features';
2
- /**
3
- * Resolve effective settings. `entity` overrides only apply to features whose
4
- * `perEntity` flag is set; non-per-entity features resolve across engine→scene
5
- * only. `??` walks up the chain on `undefined` (inherit) but lets an explicit
6
- * `false`/`0` override (they are not nullish).
7
- */
8
- export function resolveRenderSettings(scene, entity) {
9
- const out = {};
10
- for (const f of RENDER_FEATURES) {
11
- const entityVal = f.perEntity ? entity?.[f.key] : undefined;
12
- out[f.key] = entityVal ?? scene?.[f.key] ?? f.default;
13
- }
14
- return out;
15
- }
16
- /**
17
- * A small observable holding the live scene-level resolved settings. Live
18
- * features re-apply when a value changes (subscribers are notified with the
19
- * changed key). This is the seam a future player-facing graphics menu would
20
- * drive — for now it backs the editor toggles + the runtime systems.
21
- */
22
- export class RenderSettings {
23
- values;
24
- listeners = new Set();
25
- constructor(scene) {
26
- this.values = resolveRenderSettings(scene);
27
- }
28
- get(key) {
29
- return this.values[key];
30
- }
31
- /** Set a scene-level value; notifies subscribers if it changed. */
32
- set(key, value) {
33
- if (this.values[key] === value)
34
- return;
35
- this.values[key] = value;
36
- for (const fn of this.listeners)
37
- fn(key, value);
38
- }
39
- /** Resolve the effective value for an entity (entity override → scene → default). */
40
- forEntity(key, entity) {
41
- const f = entity?.[key];
42
- return f ?? this.values[key];
43
- }
44
- subscribe(fn) {
45
- this.listeners.add(fn);
46
- return () => this.listeners.delete(fn);
47
- }
48
- snapshot() {
49
- return { ...this.values };
50
- }
51
- }