@zephyr3d/scene 0.1.2 → 0.3.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 (166) hide show
  1. package/dist/asset/assetmanager.js +83 -34
  2. package/dist/asset/assetmanager.js.map +1 -1
  3. package/dist/asset/builtin.js +2 -2
  4. package/dist/asset/loaders/gltf/gltf_loader.js +105 -59
  5. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr/hdr.js +1 -1
  7. package/dist/blitter/blitter.js +0 -1
  8. package/dist/blitter/blitter.js.map +1 -1
  9. package/dist/blitter/depthlimitedgaussion.js +0 -1
  10. package/dist/blitter/depthlimitedgaussion.js.map +1 -1
  11. package/dist/blitter/gaussianblur.js +0 -1
  12. package/dist/blitter/gaussianblur.js.map +1 -1
  13. package/dist/camera/camera.js +11 -8
  14. package/dist/camera/camera.js.map +1 -1
  15. package/dist/camera/orbit.js +24 -7
  16. package/dist/camera/orbit.js.map +1 -1
  17. package/dist/index.d.ts +3220 -3680
  18. package/dist/index.js +23 -11
  19. package/dist/index.js.map +1 -1
  20. package/dist/material/blinn.js +47 -57
  21. package/dist/material/blinn.js.map +1 -1
  22. package/dist/material/grassmat.js +127 -0
  23. package/dist/material/grassmat.js.map +1 -0
  24. package/dist/material/grassmaterial.js +58 -186
  25. package/dist/material/grassmaterial.js.map +1 -1
  26. package/dist/material/lambert.js +48 -22
  27. package/dist/material/lambert.js.map +1 -1
  28. package/dist/material/lightmodel.js +4 -4
  29. package/dist/material/material.js +124 -105
  30. package/dist/material/material.js.map +1 -1
  31. package/dist/material/meshmaterial.js +321 -145
  32. package/dist/material/meshmaterial.js.map +1 -1
  33. package/dist/material/mixins/albedocolor.js +32 -99
  34. package/dist/material/mixins/albedocolor.js.map +1 -1
  35. package/dist/material/mixins/foliage.js +47 -0
  36. package/dist/material/mixins/foliage.js.map +1 -0
  37. package/dist/material/mixins/ggxlut.js +213 -0
  38. package/dist/material/mixins/ggxlut.js.map +1 -0
  39. package/dist/material/mixins/lightmodel/blinnphong.js +89 -0
  40. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -0
  41. package/dist/material/mixins/lightmodel/lambert.js +58 -0
  42. package/dist/material/mixins/lightmodel/lambert.js.map +1 -0
  43. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +132 -0
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  45. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +105 -0
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  47. package/dist/material/mixins/lit.js +464 -0
  48. package/dist/material/mixins/lit.js.map +1 -0
  49. package/dist/material/mixins/pbr/common.js +451 -0
  50. package/dist/material/mixins/pbr/common.js.map +1 -0
  51. package/dist/material/mixins/pbr/metallicroughness.js +126 -0
  52. package/dist/material/mixins/pbr/metallicroughness.js.map +1 -0
  53. package/dist/material/mixins/pbr/specularglossness.js +104 -0
  54. package/dist/material/mixins/pbr/specularglossness.js.map +1 -0
  55. package/dist/material/mixins/texture.js +157 -0
  56. package/dist/material/mixins/texture.js.map +1 -0
  57. package/dist/material/mixins/vertexcolor.js +16 -11
  58. package/dist/material/mixins/vertexcolor.js.map +1 -1
  59. package/dist/material/pbrmr.js +65 -0
  60. package/dist/material/pbrmr.js.map +1 -0
  61. package/dist/material/pbrsg.js +64 -0
  62. package/dist/material/pbrsg.js.map +1 -0
  63. package/dist/material/shader/helper.js +905 -0
  64. package/dist/material/shader/helper.js.map +1 -0
  65. package/dist/material/terrainmat.js +357 -0
  66. package/dist/material/terrainmat.js.map +1 -0
  67. package/dist/material/terrainmaterial.js +302 -94
  68. package/dist/material/terrainmaterial.js.map +1 -1
  69. package/dist/material/unlit.js +12 -9
  70. package/dist/material/unlit.js.map +1 -1
  71. package/dist/posteffect/bloom.js +9 -6
  72. package/dist/posteffect/bloom.js.map +1 -1
  73. package/dist/posteffect/compositor.js +15 -6
  74. package/dist/posteffect/compositor.js.map +1 -1
  75. package/dist/posteffect/posteffect.js +1 -1
  76. package/dist/posteffect/sao.js +8 -5
  77. package/dist/posteffect/sao.js.map +1 -1
  78. package/dist/posteffect/tonemap.js +2 -2
  79. package/dist/posteffect/water.js +11 -8
  80. package/dist/posteffect/water.js.map +1 -1
  81. package/dist/render/cluster_light.js +6 -5
  82. package/dist/render/cluster_light.js.map +1 -1
  83. package/dist/render/cull_visitor.js +24 -3
  84. package/dist/render/cull_visitor.js.map +1 -1
  85. package/dist/render/depthpass.js +46 -0
  86. package/dist/render/depthpass.js.map +1 -0
  87. package/dist/render/envlight.js +26 -24
  88. package/dist/render/envlight.js.map +1 -1
  89. package/dist/render/fullscreenquad.js +38 -0
  90. package/dist/render/fullscreenquad.js.map +1 -0
  91. package/dist/render/lightpass.js +98 -0
  92. package/dist/render/lightpass.js.map +1 -0
  93. package/dist/render/primitive.js +31 -0
  94. package/dist/render/primitive.js.map +1 -1
  95. package/dist/render/render_queue.js +113 -39
  96. package/dist/render/render_queue.js.map +1 -1
  97. package/dist/render/renderer.js +200 -0
  98. package/dist/render/renderer.js.map +1 -0
  99. package/dist/render/renderpass.js +10 -8
  100. package/dist/render/renderpass.js.map +1 -1
  101. package/dist/render/shadowmap_pass.js +3 -4
  102. package/dist/render/shadowmap_pass.js.map +1 -1
  103. package/dist/render/sky.js +33 -19
  104. package/dist/render/sky.js.map +1 -1
  105. package/dist/scene/batchgroup.js +126 -0
  106. package/dist/scene/batchgroup.js.map +1 -0
  107. package/dist/scene/environment.js +9 -6
  108. package/dist/scene/environment.js.map +1 -1
  109. package/dist/scene/graph_node.js +11 -0
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +48 -14
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/octree.js +37 -72
  114. package/dist/scene/octree.js.map +1 -1
  115. package/dist/scene/octree_update_visitor.js +5 -1
  116. package/dist/scene/octree_update_visitor.js.map +1 -1
  117. package/dist/scene/scene.js +17 -31
  118. package/dist/scene/scene.js.map +1 -1
  119. package/dist/scene/scene_node.js +59 -52
  120. package/dist/scene/scene_node.js.map +1 -1
  121. package/dist/scene/terrain/grass.js +4 -14
  122. package/dist/scene/terrain/grass.js.map +1 -1
  123. package/dist/scene/terrain/patch.js +3 -3
  124. package/dist/scene/terrain/terrain.js +4 -9
  125. package/dist/scene/terrain/terrain.js.map +1 -1
  126. package/dist/scene/xform.js +61 -36
  127. package/dist/scene/xform.js.map +1 -1
  128. package/dist/shaders/framework.js +17 -3
  129. package/dist/shaders/framework.js.map +1 -1
  130. package/dist/shaders/misc.js +13 -161
  131. package/dist/shaders/misc.js.map +1 -1
  132. package/dist/shaders/noise.js +7 -7
  133. package/dist/shaders/pbr.js +1 -82
  134. package/dist/shaders/pbr.js.map +1 -1
  135. package/dist/shaders/shadow.js +33 -31
  136. package/dist/shaders/shadow.js.map +1 -1
  137. package/dist/shaders/water.js +3 -9
  138. package/dist/shaders/water.js.map +1 -1
  139. package/dist/shadow/esm.js +12 -9
  140. package/dist/shadow/esm.js.map +1 -1
  141. package/dist/shadow/pcf_opt.js +15 -15
  142. package/dist/shadow/pcf_pd.js +15 -15
  143. package/dist/shadow/shadowmapper.js +35 -21
  144. package/dist/shadow/shadowmapper.js.map +1 -1
  145. package/dist/shadow/ssm.js +21 -55
  146. package/dist/shadow/ssm.js.map +1 -1
  147. package/dist/shadow/vsm.js +16 -13
  148. package/dist/shadow/vsm.js.map +1 -1
  149. package/dist/shapes/box.js +15 -6
  150. package/dist/shapes/box.js.map +1 -1
  151. package/dist/shapes/cylinder.js +1 -4
  152. package/dist/shapes/cylinder.js.map +1 -1
  153. package/dist/shapes/shape.js +5 -0
  154. package/dist/shapes/shape.js.map +1 -1
  155. package/dist/shapes/sphere.js +3 -0
  156. package/dist/shapes/sphere.js.map +1 -1
  157. package/dist/shapes/torus.js +2 -2
  158. package/dist/utility/bounding_volume.js +27 -27
  159. package/dist/utility/pmrem.js +4 -4
  160. package/dist/utility/sheenlut.js +196 -0
  161. package/dist/utility/sheenlut.js.map +1 -0
  162. package/dist/utility/shprojection.js +0 -1
  163. package/dist/utility/shprojection.js.map +1 -1
  164. package/dist/values.js +11 -8
  165. package/dist/values.js.map +1 -1
  166. package/package.json +6 -6
@@ -0,0 +1,132 @@
1
+ import { applyMaterialMixins } from '../../meshmaterial.js';
2
+ import { mixinTextureProps } from '../texture.js';
3
+ import { mixinPBRCommon } from '../pbr/common.js';
4
+ import { Vector4 } from '@zephyr3d/base';
5
+ import { mixinLight } from '../lit.js';
6
+
7
+ /**
8
+ * PBRMetallicRoughness lighting model mixin
9
+ * @param BaseCls - Class to mix in
10
+ * @returns Mixed class
11
+ * @public
12
+ */ function mixinPBRMetallicRoughness(BaseCls) {
13
+ if (BaseCls.pbrMetallicRoughnessMixed) {
14
+ return BaseCls;
15
+ }
16
+ const S = applyMaterialMixins(BaseCls, mixinPBRCommon, mixinLight, mixinTextureProps('metallicRoughness'), mixinTextureProps('occlusion'), mixinTextureProps('specular'), mixinTextureProps('specularColor'));
17
+ return class extends S {
18
+ static pbrMetallicRoughnessMixed = true;
19
+ _metallic;
20
+ _roughness;
21
+ _specularFactor;
22
+ constructor(){
23
+ super();
24
+ this._metallic = 1;
25
+ this._roughness = 1;
26
+ this._specularFactor = Vector4.one();
27
+ }
28
+ get metallic() {
29
+ return this._metallic;
30
+ }
31
+ set metallic(val) {
32
+ if (val !== this._metallic) {
33
+ this._metallic = val;
34
+ this.uniformChanged();
35
+ }
36
+ }
37
+ get roughness() {
38
+ return this._roughness;
39
+ }
40
+ set roughness(val) {
41
+ if (val !== this._roughness) {
42
+ this._roughness = val;
43
+ this.uniformChanged();
44
+ }
45
+ }
46
+ get specularFactor() {
47
+ return this._specularFactor;
48
+ }
49
+ set specularFactor(val) {
50
+ if (!val.equalsTo(this._specularFactor)) {
51
+ this._specularFactor.set(val);
52
+ this.uniformChanged();
53
+ }
54
+ }
55
+ PBRLight(scope, worldPos, normal, viewVec, albedo, TBN) {
56
+ const pb = scope.$builder;
57
+ const funcName = 'Z_PBRMetallicRoughnessLight';
58
+ const that = this;
59
+ pb.func(funcName, [
60
+ pb.vec3('worldPos'),
61
+ pb.vec3('normal'),
62
+ pb.mat3('TBN'),
63
+ pb.vec3('viewVec'),
64
+ pb.vec4('albedo')
65
+ ], function() {
66
+ this.$l.pbrData = that.getCommonData(this, this.albedo, this.viewVec, this.TBN);
67
+ this.$l.lightingColor = pb.vec3(0);
68
+ this.$l.emissiveColor = that.calculateEmissiveColor(this);
69
+ that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);
70
+ that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
71
+ this.$l.diffuse = pb.vec3();
72
+ this.$l.specular = pb.vec3();
73
+ this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
74
+ this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
75
+ this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
76
+ this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);
77
+ if (shadow) {
78
+ this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.NoL));
79
+ }
80
+ that.directLighting(this, this.lightDir, this.lightColor, this.normal, this.viewVec, this.pbrData, this.lightingColor);
81
+ });
82
+ this.$return(pb.add(this.lightingColor, this.emissiveColor));
83
+ });
84
+ return pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo);
85
+ }
86
+ fragmentShader(scope) {
87
+ super.fragmentShader(scope);
88
+ if (this.needFragmentColor()) {
89
+ const pb = scope.$builder;
90
+ scope.zMetallic = pb.float().uniform(2);
91
+ scope.zRoughness = pb.float().uniform(2);
92
+ scope.zSpecularFactor = pb.vec4().uniform(2);
93
+ }
94
+ }
95
+ applyUniformValues(bindGroup, ctx, pass) {
96
+ super.applyUniformValues(bindGroup, ctx, pass);
97
+ if (this.needFragmentColor(ctx)) {
98
+ bindGroup.setValue('zMetallic', this._metallic);
99
+ bindGroup.setValue('zRoughness', this._roughness);
100
+ bindGroup.setValue('zSpecularFactor', this._specularFactor);
101
+ }
102
+ }
103
+ calculateCommonData(scope, albedo, viewVec, TBN, data) {
104
+ super.calculateCommonData(scope, albedo, viewVec, TBN, data);
105
+ const pb = scope.$builder;
106
+ if (this.metallicRoughnessTexture) {
107
+ scope.$l.metallicRoughnessSample = this.sampleMetallicRoughnessTexture(scope);
108
+ data.metallic = pb.mul(scope.zMetallic, scope.metallicRoughnessSample.z);
109
+ data.roughness = pb.mul(scope.zRoughness, scope.metallicRoughnessSample.y);
110
+ } else {
111
+ data.metallic = scope.zMetallic;
112
+ data.roughness = scope.zRoughness;
113
+ }
114
+ if (this.specularColorTexture) {
115
+ scope.$l.specularColor = pb.mul(scope.zSpecularFactor.rgb, this.sampleSpecularColorTexture(scope).rgb);
116
+ } else {
117
+ scope.$l.specularColor = scope.zSpecularFactor.rgb;
118
+ }
119
+ if (this.specularTexture) {
120
+ data.specularWeight = pb.mul(scope.zSpecularFactor.a, this.sampleSpecularTexture(scope).a);
121
+ } else {
122
+ data.specularWeight = scope.zSpecularFactor.a;
123
+ }
124
+ data.f0 = pb.vec4(pb.mix(pb.min(pb.mul(this.getF0(scope).rgb, scope.specularColor), pb.vec3(1)), albedo.rgb, data.metallic), this.getF0(scope).a);
125
+ data.f90 = pb.vec3(1);
126
+ data.diffuse = pb.vec4(pb.mix(albedo.rgb, pb.vec3(0), data.metallic), albedo.a);
127
+ }
128
+ };
129
+ }
130
+
131
+ export { mixinPBRMetallicRoughness };
132
+ //# sourceMappingURL=pbrmetallicroughness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbrmetallicroughness.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,105 @@
1
+ import { applyMaterialMixins } from '../../meshmaterial.js';
2
+ import { mixinTextureProps } from '../texture.js';
3
+ import { mixinPBRCommon } from '../pbr/common.js';
4
+ import { Vector4 } from '@zephyr3d/base';
5
+ import { mixinLight } from '../lit.js';
6
+
7
+ function mixinPBRSpecularGlossness(BaseCls) {
8
+ if (BaseCls.pbrSpecularGlossnessMixed) {
9
+ return BaseCls;
10
+ }
11
+ const S = applyMaterialMixins(BaseCls, mixinPBRCommon, mixinLight, mixinTextureProps('specular'));
12
+ return class extends S {
13
+ static pbrSpecularGlossnessMixed = true;
14
+ _specularFactor;
15
+ _glossinessFactor;
16
+ constructor(){
17
+ super();
18
+ this._specularFactor = Vector4.one();
19
+ this._glossinessFactor = 1;
20
+ }
21
+ get specularFactor() {
22
+ return this._specularFactor;
23
+ }
24
+ set specularFactor(val) {
25
+ if (!val.equalsTo(this._specularFactor)) {
26
+ this._specularFactor.set(val);
27
+ this.uniformChanged();
28
+ }
29
+ }
30
+ get glossinessFactor() {
31
+ return this._glossinessFactor;
32
+ }
33
+ set glossinessFactor(val) {
34
+ if (val !== this._glossinessFactor) {
35
+ this._glossinessFactor = val;
36
+ this.uniformChanged();
37
+ }
38
+ }
39
+ fragmentShader(scope) {
40
+ super.fragmentShader(scope);
41
+ if (this.needFragmentColor()) {
42
+ const pb = scope.$builder;
43
+ scope.zSpecularFactor = pb.vec4().uniform(2);
44
+ scope.zGlossinessFactor = pb.float().uniform(2);
45
+ }
46
+ }
47
+ applyUniformValues(bindGroup, ctx, pass) {
48
+ super.applyUniformValues(bindGroup, ctx, pass);
49
+ if (this.needFragmentColor(ctx)) {
50
+ bindGroup.setValue('zSpecularFactor', this._specularFactor);
51
+ bindGroup.setValue('zGlossinessFactor', this._glossinessFactor);
52
+ }
53
+ }
54
+ PBRLight(scope, worldPos, normal, viewVec, albedo, TBN) {
55
+ const pb = scope.$builder;
56
+ const funcName = 'Z_PBRSpecularGlossinessLight';
57
+ const that = this;
58
+ pb.func(funcName, [
59
+ pb.vec3('worldPos'),
60
+ pb.vec3('normal'),
61
+ pb.mat3('TBN'),
62
+ pb.vec3('viewVec'),
63
+ pb.vec4('albedo')
64
+ ], function() {
65
+ this.$l.pbrData = that.getCommonData(this, this.albedo, this.viewVec, this.TBN);
66
+ this.$l.lightingColor = pb.vec3(0);
67
+ this.$l.emissiveColor = that.calculateEmissiveColor(this);
68
+ that.indirectLighting(this, this.normal, this.viewVec, this.pbrData, this.lightingColor);
69
+ that.forEachLight(this, function(type, posRange, dirCutoff, colorIntensity, shadow) {
70
+ this.$l.diffuse = pb.vec3();
71
+ this.$l.specular = pb.vec3();
72
+ this.$l.lightAtten = that.calculateLightAttenuation(this, type, this.worldPos, posRange, dirCutoff);
73
+ this.$l.lightDir = that.calculateLightDirection(this, type, this.worldPos, posRange, dirCutoff);
74
+ this.$l.NoL = pb.clamp(pb.dot(this.normal, this.lightDir), 0, 1);
75
+ this.$l.lightColor = pb.mul(colorIntensity.rgb, colorIntensity.a, this.lightAtten, this.NoL);
76
+ if (shadow) {
77
+ this.lightColor = pb.mul(this.lightColor, that.calculateShadow(this, this.worldPos, this.NoL));
78
+ }
79
+ that.directLighting(this, this.lightDir, this.lightColor, this.normal, this.viewVec, this.pbrData, this.lightingColor);
80
+ });
81
+ this.$return(pb.add(this.lightingColor, this.emissiveColor));
82
+ });
83
+ return pb.getGlobalScope()[funcName](worldPos, normal, TBN, viewVec, albedo);
84
+ }
85
+ calculateCommonData(scope, albedo, viewVec, TBN, data) {
86
+ super.calculateCommonData(scope, albedo, viewVec, TBN, data);
87
+ const pb = scope.$builder;
88
+ if (this.specularTexture) {
89
+ scope.$l.specularTextureSample = this.sampleSpecularTexture(scope);
90
+ data.roughness = pb.sub(1, pb.mul(scope.zGlossinessFactor, scope.specularTextureSample.a));
91
+ data.f0 = pb.vec4(pb.mul(scope.specularTextureSample.rgb, scope.zSpecularFactor.rgb), this.getF0(scope).a);
92
+ } else {
93
+ data.roughness = pb.sub(1, scope.zGlossinessFactor);
94
+ data.f0 = pb.vec4(scope.zSpecularFactor.rgb, this.getF0(scope).a);
95
+ }
96
+ data.metallic = pb.max(pb.max(data.f0.r, data.f0.g), data.f0.b);
97
+ data.diffuse = pb.vec4(pb.mul(albedo.rgb, pb.sub(1, data.metallic)), albedo.a);
98
+ data.specularWeight = 1;
99
+ data.f90 = pb.vec3(1);
100
+ }
101
+ };
102
+ }
103
+
104
+ export { mixinPBRSpecularGlossness };
105
+ //# sourceMappingURL=pbrspecularglossness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbrspecularglossness.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}