@babylonjs/materials 9.10.0 → 9.10.1
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.
- package/grid/grid.fragment.js +57 -13
- package/grid/grid.fragment.js.map +1 -1
- package/grid/grid.vertex.js +6 -0
- package/grid/grid.vertex.js.map +1 -1
- package/grid/gridMaterial.d.ts +50 -1
- package/grid/gridMaterial.js +146 -7
- package/grid/gridMaterial.js.map +1 -1
- package/grid/wgsl/grid.fragment.js +60 -13
- package/grid/wgsl/grid.fragment.js.map +1 -1
- package/grid/wgsl/grid.vertex.js +6 -0
- package/grid/wgsl/grid.vertex.js.map +1 -1
- package/package.json +2 -2
package/grid/grid.fragment.js
CHANGED
|
@@ -11,7 +11,27 @@ const name = "gridPixelShader";
|
|
|
11
11
|
const shader = `#extension GL_OES_standard_derivatives : enable
|
|
12
12
|
#define SQRT2 1.41421356
|
|
13
13
|
#define PI 3.14159
|
|
14
|
-
|
|
14
|
+
#define MAX_OCTAVES 8
|
|
15
|
+
#define LINE_WIDTH_SCREEN_FRACTION 0.004
|
|
16
|
+
#define HORIZON_FADE_EXPONENT 400.0
|
|
17
|
+
#define ORIGIN_MARKER_SPAN 10000000.0
|
|
18
|
+
#define ORIGIN_MARKER_WIDTH_SCALE 0.00000015
|
|
19
|
+
#define ORIGIN_MARKER_THRESHOLD 0.0001
|
|
20
|
+
#define TRANSPARENT_MIN_OPACITY 0.08
|
|
21
|
+
precision highp float;uniform float visibility;uniform vec3 mainColor;uniform vec3 lineColor;uniform vec4 gridControl;uniform vec3 gridOffset;uniform float gridThicknessModifier;
|
|
22
|
+
#ifdef MULTI_SCALE
|
|
23
|
+
uniform float minGridSpacing;uniform float gridOctaves;
|
|
24
|
+
#endif
|
|
25
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
26
|
+
uniform vec3 cameraPosition;uniform vec2 viewportSize;
|
|
27
|
+
#endif
|
|
28
|
+
#ifdef BELOW_LINE_COLOR
|
|
29
|
+
uniform vec3 belowLineColor;
|
|
30
|
+
#endif
|
|
31
|
+
varying vec3 vPosition;varying vec3 vNormal;
|
|
32
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
33
|
+
varying vec3 vWorldPos;
|
|
34
|
+
#endif
|
|
15
35
|
#ifdef LOGARITHMICDEPTH
|
|
16
36
|
#extension GL_EXT_frag_depth : enable
|
|
17
37
|
#endif
|
|
@@ -34,37 +54,61 @@ return result;
|
|
|
34
54
|
return abs(fractionPartOfPosition)<SQRT2/4. ? 1. : 0.;
|
|
35
55
|
#endif
|
|
36
56
|
}
|
|
37
|
-
float contributionOnAxis(float position) {float
|
|
38
|
-
float result=isPointOnLine(position,
|
|
57
|
+
float contributionOnAxis(float position,float tcLineWidthCap,float thicknessModifier) {float dPosDx=dFdx(position);float dPosDy=dFdy(position);float differentialLength=length(vec2(dPosDx,dPosDy))*SQRT2;if (tcLineWidthCap>0.0) {differentialLength=max(differentialLength,tcLineWidthCap);}
|
|
58
|
+
float lineWidth=differentialLength*thicknessModifier;float result=isPointOnLine(position,lineWidth);result*=getDynamicVisibility(position);result*=getAnisotropicAttenuation(differentialLength);return result;}
|
|
39
59
|
float normalImpactOnAxis(float x) {float normalImpact=clamp(1.0-3.0*abs(x*x*x),0.0,1.0);return normalImpact;}
|
|
40
60
|
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
41
61
|
void main(void) {
|
|
42
62
|
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
43
63
|
#include<clipPlaneFragment>
|
|
44
|
-
|
|
64
|
+
vec3 normal=normalize(vNormal);float horizonFade=1.0;float tcLineWidthCap=0.0;
|
|
65
|
+
#if defined(HORIZON_FADE) || defined(ORIGIN_MARKER)
|
|
66
|
+
float tc=length(vWorldPos-cameraPosition);
|
|
67
|
+
#endif
|
|
68
|
+
#ifdef HORIZON_FADE
|
|
69
|
+
tcLineWidthCap=LINE_WIDTH_SCREEN_FRACTION*tc/viewportSize.y;vec3 rd=normalize(vWorldPos-cameraPosition);if (abs(rd.y)>0.99) {horizonFade=1.0;} else {vec3 flatRayDir=normalize(vec3(rd.x,0.0,rd.z));horizonFade=-pow(abs(dot(rd,flatRayDir)),HORIZON_FADE_EXPONENT)+1.0;}
|
|
70
|
+
#endif
|
|
71
|
+
float grid=0.0;
|
|
72
|
+
#ifdef MULTI_SCALE
|
|
73
|
+
for (int i=0; i<MAX_OCTAVES; i++) {if (i>=int(gridOctaves)) break;float scale=minGridSpacing*pow(10.0,float(i));vec3 gridPos=(vPosition+gridOffset.xyz)/scale;float gx=contributionOnAxis(gridPos.x,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.x);float gy=contributionOnAxis(gridPos.y,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.y);float gz=contributionOnAxis(gridPos.z,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.z);
|
|
45
74
|
#ifdef MAX_LINE
|
|
46
|
-
|
|
75
|
+
grid=max(grid,clamp(max(max(gx,gy),gz),0.,1.));
|
|
47
76
|
#else
|
|
48
|
-
|
|
77
|
+
grid=max(grid,clamp(gx+gy+gz,0.,1.));
|
|
49
78
|
#endif
|
|
50
|
-
|
|
79
|
+
}
|
|
80
|
+
#else
|
|
81
|
+
float gridRatio=gridControl.x;vec3 gridPos=(vPosition+gridOffset.xyz)/gridRatio;float x=contributionOnAxis(gridPos.x,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.x);float y=contributionOnAxis(gridPos.y,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.y);float z=contributionOnAxis(gridPos.z,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.z);
|
|
82
|
+
#ifdef MAX_LINE
|
|
83
|
+
grid=clamp(max(max(x,y),z),0.,1.);
|
|
84
|
+
#else
|
|
85
|
+
grid=clamp(x+y+z,0.,1.);
|
|
86
|
+
#endif
|
|
87
|
+
#endif
|
|
88
|
+
grid*=horizonFade;
|
|
89
|
+
#ifdef ORIGIN_MARKER
|
|
90
|
+
float tcOrigin=ORIGIN_MARKER_WIDTH_SCALE*tc/viewportSize.y;float ox=contributionOnAxis(vWorldPos.x/ORIGIN_MARKER_SPAN,tcOrigin,gridThicknessModifier);float oz=contributionOnAxis(vWorldPos.z/ORIGIN_MARKER_SPAN,tcOrigin,gridThicknessModifier);float originMask=clamp(ox+oz,0.0,1.0)*horizonFade;if (originMask>ORIGIN_MARKER_THRESHOLD) grid=originMask;
|
|
91
|
+
#endif
|
|
92
|
+
#ifdef BELOW_LINE_COLOR
|
|
93
|
+
bool belowSurface=cameraPosition.y<vWorldPos.y;vec3 effectiveLineColor=belowSurface ? belowLineColor : lineColor;
|
|
94
|
+
#else
|
|
95
|
+
vec3 effectiveLineColor=lineColor;
|
|
96
|
+
#endif
|
|
97
|
+
vec3 color=mix(mainColor,effectiveLineColor,grid);
|
|
51
98
|
#ifdef FOG
|
|
52
99
|
#include<fogFragment>
|
|
53
100
|
#endif
|
|
54
|
-
float opacity=
|
|
55
|
-
#ifdef
|
|
56
|
-
opacity=clamp(grid,
|
|
101
|
+
float opacity=gridControl.w;
|
|
102
|
+
#ifdef LINES_ONLY
|
|
103
|
+
if (grid<0.01) discard;opacity=clamp(grid,TRANSPARENT_MIN_OPACITY,gridControl.w*grid);
|
|
57
104
|
#endif
|
|
58
105
|
#ifdef OPACITY
|
|
59
106
|
opacity*=texture2D(opacitySampler,vOpacityUV).a;
|
|
60
107
|
#endif
|
|
61
108
|
gl_FragColor=vec4(color.rgb,opacity*visibility);
|
|
62
|
-
#ifdef TRANSPARENT
|
|
63
109
|
#ifdef PREMULTIPLYALPHA
|
|
64
110
|
gl_FragColor.rgb*=opacity;
|
|
65
111
|
#endif
|
|
66
|
-
#else
|
|
67
|
-
#endif
|
|
68
112
|
#include<logDepthFragment>
|
|
69
113
|
#include<imageProcessingCompatibility>
|
|
70
114
|
#define CUSTOM_FRAGMENT_MAIN_END
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.fragment.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/grid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AAExG,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"grid.fragment.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/grid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AAExG,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,4BAA4B,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EAAE,4BAA4B,CAAC,CAAC;AAC7K,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport { clipPlaneFragmentDeclaration } from \"core/Shaders/ShadersInclude/clipPlaneFragmentDeclaration\";\nimport { logDepthDeclaration } from \"core/Shaders/ShadersInclude/logDepthDeclaration\";\nimport { fogFragmentDeclaration } from \"core/Shaders/ShadersInclude/fogFragmentDeclaration\";\nimport { clipPlaneFragment } from \"core/Shaders/ShadersInclude/clipPlaneFragment\";\nimport { fogFragment } from \"core/Shaders/ShadersInclude/fogFragment\";\nimport { logDepthFragment } from \"core/Shaders/ShadersInclude/logDepthFragment\";\nimport { imageProcessingCompatibility } from \"core/Shaders/ShadersInclude/imageProcessingCompatibility\";\n\nconst name = \"gridPixelShader\";\nconst shader = `#extension GL_OES_standard_derivatives : enable\n#define SQRT2 1.41421356\n#define PI 3.14159\n#define MAX_OCTAVES 8\n#define LINE_WIDTH_SCREEN_FRACTION 0.004\n#define HORIZON_FADE_EXPONENT 400.0\n#define ORIGIN_MARKER_SPAN 10000000.0\n#define ORIGIN_MARKER_WIDTH_SCALE 0.00000015\n#define ORIGIN_MARKER_THRESHOLD 0.0001\n#define TRANSPARENT_MIN_OPACITY 0.08\nprecision highp float;uniform float visibility;uniform vec3 mainColor;uniform vec3 lineColor;uniform vec4 gridControl;uniform vec3 gridOffset;uniform float gridThicknessModifier;\n#ifdef MULTI_SCALE\nuniform float minGridSpacing;uniform float gridOctaves;\n#endif\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nuniform vec3 cameraPosition;uniform vec2 viewportSize;\n#endif\n#ifdef BELOW_LINE_COLOR\nuniform vec3 belowLineColor;\n#endif\nvarying vec3 vPosition;varying vec3 vNormal;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvarying vec3 vWorldPos;\n#endif\n#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#ifdef OPACITY\nvarying vec2 vOpacityUV;uniform sampler2D opacitySampler;uniform vec2 vOpacityInfos;\n#endif\nfloat getDynamicVisibility(float position) {float majorGridFrequency=gridControl.y;if (floor(position+0.5)==floor(position/majorGridFrequency+0.5)*majorGridFrequency)\n{return 1.0;}\nreturn gridControl.z;}\nfloat getAnisotropicAttenuation(float differentialLength) {const float maxNumberOfLines=10.0;return clamp(1.0/(differentialLength+1.0)-1.0/maxNumberOfLines,0.0,1.0);}\nfloat isPointOnLine(float position,float differentialLength) {float fractionPartOfPosition=position-floor(position+0.5); \nfractionPartOfPosition/=differentialLength; \n#ifdef ANTIALIAS\nfractionPartOfPosition=clamp(fractionPartOfPosition,-1.,1.);float result=0.5+0.5*cos(fractionPartOfPosition*PI); \nreturn result;\n#else\nreturn abs(fractionPartOfPosition)<SQRT2/4. ? 1. : 0.;\n#endif\n}\nfloat contributionOnAxis(float position,float tcLineWidthCap,float thicknessModifier) {float dPosDx=dFdx(position);float dPosDy=dFdy(position);float differentialLength=length(vec2(dPosDx,dPosDy))*SQRT2;if (tcLineWidthCap>0.0) {differentialLength=max(differentialLength,tcLineWidthCap);}\nfloat lineWidth=differentialLength*thicknessModifier;float result=isPointOnLine(position,lineWidth);result*=getDynamicVisibility(position);result*=getAnisotropicAttenuation(differentialLength);return result;}\nfloat normalImpactOnAxis(float x) {float normalImpact=clamp(1.0-3.0*abs(x*x*x),0.0,1.0);return normalImpact;}\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\nvec3 normal=normalize(vNormal);float horizonFade=1.0;float tcLineWidthCap=0.0;\n#if defined(HORIZON_FADE) || defined(ORIGIN_MARKER)\nfloat tc=length(vWorldPos-cameraPosition);\n#endif\n#ifdef HORIZON_FADE\ntcLineWidthCap=LINE_WIDTH_SCREEN_FRACTION*tc/viewportSize.y;vec3 rd=normalize(vWorldPos-cameraPosition);if (abs(rd.y)>0.99) {horizonFade=1.0;} else {vec3 flatRayDir=normalize(vec3(rd.x,0.0,rd.z));horizonFade=-pow(abs(dot(rd,flatRayDir)),HORIZON_FADE_EXPONENT)+1.0;}\n#endif\nfloat grid=0.0;\n#ifdef MULTI_SCALE\nfor (int i=0; i<MAX_OCTAVES; i++) {if (i>=int(gridOctaves)) break;float scale=minGridSpacing*pow(10.0,float(i));vec3 gridPos=(vPosition+gridOffset.xyz)/scale;float gx=contributionOnAxis(gridPos.x,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.x);float gy=contributionOnAxis(gridPos.y,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.y);float gz=contributionOnAxis(gridPos.z,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.z);\n#ifdef MAX_LINE\ngrid=max(grid,clamp(max(max(gx,gy),gz),0.,1.));\n#else\ngrid=max(grid,clamp(gx+gy+gz,0.,1.));\n#endif\n}\n#else\nfloat gridRatio=gridControl.x;vec3 gridPos=(vPosition+gridOffset.xyz)/gridRatio;float x=contributionOnAxis(gridPos.x,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.x);float y=contributionOnAxis(gridPos.y,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.y);float z=contributionOnAxis(gridPos.z,tcLineWidthCap,gridThicknessModifier)*normalImpactOnAxis(normal.z);\n#ifdef MAX_LINE\ngrid=clamp(max(max(x,y),z),0.,1.);\n#else\ngrid=clamp(x+y+z,0.,1.);\n#endif\n#endif\ngrid*=horizonFade;\n#ifdef ORIGIN_MARKER\nfloat tcOrigin=ORIGIN_MARKER_WIDTH_SCALE*tc/viewportSize.y;float ox=contributionOnAxis(vWorldPos.x/ORIGIN_MARKER_SPAN,tcOrigin,gridThicknessModifier);float oz=contributionOnAxis(vWorldPos.z/ORIGIN_MARKER_SPAN,tcOrigin,gridThicknessModifier);float originMask=clamp(ox+oz,0.0,1.0)*horizonFade;if (originMask>ORIGIN_MARKER_THRESHOLD) grid=originMask;\n#endif\n#ifdef BELOW_LINE_COLOR\nbool belowSurface=cameraPosition.y<vWorldPos.y;vec3 effectiveLineColor=belowSurface ? belowLineColor : lineColor;\n#else\nvec3 effectiveLineColor=lineColor;\n#endif\nvec3 color=mix(mainColor,effectiveLineColor,grid);\n#ifdef FOG\n#include<fogFragment>\n#endif\nfloat opacity=gridControl.w;\n#ifdef LINES_ONLY\nif (grid<0.01) discard;opacity=clamp(grid,TRANSPARENT_MIN_OPACITY,gridControl.w*grid);\n#endif\n#ifdef OPACITY\nopacity*=texture2D(opacitySampler,vOpacityUV).a;\n#endif\ngl_FragColor=vec4(color.rgb,opacity*visibility);\n#ifdef PREMULTIPLYALPHA\ngl_FragColor.rgb*=opacity;\n#endif\n#include<logDepthFragment>\n#include<imageProcessingCompatibility>\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\nconst includes = [clipPlaneFragmentDeclaration, logDepthDeclaration, fogFragmentDeclaration, clipPlaneFragment, fogFragment, logDepthFragment, imageProcessingCompatibility];\nfor (const inc of includes) {\n if (!ShaderStore.IncludesShadersStore[inc.name]) {\n ShaderStore.IncludesShadersStore[inc.name] = inc.shader;\n }\n}\n\n/** @internal */\nexport const gridPixelShader = { name, shader };\n"]}
|
package/grid/grid.vertex.js
CHANGED
|
@@ -21,6 +21,9 @@ attribute vec2 uv2;
|
|
|
21
21
|
#include<instancesDeclaration>
|
|
22
22
|
#include<__decl__sceneVertex>
|
|
23
23
|
varying vec3 vPosition;varying vec3 vNormal;
|
|
24
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
25
|
+
varying vec3 vWorldPos;
|
|
26
|
+
#endif
|
|
24
27
|
#include<logDepthDeclaration>
|
|
25
28
|
#include<fogVertexDeclaration>
|
|
26
29
|
#ifdef OPACITY
|
|
@@ -49,6 +52,9 @@ else
|
|
|
49
52
|
#include<clipPlaneVertex>
|
|
50
53
|
#include<logDepthVertex>
|
|
51
54
|
vPosition=position;vNormal=normal;
|
|
55
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
56
|
+
vWorldPos=worldPos.xyz;
|
|
57
|
+
#endif
|
|
52
58
|
#define CUSTOM_VERTEX_MAIN_END
|
|
53
59
|
}`;
|
|
54
60
|
// Sideeffect
|
package/grid/grid.vertex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.vertex.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/grid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"grid.vertex.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/grid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6Cb,CAAC;AACH,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IAClC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAC5C,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AACzN,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,WAAW,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport { instancesDeclaration } from \"core/Shaders/ShadersInclude/instancesDeclaration\";\nimport { sceneVertexDeclaration } from \"core/Shaders/ShadersInclude/sceneVertexDeclaration\";\nimport { sceneUboDeclaration } from \"core/Shaders/ShadersInclude/sceneUboDeclaration\";\nimport { logDepthDeclaration } from \"core/Shaders/ShadersInclude/logDepthDeclaration\";\nimport { fogVertexDeclaration } from \"core/Shaders/ShadersInclude/fogVertexDeclaration\";\nimport { clipPlaneVertexDeclaration } from \"core/Shaders/ShadersInclude/clipPlaneVertexDeclaration\";\nimport { instancesVertex } from \"core/Shaders/ShadersInclude/instancesVertex\";\nimport { fogVertex } from \"core/Shaders/ShadersInclude/fogVertex\";\nimport { clipPlaneVertex } from \"core/Shaders/ShadersInclude/clipPlaneVertex\";\nimport { logDepthVertex } from \"core/Shaders/ShadersInclude/logDepthVertex\";\n\nconst name = \"gridVertexShader\";\nconst shader = `precision highp float;attribute vec3 position;attribute vec3 normal;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#include<instancesDeclaration>\n#include<__decl__sceneVertex>\nvarying vec3 vPosition;varying vec3 vNormal;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvarying vec3 vWorldPos;\n#endif\n#include<logDepthDeclaration>\n#include<fogVertexDeclaration>\n#ifdef OPACITY\nvarying vec2 vOpacityUV;uniform mat4 opacityMatrix;uniform vec2 vOpacityInfos;\n#endif\n#include<clipPlaneVertexDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\n#include<instancesVertex>\nvec4 worldPos=finalWorld*vec4(position,1.0);\n#include<fogVertex>\nvec4 cameraSpacePosition=view*worldPos;gl_Position=projection*cameraSpacePosition;\n#ifdef OPACITY\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\nif (vOpacityInfos.x==0.)\n{vOpacityUV=vec2(opacityMatrix*vec4(uv,1.0,0.0));}\nelse\n{vOpacityUV=vec2(opacityMatrix*vec4(uv2,1.0,0.0));}\n#endif \n#include<clipPlaneVertex>\n#include<logDepthVertex>\nvPosition=position;vNormal=normal;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvWorldPos=worldPos.xyz;\n#endif\n#define CUSTOM_VERTEX_MAIN_END\n}`;\n// Sideeffect\nif (!ShaderStore.ShadersStore[name]) {\n ShaderStore.ShadersStore[name] = shader;\n}\nconst includes = [instancesDeclaration, sceneVertexDeclaration, sceneUboDeclaration, logDepthDeclaration, fogVertexDeclaration, clipPlaneVertexDeclaration, instancesVertex, fogVertex, clipPlaneVertex, logDepthVertex];\nfor (const inc of includes) {\n if (!ShaderStore.IncludesShadersStore[inc.name]) {\n ShaderStore.IncludesShadersStore[inc.name] = inc.shader;\n }\n}\n\n/** @internal */\nexport const gridVertexShader = { name, shader };\n"]}
|
package/grid/gridMaterial.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Matrix, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
2
2
|
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
3
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
3
4
|
import { type BaseTexture } from "@babylonjs/core/Materials/Textures/baseTexture.js";
|
|
4
5
|
import { PushMaterial } from "@babylonjs/core/Materials/pushMaterial.js";
|
|
5
6
|
import { type AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
@@ -36,13 +37,53 @@ export declare class GridMaterial extends PushMaterial {
|
|
|
36
37
|
*/
|
|
37
38
|
minorUnitVisibility: number;
|
|
38
39
|
/**
|
|
39
|
-
*
|
|
40
|
+
* Overall mesh opacity. In linesOnly mode this also scales the maximum line alpha.
|
|
40
41
|
*/
|
|
41
42
|
opacity: number;
|
|
42
43
|
/**
|
|
43
44
|
* Whether to antialias the grid
|
|
44
45
|
*/
|
|
45
46
|
antialias: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Color of grid lines when the camera is below the surface.
|
|
49
|
+
* When set, lineColor acts as the above-surface color.
|
|
50
|
+
*/
|
|
51
|
+
get belowLineColor(): Nullable<Color3>;
|
|
52
|
+
set belowLineColor(value: Nullable<Color3>);
|
|
53
|
+
private _belowLineColor;
|
|
54
|
+
/**
|
|
55
|
+
* Enable multi-scale logarithmic grid LOD. Number of octaves is controlled by gridOctaves.
|
|
56
|
+
*/
|
|
57
|
+
useMultiScale: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* World-unit spacing of the finest octave. Default 0.001.
|
|
60
|
+
*/
|
|
61
|
+
minGridSpacing: number;
|
|
62
|
+
/**
|
|
63
|
+
* Number of logarithmic octaves rendered (1–8). Default 4.
|
|
64
|
+
*/
|
|
65
|
+
gridOctaves: number;
|
|
66
|
+
/**
|
|
67
|
+
* Enable camera-distance-aware horizon (grazing-angle) fade.
|
|
68
|
+
*/
|
|
69
|
+
useHorizonFade: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Render an ultra-fine crosshair at the world origin.
|
|
72
|
+
*/
|
|
73
|
+
useOriginMarker: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* When true, only grid lines are visible — non-grid pixels are discarded.
|
|
76
|
+
* Puts the material in the alpha-blend queue and enables a depth pre-pass so grid lines
|
|
77
|
+
* correctly occlude translucent objects (e.g. Gaussian splats). Set mesh.alphaIndex to a
|
|
78
|
+
* value lower than other transparent objects so the depth pre-pass fires first.
|
|
79
|
+
*/
|
|
80
|
+
get linesOnly(): boolean;
|
|
81
|
+
set linesOnly(value: boolean);
|
|
82
|
+
private _linesOnly;
|
|
83
|
+
/**
|
|
84
|
+
* Scales grid line width. Values \> 1 produce thicker lines. Default 1.0.
|
|
85
|
+
*/
|
|
86
|
+
gridThicknessModifier: number;
|
|
46
87
|
/**
|
|
47
88
|
* Determine RBG output is premultiplied by alpha value.
|
|
48
89
|
*/
|
|
@@ -57,6 +98,7 @@ export declare class GridMaterial extends PushMaterial {
|
|
|
57
98
|
*/
|
|
58
99
|
opacityTexture: BaseTexture;
|
|
59
100
|
private _gridControl;
|
|
101
|
+
private _viewportSize;
|
|
60
102
|
/**
|
|
61
103
|
* constructor
|
|
62
104
|
* @param name The name given to the material in order to identify it afterwards.
|
|
@@ -80,5 +122,12 @@ export declare class GridMaterial extends PushMaterial {
|
|
|
80
122
|
clone(name: string): GridMaterial;
|
|
81
123
|
serialize(): any;
|
|
82
124
|
getClassName(): string;
|
|
125
|
+
/**
|
|
126
|
+
* Parse a JSON input to create back a grid material.
|
|
127
|
+
* @param source the JSON data to parse
|
|
128
|
+
* @param scene defines the hosting scene
|
|
129
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
130
|
+
* @returns a new grid material
|
|
131
|
+
*/
|
|
83
132
|
static Parse(source: any, scene: Scene, rootUrl: string): GridMaterial;
|
|
84
133
|
}
|
package/grid/gridMaterial.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __decorate } from "@babylonjs/core/tslib.es6.js";
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
3
3
|
import { serializeAsTexture, serialize, expandToProperty, serializeAsColor3, serializeAsVector3 } from "@babylonjs/core/Misc/decorators.js";
|
|
4
4
|
import { SerializationHelper } from "@babylonjs/core/Misc/decorators.serialization.js";
|
|
5
|
-
import { Vector4, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
5
|
+
import { Vector4, Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
|
6
6
|
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
|
7
7
|
import { MaterialDefines } from "@babylonjs/core/Materials/materialDefines.js";
|
|
8
8
|
import { PushMaterial } from "@babylonjs/core/Materials/pushMaterial.js";
|
|
@@ -22,7 +22,7 @@ class GridMaterialDefines extends MaterialDefines {
|
|
|
22
22
|
this.CLIPPLANE6 = false;
|
|
23
23
|
this.OPACITY = false;
|
|
24
24
|
this.ANTIALIAS = false;
|
|
25
|
-
this.
|
|
25
|
+
this.LINES_ONLY = false;
|
|
26
26
|
this.FOG = false;
|
|
27
27
|
this.PREMULTIPLYALPHA = false;
|
|
28
28
|
this.MAX_LINE = false;
|
|
@@ -33,6 +33,10 @@ class GridMaterialDefines extends MaterialDefines {
|
|
|
33
33
|
this.IMAGEPROCESSINGPOSTPROCESS = false;
|
|
34
34
|
this.SKIPFINALCOLORCLAMP = false;
|
|
35
35
|
this.LOGARITHMICDEPTH = false;
|
|
36
|
+
this.MULTI_SCALE = false;
|
|
37
|
+
this.HORIZON_FADE = false;
|
|
38
|
+
this.BELOW_LINE_COLOR = false;
|
|
39
|
+
this.ORIGIN_MARKER = false;
|
|
36
40
|
this.rebuild();
|
|
37
41
|
}
|
|
38
42
|
}
|
|
@@ -41,6 +45,37 @@ class GridMaterialDefines extends MaterialDefines {
|
|
|
41
45
|
* Colors are customizable.
|
|
42
46
|
*/
|
|
43
47
|
export class GridMaterial extends PushMaterial {
|
|
48
|
+
/**
|
|
49
|
+
* Color of grid lines when the camera is below the surface.
|
|
50
|
+
* When set, lineColor acts as the above-surface color.
|
|
51
|
+
*/
|
|
52
|
+
get belowLineColor() {
|
|
53
|
+
return this._belowLineColor;
|
|
54
|
+
}
|
|
55
|
+
set belowLineColor(value) {
|
|
56
|
+
if (this._belowLineColor === value) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
this._belowLineColor = value;
|
|
60
|
+
this._markAllSubMeshesAsMiscDirty();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* When true, only grid lines are visible — non-grid pixels are discarded.
|
|
64
|
+
* Puts the material in the alpha-blend queue and enables a depth pre-pass so grid lines
|
|
65
|
+
* correctly occlude translucent objects (e.g. Gaussian splats). Set mesh.alphaIndex to a
|
|
66
|
+
* value lower than other transparent objects so the depth pre-pass fires first.
|
|
67
|
+
*/
|
|
68
|
+
get linesOnly() {
|
|
69
|
+
return this._linesOnly;
|
|
70
|
+
}
|
|
71
|
+
set linesOnly(value) {
|
|
72
|
+
if (this._linesOnly === value) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this._linesOnly = value;
|
|
76
|
+
this.needDepthPrePass = value;
|
|
77
|
+
this._markAllSubMeshesAsMiscDirty();
|
|
78
|
+
}
|
|
44
79
|
/**
|
|
45
80
|
* constructor
|
|
46
81
|
* @param name The name given to the material in order to identify it afterwards.
|
|
@@ -74,13 +109,39 @@ export class GridMaterial extends PushMaterial {
|
|
|
74
109
|
*/
|
|
75
110
|
this.minorUnitVisibility = 0.33;
|
|
76
111
|
/**
|
|
77
|
-
*
|
|
112
|
+
* Overall mesh opacity. In linesOnly mode this also scales the maximum line alpha.
|
|
78
113
|
*/
|
|
79
114
|
this.opacity = 1.0;
|
|
80
115
|
/**
|
|
81
116
|
* Whether to antialias the grid
|
|
82
117
|
*/
|
|
83
118
|
this.antialias = true;
|
|
119
|
+
this._belowLineColor = null;
|
|
120
|
+
/**
|
|
121
|
+
* Enable multi-scale logarithmic grid LOD. Number of octaves is controlled by gridOctaves.
|
|
122
|
+
*/
|
|
123
|
+
this.useMultiScale = false;
|
|
124
|
+
/**
|
|
125
|
+
* World-unit spacing of the finest octave. Default 0.001.
|
|
126
|
+
*/
|
|
127
|
+
this.minGridSpacing = 0.001;
|
|
128
|
+
/**
|
|
129
|
+
* Number of logarithmic octaves rendered (1–8). Default 4.
|
|
130
|
+
*/
|
|
131
|
+
this.gridOctaves = 4;
|
|
132
|
+
/**
|
|
133
|
+
* Enable camera-distance-aware horizon (grazing-angle) fade.
|
|
134
|
+
*/
|
|
135
|
+
this.useHorizonFade = false;
|
|
136
|
+
/**
|
|
137
|
+
* Render an ultra-fine crosshair at the world origin.
|
|
138
|
+
*/
|
|
139
|
+
this.useOriginMarker = false;
|
|
140
|
+
this._linesOnly = false;
|
|
141
|
+
/**
|
|
142
|
+
* Scales grid line width. Values \> 1 produce thicker lines. Default 1.0.
|
|
143
|
+
*/
|
|
144
|
+
this.gridThicknessModifier = 1.0;
|
|
84
145
|
/**
|
|
85
146
|
* Determine RBG output is premultiplied by alpha value.
|
|
86
147
|
*/
|
|
@@ -90,13 +151,14 @@ export class GridMaterial extends PushMaterial {
|
|
|
90
151
|
*/
|
|
91
152
|
this.useMaxLine = false;
|
|
92
153
|
this._gridControl = new Vector4(this.gridRatio, this.majorUnitFrequency, this.minorUnitVisibility, this.opacity);
|
|
154
|
+
this._viewportSize = new Vector2();
|
|
93
155
|
this._shadersLoaded = false;
|
|
94
156
|
}
|
|
95
157
|
/**
|
|
96
158
|
* @returns whether or not the grid requires alpha blending.
|
|
97
159
|
*/
|
|
98
160
|
needAlphaBlending() {
|
|
99
|
-
return this.opacity < 1.0 || (this._opacityTexture && this._opacityTexture.isReady());
|
|
161
|
+
return this.linesOnly || this.opacity < 1.0 || (this._opacityTexture && this._opacityTexture.isReady());
|
|
100
162
|
}
|
|
101
163
|
needAlphaBlendingForMesh(mesh) {
|
|
102
164
|
return mesh.visibility < 1.0 || this.needAlphaBlending();
|
|
@@ -116,8 +178,8 @@ export class GridMaterial extends PushMaterial {
|
|
|
116
178
|
if (this._isReadyForSubMesh(subMesh)) {
|
|
117
179
|
return true;
|
|
118
180
|
}
|
|
119
|
-
if (defines.
|
|
120
|
-
defines.
|
|
181
|
+
if (defines.LINES_ONLY !== this.linesOnly) {
|
|
182
|
+
defines.LINES_ONLY = this.linesOnly;
|
|
121
183
|
defines.markAsUnprocessed();
|
|
122
184
|
}
|
|
123
185
|
if (defines.PREMULTIPLYALPHA != this.preMultiplyAlpha) {
|
|
@@ -129,7 +191,24 @@ export class GridMaterial extends PushMaterial {
|
|
|
129
191
|
defines.markAsUnprocessed();
|
|
130
192
|
}
|
|
131
193
|
if (defines.ANTIALIAS !== this.antialias) {
|
|
132
|
-
defines.ANTIALIAS =
|
|
194
|
+
defines.ANTIALIAS = this.antialias;
|
|
195
|
+
defines.markAsUnprocessed();
|
|
196
|
+
}
|
|
197
|
+
if (defines.MULTI_SCALE !== this.useMultiScale) {
|
|
198
|
+
defines.MULTI_SCALE = this.useMultiScale;
|
|
199
|
+
defines.markAsUnprocessed();
|
|
200
|
+
}
|
|
201
|
+
if (defines.HORIZON_FADE !== this.useHorizonFade) {
|
|
202
|
+
defines.HORIZON_FADE = this.useHorizonFade;
|
|
203
|
+
defines.markAsUnprocessed();
|
|
204
|
+
}
|
|
205
|
+
const wantsBelowColor = this._belowLineColor !== null;
|
|
206
|
+
if (defines.BELOW_LINE_COLOR !== wantsBelowColor) {
|
|
207
|
+
defines.BELOW_LINE_COLOR = wantsBelowColor;
|
|
208
|
+
defines.markAsUnprocessed();
|
|
209
|
+
}
|
|
210
|
+
if (defines.ORIGIN_MARKER !== this.useOriginMarker) {
|
|
211
|
+
defines.ORIGIN_MARKER = this.useOriginMarker;
|
|
133
212
|
defines.markAsUnprocessed();
|
|
134
213
|
}
|
|
135
214
|
// Textures
|
|
@@ -179,7 +258,17 @@ export class GridMaterial extends PushMaterial {
|
|
|
179
258
|
"vOpacityInfos",
|
|
180
259
|
"visibility",
|
|
181
260
|
"logarithmicDepthConstant",
|
|
261
|
+
"gridThicknessModifier",
|
|
182
262
|
];
|
|
263
|
+
if (defines.MULTI_SCALE) {
|
|
264
|
+
uniforms.push("minGridSpacing", "gridOctaves");
|
|
265
|
+
}
|
|
266
|
+
if (defines.HORIZON_FADE || defines.BELOW_LINE_COLOR || defines.ORIGIN_MARKER) {
|
|
267
|
+
uniforms.push("cameraPosition", "viewportSize");
|
|
268
|
+
}
|
|
269
|
+
if (defines.BELOW_LINE_COLOR) {
|
|
270
|
+
uniforms.push("belowLineColor");
|
|
271
|
+
}
|
|
183
272
|
// Defines
|
|
184
273
|
const join = defines.toString();
|
|
185
274
|
AddClipPlaneUniforms(uniforms);
|
|
@@ -242,6 +331,14 @@ export class GridMaterial extends PushMaterial {
|
|
|
242
331
|
this._gridControl.z = this.minorUnitVisibility;
|
|
243
332
|
this._gridControl.w = this.opacity;
|
|
244
333
|
this._activeEffect.setVector4("gridControl", this._gridControl);
|
|
334
|
+
this._activeEffect.setFloat("gridThicknessModifier", this.gridThicknessModifier);
|
|
335
|
+
if (defines.BELOW_LINE_COLOR && this._belowLineColor) {
|
|
336
|
+
this._activeEffect.setColor3("belowLineColor", this._belowLineColor);
|
|
337
|
+
}
|
|
338
|
+
if (defines.MULTI_SCALE) {
|
|
339
|
+
this._activeEffect.setFloat("minGridSpacing", this.minGridSpacing);
|
|
340
|
+
this._activeEffect.setFloat("gridOctaves", Math.max(1, Math.min(8, Math.round(this.gridOctaves))));
|
|
341
|
+
}
|
|
245
342
|
if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {
|
|
246
343
|
this._activeEffect.setTexture("opacitySampler", this._opacityTexture);
|
|
247
344
|
this._activeEffect.setFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);
|
|
@@ -256,6 +353,17 @@ export class GridMaterial extends PushMaterial {
|
|
|
256
353
|
}
|
|
257
354
|
// Fog
|
|
258
355
|
BindFogParameters(scene, mesh, this._activeEffect);
|
|
356
|
+
// Camera uniforms — must be updated every frame
|
|
357
|
+
if (defines.HORIZON_FADE || defines.BELOW_LINE_COLOR || defines.ORIGIN_MARKER) {
|
|
358
|
+
const cam = scene.activeCamera;
|
|
359
|
+
if (cam) {
|
|
360
|
+
this._activeEffect.setVector3("cameraPosition", cam.globalPosition);
|
|
361
|
+
const engine = scene.getEngine();
|
|
362
|
+
this._viewportSize.x = engine.getRenderWidth();
|
|
363
|
+
this._viewportSize.y = engine.getRenderHeight();
|
|
364
|
+
this._activeEffect.setVector2("viewportSize", this._viewportSize);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
259
367
|
this._afterBind(mesh, this._activeEffect, subMesh);
|
|
260
368
|
}
|
|
261
369
|
/**
|
|
@@ -276,6 +384,13 @@ export class GridMaterial extends PushMaterial {
|
|
|
276
384
|
getClassName() {
|
|
277
385
|
return "GridMaterial";
|
|
278
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Parse a JSON input to create back a grid material.
|
|
389
|
+
* @param source the JSON data to parse
|
|
390
|
+
* @param scene defines the hosting scene
|
|
391
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
392
|
+
* @returns a new grid material
|
|
393
|
+
*/
|
|
279
394
|
static Parse(source, scene, rootUrl) {
|
|
280
395
|
return SerializationHelper.Parse(() => new GridMaterial(source.name, scene), source, scene, rootUrl);
|
|
281
396
|
}
|
|
@@ -304,6 +419,30 @@ __decorate([
|
|
|
304
419
|
__decorate([
|
|
305
420
|
serialize()
|
|
306
421
|
], GridMaterial.prototype, "antialias", void 0);
|
|
422
|
+
__decorate([
|
|
423
|
+
serializeAsColor3()
|
|
424
|
+
], GridMaterial.prototype, "belowLineColor", null);
|
|
425
|
+
__decorate([
|
|
426
|
+
serialize()
|
|
427
|
+
], GridMaterial.prototype, "useMultiScale", void 0);
|
|
428
|
+
__decorate([
|
|
429
|
+
serialize()
|
|
430
|
+
], GridMaterial.prototype, "minGridSpacing", void 0);
|
|
431
|
+
__decorate([
|
|
432
|
+
serialize()
|
|
433
|
+
], GridMaterial.prototype, "gridOctaves", void 0);
|
|
434
|
+
__decorate([
|
|
435
|
+
serialize()
|
|
436
|
+
], GridMaterial.prototype, "useHorizonFade", void 0);
|
|
437
|
+
__decorate([
|
|
438
|
+
serialize()
|
|
439
|
+
], GridMaterial.prototype, "useOriginMarker", void 0);
|
|
440
|
+
__decorate([
|
|
441
|
+
serialize()
|
|
442
|
+
], GridMaterial.prototype, "linesOnly", null);
|
|
443
|
+
__decorate([
|
|
444
|
+
serialize()
|
|
445
|
+
], GridMaterial.prototype, "gridThicknessModifier", void 0);
|
|
307
446
|
__decorate([
|
|
308
447
|
serialize()
|
|
309
448
|
], GridMaterial.prototype, "preMultiplyAlpha", void 0);
|
package/grid/gridMaterial.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/gridMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serializeAsTexture, serialize, expandToProperty, serializeAsColor3, serializeAsVector3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector4, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { type SubMesh } from \"core/Meshes/subMesh\";\r\nimport { type Mesh } from \"core/Meshes/mesh\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nimport {\r\n BindFogParameters,\r\n BindLogDepth,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForMisc,\r\n} from \"core/Materials/materialHelper.functions\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass GridMaterialDefines extends MaterialDefines {\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public OPACITY = false;\r\n public ANTIALIAS = false;\r\n public TRANSPARENT = false;\r\n public FOG = false;\r\n public PREMULTIPLYALPHA = false;\r\n public MAX_LINE = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public LOGARITHMICDEPTH = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * The grid materials allows you to wrap any shape with a grid.\r\n * Colors are customizable.\r\n */\r\nexport class GridMaterial extends PushMaterial {\r\n /**\r\n * Main color of the grid (e.g. between lines)\r\n */\r\n @serializeAsColor3()\r\n public mainColor = Color3.Black();\r\n\r\n /**\r\n * Color of the grid lines.\r\n */\r\n @serializeAsColor3()\r\n public lineColor = Color3.Teal();\r\n\r\n /**\r\n * The scale of the grid compared to unit.\r\n */\r\n @serialize()\r\n public gridRatio = 1.0;\r\n\r\n /**\r\n * Allows setting an offset for the grid lines.\r\n */\r\n @serializeAsVector3()\r\n public gridOffset = Vector3.Zero();\r\n\r\n /**\r\n * The frequency of thicker lines.\r\n */\r\n @serialize()\r\n public majorUnitFrequency = 10;\r\n\r\n /**\r\n * The visibility of minor units in the grid.\r\n */\r\n @serialize()\r\n public minorUnitVisibility = 0.33;\r\n\r\n /**\r\n * The grid opacity outside of the lines.\r\n */\r\n @serialize()\r\n public opacity = 1.0;\r\n\r\n /**\r\n * Whether to antialias the grid\r\n */\r\n @serialize()\r\n public antialias = true;\r\n\r\n /**\r\n * Determine RBG output is premultiplied by alpha value.\r\n */\r\n @serialize()\r\n public preMultiplyAlpha = false;\r\n\r\n /**\r\n * Determines if the max line value will be used instead of the sum wherever grid lines intersect.\r\n */\r\n @serialize()\r\n public useMaxLine = false;\r\n\r\n @serializeAsTexture(\"opacityTexture\")\r\n private _opacityTexture: BaseTexture;\r\n /**\r\n * Texture to define opacity of the grid\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public opacityTexture: BaseTexture;\r\n\r\n private _gridControl: Vector4 = new Vector4(this.gridRatio, this.majorUnitFrequency, this.minorUnitVisibility, this.opacity);\r\n\r\n /**\r\n * constructor\r\n * @param name The name given to the material in order to identify it afterwards.\r\n * @param scene The scene the material is used in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL);\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * @returns whether or not the grid requires alpha blending.\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return this.opacity < 1.0 || (this._opacityTexture && this._opacityTexture.isReady());\r\n }\r\n\r\n public override needAlphaBlendingForMesh(mesh: AbstractMesh): boolean {\r\n return mesh.visibility < 1.0 || this.needAlphaBlending();\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new GridMaterialDefines();\r\n }\r\n\r\n const defines = <GridMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n if (defines.TRANSPARENT !== this.opacity < 1.0) {\r\n defines.TRANSPARENT = !defines.TRANSPARENT;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.PREMULTIPLYALPHA != this.preMultiplyAlpha) {\r\n defines.PREMULTIPLYALPHA = !defines.PREMULTIPLYALPHA;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.MAX_LINE !== this.useMaxLine) {\r\n defines.MAX_LINE = !defines.MAX_LINE;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.ANTIALIAS !== this.antialias) {\r\n defines.ANTIALIAS = !defines.ANTIALIAS;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n if (!this._opacityTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.OPACITY = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, false, this.fogEnabled, false, defines, undefined, undefined, undefined, this._isVertexOutputInvariant);\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, scene.getEngine(), this, defines, !!useInstances);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Attributes\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const uniforms = [\r\n \"projection\",\r\n \"mainColor\",\r\n \"lineColor\",\r\n \"gridControl\",\r\n \"gridOffset\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"world\",\r\n \"view\",\r\n \"opacityMatrix\",\r\n \"vOpacityInfos\",\r\n \"visibility\",\r\n \"logarithmicDepthConstant\",\r\n ];\r\n // Defines\r\n const join = defines.toString();\r\n AddClipPlaneUniforms(uniforms);\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n \"grid\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [\"Scene\"],\r\n samplers: [\"opacitySampler\"],\r\n defines: join,\r\n fallbacks: null,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"./wgsl/grid.vertex\"), import(\"./wgsl/grid.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"./grid.vertex\"), import(\"./grid.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n scene.getEngine()\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <GridMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n this._activeEffect.setFloat(\"visibility\", mesh.visibility);\r\n\r\n // Matrices\r\n if (!defines.INSTANCES || defines.THIN_INSTANCE) {\r\n this.bindOnlyWorldMatrix(world);\r\n }\r\n this.bindView(effect);\r\n this.bindViewProjection(effect);\r\n\r\n // Uniforms\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n this._activeEffect.setColor3(\"mainColor\", this.mainColor);\r\n this._activeEffect.setColor3(\"lineColor\", this.lineColor);\r\n\r\n this._activeEffect.setVector3(\"gridOffset\", this.gridOffset);\r\n\r\n this._gridControl.x = this.gridRatio;\r\n this._gridControl.y = Math.round(this.majorUnitFrequency);\r\n this._gridControl.z = this.minorUnitVisibility;\r\n this._gridControl.w = this.opacity;\r\n this._activeEffect.setVector4(\"gridControl\", this._gridControl);\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n this._activeEffect.setTexture(\"opacitySampler\", this._opacityTexture);\r\n this._activeEffect.setFloat2(\"vOpacityInfos\", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);\r\n this._activeEffect.setMatrix(\"opacityMatrix\", this._opacityTexture.getTextureMatrix());\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n }\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n /**\r\n * Dispose the material and its associated resources.\r\n * @param forceDisposeEffect will also dispose the used effect when true\r\n */\r\n public override dispose(forceDisposeEffect?: boolean): void {\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public override clone(name: string): GridMaterial {\r\n return SerializationHelper.Clone(() => new GridMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.GridMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"GridMaterial\";\r\n }\r\n\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GridMaterial {\r\n return SerializationHelper.Parse(() => new GridMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GridMaterial\", GridMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"gridMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/grid/gridMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serializeAsTexture, serialize, expandToProperty, serializeAsColor3, serializeAsVector3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector4, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type Nullable } from \"core/types\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { type SubMesh } from \"core/Meshes/subMesh\";\r\nimport { type Mesh } from \"core/Meshes/mesh\";\r\nimport { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nimport {\r\n BindFogParameters,\r\n BindLogDepth,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForMisc,\r\n} from \"core/Materials/materialHelper.functions\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass GridMaterialDefines extends MaterialDefines {\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public OPACITY = false;\r\n public ANTIALIAS = false;\r\n public LINES_ONLY = false;\r\n public FOG = false;\r\n public PREMULTIPLYALPHA = false;\r\n public MAX_LINE = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public LOGARITHMICDEPTH = false;\r\n public MULTI_SCALE = false;\r\n public HORIZON_FADE = false;\r\n public BELOW_LINE_COLOR = false;\r\n public ORIGIN_MARKER = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * The grid materials allows you to wrap any shape with a grid.\r\n * Colors are customizable.\r\n */\r\nexport class GridMaterial extends PushMaterial {\r\n /**\r\n * Main color of the grid (e.g. between lines)\r\n */\r\n @serializeAsColor3()\r\n public mainColor = Color3.Black();\r\n\r\n /**\r\n * Color of the grid lines.\r\n */\r\n @serializeAsColor3()\r\n public lineColor = Color3.Teal();\r\n\r\n /**\r\n * The scale of the grid compared to unit.\r\n */\r\n @serialize()\r\n public gridRatio = 1.0;\r\n\r\n /**\r\n * Allows setting an offset for the grid lines.\r\n */\r\n @serializeAsVector3()\r\n public gridOffset = Vector3.Zero();\r\n\r\n /**\r\n * The frequency of thicker lines.\r\n */\r\n @serialize()\r\n public majorUnitFrequency = 10;\r\n\r\n /**\r\n * The visibility of minor units in the grid.\r\n */\r\n @serialize()\r\n public minorUnitVisibility = 0.33;\r\n\r\n /**\r\n * Overall mesh opacity. In linesOnly mode this also scales the maximum line alpha.\r\n */\r\n @serialize()\r\n public opacity = 1.0;\r\n\r\n /**\r\n * Whether to antialias the grid\r\n */\r\n @serialize()\r\n public antialias = true;\r\n\r\n /**\r\n * Color of grid lines when the camera is below the surface.\r\n * When set, lineColor acts as the above-surface color.\r\n */\r\n @serializeAsColor3()\r\n public get belowLineColor(): Nullable<Color3> {\r\n return this._belowLineColor;\r\n }\r\n public set belowLineColor(value: Nullable<Color3>) {\r\n if (this._belowLineColor === value) {\r\n return;\r\n }\r\n this._belowLineColor = value;\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n private _belowLineColor: Nullable<Color3> = null;\r\n\r\n /**\r\n * Enable multi-scale logarithmic grid LOD. Number of octaves is controlled by gridOctaves.\r\n */\r\n @serialize()\r\n public useMultiScale: boolean = false;\r\n\r\n /**\r\n * World-unit spacing of the finest octave. Default 0.001.\r\n */\r\n @serialize()\r\n public minGridSpacing: number = 0.001;\r\n\r\n /**\r\n * Number of logarithmic octaves rendered (1–8). Default 4.\r\n */\r\n @serialize()\r\n public gridOctaves: number = 4;\r\n\r\n /**\r\n * Enable camera-distance-aware horizon (grazing-angle) fade.\r\n */\r\n @serialize()\r\n public useHorizonFade: boolean = false;\r\n\r\n /**\r\n * Render an ultra-fine crosshair at the world origin.\r\n */\r\n @serialize()\r\n public useOriginMarker: boolean = false;\r\n\r\n /**\r\n * When true, only grid lines are visible — non-grid pixels are discarded.\r\n * Puts the material in the alpha-blend queue and enables a depth pre-pass so grid lines\r\n * correctly occlude translucent objects (e.g. Gaussian splats). Set mesh.alphaIndex to a\r\n * value lower than other transparent objects so the depth pre-pass fires first.\r\n */\r\n @serialize()\r\n public get linesOnly(): boolean {\r\n return this._linesOnly;\r\n }\r\n public set linesOnly(value: boolean) {\r\n if (this._linesOnly === value) {\r\n return;\r\n }\r\n this._linesOnly = value;\r\n this.needDepthPrePass = value;\r\n this._markAllSubMeshesAsMiscDirty();\r\n }\r\n private _linesOnly = false;\r\n\r\n /**\r\n * Scales grid line width. Values \\> 1 produce thicker lines. Default 1.0.\r\n */\r\n @serialize()\r\n public gridThicknessModifier: number = 1.0;\r\n\r\n /**\r\n * Determine RBG output is premultiplied by alpha value.\r\n */\r\n @serialize()\r\n public preMultiplyAlpha = false;\r\n\r\n /**\r\n * Determines if the max line value will be used instead of the sum wherever grid lines intersect.\r\n */\r\n @serialize()\r\n public useMaxLine = false;\r\n\r\n @serializeAsTexture(\"opacityTexture\")\r\n private _opacityTexture: BaseTexture;\r\n /**\r\n * Texture to define opacity of the grid\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public opacityTexture: BaseTexture;\r\n\r\n private _gridControl: Vector4 = new Vector4(this.gridRatio, this.majorUnitFrequency, this.minorUnitVisibility, this.opacity);\r\n private _viewportSize: Vector2 = new Vector2();\r\n\r\n /**\r\n * constructor\r\n * @param name The name given to the material in order to identify it afterwards.\r\n * @param scene The scene the material is used in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL);\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * @returns whether or not the grid requires alpha blending.\r\n */\r\n public override needAlphaBlending(): boolean {\r\n return this.linesOnly || this.opacity < 1.0 || (this._opacityTexture && this._opacityTexture.isReady());\r\n }\r\n\r\n public override needAlphaBlendingForMesh(mesh: AbstractMesh): boolean {\r\n return mesh.visibility < 1.0 || this.needAlphaBlending();\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new GridMaterialDefines();\r\n }\r\n\r\n const defines = <GridMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n if (defines.LINES_ONLY !== this.linesOnly) {\r\n defines.LINES_ONLY = this.linesOnly;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.PREMULTIPLYALPHA != this.preMultiplyAlpha) {\r\n defines.PREMULTIPLYALPHA = !defines.PREMULTIPLYALPHA;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.MAX_LINE !== this.useMaxLine) {\r\n defines.MAX_LINE = !defines.MAX_LINE;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.ANTIALIAS !== this.antialias) {\r\n defines.ANTIALIAS = this.antialias;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.MULTI_SCALE !== this.useMultiScale) {\r\n defines.MULTI_SCALE = this.useMultiScale;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.HORIZON_FADE !== this.useHorizonFade) {\r\n defines.HORIZON_FADE = this.useHorizonFade;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n const wantsBelowColor = this._belowLineColor !== null;\r\n if (defines.BELOW_LINE_COLOR !== wantsBelowColor) {\r\n defines.BELOW_LINE_COLOR = wantsBelowColor;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n if (defines.ORIGIN_MARKER !== this.useOriginMarker) {\r\n defines.ORIGIN_MARKER = this.useOriginMarker;\r\n defines.markAsUnprocessed();\r\n }\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n if (!this._opacityTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.OPACITY = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, false, this.fogEnabled, false, defines, undefined, undefined, undefined, this._isVertexOutputInvariant);\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, scene.getEngine(), this, defines, !!useInstances);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Attributes\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n const uniforms = [\r\n \"projection\",\r\n \"mainColor\",\r\n \"lineColor\",\r\n \"gridControl\",\r\n \"gridOffset\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"world\",\r\n \"view\",\r\n \"opacityMatrix\",\r\n \"vOpacityInfos\",\r\n \"visibility\",\r\n \"logarithmicDepthConstant\",\r\n \"gridThicknessModifier\",\r\n ];\r\n if (defines.MULTI_SCALE) {\r\n uniforms.push(\"minGridSpacing\", \"gridOctaves\");\r\n }\r\n if (defines.HORIZON_FADE || defines.BELOW_LINE_COLOR || defines.ORIGIN_MARKER) {\r\n uniforms.push(\"cameraPosition\", \"viewportSize\");\r\n }\r\n if (defines.BELOW_LINE_COLOR) {\r\n uniforms.push(\"belowLineColor\");\r\n }\r\n // Defines\r\n const join = defines.toString();\r\n AddClipPlaneUniforms(uniforms);\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n \"grid\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: [\"Scene\"],\r\n samplers: [\"opacitySampler\"],\r\n defines: join,\r\n fallbacks: null,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"./wgsl/grid.vertex\"), import(\"./wgsl/grid.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"./grid.vertex\"), import(\"./grid.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n scene.getEngine()\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <GridMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n this._activeEffect.setFloat(\"visibility\", mesh.visibility);\r\n\r\n // Matrices\r\n if (!defines.INSTANCES || defines.THIN_INSTANCE) {\r\n this.bindOnlyWorldMatrix(world);\r\n }\r\n this.bindView(effect);\r\n this.bindViewProjection(effect);\r\n\r\n // Uniforms\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n this._activeEffect.setColor3(\"mainColor\", this.mainColor);\r\n this._activeEffect.setColor3(\"lineColor\", this.lineColor);\r\n\r\n this._activeEffect.setVector3(\"gridOffset\", this.gridOffset);\r\n\r\n this._gridControl.x = this.gridRatio;\r\n this._gridControl.y = Math.round(this.majorUnitFrequency);\r\n this._gridControl.z = this.minorUnitVisibility;\r\n this._gridControl.w = this.opacity;\r\n this._activeEffect.setVector4(\"gridControl\", this._gridControl);\r\n this._activeEffect.setFloat(\"gridThicknessModifier\", this.gridThicknessModifier);\r\n\r\n if (defines.BELOW_LINE_COLOR && this._belowLineColor) {\r\n this._activeEffect.setColor3(\"belowLineColor\", this._belowLineColor);\r\n }\r\n\r\n if (defines.MULTI_SCALE) {\r\n this._activeEffect.setFloat(\"minGridSpacing\", this.minGridSpacing);\r\n this._activeEffect.setFloat(\"gridOctaves\", Math.max(1, Math.min(8, Math.round(this.gridOctaves))));\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n this._activeEffect.setTexture(\"opacitySampler\", this._opacityTexture);\r\n this._activeEffect.setFloat2(\"vOpacityInfos\", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);\r\n this._activeEffect.setMatrix(\"opacityMatrix\", this._opacityTexture.getTextureMatrix());\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n }\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Camera uniforms — must be updated every frame\r\n if (defines.HORIZON_FADE || defines.BELOW_LINE_COLOR || defines.ORIGIN_MARKER) {\r\n const cam = scene.activeCamera;\r\n if (cam) {\r\n this._activeEffect.setVector3(\"cameraPosition\", cam.globalPosition);\r\n const engine = scene.getEngine();\r\n this._viewportSize.x = engine.getRenderWidth();\r\n this._viewportSize.y = engine.getRenderHeight();\r\n this._activeEffect.setVector2(\"viewportSize\", this._viewportSize);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n /**\r\n * Dispose the material and its associated resources.\r\n * @param forceDisposeEffect will also dispose the used effect when true\r\n */\r\n public override dispose(forceDisposeEffect?: boolean): void {\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public override clone(name: string): GridMaterial {\r\n return SerializationHelper.Clone(() => new GridMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.GridMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"GridMaterial\";\r\n }\r\n\r\n /**\r\n * Parse a JSON input to create back a grid material.\r\n * @param source the JSON data to parse\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @returns a new grid material\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GridMaterial {\r\n return SerializationHelper.Parse(() => new GridMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GridMaterial\", GridMaterial);\r\n"]}
|
|
@@ -10,7 +10,27 @@ import { imageProcessingCompatibilityWGSL } from "@babylonjs/core/ShadersWGSL/Sh
|
|
|
10
10
|
const name = "gridPixelShader";
|
|
11
11
|
const shader = `#define SQRT2 1.41421356
|
|
12
12
|
#define PI 3.14159
|
|
13
|
-
|
|
13
|
+
#define MAX_OCTAVES 8
|
|
14
|
+
#define LINE_WIDTH_SCREEN_FRACTION 0.004
|
|
15
|
+
#define HORIZON_FADE_EXPONENT 400.0
|
|
16
|
+
#define ORIGIN_MARKER_SPAN 10000000.0
|
|
17
|
+
#define ORIGIN_MARKER_WIDTH_SCALE 0.00000015
|
|
18
|
+
#define ORIGIN_MARKER_THRESHOLD 0.0001
|
|
19
|
+
#define TRANSPARENT_MIN_OPACITY 0.08
|
|
20
|
+
uniform visibility: f32;uniform mainColor: vec3f;uniform lineColor: vec3f;uniform gridControl: vec4f;uniform gridOffset: vec3f;uniform gridThicknessModifier: f32;
|
|
21
|
+
#ifdef MULTI_SCALE
|
|
22
|
+
uniform minGridSpacing: f32;uniform gridOctaves: f32;
|
|
23
|
+
#endif
|
|
24
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
25
|
+
uniform cameraPosition: vec3f;uniform viewportSize: vec2f;
|
|
26
|
+
#endif
|
|
27
|
+
#ifdef BELOW_LINE_COLOR
|
|
28
|
+
uniform belowLineColor: vec3f;
|
|
29
|
+
#endif
|
|
30
|
+
varying vPosition: vec3f;varying vNormal: vec3f;
|
|
31
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
32
|
+
varying vWorldPos: vec3f;
|
|
33
|
+
#endif
|
|
14
34
|
#include<clipPlaneFragmentDeclaration>
|
|
15
35
|
#include<logDepthDeclaration>
|
|
16
36
|
#include<fogFragmentDeclaration>
|
|
@@ -29,37 +49,64 @@ if (abs(fractionPartOfPosition)<SQRT2/4.) {return 1.;}
|
|
|
29
49
|
return 0.;
|
|
30
50
|
#endif
|
|
31
51
|
}
|
|
32
|
-
fn contributionOnAxis(position: f32)->f32 {
|
|
52
|
+
fn contributionOnAxis(position: f32,tcLineWidthCap: f32,thicknessModifier: f32)->f32 {let dPosDx: f32=dpdx(position);let dPosDy: f32=dpdy(position);var differentialLength: f32=length(vec2f(dPosDx,dPosDy))*SQRT2;if (tcLineWidthCap>0.0) {differentialLength=max(differentialLength,tcLineWidthCap);}
|
|
53
|
+
let lineWidth: f32=differentialLength*thicknessModifier;var result: f32=isPointOnLine(position,lineWidth);result=result*getDynamicVisibility(position);result=result*getAnisotropicAttenuation(differentialLength);return result;}
|
|
33
54
|
fn normalImpactOnAxis(x: f32)->f32 {var normalImpact: f32=clamp(1.0-3.0*abs(x*x*x),0.0,1.0);return normalImpact;}
|
|
34
55
|
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
35
56
|
@fragment
|
|
36
57
|
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
37
58
|
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
38
59
|
#include<clipPlaneFragment>
|
|
39
|
-
var
|
|
60
|
+
var normal: vec3f=normalize(fragmentInputs.vNormal);var horizonFade: f32=1.0;var tcLineWidthCap: f32=0.0;
|
|
61
|
+
#if defined(HORIZON_FADE) || defined(ORIGIN_MARKER)
|
|
62
|
+
var tc: f32=length(fragmentInputs.vWorldPos-uniforms.cameraPosition);
|
|
63
|
+
#ifdef HORIZON_FADE
|
|
64
|
+
tcLineWidthCap=LINE_WIDTH_SCREEN_FRACTION*tc/uniforms.viewportSize.y;let rd: vec3f=normalize(fragmentInputs.vWorldPos-uniforms.cameraPosition);if (abs(rd.y)>0.99) {horizonFade=1.0;} else {let flatRayDir: vec3f=normalize(vec3f(rd.x,0.0,rd.z));horizonFade=-pow(abs(dot(rd,flatRayDir)),HORIZON_FADE_EXPONENT)+1.0;}
|
|
65
|
+
#endif
|
|
66
|
+
#endif
|
|
67
|
+
var grid: f32=0.0;
|
|
68
|
+
#ifdef MULTI_SCALE
|
|
69
|
+
for (var i: i32=0; i<MAX_OCTAVES; i++) {if (i>=i32(uniforms.gridOctaves)) { break; }
|
|
70
|
+
let scale: f32=uniforms.minGridSpacing*pow(10.0,f32(i));let gridPos: vec3f=(fragmentInputs.vPosition+uniforms.gridOffset.xyz)/scale;let gx: f32=contributionOnAxis(gridPos.x,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.x);let gy: f32=contributionOnAxis(gridPos.y,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.y);let gz: f32=contributionOnAxis(gridPos.z,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.z);
|
|
40
71
|
#ifdef MAX_LINE
|
|
41
|
-
|
|
72
|
+
grid=max(grid,clamp(max(max(gx,gy),gz),0.,1.));
|
|
42
73
|
#else
|
|
43
|
-
|
|
74
|
+
grid=max(grid,clamp(gx+gy+gz,0.,1.));
|
|
44
75
|
#endif
|
|
45
|
-
|
|
76
|
+
}
|
|
77
|
+
#else
|
|
78
|
+
let gridRatio: f32=uniforms.gridControl.x;let gridPos: vec3f=(fragmentInputs.vPosition+uniforms.gridOffset.xyz)/gridRatio;let x: f32=contributionOnAxis(gridPos.x,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.x);let y: f32=contributionOnAxis(gridPos.y,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.y);let z: f32=contributionOnAxis(gridPos.z,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.z);
|
|
79
|
+
#ifdef MAX_LINE
|
|
80
|
+
grid=clamp(max(max(x,y),z),0.,1.);
|
|
81
|
+
#else
|
|
82
|
+
grid=clamp(x+y+z,0.,1.);
|
|
83
|
+
#endif
|
|
84
|
+
#endif
|
|
85
|
+
grid=grid*horizonFade;
|
|
86
|
+
#ifdef ORIGIN_MARKER
|
|
87
|
+
let tcOrigin: f32=ORIGIN_MARKER_WIDTH_SCALE*tc/uniforms.viewportSize.y;let ox: f32=contributionOnAxis(fragmentInputs.vWorldPos.x/ORIGIN_MARKER_SPAN,tcOrigin,uniforms.gridThicknessModifier);let oz: f32=contributionOnAxis(fragmentInputs.vWorldPos.z/ORIGIN_MARKER_SPAN,tcOrigin,uniforms.gridThicknessModifier);let originMask: f32=clamp(ox+oz,0.0,1.0)*horizonFade;if (originMask>ORIGIN_MARKER_THRESHOLD) { grid=originMask; }
|
|
88
|
+
#endif
|
|
89
|
+
#ifdef BELOW_LINE_COLOR
|
|
90
|
+
let belowSurface: bool=uniforms.cameraPosition.y<fragmentInputs.vWorldPos.y;let effectiveLineColor: vec3f=select(uniforms.lineColor,uniforms.belowLineColor,belowSurface);
|
|
91
|
+
#else
|
|
92
|
+
let effectiveLineColor: vec3f=uniforms.lineColor;
|
|
93
|
+
#endif
|
|
94
|
+
var color: vec4f=vec4f(mix(uniforms.mainColor,effectiveLineColor,vec3f(grid)),1.0);
|
|
46
95
|
#ifdef FOG
|
|
47
96
|
#include<fogFragment>
|
|
48
97
|
#endif
|
|
49
|
-
var opacity: f32=
|
|
50
|
-
#ifdef
|
|
51
|
-
|
|
98
|
+
var opacity: f32=uniforms.gridControl.w;
|
|
99
|
+
#ifdef LINES_ONLY
|
|
100
|
+
if (grid<0.01) { discard; }
|
|
101
|
+
opacity=clamp(grid,TRANSPARENT_MIN_OPACITY,uniforms.gridControl.w*grid);
|
|
52
102
|
#endif
|
|
53
103
|
#ifdef OPACITY
|
|
54
104
|
opacity=opacity*textureSample(opacitySampler,opacitySamplerSampler,fragmentInputs.vOpacityUV).a;
|
|
55
105
|
#endif
|
|
56
|
-
fragmentOutputs.color=
|
|
57
|
-
#ifdef TRANSPARENT
|
|
106
|
+
fragmentOutputs.color=vec4f(color.rgb,opacity*uniforms.visibility);
|
|
58
107
|
#ifdef PREMULTIPLYALPHA
|
|
59
108
|
fragmentOutputs.color=vec4f(fragmentOutputs.color.rgb*opacity,fragmentOutputs.color.a);
|
|
60
109
|
#endif
|
|
61
|
-
#else
|
|
62
|
-
#endif
|
|
63
110
|
#include<logDepthFragment>
|
|
64
111
|
#include<imageProcessingCompatibility>
|
|
65
112
|
#define CUSTOM_FRAGMENT_MAIN_END
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.fragment.js","sourceRoot":"","sources":["../../../../../dev/materials/src/grid/wgsl/grid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,gCAAgC,EAAE,MAAM,8DAA8D,CAAC;AAEhH,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"grid.fragment.js","sourceRoot":"","sources":["../../../../../dev/materials/src/grid/wgsl/grid.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,0BAA0B,EAAE,MAAM,wDAAwD,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,gCAAgC,EAAE,MAAM,8DAA8D,CAAC;AAEhH,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,gCAAgC,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,eAAe,EAAE,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;AACzM,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAChE,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport { clipPlaneFragmentDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration\";\nimport { logDepthDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/logDepthDeclaration\";\nimport { fogFragmentDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration\";\nimport { clipPlaneFragmentWGSL } from \"core/ShadersWGSL/ShadersInclude/clipPlaneFragment\";\nimport { fogFragmentWGSL } from \"core/ShadersWGSL/ShadersInclude/fogFragment\";\nimport { logDepthFragmentWGSL } from \"core/ShadersWGSL/ShadersInclude/logDepthFragment\";\nimport { imageProcessingCompatibilityWGSL } from \"core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility\";\n\nconst name = \"gridPixelShader\";\nconst shader = `#define SQRT2 1.41421356\n#define PI 3.14159\n#define MAX_OCTAVES 8\n#define LINE_WIDTH_SCREEN_FRACTION 0.004\n#define HORIZON_FADE_EXPONENT 400.0\n#define ORIGIN_MARKER_SPAN 10000000.0\n#define ORIGIN_MARKER_WIDTH_SCALE 0.00000015\n#define ORIGIN_MARKER_THRESHOLD 0.0001\n#define TRANSPARENT_MIN_OPACITY 0.08\nuniform visibility: f32;uniform mainColor: vec3f;uniform lineColor: vec3f;uniform gridControl: vec4f;uniform gridOffset: vec3f;uniform gridThicknessModifier: f32;\n#ifdef MULTI_SCALE\nuniform minGridSpacing: f32;uniform gridOctaves: f32;\n#endif\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nuniform cameraPosition: vec3f;uniform viewportSize: vec2f;\n#endif\n#ifdef BELOW_LINE_COLOR\nuniform belowLineColor: vec3f;\n#endif\nvarying vPosition: vec3f;varying vNormal: vec3f;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvarying vWorldPos: vec3f;\n#endif\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#ifdef OPACITY\nvarying vOpacityUV: vec2f;var opacitySamplerSampler: sampler;var opacitySampler: texture_2d<f32>;uniform vOpacityInfos: vec2f;\n#endif\nfn getDynamicVisibility(position: f32)->f32 {var majorGridFrequency: f32=uniforms.gridControl.y;if (floor(position+0.5)==floor(position/majorGridFrequency+0.5)*majorGridFrequency)\n{return 1.0;}\nreturn uniforms.gridControl.z;}\nfn getAnisotropicAttenuation(differentialLength: f32)->f32 {let maxNumberOfLines: f32=10.0;return clamp(1.0/(differentialLength+1.0)-1.0/maxNumberOfLines,0.0,1.0);}\nfn isPointOnLine(position: f32,differentialLength: f32)->f32 {var fractionPartOfPosition: f32=position-floor(position+0.5);fractionPartOfPosition=fractionPartOfPosition/differentialLength;\n#ifdef ANTIALIAS\nfractionPartOfPosition=clamp(fractionPartOfPosition,-1.,1.);var result: f32=0.5+0.5*cos(fractionPartOfPosition*PI);return result;\n#else\nif (abs(fractionPartOfPosition)<SQRT2/4.) {return 1.;}\nreturn 0.;\n#endif\n}\nfn contributionOnAxis(position: f32,tcLineWidthCap: f32,thicknessModifier: f32)->f32 {let dPosDx: f32=dpdx(position);let dPosDy: f32=dpdy(position);var differentialLength: f32=length(vec2f(dPosDx,dPosDy))*SQRT2;if (tcLineWidthCap>0.0) {differentialLength=max(differentialLength,tcLineWidthCap);}\nlet lineWidth: f32=differentialLength*thicknessModifier;var result: f32=isPointOnLine(position,lineWidth);result=result*getDynamicVisibility(position);result=result*getAnisotropicAttenuation(differentialLength);return result;}\nfn normalImpactOnAxis(x: f32)->f32 {var normalImpact: f32=clamp(1.0-3.0*abs(x*x*x),0.0,1.0);return normalImpact;}\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\nvar normal: vec3f=normalize(fragmentInputs.vNormal);var horizonFade: f32=1.0;var tcLineWidthCap: f32=0.0;\n#if defined(HORIZON_FADE) || defined(ORIGIN_MARKER)\nvar tc: f32=length(fragmentInputs.vWorldPos-uniforms.cameraPosition);\n#ifdef HORIZON_FADE\ntcLineWidthCap=LINE_WIDTH_SCREEN_FRACTION*tc/uniforms.viewportSize.y;let rd: vec3f=normalize(fragmentInputs.vWorldPos-uniforms.cameraPosition);if (abs(rd.y)>0.99) {horizonFade=1.0;} else {let flatRayDir: vec3f=normalize(vec3f(rd.x,0.0,rd.z));horizonFade=-pow(abs(dot(rd,flatRayDir)),HORIZON_FADE_EXPONENT)+1.0;}\n#endif\n#endif\nvar grid: f32=0.0;\n#ifdef MULTI_SCALE\nfor (var i: i32=0; i<MAX_OCTAVES; i++) {if (i>=i32(uniforms.gridOctaves)) { break; }\nlet scale: f32=uniforms.minGridSpacing*pow(10.0,f32(i));let gridPos: vec3f=(fragmentInputs.vPosition+uniforms.gridOffset.xyz)/scale;let gx: f32=contributionOnAxis(gridPos.x,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.x);let gy: f32=contributionOnAxis(gridPos.y,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.y);let gz: f32=contributionOnAxis(gridPos.z,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.z);\n#ifdef MAX_LINE\ngrid=max(grid,clamp(max(max(gx,gy),gz),0.,1.));\n#else\ngrid=max(grid,clamp(gx+gy+gz,0.,1.));\n#endif\n}\n#else\nlet gridRatio: f32=uniforms.gridControl.x;let gridPos: vec3f=(fragmentInputs.vPosition+uniforms.gridOffset.xyz)/gridRatio;let x: f32=contributionOnAxis(gridPos.x,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.x);let y: f32=contributionOnAxis(gridPos.y,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.y);let z: f32=contributionOnAxis(gridPos.z,tcLineWidthCap,uniforms.gridThicknessModifier)*normalImpactOnAxis(normal.z);\n#ifdef MAX_LINE\ngrid=clamp(max(max(x,y),z),0.,1.);\n#else\ngrid=clamp(x+y+z,0.,1.);\n#endif\n#endif\ngrid=grid*horizonFade;\n#ifdef ORIGIN_MARKER\nlet tcOrigin: f32=ORIGIN_MARKER_WIDTH_SCALE*tc/uniforms.viewportSize.y;let ox: f32=contributionOnAxis(fragmentInputs.vWorldPos.x/ORIGIN_MARKER_SPAN,tcOrigin,uniforms.gridThicknessModifier);let oz: f32=contributionOnAxis(fragmentInputs.vWorldPos.z/ORIGIN_MARKER_SPAN,tcOrigin,uniforms.gridThicknessModifier);let originMask: f32=clamp(ox+oz,0.0,1.0)*horizonFade;if (originMask>ORIGIN_MARKER_THRESHOLD) { grid=originMask; }\n#endif\n#ifdef BELOW_LINE_COLOR\nlet belowSurface: bool=uniforms.cameraPosition.y<fragmentInputs.vWorldPos.y;let effectiveLineColor: vec3f=select(uniforms.lineColor,uniforms.belowLineColor,belowSurface);\n#else\nlet effectiveLineColor: vec3f=uniforms.lineColor;\n#endif\nvar color: vec4f=vec4f(mix(uniforms.mainColor,effectiveLineColor,vec3f(grid)),1.0);\n#ifdef FOG\n#include<fogFragment>\n#endif\nvar opacity: f32=uniforms.gridControl.w;\n#ifdef LINES_ONLY\nif (grid<0.01) { discard; }\nopacity=clamp(grid,TRANSPARENT_MIN_OPACITY,uniforms.gridControl.w*grid);\n#endif\n#ifdef OPACITY\nopacity=opacity*textureSample(opacitySampler,opacitySamplerSampler,fragmentInputs.vOpacityUV).a;\n#endif\nfragmentOutputs.color=vec4f(color.rgb,opacity*uniforms.visibility);\n#ifdef PREMULTIPLYALPHA\nfragmentOutputs.color=vec4f(fragmentOutputs.color.rgb*opacity,fragmentOutputs.color.a);\n#endif\n#include<logDepthFragment>\n#include<imageProcessingCompatibility>\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\nconst includes = [clipPlaneFragmentDeclarationWGSL, logDepthDeclarationWGSL, fogFragmentDeclarationWGSL, clipPlaneFragmentWGSL, fogFragmentWGSL, logDepthFragmentWGSL, imageProcessingCompatibilityWGSL];\nfor (const inc of includes) {\n if (!ShaderStore.IncludesShadersStoreWGSL[inc.name]) {\n ShaderStore.IncludesShadersStoreWGSL[inc.name] = inc.shader;\n }\n}\n\n/** @internal */\nexport const gridPixelShaderWGSL = { name, shader };\n"]}
|
package/grid/wgsl/grid.vertex.js
CHANGED
|
@@ -20,6 +20,9 @@ attribute uv2: vec2f;
|
|
|
20
20
|
#include<instancesDeclaration>
|
|
21
21
|
#include<sceneUboDeclaration>
|
|
22
22
|
varying vPosition: vec3f;varying vNormal: vec3f;
|
|
23
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
24
|
+
varying vWorldPos: vec3f;
|
|
25
|
+
#endif
|
|
23
26
|
#include<logDepthDeclaration>
|
|
24
27
|
#include<fogVertexDeclaration>
|
|
25
28
|
#ifdef OPACITY
|
|
@@ -53,6 +56,9 @@ else
|
|
|
53
56
|
#include<clipPlaneVertex>
|
|
54
57
|
#include<logDepthVertex>
|
|
55
58
|
vertexOutputs.vPosition=vertexInputs.position;vertexOutputs.vNormal=vertexInputs.normal;
|
|
59
|
+
#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)
|
|
60
|
+
vertexOutputs.vWorldPos=worldPos.xyz;
|
|
61
|
+
#endif
|
|
56
62
|
#define CUSTOM_VERTEX_MAIN_END
|
|
57
63
|
}
|
|
58
64
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.vertex.js","sourceRoot":"","sources":["../../../../../dev/materials/src/grid/wgsl/grid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,4DAA4D,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAEpF,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"grid.vertex.js","sourceRoot":"","sources":["../../../../../dev/materials/src/grid/wgsl/grid.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,8BAA8B,EAAE,MAAM,4DAA4D,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAEpF,MAAM,IAAI,GAAG,kBAAkB,CAAC;AAChC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IACtC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AAChD,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;AACrO,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,WAAW,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IAChE,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport { instancesDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/instancesDeclaration\";\nimport { sceneUboDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/sceneUboDeclaration\";\nimport { logDepthDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/logDepthDeclaration\";\nimport { fogVertexDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/fogVertexDeclaration\";\nimport { clipPlaneVertexDeclarationWGSL } from \"core/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration\";\nimport { instancesVertexWGSL } from \"core/ShadersWGSL/ShadersInclude/instancesVertex\";\nimport { fogVertexWGSL } from \"core/ShadersWGSL/ShadersInclude/fogVertex\";\nimport { clipPlaneVertexWGSL } from \"core/ShadersWGSL/ShadersInclude/clipPlaneVertex\";\nimport { logDepthVertexWGSL } from \"core/ShadersWGSL/ShadersInclude/logDepthVertex\";\n\nconst name = \"gridVertexShader\";\nconst shader = `attribute position: vec3f;attribute normal: vec3f;\n#ifdef UV1\nattribute uv: vec2f;\n#endif\n#ifdef UV2\nattribute uv2: vec2f;\n#endif\n#include<instancesDeclaration>\n#include<sceneUboDeclaration>\nvarying vPosition: vec3f;varying vNormal: vec3f;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvarying vWorldPos: vec3f;\n#endif\n#include<logDepthDeclaration>\n#include<fogVertexDeclaration>\n#ifdef OPACITY\nvarying vOpacityUV: vec2f;uniform opacityMatrix: mat4x4f;uniform vOpacityInfos: vec2f;\n#endif\n#include<clipPlaneVertexDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\n#include<instancesVertex>\nvar worldPos: vec4f=finalWorld* vec4f(vertexInputs.position,1.0);\n#include<fogVertex>\nvar cameraSpacePosition: vec4f=scene.view*worldPos;vertexOutputs.position=scene.projection*cameraSpacePosition;\n#ifdef OPACITY\n#ifndef UV1\nvar uv: vec2f= vec2f(0.,0.);\n#else\nvar uv: vec2f=vertexInputs.uv;\n#endif\n#ifndef UV2\nvar uv2: vec2f= vec2f(0.,0.);\n#else\nvar uv2: vec2f=vertexInputs.uv2;\n#endif\nif (uniforms.vOpacityInfos.x==0.)\n{vertexOutputs.vOpacityUV=(uniforms.opacityMatrix* vec4f(uv,1.0,0.0)).xy;}\nelse\n{vertexOutputs.vOpacityUV=(uniforms.opacityMatrix* vec4f(uv2,1.0,0.0)).xy;}\n#endif\n#include<clipPlaneVertex>\n#include<logDepthVertex>\nvertexOutputs.vPosition=vertexInputs.position;vertexOutputs.vNormal=vertexInputs.normal;\n#if defined(HORIZON_FADE) || defined(BELOW_LINE_COLOR) || defined(ORIGIN_MARKER)\nvertexOutputs.vWorldPos=worldPos.xyz;\n#endif\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\nconst includes = [instancesDeclarationWGSL, sceneUboDeclarationWGSL, logDepthDeclarationWGSL, fogVertexDeclarationWGSL, clipPlaneVertexDeclarationWGSL, instancesVertexWGSL, fogVertexWGSL, clipPlaneVertexWGSL, logDepthVertexWGSL];\nfor (const inc of includes) {\n if (!ShaderStore.IncludesShadersStoreWGSL[inc.name]) {\n ShaderStore.IncludesShadersStoreWGSL[inc.name] = inc.shader;\n }\n}\n\n/** @internal */\nexport const gridVertexShaderWGSL = { name, shader };\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/materials",
|
|
3
|
-
"version": "9.10.
|
|
3
|
+
"version": "9.10.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"postcompile": "build-tools -c add-js-to-es6"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@babylonjs/core": "9.10.
|
|
21
|
+
"@babylonjs/core": "9.10.1",
|
|
22
22
|
"@dev/build-tools": "^1.0.0",
|
|
23
23
|
"@dev/materials": "^1.0.0"
|
|
24
24
|
},
|