@zephyr3d/scene 0.1.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 (236) hide show
  1. package/dist/animation/animation.js +173 -0
  2. package/dist/animation/animation.js.map +1 -0
  3. package/dist/animation/animationset.js +95 -0
  4. package/dist/animation/animationset.js.map +1 -0
  5. package/dist/animation/animationtrack.js +38 -0
  6. package/dist/animation/animationtrack.js.map +1 -0
  7. package/dist/animation/eulerrotationtrack.js +33 -0
  8. package/dist/animation/eulerrotationtrack.js.map +1 -0
  9. package/dist/animation/rotationtrack.js +37 -0
  10. package/dist/animation/rotationtrack.js.map +1 -0
  11. package/dist/animation/scaletrack.js +36 -0
  12. package/dist/animation/scaletrack.js.map +1 -0
  13. package/dist/animation/skeleton.js +97 -0
  14. package/dist/animation/skeleton.js.map +1 -0
  15. package/dist/animation/translationtrack.js +36 -0
  16. package/dist/animation/translationtrack.js.map +1 -0
  17. package/dist/animation/usertrack.js +47 -0
  18. package/dist/animation/usertrack.js.map +1 -0
  19. package/dist/app.js +173 -0
  20. package/dist/app.js.map +1 -0
  21. package/dist/asset/assetmanager.js +476 -0
  22. package/dist/asset/assetmanager.js.map +1 -0
  23. package/dist/asset/builtin.js +373 -0
  24. package/dist/asset/builtin.js.map +1 -0
  25. package/dist/asset/loaders/dds/dds.js +472 -0
  26. package/dist/asset/loaders/dds/dds.js.map +1 -0
  27. package/dist/asset/loaders/dds/dds_loader.js +38 -0
  28. package/dist/asset/loaders/dds/dds_loader.js.map +1 -0
  29. package/dist/asset/loaders/gltf/gltf_loader.js +981 -0
  30. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -0
  31. package/dist/asset/loaders/gltf/helpers.js +314 -0
  32. package/dist/asset/loaders/gltf/helpers.js.map +1 -0
  33. package/dist/asset/loaders/hdr/hdr.js +175 -0
  34. package/dist/asset/loaders/hdr/hdr.js.map +1 -0
  35. package/dist/asset/loaders/image/tga_Loader.js +117 -0
  36. package/dist/asset/loaders/image/tga_Loader.js.map +1 -0
  37. package/dist/asset/loaders/image/webimage_loader.js +50 -0
  38. package/dist/asset/loaders/image/webimage_loader.js.map +1 -0
  39. package/dist/asset/loaders/loader.js +45 -0
  40. package/dist/asset/loaders/loader.js.map +1 -0
  41. package/dist/asset/model.js +264 -0
  42. package/dist/asset/model.js.map +1 -0
  43. package/dist/blitter/blitter.js +389 -0
  44. package/dist/blitter/blitter.js.map +1 -0
  45. package/dist/blitter/box.js +118 -0
  46. package/dist/blitter/box.js.map +1 -0
  47. package/dist/blitter/copy.js +22 -0
  48. package/dist/blitter/copy.js.map +1 -0
  49. package/dist/blitter/depthlimitedgaussion.js +166 -0
  50. package/dist/blitter/depthlimitedgaussion.js.map +1 -0
  51. package/dist/blitter/gaussianblur.js +229 -0
  52. package/dist/blitter/gaussianblur.js.map +1 -0
  53. package/dist/camera/base.js +90 -0
  54. package/dist/camera/base.js.map +1 -0
  55. package/dist/camera/camera.js +358 -0
  56. package/dist/camera/camera.js.map +1 -0
  57. package/dist/camera/fps.js +246 -0
  58. package/dist/camera/fps.js.map +1 -0
  59. package/dist/camera/orbit.js +157 -0
  60. package/dist/camera/orbit.js.map +1 -0
  61. package/dist/camera/orthocamera.js +126 -0
  62. package/dist/camera/orthocamera.js.map +1 -0
  63. package/dist/camera/perspectivecamera.js +133 -0
  64. package/dist/camera/perspectivecamera.js.map +1 -0
  65. package/dist/index.d.ts +8402 -0
  66. package/dist/index.js +87 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/input/inputmgr.js +242 -0
  69. package/dist/input/inputmgr.js.map +1 -0
  70. package/dist/material/blinn.js +75 -0
  71. package/dist/material/blinn.js.map +1 -0
  72. package/dist/material/grassmaterial.js +221 -0
  73. package/dist/material/grassmaterial.js.map +1 -0
  74. package/dist/material/lambert.js +52 -0
  75. package/dist/material/lambert.js.map +1 -0
  76. package/dist/material/lightmodel.js +2074 -0
  77. package/dist/material/lightmodel.js.map +1 -0
  78. package/dist/material/lit.js +578 -0
  79. package/dist/material/lit.js.map +1 -0
  80. package/dist/material/material.js +458 -0
  81. package/dist/material/material.js.map +1 -0
  82. package/dist/material/meshmaterial.js +311 -0
  83. package/dist/material/meshmaterial.js.map +1 -0
  84. package/dist/material/mixins/albedocolor.js +130 -0
  85. package/dist/material/mixins/albedocolor.js.map +1 -0
  86. package/dist/material/mixins/texture.js +110 -0
  87. package/dist/material/mixins/texture.js.map +1 -0
  88. package/dist/material/mixins/vertexcolor.js +45 -0
  89. package/dist/material/mixins/vertexcolor.js.map +1 -0
  90. package/dist/material/pbr.js +27 -0
  91. package/dist/material/pbr.js.map +1 -0
  92. package/dist/material/standard.js +282 -0
  93. package/dist/material/standard.js.map +1 -0
  94. package/dist/material/terrainlightmodel.js +259 -0
  95. package/dist/material/terrainlightmodel.js.map +1 -0
  96. package/dist/material/terrainmaterial.js +139 -0
  97. package/dist/material/terrainmaterial.js.map +1 -0
  98. package/dist/material/unlit.js +29 -0
  99. package/dist/material/unlit.js.map +1 -0
  100. package/dist/posteffect/bloom.js +398 -0
  101. package/dist/posteffect/bloom.js.map +1 -0
  102. package/dist/posteffect/compositor.js +264 -0
  103. package/dist/posteffect/compositor.js.map +1 -0
  104. package/dist/posteffect/fxaa.js +291 -0
  105. package/dist/posteffect/fxaa.js.map +1 -0
  106. package/dist/posteffect/grayscale.js +87 -0
  107. package/dist/posteffect/grayscale.js.map +1 -0
  108. package/dist/posteffect/posteffect.js +165 -0
  109. package/dist/posteffect/posteffect.js.map +1 -0
  110. package/dist/posteffect/sao.js +327 -0
  111. package/dist/posteffect/sao.js.map +1 -0
  112. package/dist/posteffect/tonemap.js +112 -0
  113. package/dist/posteffect/tonemap.js.map +1 -0
  114. package/dist/posteffect/water.js +535 -0
  115. package/dist/posteffect/water.js.map +1 -0
  116. package/dist/render/clipmap.js +462 -0
  117. package/dist/render/clipmap.js.map +1 -0
  118. package/dist/render/cluster_light.js +329 -0
  119. package/dist/render/cluster_light.js.map +1 -0
  120. package/dist/render/cull_visitor.js +124 -0
  121. package/dist/render/cull_visitor.js.map +1 -0
  122. package/dist/render/depth_pass.js +47 -0
  123. package/dist/render/depth_pass.js.map +1 -0
  124. package/dist/render/envlight.js +282 -0
  125. package/dist/render/envlight.js.map +1 -0
  126. package/dist/render/forward.js +186 -0
  127. package/dist/render/forward.js.map +1 -0
  128. package/dist/render/forward_pass.js +137 -0
  129. package/dist/render/forward_pass.js.map +1 -0
  130. package/dist/render/helper.js +38 -0
  131. package/dist/render/helper.js.map +1 -0
  132. package/dist/render/primitive.js +246 -0
  133. package/dist/render/primitive.js.map +1 -0
  134. package/dist/render/render_queue.js +163 -0
  135. package/dist/render/render_queue.js.map +1 -0
  136. package/dist/render/renderpass.js +151 -0
  137. package/dist/render/renderpass.js.map +1 -0
  138. package/dist/render/renderscheme.js +61 -0
  139. package/dist/render/renderscheme.js.map +1 -0
  140. package/dist/render/scatteringlut.js +634 -0
  141. package/dist/render/scatteringlut.js.map +1 -0
  142. package/dist/render/shadowmap_pass.js +70 -0
  143. package/dist/render/shadowmap_pass.js.map +1 -0
  144. package/dist/render/sky.js +881 -0
  145. package/dist/render/sky.js.map +1 -0
  146. package/dist/render/temporalcache.js +222 -0
  147. package/dist/render/temporalcache.js.map +1 -0
  148. package/dist/render/watermesh.js +835 -0
  149. package/dist/render/watermesh.js.map +1 -0
  150. package/dist/scene/environment.js +146 -0
  151. package/dist/scene/environment.js.map +1 -0
  152. package/dist/scene/graph_node.js +69 -0
  153. package/dist/scene/graph_node.js.map +1 -0
  154. package/dist/scene/light.js +436 -0
  155. package/dist/scene/light.js.map +1 -0
  156. package/dist/scene/mesh.js +215 -0
  157. package/dist/scene/mesh.js.map +1 -0
  158. package/dist/scene/model.js +111 -0
  159. package/dist/scene/model.js.map +1 -0
  160. package/dist/scene/octree.js +651 -0
  161. package/dist/scene/octree.js.map +1 -0
  162. package/dist/scene/octree_update_visitor.js +16 -0
  163. package/dist/scene/octree_update_visitor.js.map +1 -0
  164. package/dist/scene/raycast_visitor.js +72 -0
  165. package/dist/scene/raycast_visitor.js.map +1 -0
  166. package/dist/scene/scene.js +225 -0
  167. package/dist/scene/scene.js.map +1 -0
  168. package/dist/scene/scene_node.js +299 -0
  169. package/dist/scene/scene_node.js.map +1 -0
  170. package/dist/scene/terrain/grass.js +277 -0
  171. package/dist/scene/terrain/grass.js.map +1 -0
  172. package/dist/scene/terrain/heightfield.js +391 -0
  173. package/dist/scene/terrain/heightfield.js.map +1 -0
  174. package/dist/scene/terrain/patch.js +530 -0
  175. package/dist/scene/terrain/patch.js.map +1 -0
  176. package/dist/scene/terrain/quadtree.js +430 -0
  177. package/dist/scene/terrain/quadtree.js.map +1 -0
  178. package/dist/scene/terrain/terrain.js +258 -0
  179. package/dist/scene/terrain/terrain.js.map +1 -0
  180. package/dist/scene/xform.js +224 -0
  181. package/dist/scene/xform.js.map +1 -0
  182. package/dist/shaders/builtins.js +110 -0
  183. package/dist/shaders/builtins.js.map +1 -0
  184. package/dist/shaders/framework.js +709 -0
  185. package/dist/shaders/framework.js.map +1 -0
  186. package/dist/shaders/lighting.js +335 -0
  187. package/dist/shaders/lighting.js.map +1 -0
  188. package/dist/shaders/misc.js +405 -0
  189. package/dist/shaders/misc.js.map +1 -0
  190. package/dist/shaders/noise.js +157 -0
  191. package/dist/shaders/noise.js.map +1 -0
  192. package/dist/shaders/pbr.js +132 -0
  193. package/dist/shaders/pbr.js.map +1 -0
  194. package/dist/shaders/shadow.js +642 -0
  195. package/dist/shaders/shadow.js.map +1 -0
  196. package/dist/shaders/water.js +630 -0
  197. package/dist/shaders/water.js.map +1 -0
  198. package/dist/shadow/esm.js +235 -0
  199. package/dist/shadow/esm.js.map +1 -0
  200. package/dist/shadow/pcf_opt.js +182 -0
  201. package/dist/shadow/pcf_opt.js.map +1 -0
  202. package/dist/shadow/pcf_pd.js +190 -0
  203. package/dist/shadow/pcf_pd.js.map +1 -0
  204. package/dist/shadow/shadow_impl.js +15 -0
  205. package/dist/shadow/shadow_impl.js.map +1 -0
  206. package/dist/shadow/shadowmapper.js +709 -0
  207. package/dist/shadow/shadowmapper.js.map +1 -0
  208. package/dist/shadow/ssm.js +194 -0
  209. package/dist/shadow/ssm.js.map +1 -0
  210. package/dist/shadow/vsm.js +298 -0
  211. package/dist/shadow/vsm.js.map +1 -0
  212. package/dist/shapes/box.js +313 -0
  213. package/dist/shapes/box.js.map +1 -0
  214. package/dist/shapes/cylinder.js +74 -0
  215. package/dist/shapes/cylinder.js.map +1 -0
  216. package/dist/shapes/plane.js +48 -0
  217. package/dist/shapes/plane.js.map +1 -0
  218. package/dist/shapes/shape.js +33 -0
  219. package/dist/shapes/shape.js.map +1 -0
  220. package/dist/shapes/sphere.js +91 -0
  221. package/dist/shapes/sphere.js.map +1 -0
  222. package/dist/shapes/torus.js +100 -0
  223. package/dist/shapes/torus.js.map +1 -0
  224. package/dist/utility/aabbtree.js +390 -0
  225. package/dist/utility/aabbtree.js.map +1 -0
  226. package/dist/utility/bounding_volume.js +78 -0
  227. package/dist/utility/bounding_volume.js.map +1 -0
  228. package/dist/utility/panorama.js +163 -0
  229. package/dist/utility/panorama.js.map +1 -0
  230. package/dist/utility/pmrem.js +345 -0
  231. package/dist/utility/pmrem.js.map +1 -0
  232. package/dist/utility/shprojection.js +448 -0
  233. package/dist/utility/shprojection.js.map +1 -0
  234. package/dist/values.js +48 -0
  235. package/dist/values.js.map +1 -0
  236. package/package.json +70 -0
package/dist/index.js ADDED
@@ -0,0 +1,87 @@
1
+ export { prefilterCubemap } from './utility/pmrem.js';
2
+ export { panoramaToCubemap } from './utility/panorama.js';
3
+ export { projectCubemap, projectCubemapCPU } from './utility/shprojection.js';
4
+ export { AABBTree } from './utility/aabbtree.js';
5
+ export { BoundingBox, BoundingBoxTree } from './utility/bounding_volume.js';
6
+ export { Shape } from './shapes/shape.js';
7
+ export { BoxFrameShape, BoxShape } from './shapes/box.js';
8
+ export { CylinderShape } from './shapes/cylinder.js';
9
+ export { TorusShape } from './shapes/torus.js';
10
+ export { PlaneShape } from './shapes/plane.js';
11
+ export { SphereShape } from './shapes/sphere.js';
12
+ export { RenderScheme } from './render/renderscheme.js';
13
+ export { RenderPass } from './render/renderpass.js';
14
+ export { ForwardRenderScheme } from './render/forward.js';
15
+ export { ForwardRenderPass } from './render/forward_pass.js';
16
+ export { ShadowMapPass } from './render/shadowmap_pass.js';
17
+ export { DepthRenderPass } from './render/depth_pass.js';
18
+ export { RenderQueue } from './render/render_queue.js';
19
+ export { SkyRenderer } from './render/sky.js';
20
+ export { Clipmap } from './render/clipmap.js';
21
+ export { EnvConstantAmbient, EnvHemisphericAmbient, EnvIBL, EnvironmentLighting } from './render/envlight.js';
22
+ export { Primitive } from './render/primitive.js';
23
+ export { CullVisitor } from './render/cull_visitor.js';
24
+ export { TemporalCache } from './render/temporalcache.js';
25
+ export { WaterMesh, defaultBuildParams } from './render/watermesh.js';
26
+ export { StandardMaterial } from './material/standard.js';
27
+ export { LambertMaterial } from './material/lambert.js';
28
+ export { BlinnMaterial } from './material/blinn.js';
29
+ export { UnlitMaterial } from './material/unlit.js';
30
+ export { PBRMetallicRoughnessMaterial, PBRSpecularGlossinessMaterial } from './material/pbr.js';
31
+ export { BlinnLightModel, LambertLightModel, LightModel, PBRLightModelBase, PBRLightModelMR, PBRLightModelSG, UnlitLightModel } from './material/lightmodel.js';
32
+ export { Material } from './material/material.js';
33
+ export { GrassMaterial } from './material/grassmaterial.js';
34
+ export { MAX_DETAIL_TEXTURE_LEVELS, TerrainMaterial } from './material/terrainmaterial.js';
35
+ export { Scene, SceneUpdateEvent } from './scene/scene.js';
36
+ export { EnvLightWrapper, Environment } from './scene/environment.js';
37
+ export { GraphNode } from './scene/graph_node.js';
38
+ export { BaseLight, DirectionalLight, PointLight, PunctualLight, SpotLight } from './scene/light.js';
39
+ export { Mesh } from './scene/mesh.js';
40
+ export { Model } from './scene/model.js';
41
+ export { Octree, OctreeNode, OctreeNodeChunk, OctreePlacement } from './scene/octree.js';
42
+ export { SceneNode } from './scene/scene_node.js';
43
+ export { Terrain } from './scene/terrain/terrain.js';
44
+ export { HeightField, HeightfieldBBoxTree } from './scene/terrain/heightfield.js';
45
+ export { TerrainPatch } from './scene/terrain/patch.js';
46
+ export { Quadtree, QuadtreeNode } from './scene/terrain/quadtree.js';
47
+ export { XForm } from './scene/xform.js';
48
+ export { AnimationClip } from './animation/animation.js';
49
+ export { AnimationSet } from './animation/animationset.js';
50
+ export { AnimationTrack } from './animation/animationtrack.js';
51
+ export { TranslationTrack } from './animation/translationtrack.js';
52
+ export { RotationTrack } from './animation/rotationtrack.js';
53
+ export { EulerRotationTrack } from './animation/eulerrotationtrack.js';
54
+ export { UserTrack } from './animation/usertrack.js';
55
+ export { ScaleTrack } from './animation/scaletrack.js';
56
+ export { Skeleton } from './animation/skeleton.js';
57
+ export { Camera } from './camera/camera.js';
58
+ export { OrthoCamera } from './camera/orthocamera.js';
59
+ export { PerspectiveCamera } from './camera/perspectivecamera.js';
60
+ export { BaseCameraController } from './camera/base.js';
61
+ export { FPSCameraController } from './camera/fps.js';
62
+ export { OrbitCameraController } from './camera/orbit.js';
63
+ export { ShaderFramework } from './shaders/framework.js';
64
+ export { calculateTBN, calculateTBNWithNormal, decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, encode2HalfToRGBA, encodeColorOutput, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, gammaToLinear, linearDepthToNonLinear, linearToGamma, nonLinearDepthToLinear, nonLinearDepthToLinearNormalized } from './shaders/misc.js';
65
+ export { noise3D, noisef, smoothNoise3D, worleyFBM, worleyNoise } from './shaders/noise.js';
66
+ export { createProgramFFT2H, createProgramFFT2V, createProgramH0, createProgramHk, createProgramOcean, createProgramPostFFT2 } from './shaders/water.js';
67
+ export { ShadowMapper } from './shadow/shadowmapper.js';
68
+ export { ESM } from './shadow/esm.js';
69
+ export { PCFPD } from './shadow/pcf_pd.js';
70
+ export { PCFOPT } from './shadow/pcf_opt.js';
71
+ export { VSM } from './shadow/vsm.js';
72
+ export { AssetManager } from './asset/assetmanager.js';
73
+ export { Blitter } from './blitter/blitter.js';
74
+ export { GaussianBlurBlitter } from './blitter/gaussianblur.js';
75
+ export { BoxFilterBlitter } from './blitter/box.js';
76
+ export { CopyBlitter } from './blitter/copy.js';
77
+ export { BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, DEBUG_CASCADED_SHADOW_MAPS, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, MAX_CLUSTERED_LIGHTS, MAX_FORWARD_LIGHT_COUNT, RENDER_PASS_TYPE_DEPTH_ONLY, RENDER_PASS_TYPE_FORWARD, RENDER_PASS_TYPE_SHADOWMAP } from './values.js';
78
+ export { AbstractPostEffect } from './posteffect/posteffect.js';
79
+ export { Grayscale } from './posteffect/grayscale.js';
80
+ export { Tonemap } from './posteffect/tonemap.js';
81
+ export { Bloom } from './posteffect/bloom.js';
82
+ export { SAO } from './posteffect/sao.js';
83
+ export { FXAA } from './posteffect/fxaa.js';
84
+ export { PostWater } from './posteffect/water.js';
85
+ export { Compositor } from './posteffect/compositor.js';
86
+ export { AppResizeEvent, AppTickEvent, Application } from './app.js';
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Input manager class
3
+ * @public
4
+ */ class InputManager {
5
+ _app;
6
+ _target;
7
+ _started;
8
+ _clickDistTolerance;
9
+ _clickTimeTolerance;
10
+ _dblclickDistTolerance;
11
+ _dblclickTimeTolerance;
12
+ _pointerDownHandler;
13
+ _pointerUpHandler;
14
+ _pointerMoveHandler;
15
+ _pointerCancelHandler;
16
+ _keyboardHandler;
17
+ _dragHandler;
18
+ _wheelHandler;
19
+ _captureId;
20
+ _middlewares;
21
+ _lastEventDatas;
22
+ /**
23
+ * Creates an instance of InputManager
24
+ * @param app
25
+ */ constructor(app){
26
+ this._app = app;
27
+ this._target = app.options.canvas;
28
+ this._started = false;
29
+ this._clickDistTolerance = 4 * 4;
30
+ this._clickTimeTolerance = 400;
31
+ this._dblclickDistTolerance = 4 * 4;
32
+ this._dblclickTimeTolerance = 400;
33
+ this._lastEventDatas = [];
34
+ this._pointerDownHandler = this._getPointerDownHandler();
35
+ this._pointerUpHandler = this._getPointerUpHandler();
36
+ this._pointerMoveHandler = this._getPointerMoveHander();
37
+ this._pointerCancelHandler = this._getPointerCancelHandler();
38
+ this._keyboardHandler = this._getKeyboardHandler();
39
+ this._dragHandler = this._getDragHandler();
40
+ this._wheelHandler = this._getWheelHandler();
41
+ this._captureId = -1;
42
+ this._middlewares = [];
43
+ }
44
+ /** @internal */ start() {
45
+ if (!this._started) {
46
+ this._started = true;
47
+ this._target.addEventListener('pointerdown', this._pointerDownHandler);
48
+ this._target.addEventListener('pointerup', this._pointerUpHandler);
49
+ this._target.addEventListener('pointermove', this._pointerMoveHandler);
50
+ this._target.addEventListener('pointercancel', this._pointerCancelHandler);
51
+ this._target.addEventListener('keydown', this._keyboardHandler);
52
+ this._target.addEventListener('keyup', this._keyboardHandler);
53
+ this._target.addEventListener('keypress', this._keyboardHandler);
54
+ this._target.addEventListener('drag', this._dragHandler);
55
+ this._target.addEventListener('dragenter', this._dragHandler);
56
+ this._target.addEventListener('dragleave', this._dragHandler);
57
+ this._target.addEventListener('dragstart', this._dragHandler);
58
+ this._target.addEventListener('dragend', this._dragHandler);
59
+ this._target.addEventListener('dragover', this._dragHandler);
60
+ this._target.addEventListener('drop', this._dragHandler);
61
+ this._target.addEventListener('wheel', this._wheelHandler);
62
+ }
63
+ }
64
+ /** @internal */ stop() {
65
+ if (this._started) {
66
+ this._started = false;
67
+ this._target.removeEventListener('pointerdown', this._pointerDownHandler);
68
+ this._target.removeEventListener('pointerup', this._pointerUpHandler);
69
+ this._target.removeEventListener('pointermove', this._pointerMoveHandler);
70
+ this._target.removeEventListener('pointercancel', this._pointerCancelHandler);
71
+ this._target.removeEventListener('keydown', this._keyboardHandler);
72
+ this._target.removeEventListener('keyup', this._keyboardHandler);
73
+ this._target.removeEventListener('keypress', this._keyboardHandler);
74
+ this._target.removeEventListener('drag', this._dragHandler);
75
+ this._target.removeEventListener('dragenter', this._dragHandler);
76
+ this._target.removeEventListener('dragleave', this._dragHandler);
77
+ this._target.removeEventListener('dragstart', this._dragHandler);
78
+ this._target.removeEventListener('dragend', this._dragHandler);
79
+ this._target.removeEventListener('dragover', this._dragHandler);
80
+ this._target.removeEventListener('drop', this._dragHandler);
81
+ this._target.removeEventListener('wheel', this._wheelHandler);
82
+ this._lastEventDatas = [];
83
+ }
84
+ }
85
+ /**
86
+ * Adds a event handler middleware.
87
+ *
88
+ * @remarks
89
+ * All handlers will be called in the order in which they were added
90
+ * until a handler returns true.
91
+ * If either handler returns true, the event that the Application
92
+ * listens to will not be triggered
93
+ *
94
+ * @param handler The event handler to be added
95
+ * @returns self
96
+ */ use(handler) {
97
+ if (handler) {
98
+ this._middlewares.push(handler);
99
+ }
100
+ return this;
101
+ }
102
+ _callMiddlewares(ev, type) {
103
+ for (const handler of this._middlewares){
104
+ if (handler(ev, type ?? ev.type)) {
105
+ return true;
106
+ }
107
+ }
108
+ return false;
109
+ }
110
+ _getPointerCancelHandler() {
111
+ const that = this;
112
+ return function(ev) {
113
+ const eventData = that._getPointerEventData(ev.pointerId);
114
+ eventData.lastDown = false;
115
+ eventData.lastClick = false;
116
+ if (!that._callMiddlewares(ev)) {
117
+ that._app.dispatchEvent(ev);
118
+ }
119
+ };
120
+ }
121
+ _getPointerMoveHander() {
122
+ const that = this;
123
+ return function(ev) {
124
+ const eventData = that._getPointerEventData(ev.pointerId);
125
+ eventData.lastMoveX = ev.offsetX;
126
+ eventData.lastMoveY = ev.offsetY;
127
+ if (!that._callMiddlewares(ev)) {
128
+ that._app.dispatchEvent(ev);
129
+ }
130
+ };
131
+ }
132
+ _getPointerDownHandler() {
133
+ const that = this;
134
+ return function(ev) {
135
+ if (ev.pointerType === 'mouse' && ev.button === 0) {
136
+ that._captureId = ev.pointerId;
137
+ that._app.options.canvas.setPointerCapture(ev.pointerId);
138
+ }
139
+ const eventData = that._getPointerEventData(ev.pointerId);
140
+ eventData.lastDown = true;
141
+ eventData.lastDownX = ev.offsetX;
142
+ eventData.lastDownY = ev.offsetY;
143
+ eventData.lastDownTime = Date.now();
144
+ that._app.focus();
145
+ if (!that._callMiddlewares(ev)) {
146
+ that._app.dispatchEvent(ev);
147
+ }
148
+ };
149
+ }
150
+ _getPointerUpHandler() {
151
+ const that = this;
152
+ return function(ev) {
153
+ if (ev.pointerType === 'mouse' && ev.button === 0 && that._captureId === ev.pointerId) {
154
+ that._app.options.canvas.releasePointerCapture(ev.pointerId);
155
+ that._captureId = -1;
156
+ }
157
+ const eventData = that._getPointerEventData(ev.pointerId);
158
+ let emitClickEvent = false;
159
+ let emitDoubleClickEvent = false;
160
+ const now = Date.now();
161
+ if (eventData.lastDown) {
162
+ if (now <= eventData.lastDownTime + that._clickTimeTolerance) {
163
+ let deltaX = ev.offsetX - eventData.lastDownX;
164
+ let deltaY = ev.offsetY - eventData.lastDownY;
165
+ if (deltaX * deltaX + deltaY * deltaY <= that._clickDistTolerance) {
166
+ emitClickEvent = true;
167
+ if (eventData.lastClick && now <= eventData.lastClickTime + that._dblclickTimeTolerance) {
168
+ deltaX = ev.offsetX - eventData.lastClickX;
169
+ deltaY = ev.offsetY - eventData.lastClickY;
170
+ if (deltaX * deltaX + deltaY * deltaY <= that._dblclickDistTolerance) {
171
+ emitDoubleClickEvent = true;
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+ eventData.lastDown = false;
178
+ eventData.lastMoveX = ev.offsetX;
179
+ eventData.lastMoveY = ev.offsetY;
180
+ if (!that._callMiddlewares(ev)) {
181
+ that._app.dispatchEvent(ev);
182
+ }
183
+ if (emitClickEvent) {
184
+ if (!that._callMiddlewares(ev, 'click')) {
185
+ that._app.dispatchEvent(ev, 'click');
186
+ }
187
+ if (emitDoubleClickEvent) {
188
+ if (!that._callMiddlewares(ev, 'dblclick')) {
189
+ that._app.dispatchEvent(ev, 'dblclick');
190
+ }
191
+ eventData.lastClick = false;
192
+ } else {
193
+ eventData.lastClick = true;
194
+ eventData.lastClickX = ev.offsetX;
195
+ eventData.lastClickY = ev.offsetY;
196
+ eventData.lastClickTime = now;
197
+ }
198
+ }
199
+ };
200
+ }
201
+ _getKeyboardHandler() {
202
+ const that = this;
203
+ return function(ev) {
204
+ if (!that._callMiddlewares(ev)) {
205
+ that._app.dispatchEvent(ev);
206
+ }
207
+ };
208
+ }
209
+ _getDragHandler() {
210
+ const that = this;
211
+ return function(ev) {
212
+ if (!that._callMiddlewares(ev)) {
213
+ that._app.dispatchEvent(ev);
214
+ }
215
+ };
216
+ }
217
+ _getWheelHandler() {
218
+ const that = this;
219
+ return function(ev) {
220
+ if (!that._callMiddlewares(ev)) {
221
+ that._app.dispatchEvent(ev);
222
+ }
223
+ };
224
+ }
225
+ _getPointerEventData(pointerId) {
226
+ return this._lastEventDatas[pointerId] ?? (this._lastEventDatas[pointerId] = {
227
+ lastClick: false,
228
+ lastClickX: 0,
229
+ lastClickY: 0,
230
+ lastClickTime: 0,
231
+ lastDown: false,
232
+ lastDownX: 0,
233
+ lastDownY: 0,
234
+ lastDownTime: 0,
235
+ lastMoveX: 0,
236
+ lastMoveY: 0
237
+ });
238
+ }
239
+ }
240
+
241
+ export { InputManager };
242
+ //# sourceMappingURL=inputmgr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputmgr.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,75 @@
1
+ import { applyMaterialMixins } from './meshmaterial.js';
2
+ import { LitMaterial } from './lit.js';
3
+ import { mixinVertexColor } from './mixins/vertexcolor.js';
4
+ import { mixinAlbedoColor } from './mixins/albedocolor.js';
5
+
6
+ class BlinnMaterial extends applyMaterialMixins(LitMaterial, mixinVertexColor, mixinAlbedoColor) {
7
+ _shininess;
8
+ constructor(){
9
+ super();
10
+ this._shininess = 32;
11
+ }
12
+ /** Shininess */ get shininess() {
13
+ return this._shininess;
14
+ }
15
+ set shininess(val) {
16
+ if (val !== this._shininess) {
17
+ this._shininess = val;
18
+ this.optionChanged(false);
19
+ }
20
+ }
21
+ applyUniformValues(bindGroup, ctx) {
22
+ super.applyUniformValues(bindGroup, ctx);
23
+ if (this.needFragmentColor(ctx)) {
24
+ bindGroup.setValue('kkShininess', this._shininess);
25
+ }
26
+ }
27
+ vertexShader(scope, ctx) {
28
+ super.vertexShader(scope, ctx);
29
+ scope.$inputs.zPos = scope.$builder.vec3().attrib('position');
30
+ this.transformVertexAndNormal(scope);
31
+ }
32
+ fragmentShader(scope, ctx) {
33
+ super.fragmentShader(scope, ctx);
34
+ const pb = scope.$builder;
35
+ const that = this;
36
+ if (this.needFragmentColor(ctx)) {
37
+ scope.$g.kkShininess = scope.$builder.float().uniform(2);
38
+ scope.$l.albedo = this.calculateAlbedoColor(scope, ctx);
39
+ if (this.vertexColor) {
40
+ scope.albedo = pb.mul(scope.albedo, this.getVertexColor(scope, ctx));
41
+ }
42
+ scope.$l.diffuseColor = pb.vec3(0);
43
+ scope.$l.specularColor = pb.vec3(0);
44
+ scope.$l.normal = this.calculateNormal(scope, ctx);
45
+ if (this.needCalculateEnvLight(ctx)) {
46
+ scope.diffuseColor = pb.add(scope.diffuseColor, this.getEnvLightIrradiance(scope, scope.normal, ctx));
47
+ }
48
+ this.forEachLight(scope, ctx, function(type, posRange, dirCutoff, colorIntensity, shadow) {
49
+ this.$l.lightAtten = that.calculateLightAttenuation(this, type, posRange, dirCutoff);
50
+ this.$l.lightDir = that.calculateLightDirection(this, type, posRange, dirCutoff);
51
+ this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
52
+ this.$l.viewVec = that.calculateViewVector(this);
53
+ this.$l.halfVec = pb.normalize(pb.add(this.viewVec, this.lightDir));
54
+ this.$l.NoH = pb.clamp(pb.dot(this.normal, this.halfVec), 0, 1);
55
+ this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten);
56
+ this.$l.diffuse = pb.mul(this.lightColor, this.NoL);
57
+ this.$l.specular = pb.mul(this.lightColor, pb.pow(this.NoH, this.kkShininess));
58
+ if (shadow) {
59
+ this.$l.shadow = pb.vec3(that.calculateShadow(this, this.NoL, ctx));
60
+ this.diffuse = pb.mul(this.diffuse, this.shadow);
61
+ this.specular = pb.mul(this.specular, this.shadow);
62
+ }
63
+ this.diffuseColor = pb.add(this.diffuseColor, this.diffuse);
64
+ this.specularColor = pb.add(this.specularColor, this.specular);
65
+ });
66
+ scope.$l.litColor = pb.add(pb.mul(scope.albedo, pb.vec4(scope.diffuseColor, 1)), pb.vec4(scope.specularColor, 0));
67
+ this.outputFragmentColor(scope, scope.litColor, ctx);
68
+ } else {
69
+ this.outputFragmentColor(scope, null, ctx);
70
+ }
71
+ }
72
+ }
73
+
74
+ export { BlinnMaterial };
75
+ //# sourceMappingURL=blinn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blinn.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,221 @@
1
+ import { Material } from './material.js';
2
+ import { forwardComputeLighting } from '../shaders/lighting.js';
3
+ import { RENDER_PASS_TYPE_FORWARD, RENDER_PASS_TYPE_SHADOWMAP, RENDER_PASS_TYPE_DEPTH_ONLY } from '../values.js';
4
+ import { ShaderFramework } from '../shaders/framework.js';
5
+ import { nonLinearDepthToLinearNormalized, encodeNormalizedFloatToRGBA } from '../shaders/misc.js';
6
+ import { Application } from '../app.js';
7
+ import { MESH_MATERIAL } from '../shaders/builtins.js';
8
+ import './lambert.js';
9
+ import './blinn.js';
10
+ import './unlit.js';
11
+ import { PBRLightModelMR } from './lightmodel.js';
12
+ import { Vector4, Vector2 } from '@zephyr3d/base';
13
+
14
+ /**
15
+ * The terrain material
16
+ * @public
17
+ */ class GrassMaterial extends Material {
18
+ /** @internal */ _lightModel;
19
+ /** @internal */ _terrainSize;
20
+ /** @internal */ _normalMap;
21
+ /** @internal */ _textureSize;
22
+ /** @internal */ _useAlphaToCoverage;
23
+ /**
24
+ * Creates an instance of TerrainMaterial
25
+ */ constructor(terrainSize, normalMap, grassTexture){
26
+ super();
27
+ this._lightModel = new PBRLightModelMR();
28
+ this._lightModel.metallic = 0;
29
+ this._lightModel.roughness = 1;
30
+ this._lightModel.specularFactor = new Vector4(1, 1, 1, 0.2);
31
+ this._lightModel.doubleSideLighting = false;
32
+ this._terrainSize = terrainSize;
33
+ this._normalMap = normalMap;
34
+ this._textureSize = Vector2.one();
35
+ this._useAlphaToCoverage = false;
36
+ if (grassTexture) {
37
+ this._lightModel.setAlbedoMap(grassTexture, null, 0);
38
+ this._textureSize.setXY(grassTexture.width, grassTexture.height);
39
+ }
40
+ }
41
+ /** enable alpha to coverage */ get alphaToCoverage() {
42
+ return this._useAlphaToCoverage;
43
+ }
44
+ set alphaToCoverage(val) {
45
+ if (this._useAlphaToCoverage !== !!val) {
46
+ this._useAlphaToCoverage = !!val;
47
+ if (this._useAlphaToCoverage) {
48
+ this.stateSet.useBlendingState().enableAlphaToCoverage(true);
49
+ } else {
50
+ this.stateSet.defaultBlendingState();
51
+ }
52
+ this.optionChanged(true);
53
+ }
54
+ }
55
+ /** Light model */ get lightModel() {
56
+ return this._lightModel;
57
+ }
58
+ /** Base map */ get colorMap() {
59
+ return this._lightModel.albedoMap;
60
+ }
61
+ set colorMap(tex) {
62
+ this._lightModel.setAlbedoMap(tex, null, 0);
63
+ }
64
+ /** Color */ get color() {
65
+ return this._lightModel.albedo;
66
+ }
67
+ set color(val) {
68
+ this._lightModel.albedo = val;
69
+ }
70
+ /**
71
+ * {@inheritDoc Material.isTransparent}
72
+ * @override
73
+ */ isTransparent() {
74
+ return false;
75
+ }
76
+ /**
77
+ * {@inheritDoc Material.supportLighting}
78
+ * @override
79
+ */ supportLighting() {
80
+ return this._lightModel.supportLighting();
81
+ }
82
+ /**
83
+ * {@inheritDoc Material.applyUniforms}
84
+ * @override
85
+ */ applyUniforms(bindGroup, ctx, needUpdate) {
86
+ super.applyUniforms(bindGroup, ctx, needUpdate);
87
+ this._lightModel.applyUniformsIfOutdated(bindGroup, ctx);
88
+ }
89
+ /**
90
+ * {@inheritDoc Material._applyUniforms}
91
+ * @override
92
+ */ _applyUniforms(bindGroup, ctx) {
93
+ bindGroup.setValue('terrainSize', this._terrainSize);
94
+ bindGroup.setTexture('terrainNormalMap', this._normalMap);
95
+ bindGroup.setValue('albedoTextureSize', this._textureSize);
96
+ }
97
+ /** @internal */ getHash(renderPassType) {
98
+ if (this._hash[renderPassType] === void 0 || !this._lightModel.peekHash()) {
99
+ this._hash[renderPassType] = this.createHash(renderPassType);
100
+ }
101
+ return this._hash[renderPassType];
102
+ }
103
+ /** @internal */ _createHash(renderPassType) {
104
+ return renderPassType === RENDER_PASS_TYPE_FORWARD ? `${Number(this._useAlphaToCoverage)}:${this._lightModel.getHash()}` : `${Number(this._useAlphaToCoverage)}`;
105
+ }
106
+ /** @internal */ _createProgram(pb, ctx) {
107
+ const that = this;
108
+ if (ctx.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP) {
109
+ const shadowMapParams = ctx.shadowMapInfo.get(ctx.renderPass.light);
110
+ pb.emulateDepthClamp = !!shadowMapParams.depthClampEnabled;
111
+ }
112
+ const program = pb.buildRenderProgram({
113
+ vertex (pb) {
114
+ ShaderFramework.prepareVertexShader(pb, ctx);
115
+ this.$inputs.pos = pb.vec3().attrib('position');
116
+ this.$inputs.uv = pb.vec2().attrib('texCoord0');
117
+ this.$inputs.placement = pb.vec4().attrib('texCoord1');
118
+ this.terrainNormalMap = pb.tex2D().uniform(2);
119
+ this.terrainSize = pb.vec2().uniform(2);
120
+ that._lightModel.setupUniforms(this, ctx);
121
+ pb.main(function() {
122
+ this.$l.normalSample = pb.getDevice().type === 'webgl' ? pb.textureSample(this.terrainNormalMap, pb.div(this.$inputs.placement.xz, this.terrainSize)).rgb : pb.textureSampleLevel(this.terrainNormalMap, pb.div(this.$inputs.placement.xz, this.terrainSize), 0).rgb;
123
+ this.$l.normal = pb.normalize(pb.sub(pb.mul(this.normalSample, 2), pb.vec3(1)));
124
+ this.$l.axisX = pb.vec3(1, 0, 0);
125
+ this.$l.axisZ = pb.cross(this.axisX, this.normal);
126
+ this.$l.axisX = pb.cross(this.normal, this.axisZ);
127
+ this.$l.rotPos = pb.mul(pb.mat3(this.axisX, this.normal, this.axisZ), this.$inputs.pos);
128
+ this.$l.p = pb.vec4(pb.add(this.rotPos, this.$inputs.placement.xyz), 1);
129
+ this.$outputs.texcoord0 = this.$inputs.uv;
130
+ this.$outputs.worldPosition = pb.mul(ShaderFramework.getWorldMatrix(this), this.$l.p).tag(ShaderFramework.USAGE_WORLD_POSITION);
131
+ ShaderFramework.setClipSpacePosition(this, pb.mul(ShaderFramework.getViewProjectionMatrix(this), this.$outputs.worldPosition));
132
+ if (ctx.renderPass.type === RENDER_PASS_TYPE_FORWARD) {
133
+ this.$outputs.worldNormal = pb.normalize(pb.mul(ShaderFramework.getWorldMatrix(this), pb.vec4(this.normal, 0)).xyz).tag(ShaderFramework.USAGE_WORLD_NORMAL);
134
+ this.$outputs.outVertexColor = pb.vec4(1, 1, 1, 1).tag(ShaderFramework.USAGE_VERTEX_COLOR);
135
+ }
136
+ });
137
+ },
138
+ fragment (pb) {
139
+ ShaderFramework.prepareFragmentShader(pb, ctx);
140
+ that._lightModel.setupUniforms(this, ctx);
141
+ this.albedoTextureSize = pb.vec2().uniform(2);
142
+ this.$outputs.outColor = pb.vec4();
143
+ pb.func('calcMipLevel', [
144
+ pb.vec2('coord')
145
+ ], function() {
146
+ this.$l.dx = pb.dpdx(this.coord);
147
+ this.$l.dy = pb.dpdy(this.coord);
148
+ this.$l.deltaMaxSqr = pb.max(pb.dot(this.dx, this.dx), pb.dot(this.dy, this.dy));
149
+ this.$return(pb.max(0, pb.mul(pb.log2(this.deltaMaxSqr), 0.5)));
150
+ });
151
+ if (ctx.renderPass.type === RENDER_PASS_TYPE_FORWARD) {
152
+ pb.main(function() {
153
+ this.$l.litColor = forwardComputeLighting(this, that._lightModel, ctx);
154
+ MESH_MATERIAL.DISCARD_IF_CLIPPED(this);
155
+ this.$l.a = pb.mul(this.litColor.a, pb.add(1, pb.mul(pb.max(0, this.calcMipLevel(pb.mul(this.$inputs.texcoord0, this.albedoTextureSize))), 0.25)));
156
+ if (that._useAlphaToCoverage) {
157
+ // alpha to coverage
158
+ this.a = pb.add(pb.div(pb.sub(this.litColor.a, 0.4), pb.max(pb.fwidth(this.litColor.a), 0.0001)), 0.5);
159
+ this.litColor = pb.vec4(this.litColor.rgb, this.a); //pb.vec4(pb.mul(this.litColor.rgb, this.litColor.a), this.litColor.a);
160
+ } else {
161
+ // alpha test
162
+ this.$if(pb.lessThan(this.a, 0.8), function() {
163
+ pb.discard();
164
+ });
165
+ }
166
+ MESH_MATERIAL.APPLY_FOG(this, this.litColor, ctx);
167
+ this.$outputs.outColor = MESH_MATERIAL.FRAGMENT_OUTPUT(this, this.litColor);
168
+ });
169
+ } else if (ctx.renderPass.type === RENDER_PASS_TYPE_DEPTH_ONLY) {
170
+ pb.main(function() {
171
+ this.$l.litColor = that._lightModel.calculateAlbedo(this);
172
+ MESH_MATERIAL.DISCARD_IF_CLIPPED(this);
173
+ this.$l.a = pb.mul(this.litColor.a, pb.add(1, pb.mul(pb.max(0, this.calcMipLevel(pb.mul(this.$inputs.texcoord0, this.albedoTextureSize))), 0.25)));
174
+ if (that._useAlphaToCoverage) {
175
+ // alpha to coverage
176
+ this.a = pb.add(pb.div(pb.sub(this.litColor.a, 0.4), pb.max(pb.fwidth(this.litColor.a), 0.0001)), 0.5);
177
+ this.litColor = pb.vec4(this.litColor.rgb, this.a); //pb.vec4(pb.mul(this.litColor.rgb, this.litColor.a), this.litColor.a);
178
+ } else {
179
+ // alpha test
180
+ this.$if(pb.lessThan(this.a, 0.8), function() {
181
+ pb.discard();
182
+ });
183
+ }
184
+ this.$l.depth = nonLinearDepthToLinearNormalized(this, this.$builtins.fragCoord.z);
185
+ if (Application.instance.device.type === 'webgl') {
186
+ this.$outputs.outColor = encodeNormalizedFloatToRGBA(this, this.depth);
187
+ } else {
188
+ this.$outputs.outColor = pb.vec4(this.depth, 0, 0, this.a);
189
+ }
190
+ });
191
+ } else if (ctx.renderPass.type === RENDER_PASS_TYPE_SHADOWMAP) {
192
+ pb.main(function() {
193
+ this.$l.litColor = that._lightModel.calculateAlbedo(this);
194
+ MESH_MATERIAL.DISCARD_IF_CLIPPED(this);
195
+ this.$l.a = pb.mul(this.litColor.a, pb.add(1, pb.mul(pb.max(0, this.calcMipLevel(pb.mul(this.$inputs.texcoord0, this.albedoTextureSize))), 0.25)));
196
+ if (that._useAlphaToCoverage) {
197
+ // alpha to coverage
198
+ this.a = pb.add(pb.div(pb.sub(this.litColor.a, 0.4), pb.max(pb.fwidth(this.litColor.a), 0.0001)), 0.5);
199
+ this.litColor = pb.vec4(this.litColor.rgb, this.a); //pb.vec4(pb.mul(this.litColor.rgb, this.litColor.a), this.litColor.a);
200
+ } else {
201
+ // alpha test
202
+ this.$if(pb.lessThan(this.a, 0.8), function() {
203
+ pb.discard();
204
+ });
205
+ }
206
+ const shadowMapParams = ctx.shadowMapInfo.get(ctx.renderPass.light);
207
+ this.$outputs.outColor = shadowMapParams.impl.computeShadowMapDepth(shadowMapParams, this);
208
+ });
209
+ } else {
210
+ throw new Error(`unknown render pass type: ${ctx.renderPass.type}`);
211
+ }
212
+ }
213
+ });
214
+ // console.log(program?.getShaderSource('vertex'));
215
+ // console.log(program?.getShaderSource('fragment'));
216
+ return program;
217
+ }
218
+ }
219
+
220
+ export { GrassMaterial };
221
+ //# sourceMappingURL=grassmaterial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grassmaterial.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}