@aura3d/engine 1.4.4 → 1.5.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 (487) hide show
  1. package/README.md +65 -30
  2. package/dist/animation/Retargeting.d.ts +12 -0
  3. package/dist/animation/Retargeting.d.ts.map +1 -0
  4. package/dist/animation/Retargeting.js +19 -0
  5. package/dist/animation/Retargeting.js.map +1 -0
  6. package/dist/assets/GLTFLoader.d.ts +4 -0
  7. package/dist/assets/GLTFLoader.d.ts.map +1 -1
  8. package/dist/assets/GLTFLoader.js +39 -4
  9. package/dist/assets/GLTFLoader.js.map +1 -1
  10. package/dist/assets/GLTFRenderResources.d.ts +16 -0
  11. package/dist/assets/GLTFRenderResources.d.ts.map +1 -1
  12. package/dist/assets/GLTFRenderResources.js +42 -2
  13. package/dist/assets/GLTFRenderResources.js.map +1 -1
  14. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts +6 -0
  15. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.d.ts.map +1 -1
  16. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js +2 -1
  17. package/dist/assets/asset-corpus/ProductionGLTFRenderPipeline.js.map +1 -1
  18. package/dist/assets/index.d.ts +0 -1
  19. package/dist/assets/index.d.ts.map +1 -1
  20. package/dist/assets/index.js +0 -1
  21. package/dist/assets/index.js.map +1 -1
  22. package/dist/assets/loaders/index.d.ts +0 -1
  23. package/dist/assets/loaders/index.d.ts.map +1 -1
  24. package/dist/assets/loaders/index.js +0 -1
  25. package/dist/assets/loaders/index.js.map +1 -1
  26. package/dist/aura3d-cli/asset-intent.d.ts +148 -0
  27. package/dist/aura3d-cli/asset-intent.d.ts.map +1 -0
  28. package/dist/aura3d-cli/asset-intent.js +145 -0
  29. package/dist/aura3d-cli/asset-intent.js.map +1 -0
  30. package/dist/aura3d-cli/asset-role-admission.d.ts +174 -0
  31. package/dist/aura3d-cli/asset-role-admission.d.ts.map +1 -0
  32. package/dist/aura3d-cli/asset-role-admission.js +381 -0
  33. package/dist/aura3d-cli/asset-role-admission.js.map +1 -0
  34. package/dist/aura3d-cli/asset-screening-effects.d.ts +95 -0
  35. package/dist/aura3d-cli/asset-screening-effects.d.ts.map +1 -0
  36. package/dist/aura3d-cli/asset-screening-effects.js +321 -0
  37. package/dist/aura3d-cli/asset-screening-effects.js.map +1 -0
  38. package/dist/aura3d-cli/asset-screening-pipeline.d.ts +132 -0
  39. package/dist/aura3d-cli/asset-screening-pipeline.d.ts.map +1 -0
  40. package/dist/aura3d-cli/asset-screening-pipeline.js +277 -0
  41. package/dist/aura3d-cli/asset-screening-pipeline.js.map +1 -0
  42. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts +15 -0
  43. package/dist/aura3d-cli/cartoon-asset-profiles.d.ts.map +1 -0
  44. package/dist/aura3d-cli/cartoon-asset-profiles.js +46 -0
  45. package/dist/aura3d-cli/cartoon-asset-profiles.js.map +1 -0
  46. package/dist/aura3d-cli/cli-help.js +1 -1
  47. package/dist/aura3d-cli/cli.js +16 -2
  48. package/dist/aura3d-cli/cli.js.map +1 -1
  49. package/dist/aura3d-cli/index.d.ts +8 -0
  50. package/dist/aura3d-cli/index.d.ts.map +1 -1
  51. package/dist/aura3d-cli/index.js +390 -17
  52. package/dist/aura3d-cli/index.js.map +1 -1
  53. package/dist/aura3d-cli/pull-bridge/search.d.ts +4 -0
  54. package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
  55. package/dist/aura3d-cli/pull-bridge/search.js +22 -0
  56. package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
  57. package/dist/aura3d-cli/pull-bridge.d.ts +20 -5
  58. package/dist/aura3d-cli/pull-bridge.d.ts.map +1 -1
  59. package/dist/aura3d-cli/pull-bridge.js +38 -1
  60. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  61. package/dist/controls/ControlState.d.ts +1 -1
  62. package/dist/controls/ControlState.d.ts.map +1 -1
  63. package/dist/controls/DragControls.d.ts +21 -1
  64. package/dist/controls/DragControls.d.ts.map +1 -1
  65. package/dist/controls/DragControls.js +24 -2
  66. package/dist/controls/DragControls.js.map +1 -1
  67. package/dist/controls/FirstPersonControls.d.ts +10 -1
  68. package/dist/controls/FirstPersonControls.d.ts.map +1 -1
  69. package/dist/controls/FirstPersonControls.js +18 -2
  70. package/dist/controls/FirstPersonControls.js.map +1 -1
  71. package/dist/controls/FlyControls.d.ts +42 -0
  72. package/dist/controls/FlyControls.d.ts.map +1 -1
  73. package/dist/controls/FlyControls.js +106 -3
  74. package/dist/controls/FlyControls.js.map +1 -1
  75. package/dist/controls/MapControls.d.ts +13 -0
  76. package/dist/controls/MapControls.d.ts.map +1 -1
  77. package/dist/controls/MapControls.js +40 -2
  78. package/dist/controls/MapControls.js.map +1 -1
  79. package/dist/controls/OrbitControls.d.ts +54 -0
  80. package/dist/controls/OrbitControls.d.ts.map +1 -1
  81. package/dist/controls/OrbitControls.js +133 -0
  82. package/dist/controls/OrbitControls.js.map +1 -1
  83. package/dist/controls/PointerLockControls.d.ts +12 -5
  84. package/dist/controls/PointerLockControls.d.ts.map +1 -1
  85. package/dist/controls/PointerLockControls.js +30 -11
  86. package/dist/controls/PointerLockControls.js.map +1 -1
  87. package/dist/controls/SelectionManager.d.ts +22 -1
  88. package/dist/controls/SelectionManager.d.ts.map +1 -1
  89. package/dist/controls/SelectionManager.js +64 -6
  90. package/dist/controls/SelectionManager.js.map +1 -1
  91. package/dist/controls/TransformControls.d.ts +135 -1
  92. package/dist/controls/TransformControls.d.ts.map +1 -1
  93. package/dist/controls/TransformControls.js +534 -10
  94. package/dist/controls/TransformControls.js.map +1 -1
  95. package/dist/controls/index.d.ts +7 -2
  96. package/dist/controls/index.d.ts.map +1 -1
  97. package/dist/controls/index.js +1 -1
  98. package/dist/controls/index.js.map +1 -1
  99. package/dist/create-aura3d/index.js +1 -1
  100. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts +2 -0
  101. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.d.ts.map +1 -1
  102. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js +781 -46
  103. package/dist/create-aura3d/showcase-spec-game-geometry-extractor.js.map +1 -1
  104. package/dist/create-aura3d/showcase-spec-game-template-evidence.d.ts.map +1 -1
  105. package/dist/create-aura3d/showcase-spec-game-template-evidence.js +24 -4
  106. package/dist/create-aura3d/showcase-spec-game-template-evidence.js.map +1 -1
  107. package/dist/create-aura3d/showcase-spec-platformer-artifacts.d.ts.map +1 -1
  108. package/dist/create-aura3d/showcase-spec-platformer-artifacts.js +28 -17
  109. package/dist/create-aura3d/showcase-spec-platformer-artifacts.js.map +1 -1
  110. package/dist/create-aura3d/showcase-spec-racing-artifacts.d.ts.map +1 -1
  111. package/dist/create-aura3d/showcase-spec-racing-artifacts.js +10 -5
  112. package/dist/create-aura3d/showcase-spec-racing-artifacts.js.map +1 -1
  113. package/dist/create-aura3d/showcase-spec-replacement-candidates.js +26 -0
  114. package/dist/create-aura3d/showcase-spec-replacement-candidates.js.map +1 -1
  115. package/dist/ecs/components/MeshComponent.d.ts +5 -2
  116. package/dist/ecs/components/MeshComponent.d.ts.map +1 -1
  117. package/dist/ecs/components/MeshComponent.js.map +1 -1
  118. package/dist/editor-runtime/CartoonSceneEditor.d.ts +111 -0
  119. package/dist/editor-runtime/CartoonSceneEditor.d.ts.map +1 -0
  120. package/dist/editor-runtime/CartoonSceneEditor.js +285 -0
  121. package/dist/editor-runtime/CartoonSceneEditor.js.map +1 -0
  122. package/dist/editor-runtime/InteractiveTransformGizmo.d.ts +142 -0
  123. package/dist/editor-runtime/InteractiveTransformGizmo.d.ts.map +1 -0
  124. package/dist/editor-runtime/InteractiveTransformGizmo.js +468 -0
  125. package/dist/editor-runtime/InteractiveTransformGizmo.js.map +1 -0
  126. package/dist/editor-runtime/index.d.ts +2 -0
  127. package/dist/editor-runtime/index.d.ts.map +1 -1
  128. package/dist/editor-runtime/index.js +1 -0
  129. package/dist/editor-runtime/index.js.map +1 -1
  130. package/dist/engine/agent-api/CartoonAssetManifest.d.ts +50 -0
  131. package/dist/engine/agent-api/CartoonAssetManifest.d.ts.map +1 -0
  132. package/dist/engine/agent-api/CartoonAssetManifest.js +65 -0
  133. package/dist/engine/agent-api/CartoonAssetManifest.js.map +1 -0
  134. package/dist/engine/agent-api/CartoonDirector.d.ts +120 -0
  135. package/dist/engine/agent-api/CartoonDirector.d.ts.map +1 -0
  136. package/dist/engine/agent-api/CartoonDirector.js +432 -0
  137. package/dist/engine/agent-api/CartoonDirector.js.map +1 -0
  138. package/dist/engine/agent-api/CartoonEpisodePackage.d.ts +51 -0
  139. package/dist/engine/agent-api/CartoonEpisodePackage.d.ts.map +1 -0
  140. package/dist/engine/agent-api/CartoonEpisodePackage.js +79 -0
  141. package/dist/engine/agent-api/CartoonEpisodePackage.js.map +1 -0
  142. package/dist/engine/agent-api/CartoonMotionQuality.d.ts +83 -0
  143. package/dist/engine/agent-api/CartoonMotionQuality.d.ts.map +1 -0
  144. package/dist/engine/agent-api/CartoonMotionQuality.js +128 -0
  145. package/dist/engine/agent-api/CartoonMotionQuality.js.map +1 -0
  146. package/dist/engine/agent-api/CartoonPerformance.d.ts +150 -0
  147. package/dist/engine/agent-api/CartoonPerformance.d.ts.map +1 -0
  148. package/dist/engine/agent-api/CartoonPerformance.js +345 -0
  149. package/dist/engine/agent-api/CartoonPerformance.js.map +1 -0
  150. package/dist/engine/agent-api/CartoonRenderQueue.d.ts +143 -0
  151. package/dist/engine/agent-api/CartoonRenderQueue.d.ts.map +1 -0
  152. package/dist/engine/agent-api/CartoonRenderQueue.js +410 -0
  153. package/dist/engine/agent-api/CartoonRenderQueue.js.map +1 -0
  154. package/dist/engine/agent-api/CartoonRouteProof.d.ts +112 -0
  155. package/dist/engine/agent-api/CartoonRouteProof.d.ts.map +1 -0
  156. package/dist/engine/agent-api/CartoonRouteProof.js +127 -0
  157. package/dist/engine/agent-api/CartoonRouteProof.js.map +1 -0
  158. package/dist/engine/agent-api/GameEvidence.d.ts +1 -0
  159. package/dist/engine/agent-api/GameEvidence.d.ts.map +1 -1
  160. package/dist/engine/agent-api/GameEvidence.js +1 -0
  161. package/dist/engine/agent-api/GameEvidence.js.map +1 -1
  162. package/dist/engine/agent-api/GameGenreKits.d.ts +13 -0
  163. package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
  164. package/dist/engine/agent-api/GameGenreKits.js +57 -11
  165. package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
  166. package/dist/engine/agent-api/GameRuntime.d.ts +1 -0
  167. package/dist/engine/agent-api/GameRuntime.d.ts.map +1 -1
  168. package/dist/engine/agent-api/GameRuntime.js +1 -0
  169. package/dist/engine/agent-api/GameRuntime.js.map +1 -1
  170. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +12 -0
  171. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
  172. package/dist/engine/agent-api/GameSceneGeometryBindings.js +2 -0
  173. package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
  174. package/dist/engine/agent-api/LayeredSceneComposition.d.ts +295 -0
  175. package/dist/engine/agent-api/LayeredSceneComposition.d.ts.map +1 -0
  176. package/dist/engine/agent-api/LayeredSceneComposition.js +387 -0
  177. package/dist/engine/agent-api/LayeredSceneComposition.js.map +1 -0
  178. package/dist/engine/agent-api/SceneGroundingUtils.d.ts +62 -0
  179. package/dist/engine/agent-api/SceneGroundingUtils.d.ts.map +1 -1
  180. package/dist/engine/agent-api/SceneGroundingUtils.js +37 -0
  181. package/dist/engine/agent-api/SceneGroundingUtils.js.map +1 -1
  182. package/dist/engine/agent-api/SubjectFramingUtils.d.ts +127 -0
  183. package/dist/engine/agent-api/SubjectFramingUtils.d.ts.map +1 -0
  184. package/dist/engine/agent-api/SubjectFramingUtils.js +126 -0
  185. package/dist/engine/agent-api/SubjectFramingUtils.js.map +1 -0
  186. package/dist/engine/agent-api/TouchControlBinding.d.ts +81 -0
  187. package/dist/engine/agent-api/TouchControlBinding.d.ts.map +1 -0
  188. package/dist/engine/agent-api/TouchControlBinding.js +116 -0
  189. package/dist/engine/agent-api/TouchControlBinding.js.map +1 -0
  190. package/dist/engine/agent-api/index.d.ts +39 -0
  191. package/dist/engine/agent-api/index.d.ts.map +1 -1
  192. package/dist/engine/agent-api/index.js +546 -74
  193. package/dist/engine/agent-api/index.js.map +1 -1
  194. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  195. package/dist/engine/production-runtime/GameRenderPreset.d.ts +32 -0
  196. package/dist/engine/production-runtime/GameRenderPreset.d.ts.map +1 -1
  197. package/dist/engine/production-runtime/GameRenderPreset.js +37 -2
  198. package/dist/engine/production-runtime/GameRenderPreset.js.map +1 -1
  199. package/dist/engine/production-runtime/TypedGLBActor.d.ts +8 -0
  200. package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
  201. package/dist/engine/production-runtime/TypedGLBActor.js +2 -1
  202. package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
  203. package/dist/input/controls/PointerLockControls.d.ts +1 -1
  204. package/dist/input/controls/PointerLockControls.d.ts.map +1 -1
  205. package/dist/input/controls/PointerLockControls.js +12 -0
  206. package/dist/input/controls/PointerLockControls.js.map +1 -1
  207. package/dist/physics/Collider.d.ts +1 -1
  208. package/dist/physics/Collider.d.ts.map +1 -1
  209. package/dist/physics/Collider.js +2 -2
  210. package/dist/physics/Collider.js.map +1 -1
  211. package/dist/physics/CollisionEvents.d.ts +1 -0
  212. package/dist/physics/CollisionEvents.d.ts.map +1 -1
  213. package/dist/physics/CollisionEvents.js.map +1 -1
  214. package/dist/physics/NarrowPhase.d.ts +11 -0
  215. package/dist/physics/NarrowPhase.d.ts.map +1 -0
  216. package/dist/physics/NarrowPhase.js +565 -0
  217. package/dist/physics/NarrowPhase.js.map +1 -0
  218. package/dist/physics/PhysicsDebugDraw.js +19 -1
  219. package/dist/physics/PhysicsDebugDraw.js.map +1 -1
  220. package/dist/physics/PhysicsWorld.d.ts +43 -0
  221. package/dist/physics/PhysicsWorld.d.ts.map +1 -1
  222. package/dist/physics/PhysicsWorld.js +305 -30
  223. package/dist/physics/PhysicsWorld.js.map +1 -1
  224. package/dist/physics/RigidBody.d.ts +8 -1
  225. package/dist/physics/RigidBody.d.ts.map +1 -1
  226. package/dist/physics/RigidBody.js +32 -5
  227. package/dist/physics/RigidBody.js.map +1 -1
  228. package/dist/physics/Shape.d.ts +16 -2
  229. package/dist/physics/Shape.d.ts.map +1 -1
  230. package/dist/physics/Shape.js +93 -31
  231. package/dist/physics/Shape.js.map +1 -1
  232. package/dist/physics/TimeOfImpact.d.ts +15 -0
  233. package/dist/physics/TimeOfImpact.d.ts.map +1 -0
  234. package/dist/physics/TimeOfImpact.js +81 -0
  235. package/dist/physics/TimeOfImpact.js.map +1 -0
  236. package/dist/physics/index.d.ts +2 -0
  237. package/dist/physics/index.d.ts.map +1 -1
  238. package/dist/physics/index.js +2 -0
  239. package/dist/physics/index.js.map +1 -1
  240. package/dist/rendering/CascadedShadowMaps.d.ts +9 -1
  241. package/dist/rendering/CascadedShadowMaps.d.ts.map +1 -1
  242. package/dist/rendering/CascadedShadowMaps.js +68 -0
  243. package/dist/rendering/CascadedShadowMaps.js.map +1 -1
  244. package/dist/rendering/ClusteredForwardLighting.d.ts +28 -0
  245. package/dist/rendering/ClusteredForwardLighting.d.ts.map +1 -0
  246. package/dist/rendering/ClusteredForwardLighting.js +156 -0
  247. package/dist/rendering/ClusteredForwardLighting.js.map +1 -0
  248. package/dist/rendering/DepthPass.d.ts +14 -1
  249. package/dist/rendering/DepthPass.d.ts.map +1 -1
  250. package/dist/rendering/DepthPass.js +19 -4
  251. package/dist/rendering/DepthPass.js.map +1 -1
  252. package/dist/rendering/EnvironmentMapResources.d.ts +59 -1
  253. package/dist/rendering/EnvironmentMapResources.d.ts.map +1 -1
  254. package/dist/rendering/EnvironmentMapResources.js +140 -100
  255. package/dist/rendering/EnvironmentMapResources.js.map +1 -1
  256. package/dist/rendering/EnvironmentPlatform.d.ts +3 -2
  257. package/dist/rendering/EnvironmentPlatform.d.ts.map +1 -1
  258. package/dist/rendering/EnvironmentPlatform.js +99 -44
  259. package/dist/rendering/EnvironmentPlatform.js.map +1 -1
  260. package/dist/rendering/ForwardPass.d.ts +37 -0
  261. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  262. package/dist/rendering/ForwardPass.js +234 -7
  263. package/dist/rendering/ForwardPass.js.map +1 -1
  264. package/dist/rendering/Geometry.d.ts +19 -0
  265. package/dist/rendering/Geometry.d.ts.map +1 -1
  266. package/dist/rendering/Geometry.js +64 -0
  267. package/dist/rendering/Geometry.js.map +1 -1
  268. package/dist/rendering/IBL.d.ts.map +1 -1
  269. package/dist/rendering/IBL.js +0 -1
  270. package/dist/rendering/IBL.js.map +1 -1
  271. package/dist/rendering/LightCollector.d.ts +5 -1
  272. package/dist/rendering/LightCollector.d.ts.map +1 -1
  273. package/dist/rendering/LightCollector.js +16 -3
  274. package/dist/rendering/LightCollector.js.map +1 -1
  275. package/dist/rendering/LightUniforms.d.ts +26 -1
  276. package/dist/rendering/LightUniforms.d.ts.map +1 -1
  277. package/dist/rendering/LightUniforms.js +140 -8
  278. package/dist/rendering/LightUniforms.js.map +1 -1
  279. package/dist/rendering/LightingRig.d.ts +77 -0
  280. package/dist/rendering/LightingRig.d.ts.map +1 -1
  281. package/dist/rendering/LightingRig.js +100 -11
  282. package/dist/rendering/LightingRig.js.map +1 -1
  283. package/dist/rendering/MeshConsolidation.d.ts +63 -0
  284. package/dist/rendering/MeshConsolidation.d.ts.map +1 -0
  285. package/dist/rendering/MeshConsolidation.js +251 -0
  286. package/dist/rendering/MeshConsolidation.js.map +1 -0
  287. package/dist/rendering/PMREM.d.ts +13 -1
  288. package/dist/rendering/PMREM.d.ts.map +1 -1
  289. package/dist/rendering/PMREM.js +18 -4
  290. package/dist/rendering/PMREM.js.map +1 -1
  291. package/dist/rendering/PostProcessPass.d.ts +24 -2
  292. package/dist/rendering/PostProcessPass.d.ts.map +1 -1
  293. package/dist/rendering/PostProcessPass.js +136 -18
  294. package/dist/rendering/PostProcessPass.js.map +1 -1
  295. package/dist/rendering/PrimitiveSubmissionAudit.d.ts +195 -0
  296. package/dist/rendering/PrimitiveSubmissionAudit.d.ts.map +1 -0
  297. package/dist/rendering/PrimitiveSubmissionAudit.js +280 -0
  298. package/dist/rendering/PrimitiveSubmissionAudit.js.map +1 -0
  299. package/dist/rendering/ProductTurntableFixtures.d.ts.map +1 -1
  300. package/dist/rendering/ProductTurntableFixtures.js +93 -13
  301. package/dist/rendering/ProductTurntableFixtures.js.map +1 -1
  302. package/dist/rendering/ReflectionProbe.d.ts +59 -0
  303. package/dist/rendering/ReflectionProbe.d.ts.map +1 -1
  304. package/dist/rendering/ReflectionProbe.js +224 -0
  305. package/dist/rendering/ReflectionProbe.js.map +1 -1
  306. package/dist/rendering/ReflectionSurfaces.d.ts +4 -2
  307. package/dist/rendering/ReflectionSurfaces.d.ts.map +1 -1
  308. package/dist/rendering/ReflectionSurfaces.js +13 -8
  309. package/dist/rendering/ReflectionSurfaces.js.map +1 -1
  310. package/dist/rendering/RenderBackend.d.ts +1 -1
  311. package/dist/rendering/RenderBackend.d.ts.map +1 -1
  312. package/dist/rendering/RenderBackend.js +5 -1
  313. package/dist/rendering/RenderBackend.js.map +1 -1
  314. package/dist/rendering/RenderDevice.d.ts +13 -2
  315. package/dist/rendering/RenderDevice.d.ts.map +1 -1
  316. package/dist/rendering/RenderDevice.js +5 -2
  317. package/dist/rendering/RenderDevice.js.map +1 -1
  318. package/dist/rendering/Renderer.d.ts +41 -1
  319. package/dist/rendering/Renderer.d.ts.map +1 -1
  320. package/dist/rendering/Renderer.js +406 -61
  321. package/dist/rendering/Renderer.js.map +1 -1
  322. package/dist/rendering/RendererPostprocessPlan.d.ts +10 -3
  323. package/dist/rendering/RendererPostprocessPlan.d.ts.map +1 -1
  324. package/dist/rendering/RendererPostprocessPlan.js +25 -5
  325. package/dist/rendering/RendererPostprocessPlan.js.map +1 -1
  326. package/dist/rendering/RendererVisualPipelineReport.d.ts +3 -2
  327. package/dist/rendering/RendererVisualPipelineReport.d.ts.map +1 -1
  328. package/dist/rendering/RendererVisualPipelineReport.js +2 -0
  329. package/dist/rendering/RendererVisualPipelineReport.js.map +1 -1
  330. package/dist/rendering/ScreenSpaceLineMaterial.d.ts +34 -0
  331. package/dist/rendering/ScreenSpaceLineMaterial.d.ts.map +1 -0
  332. package/dist/rendering/ScreenSpaceLineMaterial.js +93 -0
  333. package/dist/rendering/ScreenSpaceLineMaterial.js.map +1 -0
  334. package/dist/rendering/ShaderChunks.d.ts +7 -0
  335. package/dist/rendering/ShaderChunks.d.ts.map +1 -1
  336. package/dist/rendering/ShaderChunks.js +137 -0
  337. package/dist/rendering/ShaderChunks.js.map +1 -1
  338. package/dist/rendering/ShaderLibrary.d.ts +17 -0
  339. package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
  340. package/dist/rendering/ShaderLibrary.js +940 -98
  341. package/dist/rendering/ShaderLibrary.js.map +1 -1
  342. package/dist/rendering/ShadowPass.d.ts +10 -0
  343. package/dist/rendering/ShadowPass.d.ts.map +1 -1
  344. package/dist/rendering/ShadowPass.js +8 -1
  345. package/dist/rendering/ShadowPass.js.map +1 -1
  346. package/dist/rendering/SkinnedLitMaterial.d.ts +6 -0
  347. package/dist/rendering/SkinnedLitMaterial.d.ts.map +1 -1
  348. package/dist/rendering/SkinnedLitMaterial.js +22 -8
  349. package/dist/rendering/SkinnedLitMaterial.js.map +1 -1
  350. package/dist/rendering/SkinnedUnlitMaterial.d.ts +8 -0
  351. package/dist/rendering/SkinnedUnlitMaterial.d.ts.map +1 -1
  352. package/dist/rendering/SkinnedUnlitMaterial.js +26 -9
  353. package/dist/rendering/SkinnedUnlitMaterial.js.map +1 -1
  354. package/dist/rendering/SpecularPrefilter.d.ts +42 -0
  355. package/dist/rendering/SpecularPrefilter.d.ts.map +1 -0
  356. package/dist/rendering/SpecularPrefilter.js +480 -0
  357. package/dist/rendering/SpecularPrefilter.js.map +1 -0
  358. package/dist/rendering/TerrainFixtures.d.ts +24 -0
  359. package/dist/rendering/TerrainFixtures.d.ts.map +1 -1
  360. package/dist/rendering/TerrainFixtures.js +96 -0
  361. package/dist/rendering/TerrainFixtures.js.map +1 -1
  362. package/dist/rendering/Texture.d.ts +7 -0
  363. package/dist/rendering/Texture.d.ts.map +1 -1
  364. package/dist/rendering/Texture.js +9 -0
  365. package/dist/rendering/Texture.js.map +1 -1
  366. package/dist/rendering/VertexFormat.d.ts +34 -1
  367. package/dist/rendering/VertexFormat.d.ts.map +1 -1
  368. package/dist/rendering/VertexFormat.js +61 -0
  369. package/dist/rendering/VertexFormat.js.map +1 -1
  370. package/dist/rendering/WebGL2Device.d.ts +48 -0
  371. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  372. package/dist/rendering/WebGL2Device.js +1298 -44
  373. package/dist/rendering/WebGL2Device.js.map +1 -1
  374. package/dist/rendering/WebGPUDevice.d.ts +7 -2
  375. package/dist/rendering/WebGPUDevice.d.ts.map +1 -1
  376. package/dist/rendering/WebGPUDevice.js +111 -17
  377. package/dist/rendering/WebGPUDevice.js.map +1 -1
  378. package/dist/rendering/WebGPUSkinningLimits.d.ts +14 -0
  379. package/dist/rendering/WebGPUSkinningLimits.d.ts.map +1 -0
  380. package/dist/rendering/WebGPUSkinningLimits.js +14 -0
  381. package/dist/rendering/WebGPUSkinningLimits.js.map +1 -0
  382. package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts +19 -0
  383. package/dist/rendering/cartoon/CartoonMaterialStyle.d.ts.map +1 -0
  384. package/dist/rendering/cartoon/CartoonMaterialStyle.js +13 -0
  385. package/dist/rendering/cartoon/CartoonMaterialStyle.js.map +1 -0
  386. package/dist/rendering/cartoon/CartoonRenderPreset.d.ts +36 -0
  387. package/dist/rendering/cartoon/CartoonRenderPreset.d.ts.map +1 -0
  388. package/dist/rendering/cartoon/CartoonRenderPreset.js +23 -0
  389. package/dist/rendering/cartoon/CartoonRenderPreset.js.map +1 -0
  390. package/dist/rendering/cartoon/CartoonToonMaterial.d.ts +130 -0
  391. package/dist/rendering/cartoon/CartoonToonMaterial.d.ts.map +1 -0
  392. package/dist/rendering/cartoon/CartoonToonMaterial.js +303 -0
  393. package/dist/rendering/cartoon/CartoonToonMaterial.js.map +1 -0
  394. package/dist/rendering/cartoon/CartoonVisualQuality.d.ts +28 -0
  395. package/dist/rendering/cartoon/CartoonVisualQuality.d.ts.map +1 -0
  396. package/dist/rendering/cartoon/CartoonVisualQuality.js +39 -0
  397. package/dist/rendering/cartoon/CartoonVisualQuality.js.map +1 -0
  398. package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts +79 -0
  399. package/dist/rendering/cartoon/applyCartoonRenderPreset.d.ts.map +1 -0
  400. package/dist/rendering/cartoon/applyCartoonRenderPreset.js +88 -0
  401. package/dist/rendering/cartoon/applyCartoonRenderPreset.js.map +1 -0
  402. package/dist/rendering/cartoon/index.d.ts +6 -0
  403. package/dist/rendering/cartoon/index.d.ts.map +1 -0
  404. package/dist/rendering/cartoon/index.js +6 -0
  405. package/dist/rendering/cartoon/index.js.map +1 -0
  406. package/dist/rendering/index.d.ts +26 -15
  407. package/dist/rendering/index.d.ts.map +1 -1
  408. package/dist/rendering/index.js +15 -9
  409. package/dist/rendering/index.js.map +1 -1
  410. package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts +93 -0
  411. package/dist/rendering/postprocess/NativeLdrEffectLuts.d.ts.map +1 -0
  412. package/dist/rendering/postprocess/NativeLdrEffectLuts.js +202 -0
  413. package/dist/rendering/postprocess/NativeLdrEffectLuts.js.map +1 -0
  414. package/dist/rendering/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
  415. package/dist/rendering/production-runtime/PBRHDRPipeline.js +3 -0
  416. package/dist/rendering/production-runtime/PBRHDRPipeline.js.map +1 -1
  417. package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts +1 -0
  418. package/dist/rendering/production-runtime/ProductionRendererTypes.d.ts.map +1 -1
  419. package/dist/rendering/production-runtime/ProductionRendererTypes.js.map +1 -1
  420. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.d.ts.map +1 -1
  421. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js +5 -3
  422. package/dist/rendering/production-runtime/ProductionWebGL2Renderer.js.map +1 -1
  423. package/dist/rendering/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
  424. package/dist/rendering/production-runtime/ProductionWebGPURenderer.js +9 -5
  425. package/dist/rendering/production-runtime/ProductionWebGPURenderer.js.map +1 -1
  426. package/dist/rendering/production-runtime/TransmissionBackdropCapture.d.ts +5 -0
  427. package/dist/rendering/production-runtime/TransmissionBackdropCapture.d.ts.map +1 -1
  428. package/dist/rendering/production-runtime/TransmissionBackdropCapture.js +40 -0
  429. package/dist/rendering/production-runtime/TransmissionBackdropCapture.js.map +1 -1
  430. package/dist/rendering/production-runtime/environment/HDRLoader.d.ts +6 -0
  431. package/dist/rendering/production-runtime/environment/HDRLoader.d.ts.map +1 -1
  432. package/dist/rendering/production-runtime/environment/HDRLoader.js +19 -0
  433. package/dist/rendering/production-runtime/environment/HDRLoader.js.map +1 -1
  434. package/dist/rendering/production-runtime/index.d.ts +3 -1
  435. package/dist/rendering/production-runtime/index.d.ts.map +1 -1
  436. package/dist/rendering/production-runtime/index.js +1 -0
  437. package/dist/rendering/production-runtime/index.js.map +1 -1
  438. package/dist/scene/Light.d.ts +1 -1
  439. package/dist/scene/Light.d.ts.map +1 -1
  440. package/dist/scene/RectAreaLight.d.ts +22 -0
  441. package/dist/scene/RectAreaLight.d.ts.map +1 -0
  442. package/dist/scene/RectAreaLight.js +46 -0
  443. package/dist/scene/RectAreaLight.js.map +1 -0
  444. package/dist/scene/Scene.d.ts +6 -1
  445. package/dist/scene/Scene.d.ts.map +1 -1
  446. package/dist/scene/Scene.js +8 -1
  447. package/dist/scene/Scene.js.map +1 -1
  448. package/dist/scene/SceneSerializer.d.ts +3 -1
  449. package/dist/scene/SceneSerializer.d.ts.map +1 -1
  450. package/dist/scene/SceneSerializer.js +14 -7
  451. package/dist/scene/SceneSerializer.js.map +1 -1
  452. package/dist/scene/index.d.ts +1 -0
  453. package/dist/scene/index.d.ts.map +1 -1
  454. package/dist/scene/index.js +1 -0
  455. package/dist/scene/index.js.map +1 -1
  456. package/dist/scripting/CartoonNodeCategories.d.ts +3 -0
  457. package/dist/scripting/CartoonNodeCategories.d.ts.map +1 -0
  458. package/dist/scripting/CartoonNodeCategories.js +9 -0
  459. package/dist/scripting/CartoonNodeCategories.js.map +1 -0
  460. package/dist/scripting/CartoonVisualNodes.d.ts +3 -0
  461. package/dist/scripting/CartoonVisualNodes.d.ts.map +1 -0
  462. package/dist/scripting/CartoonVisualNodes.js +41 -0
  463. package/dist/scripting/CartoonVisualNodes.js.map +1 -0
  464. package/package.json +124 -113
  465. package/templates/cinematic-scene/package.json +1 -1
  466. package/templates/mini-game/package.json +1 -1
  467. package/templates/product-viewer/package.json +1 -1
  468. package/templates/production-asset-inspector/README.md +5 -0
  469. package/templates/production-asset-inspector/asset-manifest.json +9 -0
  470. package/templates/production-asset-inspector/index.html +2 -0
  471. package/templates/production-asset-inspector/package.json +17 -0
  472. package/templates/production-asset-inspector/src/main.ts +16 -0
  473. package/templates/production-material-studio/README.md +5 -0
  474. package/templates/production-material-studio/asset-manifest.json +9 -0
  475. package/templates/production-material-studio/index.html +2 -0
  476. package/templates/production-material-studio/package.json +17 -0
  477. package/templates/production-material-studio/src/main.ts +16 -0
  478. package/templates/production-product-configurator/README.md +5 -0
  479. package/templates/production-product-configurator/asset-manifest.json +9 -0
  480. package/templates/production-product-configurator/index.html +2 -0
  481. package/templates/production-product-configurator/package.json +17 -0
  482. package/templates/production-product-configurator/src/main.ts +16 -0
  483. package/templates/production-product-viewer/README.md +7 -0
  484. package/templates/production-product-viewer/asset-manifest.json +8 -0
  485. package/templates/production-product-viewer/index.html +26 -0
  486. package/templates/production-product-viewer/package.json +17 -0
  487. package/templates/production-product-viewer/src/main.ts +70 -0
@@ -0,0 +1,36 @@
1
+ import { type CartoonMaterialStyle, type CartoonMaterialStyleOptions } from "./CartoonMaterialStyle.js";
2
+ export interface CartoonRenderPresetOptions {
3
+ readonly name?: string | undefined;
4
+ readonly resolution?: {
5
+ readonly width: number;
6
+ readonly height: number;
7
+ } | undefined;
8
+ readonly materialStyle?: CartoonMaterialStyleOptions | undefined;
9
+ readonly reducedMotion?: boolean | undefined;
10
+ readonly reducedFlash?: boolean | undefined;
11
+ }
12
+ export interface CartoonRenderPresetEvidence {
13
+ readonly kind: "cartoon-render-preset-evidence";
14
+ readonly name: string;
15
+ readonly resolution: {
16
+ readonly width: number;
17
+ readonly height: number;
18
+ };
19
+ readonly lights: readonly string[];
20
+ readonly shadows: {
21
+ readonly soft: boolean;
22
+ readonly contact: boolean;
23
+ };
24
+ readonly postprocess: {
25
+ readonly bloom: number;
26
+ readonly colorGrade: string;
27
+ readonly fogDepthCue: boolean;
28
+ };
29
+ readonly materialStyle: CartoonMaterialStyle;
30
+ readonly frameBudgetMs: number;
31
+ readonly debugOverlaysAllowedInExport: false;
32
+ readonly reducedMotion: boolean;
33
+ readonly reducedFlash: boolean;
34
+ }
35
+ export declare function createCartoonRenderPreset(options?: CartoonRenderPresetOptions): CartoonRenderPresetEvidence;
36
+ //# sourceMappingURL=CartoonRenderPreset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonRenderPreset.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonRenderPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAEpI,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,2BAA2B,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,gCAAgC,CAAC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7G,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,4BAA4B,EAAE,KAAK,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,2BAA2B,CAoB/G"}
@@ -0,0 +1,23 @@
1
+ import { createCartoonMaterialStyle } from "./CartoonMaterialStyle.js";
2
+ export function createCartoonRenderPreset(options = {}) {
3
+ const reducedMotion = options.reducedMotion ?? false;
4
+ const reducedFlash = options.reducedFlash ?? false;
5
+ return {
6
+ kind: "cartoon-render-preset-evidence",
7
+ name: options.name ?? "moon-garden-cartoon",
8
+ resolution: options.resolution ?? { width: 1280, height: 720 },
9
+ lights: ["soft-key", "cool-rim", "set-fill", "emissive-practicals"],
10
+ shadows: { soft: true, contact: true },
11
+ postprocess: {
12
+ bloom: reducedFlash ? 0.08 : 0.18,
13
+ colorGrade: "storybook-night",
14
+ fogDepthCue: true
15
+ },
16
+ materialStyle: createCartoonMaterialStyle(options.materialStyle),
17
+ frameBudgetMs: 16.7,
18
+ debugOverlaysAllowedInExport: false,
19
+ reducedMotion,
20
+ reducedFlash
21
+ };
22
+ }
23
+ //# sourceMappingURL=CartoonRenderPreset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonRenderPreset.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonRenderPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAA+D,MAAM,2BAA2B,CAAC;AAwBpI,MAAM,UAAU,yBAAyB,CAAC,UAAsC,EAAE;IAChF,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC;IACrD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;IACnD,OAAO;QACL,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,qBAAqB;QAC3C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,CAAC;QACnE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;QACtC,WAAW,EAAE;YACX,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YACjC,UAAU,EAAE,iBAAiB;YAC7B,WAAW,EAAE,IAAI;SAClB;QACD,aAAa,EAAE,0BAA0B,CAAC,OAAO,CAAC,aAAa,CAAC;QAChE,aAAa,EAAE,IAAI;QACnB,4BAA4B,EAAE,KAAK;QACnC,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,130 @@
1
+ import { Material, type RenderState } from "../Material.js";
2
+ /**
3
+ * CartoonToonMaterial — a REAL toon / cel material for the Aura3D rendering engine.
4
+ *
5
+ * Unlike `CartoonMaterialStyle` (which is descriptive metadata consumed by nothing),
6
+ * this module defines an actual material that drives a dedicated GLSL program:
7
+ *
8
+ * - It quantizes the diffuse lighting term (N·L) into a small number of discrete
9
+ * bands ("ramp steps") instead of smoothly shading — the defining trait of cel
10
+ * shading.
11
+ * - It adds a Fresnel-style rim light that brightens silhouette edges.
12
+ * - It is wired into the engine the same way `PBRMaterial` / `UnlitMaterial` are:
13
+ * it extends `Material`, references a `shaderKey`, declares a `uniformSchema`, and
14
+ * seeds `parameters`. The matching shader source is registered into the default
15
+ * `ShaderLibrary` via `registerCartoonToonShader` (called from
16
+ * `createDefaultShaderLibrary`), so any renderer that resolves materials through
17
+ * the shader library can compile and bind this program.
18
+ *
19
+ * WHAT IS WIRED TO PIXELS:
20
+ * - The TS ramp/quantize math (`quantizeToonBand`, `toonDiffuseRamp`, `toonRimTerm`,
21
+ * `toonShadeColor`) is pure, tested, and is the exact same math the GLSL fragment
22
+ * shader performs (mirrored line-for-line). Any renderer that runs the
23
+ * `aura3d/cartoon-toon` program gets banded lighting + rim light on real fragments.
24
+ * - The material's uniforms (band count, rim color/power, light direction, colors)
25
+ * flow through the standard `Material` parameter system, so they reach the GPU
26
+ * through whatever uniform-binding path the active `RenderDevice` uses for other
27
+ * materials.
28
+ *
29
+ * WHAT IS NOT (yet) WIRED:
30
+ * - The cartoon shader is a single-directional-light forward program. It does NOT
31
+ * consume the full `u_lightData[]` array / shadow maps / IBL that the PBR shader
32
+ * does. It is intentionally a focused NPR program, not a PBR superset.
33
+ * - Outlines are NOT drawn by this material. Outlines come from the existing Sobel
34
+ * `outlinePixels()` post-pass, which `applyCartoonRenderPreset` enables separately.
35
+ */
36
+ export declare const CARTOON_TOON_SHADER_NAME = "aura3d/cartoon-toon";
37
+ export declare const CARTOON_TOON_SHADER_MARKER = "@aura3d-shader:cartoon-toon";
38
+ export declare const CARTOON_TOON_MIN_BANDS = 2;
39
+ export declare const CARTOON_TOON_MAX_BANDS = 16;
40
+ export interface CartoonToonMaterialOptions {
41
+ readonly name?: string;
42
+ /** Base albedo (RGBA), each channel in [0, 1]. */
43
+ readonly baseColor?: readonly [number, number, number, number];
44
+ /** Number of discrete lighting bands. Integer in [2, 16]. */
45
+ readonly bands?: number;
46
+ /**
47
+ * Ambient floor in [0, 1] — the darkest band is never fully black, so cel art
48
+ * keeps readable shapes in shadow. Multiplies base color in the lowest band.
49
+ */
50
+ readonly shadowFloor?: number;
51
+ /** Direction the key light travels FROM the surface toward the light (world space). */
52
+ readonly lightDirection?: readonly [number, number, number];
53
+ /** Key light color (RGB), each channel in [0, 1]. */
54
+ readonly lightColor?: readonly [number, number, number];
55
+ /** Rim light color (RGB), each channel in [0, 1]. */
56
+ readonly rimColor?: readonly [number, number, number];
57
+ /** Rim falloff exponent (higher = tighter rim). Finite and >= 0. */
58
+ readonly rimPower?: number;
59
+ /** Rim contribution strength in [0, 1]. */
60
+ readonly rimIntensity?: number;
61
+ /** Alpha discard threshold in [0, 1]. */
62
+ readonly alphaCutoff?: number;
63
+ readonly renderState?: Partial<RenderState>;
64
+ }
65
+ /**
66
+ * Quantize a continuous lighting term `t` in [0, 1] into one of `bands` discrete
67
+ * levels, returning the band's representative value in [0, 1].
68
+ *
69
+ * With `bands = 4` the output can only be 0, 1/3, 2/3, or 1 — hard stepped shading.
70
+ * This mirrors GLSL `floor(t * bands) / (bands - 1)` clamped so the brightest band
71
+ * reaches full strength.
72
+ */
73
+ export declare function quantizeToonBand(t: number, bands: number): number;
74
+ /**
75
+ * Toon diffuse ramp: take raw N·L (already clamped to [0, 1]), quantize it into
76
+ * bands, then lift the darkest band off zero by `shadowFloor` so shadows stay
77
+ * readable. Returns a multiplier in [shadowFloor, 1].
78
+ */
79
+ export declare function toonDiffuseRamp(ndotl: number, bands: number, shadowFloor: number): number;
80
+ /**
81
+ * Fresnel-style rim term: bright at grazing angles (N·V small), dark facing the
82
+ * camera. `ndotv` is clamped N·V. Returns rim strength in [0, rimIntensity].
83
+ */
84
+ export declare function toonRimTerm(ndotv: number, rimPower: number, rimIntensity: number): number;
85
+ export interface ToonShadeInputs {
86
+ readonly baseColor: readonly [number, number, number];
87
+ readonly ndotl: number;
88
+ readonly ndotv: number;
89
+ readonly bands: number;
90
+ readonly shadowFloor: number;
91
+ readonly lightColor: readonly [number, number, number];
92
+ readonly rimColor: readonly [number, number, number];
93
+ readonly rimPower: number;
94
+ readonly rimIntensity: number;
95
+ }
96
+ /**
97
+ * Full toon shade for one fragment: banded diffuse * base * light, plus additive
98
+ * rim. Returns linear RGB (unclamped channels are clamped to [0, 1] for output
99
+ * parity with the shader's final clamp). This is exactly what the GLSL `main()`
100
+ * computes per pixel.
101
+ */
102
+ export declare function toonShadeColor(inputs: ToonShadeInputs): [number, number, number];
103
+ export declare const CARTOON_TOON_VERTEX_SOURCE = "#version 300 es\n// @aura3d-shader:cartoon-toon\nprecision highp float;\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec3 a_normal;\nlayout(location = 4) in vec4 a_color;\nuniform mat4 u_modelViewProjection;\nuniform mat4 u_modelMatrix;\nuniform mat4 u_normalMatrix;\nout vec3 v_normal;\nout vec3 v_worldPosition;\nout vec4 v_vertexColor;\nvoid main() {\n v_normal = mat3(u_normalMatrix) * a_normal;\n v_worldPosition = (u_modelMatrix * vec4(a_position, 1.0)).xyz;\n v_vertexColor = a_color;\n gl_Position = u_modelViewProjection * vec4(a_position, 1.0);\n}\n";
104
+ export declare const CARTOON_TOON_FRAGMENT_SOURCE = "#version 300 es\n// @aura3d-shader:cartoon-toon\nprecision highp float;\nuniform vec4 u_baseColor;\nuniform float u_alphaCutoff;\nuniform float u_toonBands;\nuniform float u_toonShadowFloor;\nuniform vec3 u_toonLightDirection;\nuniform vec3 u_toonLightColor;\nuniform vec3 u_toonRimColor;\nuniform float u_toonRimPower;\nuniform float u_toonRimIntensity;\nuniform vec3 u_cameraPosition;\nin vec3 v_normal;\nin vec3 v_worldPosition;\nin vec4 v_vertexColor;\nout vec4 outColor;\n\n// Quantize t in [0,1] into u_toonBands discrete levels \u2014 mirrors quantizeToonBand().\nfloat a3dToonQuantize(float t, float bands) {\n float steps = clamp(floor(bands + 0.5), 2.0, 16.0);\n float clamped = clamp(t, 0.0, 1.0);\n float level = min(steps - 1.0, floor(clamped * steps));\n return level / (steps - 1.0);\n}\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n if (!gl_FrontFacing) normal = -normal;\n vec3 lightDir = normalize(u_toonLightDirection);\n vec3 viewDir = normalize(u_cameraPosition - v_worldPosition);\n\n float ndotl = max(dot(normal, lightDir), 0.0);\n float ndotv = clamp(dot(normal, viewDir), 0.0, 1.0);\n\n // Banded diffuse ramp lifted off zero by the shadow floor \u2014 mirrors toonDiffuseRamp().\n float floorTerm = clamp(u_toonShadowFloor, 0.0, 1.0);\n float banded = a3dToonQuantize(ndotl, u_toonBands);\n float ramp = floorTerm + (1.0 - floorTerm) * banded;\n\n // Fresnel rim \u2014 mirrors toonRimTerm().\n float rim = clamp(pow(1.0 - ndotv, max(u_toonRimPower, 0.0)), 0.0, 1.0) * clamp(u_toonRimIntensity, 0.0, 1.0);\n\n vec3 base = u_baseColor.rgb * v_vertexColor.rgb;\n vec3 lit = base * ramp * u_toonLightColor;\n vec3 color = clamp(lit + u_toonRimColor * rim, 0.0, 1.0);\n\n float alpha = u_baseColor.a * v_vertexColor.a;\n if (alpha < u_alphaCutoff) discard;\n outColor = vec4(color, alpha);\n}\n";
105
+ /**
106
+ * Register the cartoon toon shader program into a ShaderLibrary-like object.
107
+ * Typed structurally to avoid an import cycle with ShaderLibrary; the real
108
+ * `ShaderLibrary.register` matches this signature.
109
+ */
110
+ export interface CartoonToonShaderRegistrar {
111
+ register(shader: {
112
+ readonly name: string;
113
+ readonly marker: string;
114
+ readonly vertex: string;
115
+ readonly fragment: string;
116
+ }): void;
117
+ }
118
+ export declare function registerCartoonToonShader(library: CartoonToonShaderRegistrar): void;
119
+ export declare class CartoonToonMaterial extends Material {
120
+ constructor(options?: CartoonToonMaterialOptions);
121
+ set baseColor(value: readonly [number, number, number, number]);
122
+ get baseColor(): readonly [number, number, number, number];
123
+ set bands(value: number);
124
+ get bands(): number;
125
+ set shadowFloor(value: number);
126
+ get shadowFloor(): number;
127
+ set rimIntensity(value: number);
128
+ get rimIntensity(): number;
129
+ }
130
+ //# sourceMappingURL=CartoonToonMaterial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonToonMaterial.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonToonMaterial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ import { Material } from "../Material.js";
2
+ /**
3
+ * CartoonToonMaterial — a REAL toon / cel material for the Aura3D rendering engine.
4
+ *
5
+ * Unlike `CartoonMaterialStyle` (which is descriptive metadata consumed by nothing),
6
+ * this module defines an actual material that drives a dedicated GLSL program:
7
+ *
8
+ * - It quantizes the diffuse lighting term (N·L) into a small number of discrete
9
+ * bands ("ramp steps") instead of smoothly shading — the defining trait of cel
10
+ * shading.
11
+ * - It adds a Fresnel-style rim light that brightens silhouette edges.
12
+ * - It is wired into the engine the same way `PBRMaterial` / `UnlitMaterial` are:
13
+ * it extends `Material`, references a `shaderKey`, declares a `uniformSchema`, and
14
+ * seeds `parameters`. The matching shader source is registered into the default
15
+ * `ShaderLibrary` via `registerCartoonToonShader` (called from
16
+ * `createDefaultShaderLibrary`), so any renderer that resolves materials through
17
+ * the shader library can compile and bind this program.
18
+ *
19
+ * WHAT IS WIRED TO PIXELS:
20
+ * - The TS ramp/quantize math (`quantizeToonBand`, `toonDiffuseRamp`, `toonRimTerm`,
21
+ * `toonShadeColor`) is pure, tested, and is the exact same math the GLSL fragment
22
+ * shader performs (mirrored line-for-line). Any renderer that runs the
23
+ * `aura3d/cartoon-toon` program gets banded lighting + rim light on real fragments.
24
+ * - The material's uniforms (band count, rim color/power, light direction, colors)
25
+ * flow through the standard `Material` parameter system, so they reach the GPU
26
+ * through whatever uniform-binding path the active `RenderDevice` uses for other
27
+ * materials.
28
+ *
29
+ * WHAT IS NOT (yet) WIRED:
30
+ * - The cartoon shader is a single-directional-light forward program. It does NOT
31
+ * consume the full `u_lightData[]` array / shadow maps / IBL that the PBR shader
32
+ * does. It is intentionally a focused NPR program, not a PBR superset.
33
+ * - Outlines are NOT drawn by this material. Outlines come from the existing Sobel
34
+ * `outlinePixels()` post-pass, which `applyCartoonRenderPreset` enables separately.
35
+ */
36
+ export const CARTOON_TOON_SHADER_NAME = "aura3d/cartoon-toon";
37
+ export const CARTOON_TOON_SHADER_MARKER = "@aura3d-shader:cartoon-toon";
38
+ export const CARTOON_TOON_MIN_BANDS = 2;
39
+ export const CARTOON_TOON_MAX_BANDS = 16;
40
+ /* ------------------------------------------------------------------------- *
41
+ * Pure ramp / quantize math.
42
+ *
43
+ * These functions are the single source of truth for the toon lighting model.
44
+ * The GLSL fragment shader below performs the identical computation, so testing
45
+ * these functions validates the actual pixel math (modulo float precision).
46
+ * ------------------------------------------------------------------------- */
47
+ function clamp01(value) {
48
+ return value < 0 ? 0 : value > 1 ? 1 : value;
49
+ }
50
+ /**
51
+ * Quantize a continuous lighting term `t` in [0, 1] into one of `bands` discrete
52
+ * levels, returning the band's representative value in [0, 1].
53
+ *
54
+ * With `bands = 4` the output can only be 0, 1/3, 2/3, or 1 — hard stepped shading.
55
+ * This mirrors GLSL `floor(t * bands) / (bands - 1)` clamped so the brightest band
56
+ * reaches full strength.
57
+ */
58
+ export function quantizeToonBand(t, bands) {
59
+ const steps = Math.max(CARTOON_TOON_MIN_BANDS, Math.min(CARTOON_TOON_MAX_BANDS, Math.floor(bands)));
60
+ const clamped = clamp01(t);
61
+ // floor into [0, steps-1], then normalize so the top band maps to exactly 1.
62
+ const level = Math.min(steps - 1, Math.floor(clamped * steps));
63
+ return level / (steps - 1);
64
+ }
65
+ /**
66
+ * Toon diffuse ramp: take raw N·L (already clamped to [0, 1]), quantize it into
67
+ * bands, then lift the darkest band off zero by `shadowFloor` so shadows stay
68
+ * readable. Returns a multiplier in [shadowFloor, 1].
69
+ */
70
+ export function toonDiffuseRamp(ndotl, bands, shadowFloor) {
71
+ const floor = clamp01(shadowFloor);
72
+ const banded = quantizeToonBand(clamp01(ndotl), bands);
73
+ return floor + (1 - floor) * banded;
74
+ }
75
+ /**
76
+ * Fresnel-style rim term: bright at grazing angles (N·V small), dark facing the
77
+ * camera. `ndotv` is clamped N·V. Returns rim strength in [0, rimIntensity].
78
+ */
79
+ export function toonRimTerm(ndotv, rimPower, rimIntensity) {
80
+ const power = Number.isFinite(rimPower) && rimPower >= 0 ? rimPower : 2;
81
+ const intensity = clamp01(rimIntensity);
82
+ const fresnel = Math.pow(1 - clamp01(ndotv), power);
83
+ return clamp01(fresnel) * intensity;
84
+ }
85
+ /**
86
+ * Full toon shade for one fragment: banded diffuse * base * light, plus additive
87
+ * rim. Returns linear RGB (unclamped channels are clamped to [0, 1] for output
88
+ * parity with the shader's final clamp). This is exactly what the GLSL `main()`
89
+ * computes per pixel.
90
+ */
91
+ export function toonShadeColor(inputs) {
92
+ const ramp = toonDiffuseRamp(inputs.ndotl, inputs.bands, inputs.shadowFloor);
93
+ const rim = toonRimTerm(inputs.ndotv, inputs.rimPower, inputs.rimIntensity);
94
+ const out = [0, 0, 0];
95
+ for (let i = 0; i < 3; i += 1) {
96
+ const lit = inputs.baseColor[i] * ramp * inputs.lightColor[i];
97
+ const rimContribution = inputs.rimColor[i] * rim;
98
+ out[i] = clamp01(lit + rimContribution);
99
+ }
100
+ return out;
101
+ }
102
+ /* ------------------------------------------------------------------------- *
103
+ * GLSL program. The fragment shader mirrors the TS math above.
104
+ * Registered into the default ShaderLibrary by `registerCartoonToonShader`.
105
+ * ------------------------------------------------------------------------- */
106
+ export const CARTOON_TOON_VERTEX_SOURCE = `#version 300 es
107
+ // ${CARTOON_TOON_SHADER_MARKER}
108
+ precision highp float;
109
+ layout(location = 0) in vec3 a_position;
110
+ layout(location = 1) in vec3 a_normal;
111
+ layout(location = 4) in vec4 a_color;
112
+ uniform mat4 u_modelViewProjection;
113
+ uniform mat4 u_modelMatrix;
114
+ uniform mat4 u_normalMatrix;
115
+ out vec3 v_normal;
116
+ out vec3 v_worldPosition;
117
+ out vec4 v_vertexColor;
118
+ void main() {
119
+ v_normal = mat3(u_normalMatrix) * a_normal;
120
+ v_worldPosition = (u_modelMatrix * vec4(a_position, 1.0)).xyz;
121
+ v_vertexColor = a_color;
122
+ gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
123
+ }
124
+ `;
125
+ export const CARTOON_TOON_FRAGMENT_SOURCE = `#version 300 es
126
+ // ${CARTOON_TOON_SHADER_MARKER}
127
+ precision highp float;
128
+ uniform vec4 u_baseColor;
129
+ uniform float u_alphaCutoff;
130
+ uniform float u_toonBands;
131
+ uniform float u_toonShadowFloor;
132
+ uniform vec3 u_toonLightDirection;
133
+ uniform vec3 u_toonLightColor;
134
+ uniform vec3 u_toonRimColor;
135
+ uniform float u_toonRimPower;
136
+ uniform float u_toonRimIntensity;
137
+ uniform vec3 u_cameraPosition;
138
+ in vec3 v_normal;
139
+ in vec3 v_worldPosition;
140
+ in vec4 v_vertexColor;
141
+ out vec4 outColor;
142
+
143
+ // Quantize t in [0,1] into u_toonBands discrete levels — mirrors quantizeToonBand().
144
+ float a3dToonQuantize(float t, float bands) {
145
+ float steps = clamp(floor(bands + 0.5), 2.0, 16.0);
146
+ float clamped = clamp(t, 0.0, 1.0);
147
+ float level = min(steps - 1.0, floor(clamped * steps));
148
+ return level / (steps - 1.0);
149
+ }
150
+
151
+ void main() {
152
+ vec3 normal = normalize(v_normal);
153
+ if (!gl_FrontFacing) normal = -normal;
154
+ vec3 lightDir = normalize(u_toonLightDirection);
155
+ vec3 viewDir = normalize(u_cameraPosition - v_worldPosition);
156
+
157
+ float ndotl = max(dot(normal, lightDir), 0.0);
158
+ float ndotv = clamp(dot(normal, viewDir), 0.0, 1.0);
159
+
160
+ // Banded diffuse ramp lifted off zero by the shadow floor — mirrors toonDiffuseRamp().
161
+ float floorTerm = clamp(u_toonShadowFloor, 0.0, 1.0);
162
+ float banded = a3dToonQuantize(ndotl, u_toonBands);
163
+ float ramp = floorTerm + (1.0 - floorTerm) * banded;
164
+
165
+ // Fresnel rim — mirrors toonRimTerm().
166
+ float rim = clamp(pow(1.0 - ndotv, max(u_toonRimPower, 0.0)), 0.0, 1.0) * clamp(u_toonRimIntensity, 0.0, 1.0);
167
+
168
+ vec3 base = u_baseColor.rgb * v_vertexColor.rgb;
169
+ vec3 lit = base * ramp * u_toonLightColor;
170
+ vec3 color = clamp(lit + u_toonRimColor * rim, 0.0, 1.0);
171
+
172
+ float alpha = u_baseColor.a * v_vertexColor.a;
173
+ if (alpha < u_alphaCutoff) discard;
174
+ outColor = vec4(color, alpha);
175
+ }
176
+ `;
177
+ export function registerCartoonToonShader(library) {
178
+ library.register({
179
+ name: CARTOON_TOON_SHADER_NAME,
180
+ marker: CARTOON_TOON_SHADER_MARKER,
181
+ vertex: CARTOON_TOON_VERTEX_SOURCE,
182
+ fragment: CARTOON_TOON_FRAGMENT_SOURCE
183
+ });
184
+ }
185
+ function identityMatrix() {
186
+ return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
187
+ }
188
+ function validateUnit(value, label) {
189
+ if (!Number.isFinite(value) || value < 0 || value > 1) {
190
+ throw new RangeError(`CartoonToonMaterial ${label} must be finite and within [0, 1]`);
191
+ }
192
+ }
193
+ function validateColor4(value, label) {
194
+ if (value.length !== 4 || value.some((c) => !Number.isFinite(c) || c < 0 || c > 1)) {
195
+ throw new RangeError(`CartoonToonMaterial ${label} must contain four finite values in [0, 1]`);
196
+ }
197
+ }
198
+ function validateColor3(value, label) {
199
+ if (value.length !== 3 || value.some((c) => !Number.isFinite(c) || c < 0 || c > 1)) {
200
+ throw new RangeError(`CartoonToonMaterial ${label} must contain three finite values in [0, 1]`);
201
+ }
202
+ }
203
+ function validateFiniteVec3(value, label) {
204
+ if (value.length !== 3 || value.some((c) => !Number.isFinite(c))) {
205
+ throw new RangeError(`CartoonToonMaterial ${label} must contain three finite values`);
206
+ }
207
+ }
208
+ export class CartoonToonMaterial extends Material {
209
+ constructor(options = {}) {
210
+ const baseColor = options.baseColor ?? [0.92, 0.58, 0.16, 1];
211
+ const lightDirection = options.lightDirection ?? [0.3, 0.8, 0.5];
212
+ const lightColor = options.lightColor ?? [1, 1, 1];
213
+ const rimColor = options.rimColor ?? [0.6, 0.7, 1];
214
+ const bands = options.bands ?? 4;
215
+ const shadowFloor = options.shadowFloor ?? 0.35;
216
+ const rimPower = options.rimPower ?? 3;
217
+ const rimIntensity = options.rimIntensity ?? 0.5;
218
+ const alphaCutoff = options.alphaCutoff ?? 0;
219
+ validateColor4(baseColor, "baseColor");
220
+ validateFiniteVec3(lightDirection, "lightDirection");
221
+ if (Math.hypot(...lightDirection) <= 0) {
222
+ throw new RangeError("CartoonToonMaterial lightDirection must be non-zero");
223
+ }
224
+ validateColor3(lightColor, "lightColor");
225
+ validateColor3(rimColor, "rimColor");
226
+ if (!Number.isInteger(bands) || bands < CARTOON_TOON_MIN_BANDS || bands > CARTOON_TOON_MAX_BANDS) {
227
+ throw new RangeError(`CartoonToonMaterial bands must be an integer in [${CARTOON_TOON_MIN_BANDS}, ${CARTOON_TOON_MAX_BANDS}]`);
228
+ }
229
+ validateUnit(shadowFloor, "shadowFloor");
230
+ if (!Number.isFinite(rimPower) || rimPower < 0) {
231
+ throw new RangeError("CartoonToonMaterial rimPower must be finite and non-negative");
232
+ }
233
+ validateUnit(rimIntensity, "rimIntensity");
234
+ validateUnit(alphaCutoff, "alphaCutoff");
235
+ super({
236
+ name: options.name ?? "cartoon-toon",
237
+ shaderKey: CARTOON_TOON_SHADER_NAME,
238
+ renderState: options.renderState,
239
+ parameters: {
240
+ u_baseColor: baseColor,
241
+ u_alphaCutoff: alphaCutoff,
242
+ u_toonBands: bands,
243
+ u_toonShadowFloor: shadowFloor,
244
+ u_toonLightDirection: lightDirection,
245
+ u_toonLightColor: lightColor,
246
+ u_toonRimColor: rimColor,
247
+ u_toonRimPower: rimPower,
248
+ u_toonRimIntensity: rimIntensity,
249
+ u_cameraPosition: [0, 0, 0],
250
+ u_modelViewProjection: identityMatrix(),
251
+ u_modelMatrix: identityMatrix(),
252
+ u_normalMatrix: identityMatrix()
253
+ },
254
+ requiredAttributes: ["a_position", "a_normal"],
255
+ uniformSchema: [
256
+ { name: "u_baseColor", kind: "vec4" },
257
+ { name: "u_alphaCutoff", kind: "float" },
258
+ { name: "u_toonBands", kind: "float" },
259
+ { name: "u_toonShadowFloor", kind: "float" },
260
+ { name: "u_toonLightDirection", kind: "vec3" },
261
+ { name: "u_toonLightColor", kind: "vec3" },
262
+ { name: "u_toonRimColor", kind: "vec3" },
263
+ { name: "u_toonRimPower", kind: "float" },
264
+ { name: "u_toonRimIntensity", kind: "float" },
265
+ { name: "u_cameraPosition", kind: "vec3" },
266
+ { name: "u_modelViewProjection", kind: "mat4" },
267
+ { name: "u_modelMatrix", kind: "mat4" },
268
+ { name: "u_normalMatrix", kind: "mat4" }
269
+ ]
270
+ });
271
+ }
272
+ set baseColor(value) {
273
+ validateColor4(value, "baseColor");
274
+ this.setParameter("u_baseColor", value);
275
+ }
276
+ get baseColor() {
277
+ return this.getParameter("u_baseColor");
278
+ }
279
+ set bands(value) {
280
+ if (!Number.isInteger(value) || value < CARTOON_TOON_MIN_BANDS || value > CARTOON_TOON_MAX_BANDS) {
281
+ throw new RangeError(`CartoonToonMaterial bands must be an integer in [${CARTOON_TOON_MIN_BANDS}, ${CARTOON_TOON_MAX_BANDS}]`);
282
+ }
283
+ this.setParameter("u_toonBands", value);
284
+ }
285
+ get bands() {
286
+ return this.getParameter("u_toonBands");
287
+ }
288
+ set shadowFloor(value) {
289
+ validateUnit(value, "shadowFloor");
290
+ this.setParameter("u_toonShadowFloor", value);
291
+ }
292
+ get shadowFloor() {
293
+ return this.getParameter("u_toonShadowFloor");
294
+ }
295
+ set rimIntensity(value) {
296
+ validateUnit(value, "rimIntensity");
297
+ this.setParameter("u_toonRimIntensity", value);
298
+ }
299
+ get rimIntensity() {
300
+ return this.getParameter("u_toonRimIntensity");
301
+ }
302
+ }
303
+ //# sourceMappingURL=CartoonToonMaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonToonMaterial.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonToonMaterial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type FrameVisualMetrics, type FrameVisualQualityThresholds } from "../FrameVisualMetrics.js";
2
+ export interface CartoonFrameVisualInput {
3
+ readonly id: string;
4
+ readonly metrics: FrameVisualMetrics;
5
+ readonly characterCount?: number | undefined;
6
+ readonly captionOccluded?: boolean | undefined;
7
+ readonly routeChromeVisible?: boolean | undefined;
8
+ readonly debugOverlayVisible?: boolean | undefined;
9
+ }
10
+ export interface CartoonFrameVisualQuality {
11
+ readonly id: string;
12
+ readonly ok: boolean;
13
+ readonly failures: readonly string[];
14
+ }
15
+ export interface CartoonVisualQualityReport {
16
+ readonly kind: "cartoon-visual-quality";
17
+ readonly ok: boolean;
18
+ readonly frames: readonly CartoonFrameVisualQuality[];
19
+ readonly visibleCharacterCount: number;
20
+ readonly blockers: readonly string[];
21
+ }
22
+ export interface CartoonVisualQualityOptions {
23
+ readonly thresholds?: FrameVisualQualityThresholds | undefined;
24
+ readonly minVisibleCharacters?: number | undefined;
25
+ }
26
+ export declare function createCartoonVisualQualityReport(frames: readonly CartoonFrameVisualInput[], options?: CartoonVisualQualityOptions): CartoonVisualQualityReport;
27
+ export declare const defaultCartoonVisualQualityThresholds: FrameVisualQualityThresholds;
28
+ //# sourceMappingURL=CartoonVisualQuality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonVisualQuality.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonVisualQuality.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,kBAAkB,EAAE,KAAK,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAElI,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACtD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,4BAA4B,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpD;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,SAAS,uBAAuB,EAAE,EAC1C,OAAO,GAAE,2BAAgC,GACxC,0BAA0B,CA0B5B;AAED,eAAO,MAAM,qCAAqC,EAAE,4BASnD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { evaluateFrameVisualQuality } from "../FrameVisualMetrics.js";
2
+ export function createCartoonVisualQualityReport(frames, options = {}) {
3
+ const thresholds = options.thresholds ?? defaultCartoonVisualQualityThresholds;
4
+ const frameResults = frames.map((frame) => {
5
+ const base = evaluateFrameVisualQuality(frame.metrics, thresholds);
6
+ const failures = [
7
+ ...base.failures,
8
+ frame.captionOccluded ? "caption occludes important action" : undefined,
9
+ frame.routeChromeVisible ? "route chrome is visible" : undefined,
10
+ frame.debugOverlayVisible ? "debug overlay is visible" : undefined
11
+ ].filter((failure) => Boolean(failure));
12
+ return { id: frame.id, ok: failures.length === 0, failures };
13
+ });
14
+ const visibleCharacterCount = Math.max(0, ...frames.map((frame) => frame.characterCount ?? 0));
15
+ const blockers = [
16
+ ...frameResults.flatMap((frame) => frame.failures.map((failure) => `${frame.id}: ${failure}`)),
17
+ visibleCharacterCount < (options.minVisibleCharacters ?? 2)
18
+ ? `visibleCharacterCount ${visibleCharacterCount} < ${options.minVisibleCharacters ?? 2}`
19
+ : undefined
20
+ ].filter((blocker) => Boolean(blocker));
21
+ return {
22
+ kind: "cartoon-visual-quality",
23
+ ok: blockers.length === 0,
24
+ frames: frameResults,
25
+ visibleCharacterCount,
26
+ blockers
27
+ };
28
+ }
29
+ export const defaultCartoonVisualQualityThresholds = {
30
+ minNonDarkRatio: 0.08,
31
+ minSalientRatio: 0.035,
32
+ minOccupiedAreaRatio: 0.08,
33
+ minOccupiedQuadrants: 2,
34
+ minColorBuckets: 6,
35
+ maxDominantBucketRatio: 0.92,
36
+ maxFlatPixelRatio: 0.98,
37
+ minLocalContrastRatio: 0.002
38
+ };
39
+ //# sourceMappingURL=CartoonVisualQuality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonVisualQuality.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/cartoon/CartoonVisualQuality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAA8D,MAAM,0BAA0B,CAAC;AA8BlI,MAAM,UAAU,gCAAgC,CAC9C,MAA0C,EAC1C,UAAuC,EAAE;IAEzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,qCAAqC,CAAC;IAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAA6B,EAAE;QACnE,MAAM,IAAI,GAAG,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG;YACf,GAAG,IAAI,CAAC,QAAQ;YAChB,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,SAAS;YACvE,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;YAChE,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG;QACf,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC;QAC9F,qBAAqB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,CAAC;YACzD,CAAC,CAAC,yBAAyB,qBAAqB,MAAM,OAAO,CAAC,oBAAoB,IAAI,CAAC,EAAE;YACzF,CAAC,CAAC,SAAS;KACd,CAAC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,wBAAwB;QAC9B,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,MAAM,EAAE,YAAY;QACpB,qBAAqB;QACrB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qCAAqC,GAAiC;IACjF,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,IAAI;IAC1B,oBAAoB,EAAE,CAAC;IACvB,eAAe,EAAE,CAAC;IAClB,sBAAsB,EAAE,IAAI;IAC5B,iBAAiB,EAAE,IAAI;IACvB,qBAAqB,EAAE,KAAK;CAC7B,CAAC"}