@zephyr3d/scene 0.9.27 → 0.10.0

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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1,12 +1,11 @@
1
- import { halton23, Matrix4x4, Vector4, DEPTH_CLEAR_VALUE, DRef, Vector2, REVERSE_Z, Vector3, Ray, Frustum } from '@zephyr3d/base';
1
+ import { halton23, Matrix4x4, Vector4, DEPTH_CLEAR_VALUE, DRef, Vector2, DEBUG_VIEWS, REVERSE_Z, Vector3, Ray, Frustum } from '@zephyr3d/base';
2
2
  import { SceneNode } from '../scene/scene_node.js';
3
3
  import { Compositor } from '../posteffect/compositor.js';
4
4
  import { TAA } from '../posteffect/taa.js';
5
5
  import { SSGI } from '../posteffect/ssgi.js';
6
6
  import { SSR } from '../posteffect/ssr.js';
7
7
  import { SSS } from '../posteffect/sss.js';
8
- import { SkinSSS } from '../posteffect/skinsss.js';
9
- import { SubsurfaceProfile } from '../material/subsurfaceprofile.js';
8
+ import { PostSSS } from '../posteffect/postsss.js';
10
9
  import { Tonemap } from '../posteffect/tonemap.js';
11
10
  import { FXAA } from '../posteffect/fxaa.js';
12
11
  import { Bloom } from '../posteffect/bloom.js';
@@ -20,6 +19,7 @@ import { WeightedBlendedOIT } from '../render/weightedblended_oit.js';
20
19
  import { DualDepthPeelingOIT } from '../render/dualdepthpeeling_oit.js';
21
20
  import { RGHistoryResources } from '../render/rendergraph/history_resources.js';
22
21
  import { calculateEV100, calculatePhysicalExposure } from '../utility/physical.js';
22
+ import { checkDebugViews } from '../render/debug_views.js';
23
23
 
24
24
  const SSGI_QUALITY_PRESET_SETTINGS = {
25
25
  quality: {
@@ -123,9 +123,13 @@ const SSS_QUALITY_PRESET_SETTINGS = {
123
123
  /** @internal Whether to perform a depth pre-pass. */ _depthPrePass;
124
124
  /** @internal Render path selection for scene renderer. */ _renderPath;
125
125
  /** @internal Whether command buffers may be reused for optimization. */ _commandBufferReuse;
126
+ /** @internal Scale of mesh level of detail screen sizes. */ _lodDistanceScale;
127
+ /** @internal Whether meshes are drawn as wireframes in this view. */ _wireframe;
128
+ /** @internal Whether meshes are colored by their level of detail in this view. */ _lodColoration;
126
129
  /** @internal Hi-Z acceleration enable (primarily for SSR). */ _HiZ;
127
130
  _HiZNearest;
128
131
  /** @internal Screen-space shadow mask enable (Forward+ deferred shadows). */ _screenSpaceShadowMask;
132
+ /** @internal */ _contactShadows;
129
133
  /** @internal If true, a float point backbuffer will be used. The default value is true */ _HDR;
130
134
  /** @internal Tonemap enable flag (via post effect). */ _toneMap;
131
135
  /** @internal Tonemap post effect reference. */ _postEffectTonemap;
@@ -200,19 +204,8 @@ const SSS_QUALITY_PRESET_SETTINGS = {
200
204
  /** @internal SSS multi-scatter energy compensation. */ _sssMultiScatter;
201
205
  /** @internal Cached runtime SSS settings after applying the quality preset. */ _sssResolvedSettings;
202
206
  /** @internal SSS debug visualization mode. */ _sssDebugView;
203
- /** @internal Skin SSS enable flag (via post effect). */ _skinSSS;
204
- /** @internal Skin SSS post effect reference. */ _postEffectSkinSSS;
205
- /** @internal Skin SSS final blend strength. */ _skinSSSStrength;
206
- /** @internal Skin SSS mask opacity bias. */ _skinSSSOpacity;
207
- /** @internal Skin SSS maximum blur tap spacing in pixels. */ _skinSSSSampleStep;
208
- /** @internal Skin SSS world-space scatter radius. */ _skinSSSScatterRadius;
209
- /** @internal Skin SSS smoothing ("beauty filter") amount. */ _skinSSSSmoothness;
210
- /** @internal Skin SSS depth rejection scale. */ _skinSSSDepthScale;
211
- /** @internal Skin SSS blurred multiplier boost. */ _skinSSSColorBoost;
212
- _skinSSSGlow;
213
- _skinSSSProfilePreset;
214
- _skinSSSProfile;
215
- _skinSSSScatterTint;
207
+ /** @internal Skin SSS post effect reference. */ _postEffectPostSSS;
208
+ _SSSDebugOutput;
216
209
  /** @internal SSAO enable flag (via post effect). */ _SSAO;
217
210
  /** @internal SSAO post effect reference. */ _postEffectSSAO;
218
211
  /** @internal SSAO scale (sampling radius multiplier). */ _SSAOOcclusionRadius;
@@ -274,6 +267,7 @@ const SSS_QUALITY_PRESET_SETTINGS = {
274
267
  this._HiZ = false;
275
268
  this._HiZNearest = false;
276
269
  this._screenSpaceShadowMask = true;
270
+ this._contactShadows = true;
277
271
  this._HDR = true;
278
272
  this._toneMap = true;
279
273
  this._postEffectTonemap = new DRef();
@@ -359,19 +353,8 @@ const SSS_QUALITY_PRESET_SETTINGS = {
359
353
  };
360
354
  this.updateSSSResolvedSettings();
361
355
  this._sssDebugView = 'none';
362
- this._skinSSS = false;
363
- this._postEffectSkinSSS = new DRef();
364
- this._skinSSSStrength = 1;
365
- this._skinSSSOpacity = 0.18;
366
- this._skinSSSSampleStep = 2;
367
- this._skinSSSScatterRadius = 0.02;
368
- this._skinSSSSmoothness = 0;
369
- this._skinSSSDepthScale = 80;
370
- this._skinSSSColorBoost = 1;
371
- this._skinSSSGlow = 0;
372
- this._skinSSSProfilePreset = 'skin_default';
373
- this._skinSSSProfile = null;
374
- this._skinSSSScatterTint = new Vector4(1, 1, 1, 1);
356
+ this._postEffectPostSSS = new DRef();
357
+ this._SSSDebugOutput = 'none';
375
358
  this._SSAO = false;
376
359
  this._postEffectSSAO = new DRef();
377
360
  this._SSAOOcclusionRadius = 0.25;
@@ -380,6 +363,9 @@ const SSS_QUALITY_PRESET_SETTINGS = {
380
363
  this._SSAOBlurDepthCutoff = 2;
381
364
  this._pickResult = null;
382
365
  this._commandBufferReuse = true;
366
+ this._lodDistanceScale = 1;
367
+ this._wireframe = false;
368
+ this._lodColoration = false;
383
369
  this._jitteredVPMatrix = new Matrix4x4();
384
370
  this._jitteredInvVPMatrix = new Matrix4x4();
385
371
  this._jitterValue = new Vector2(0, 0);
@@ -457,7 +443,7 @@ const SSS_QUALITY_PRESET_SETTINGS = {
457
443
  * Materials that query it - water's shoreline foam - turn it on by themselves,
458
444
  * the way a transmissive material turns on the scene colour copy, so this only
459
445
  * has to be set to force the channel on for something the renderer cannot see
460
- * coming. Ignored on WebGL1, which has no pyramid at all.
446
+ * coming.
461
447
  */ get HiZNearest() {
462
448
  return this._HiZNearest;
463
449
  }
@@ -478,6 +464,18 @@ const SSS_QUALITY_PRESET_SETTINGS = {
478
464
  this._screenSpaceShadowMask = !!val;
479
465
  }
480
466
  /**
467
+ * Whether lights with a non-zero {@link PunctualLight.contactShadowLength}
468
+ * trace contact shadows.
469
+ *
470
+ * Contact shadows are traced inside the screen-space shadow mask, so they
471
+ * also require {@link Camera.screenSpaceShadowMask}.
472
+ */ get contactShadows() {
473
+ return this._contactShadows;
474
+ }
475
+ set contactShadows(val) {
476
+ this._contactShadows = !!val;
477
+ }
478
+ /**
481
479
  * Render path used by the scene renderer.
482
480
  */ get renderPath() {
483
481
  return this._renderPath;
@@ -635,7 +633,8 @@ const SSS_QUALITY_PRESET_SETTINGS = {
635
633
  *
636
634
  * @remarks
637
635
  * See {@link Bloom.karisAverage}. On by default; costs a little halo reach in exchange for
638
- * stability on high-frequency speculars.
636
+ * stability on high-frequency speculars. Legacy lighting only: physical lighting always averages
637
+ * linearly.
639
638
  */ get bloomKarisAverage() {
640
639
  return this._bloomKarisAverage;
641
640
  }
@@ -920,7 +919,7 @@ const SSS_QUALITY_PRESET_SETTINGS = {
920
919
  this.invalidateSSGIHistory();
921
920
  }
922
921
  }
923
- /** Pixel stride used by the WebGL linear ray marcher. */ get ssgiStride() {
922
+ /** Pixel stride of the linear ray marcher, used when no Hi-Z pyramid is available. */ get ssgiStride() {
924
923
  return this._ssgiStride;
925
924
  }
926
925
  set ssgiStride(val) {
@@ -940,7 +939,7 @@ const SSS_QUALITY_PRESET_SETTINGS = {
940
939
  this.invalidateSSGIHistory();
941
940
  }
942
941
  }
943
- /** Whether SSGI temporal accumulation is enabled. Has no effect on WebGL1, which has no motion vectors. */ get ssgiTemporal() {
942
+ /** Whether SSGI temporal accumulation is enabled. */ get ssgiTemporal() {
944
943
  return this._ssgiTemporal;
945
944
  }
946
945
  set ssgiTemporal(val) {
@@ -1146,143 +1145,34 @@ const SSS_QUALITY_PRESET_SETTINGS = {
1146
1145
  set sssDebugView(val) {
1147
1146
  this._sssDebugView = val ?? 'none';
1148
1147
  }
1149
- /** Gets whether the dedicated Skin SSS post effect is enabled. */ get skinSSS() {
1150
- return this._postEffectSkinSSS.get().enabled;
1151
- }
1152
- set skinSSS(val) {
1153
- this._postEffectSkinSSS.get().enabled = !!val;
1154
- }
1155
- /** Final blend strength for the dedicated Skin SSS post effect. */ get skinSSSStrength() {
1156
- return this._skinSSSStrength;
1157
- }
1158
- set skinSSSStrength(val) {
1159
- this._skinSSSStrength = Math.max(0, val ?? 0);
1160
- if (this._postEffectSkinSSS.get()) {
1161
- this._postEffectSkinSSS.get().strength = this._skinSSSStrength;
1162
- }
1163
- }
1164
- /** Bias subtracted from the blurred skin mask before compositing. */ get skinSSSOpacity() {
1165
- return this._skinSSSOpacity;
1166
- }
1167
- set skinSSSOpacity(val) {
1168
- this._skinSSSOpacity = Math.max(0, Math.min(1, val ?? 0));
1169
- if (this._postEffectSkinSSS.get()) {
1170
- this._postEffectSkinSSS.get().opacity = this._skinSSSOpacity;
1171
- }
1172
- }
1173
- /** Maximum pixel spacing between blur taps. Caps the projected scatter radius for close-ups. */ get skinSSSSampleStep() {
1174
- return this._skinSSSSampleStep;
1175
- }
1176
- set skinSSSSampleStep(val) {
1177
- this._skinSSSSampleStep = Math.max(0.25, val ?? 0.25);
1178
- if (this._postEffectSkinSSS.get()) {
1179
- this._postEffectSkinSSS.get().sampleStep = this._skinSSSSampleStep;
1180
- }
1181
- }
1182
- /** World-space scatter radius. The blur width shrinks with distance to keep this constant. */ get skinSSSScatterRadius() {
1183
- return this._skinSSSScatterRadius;
1184
- }
1185
- set skinSSSScatterRadius(val) {
1186
- this._skinSSSScatterRadius = Math.max(0, val ?? 0);
1187
- if (this._postEffectSkinSSS.get()) {
1188
- this._postEffectSkinSSS.get().scatterRadius = this._skinSSSScatterRadius;
1189
- }
1190
- }
1191
- /** Skin smoothing ("beauty filter") amount for the dedicated Skin SSS post effect. */ get skinSSSSmoothness() {
1192
- return this._skinSSSSmoothness;
1193
- }
1194
- set skinSSSSmoothness(val) {
1195
- this._skinSSSSmoothness = Math.max(0, Math.min(1, val ?? 0));
1196
- if (this._postEffectSkinSSS.get()) {
1197
- this._postEffectSkinSSS.get().smoothness = this._skinSSSSmoothness;
1198
- }
1199
- }
1200
- /** Depth rejection scale. The reference shader uses 80. */ get skinSSSDepthScale() {
1201
- return this._skinSSSDepthScale;
1202
- }
1203
- set skinSSSDepthScale(val) {
1204
- this._skinSSSDepthScale = Math.max(0, val ?? 0);
1205
- if (this._postEffectSkinSSS.get()) {
1206
- this._postEffectSkinSSS.get().depthScale = this._skinSSSDepthScale;
1207
- }
1208
- }
1209
- /** Multiplier applied to the blurred skin lighting multiplier before compositing. */ get skinSSSColorBoost() {
1210
- return this._skinSSSColorBoost;
1211
- }
1212
- set skinSSSColorBoost(val) {
1213
- this._skinSSSColorBoost = Math.max(0, val ?? 0);
1214
- if (this._postEffectSkinSSS.get()) {
1215
- this._postEffectSkinSSS.get().colorBoost = this._skinSSSColorBoost;
1216
- }
1217
- }
1218
- /**
1219
- * Additive, deliberately non-conserving bleed for the Skin SSS post effect.
1220
- *
1221
- * @remarks
1222
- * 0 (the default) keeps the effect energy conserving: light added to the dark
1223
- * side of the terminator is light removed from the lit side. Raising it adds
1224
- * the diffused term again without subtracting anything, for skin that reads as
1225
- * lit from within; around 1 approximates the look the effect had before it
1226
- * conserved energy.
1227
- */ get skinSSSGlow() {
1228
- return this._skinSSSGlow;
1229
- }
1230
- set skinSSSGlow(val) {
1231
- this._skinSSSGlow = Math.max(0, val ?? 0);
1232
- if (this._postEffectSkinSSS.get()) {
1233
- this._postEffectSkinSSS.get().glow = this._skinSSSGlow;
1234
- }
1235
- }
1236
1148
  /**
1237
- * Subsurface profile preset driving the Skin SSS per-channel scatter radii.
1149
+ * Switches the skin diffusion on or off for the coming frame.
1238
1150
  *
1239
1151
  * @remarks
1240
- * The ratio between the red, green and blue radii is what gives a scattering
1241
- * surface its character - red travels furthest in skin, which is the
1242
- * red-to-yellow gradient at the terminator. Switching presets changes that
1243
- * ratio, so `wax` and `jade` are the same code path rather than special cases;
1244
- * {@link Camera.skinSSSScatterRadius} still sets how far the light reaches.
1152
+ * Driven by the render graph from whether the frame actually draws a skin
1153
+ * material, not by the application: an effect with nothing to scatter would
1154
+ * only cost a blit.
1245
1155
  *
1246
- * Applies to the whole pass. Per-material profiles need the profile-slot path
1247
- * used by {@link SSS} instead.
1248
- */ get skinSSSProfilePreset() {
1249
- return this._skinSSSProfilePreset;
1250
- }
1251
- set skinSSSProfilePreset(val) {
1252
- this._skinSSSProfilePreset = val ?? 'skin_default';
1253
- if (this._skinSSSProfile) {
1254
- this._skinSSSProfile.preset = this._skinSSSProfilePreset;
1255
- }
1256
- if (this._postEffectSkinSSS.get()) {
1257
- this._postEffectSkinSSS.get().profile = this.getSkinSSSProfile();
1258
- }
1259
- }
1260
- /**
1261
- * The profile object backing {@link Camera.skinSSSProfilePreset}, created on
1262
- * first use so that cameras which never enable Skin SSS do not consume one of
1263
- * the 255 global profile slots.
1264
1156
  * @internal
1265
- */ getSkinSSSProfile() {
1266
- if (!this._skinSSSProfile) {
1267
- this._skinSSSProfile = new SubsurfaceProfile();
1268
- this._skinSSSProfile.preset = this._skinSSSProfilePreset;
1157
+ */ setPostSSSActive(active) {
1158
+ const effect = this._postEffectPostSSS.get();
1159
+ if (effect) {
1160
+ effect.enabled = active;
1269
1161
  }
1270
- return this._skinSSSProfile;
1271
1162
  }
1272
1163
  /**
1273
- * Tint applied to the light the Skin SSS post effect redistributes.
1164
+ * Intermediate Skin SSS quantity to visualize instead of the shaded result.
1274
1165
  *
1275
1166
  * @remarks
1276
- * White (the default) leaves the effect energy conserving. Because it
1277
- * multiplies only the difference between the diffused and original diffuse, a
1278
- * warm tint colors the terminator without washing the whole surface.
1279
- */ get skinSSSScatterTint() {
1280
- return this._skinSSSScatterTint;
1167
+ * `'none'` renders normally. Use this to tell an input problem from a kernel
1168
+ * problem when the diffusion does not look right.
1169
+ */ get SSSDebugOutput() {
1170
+ return this._SSSDebugOutput;
1281
1171
  }
1282
- set skinSSSScatterTint(val) {
1283
- this._skinSSSScatterTint.set(val);
1284
- if (this._postEffectSkinSSS.get()) {
1285
- this._postEffectSkinSSS.get().scatterTint = this._skinSSSScatterTint;
1172
+ set SSSDebugOutput(val) {
1173
+ this._SSSDebugOutput = val ?? 'none';
1174
+ if (this._postEffectPostSSS.get()) {
1175
+ this._postEffectPostSSS.get().debugOutput = this._SSSDebugOutput;
1286
1176
  }
1287
1177
  }
1288
1178
  /** @internal */ get ssrParams() {
@@ -1350,6 +1240,41 @@ const SSS_QUALITY_PRESET_SETTINGS = {
1350
1240
  set commandBufferReuse(val) {
1351
1241
  this._commandBufferReuse = !!val;
1352
1242
  }
1243
+ /**
1244
+ * Scale of the mesh level of detail switch sizes in this view: above 1 meshes switch to
1245
+ * coarser levels closer to the camera, below 1 farther away. Default 1.
1246
+ */ get lodDistanceScale() {
1247
+ return this._lodDistanceScale;
1248
+ }
1249
+ set lodDistanceScale(val) {
1250
+ this._lodDistanceScale = Math.max(0, Number(val) || 0);
1251
+ }
1252
+ /**
1253
+ * Whether everything in this view is drawn as the edges of its triangles, at the level of detail
1254
+ * in use, to inspect geometry; shadows and picking keep the triangles. A debug view, see
1255
+ * DEBUG_VIEWS, not saved with the camera. Default false.
1256
+ */ get wireframe() {
1257
+ return DEBUG_VIEWS && this._wireframe;
1258
+ }
1259
+ set wireframe(val) {
1260
+ if (val) {
1261
+ checkDebugViews('Camera.wireframe');
1262
+ }
1263
+ this._wireframe = !!val;
1264
+ }
1265
+ /**
1266
+ * Whether every mesh of this view is shaded in the color of the level of detail it is drawn at,
1267
+ * white, red, green, blue, yellow, fuchsia, cyan and purple for levels 0 to 7. A debug view, not
1268
+ * saved with the camera; meshes are not batched while it is on. Default false.
1269
+ */ get lodColoration() {
1270
+ return DEBUG_VIEWS && this._lodColoration;
1271
+ }
1272
+ set lodColoration(val) {
1273
+ if (val) {
1274
+ checkDebugViews('Camera.lodColoration');
1275
+ }
1276
+ this._lodColoration = !!val;
1277
+ }
1353
1278
  /** Whether this camera is adapted to screen settins */ get adapted() {
1354
1279
  return this._adapted;
1355
1280
  }
@@ -1740,21 +1665,12 @@ const SSS_QUALITY_PRESET_SETTINGS = {
1740
1665
  this._postEffectSSS.set(sss);
1741
1666
  this._compositor.appendPostEffect(sss);
1742
1667
  }
1743
- if (!this._postEffectSkinSSS.get()) {
1744
- const skinSSS = new SkinSSS();
1745
- skinSSS.enabled = false;
1746
- skinSSS.strength = this._skinSSSStrength;
1747
- skinSSS.opacity = this._skinSSSOpacity;
1748
- skinSSS.sampleStep = this._skinSSSSampleStep;
1749
- skinSSS.scatterRadius = this._skinSSSScatterRadius;
1750
- skinSSS.smoothness = this._skinSSSSmoothness;
1751
- skinSSS.depthScale = this._skinSSSDepthScale;
1752
- skinSSS.colorBoost = this._skinSSSColorBoost;
1753
- skinSSS.glow = this._skinSSSGlow;
1754
- skinSSS.profile = this.getSkinSSSProfile();
1755
- skinSSS.scatterTint = this._skinSSSScatterTint;
1756
- this._postEffectSkinSSS.set(skinSSS);
1757
- this._compositor.appendPostEffect(skinSSS);
1668
+ if (!this._postEffectPostSSS.get()) {
1669
+ const postSSS = new PostSSS();
1670
+ postSSS.enabled = false;
1671
+ postSSS.debugOutput = this._SSSDebugOutput;
1672
+ this._postEffectPostSSS.set(postSSS);
1673
+ this._compositor.appendPostEffect(postSSS);
1758
1674
  }
1759
1675
  if (!this._postEffectSSAO.get()) {
1760
1676
  const ssao = new SAO();
@@ -1977,9 +1893,19 @@ const SSS_QUALITY_PRESET_SETTINGS = {
1977
1893
  return this._pickPosY;
1978
1894
  }
1979
1895
  /**
1980
- * Updates the controller state
1981
- */ updateController() {
1982
- this._controller?.update();
1896
+ * Updates the controller state.
1897
+ *
1898
+ * The scene calls this for its main camera twice per frame, once per phase;
1899
+ * the controller is updated only in the phase it declares. Called without a
1900
+ * phase, the controller is updated unconditionally.
1901
+ *
1902
+ * @param deltaTime - Time since the last frame in seconds; defaults to the device's frame time.
1903
+ * @param phase - Only update a controller whose `updatePhase` is this.
1904
+ */ updateController(deltaTime, phase) {
1905
+ const controller = this._controller;
1906
+ if (controller && (!phase || controller.updatePhase === phase)) {
1907
+ controller.update(deltaTime);
1908
+ }
1983
1909
  }
1984
1910
  /**
1985
1911
  * Reset the controller
@@ -2077,7 +2003,7 @@ const SSS_QUALITY_PRESET_SETTINGS = {
2077
2003
  this._postEffectMotionBlur.dispose();
2078
2004
  this._postEffectSSAO.dispose();
2079
2005
  this._postEffectSSS.dispose();
2080
- this._postEffectSkinSSS.dispose();
2006
+ this._postEffectPostSSS.dispose();
2081
2007
  this._postEffectSSGI.dispose();
2082
2008
  this._postEffectSSR.dispose();
2083
2009
  this._postEffectTAA.dispose();