@babylonjs/materials 9.4.1 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cell/cellMaterial.d.ts +8 -3
- package/cell/cellMaterial.js +21 -4
- package/cell/cellMaterial.js.map +1 -1
- package/cell/wgsl/cell.fragment.d.ts +18 -0
- package/cell/wgsl/cell.fragment.js +99 -0
- package/cell/wgsl/cell.fragment.js.map +1 -0
- package/cell/wgsl/cell.vertex.d.ts +21 -0
- package/cell/wgsl/cell.vertex.js +101 -0
- package/cell/wgsl/cell.vertex.js.map +1 -0
- package/fire/fireMaterial.d.ts +8 -3
- package/fire/fireMaterial.js +21 -4
- package/fire/fireMaterial.js.map +1 -1
- package/fire/wgsl/fire.fragment.d.ts +13 -0
- package/fire/wgsl/fire.fragment.js +63 -0
- package/fire/wgsl/fire.fragment.js.map +1 -0
- package/fire/wgsl/fire.vertex.d.ts +18 -0
- package/fire/wgsl/fire.vertex.js +78 -0
- package/fire/wgsl/fire.vertex.js.map +1 -0
- package/fur/furMaterial.d.ts +8 -3
- package/fur/furMaterial.js +21 -4
- package/fur/furMaterial.js.map +1 -1
- package/fur/wgsl/fur.fragment.d.ts +18 -0
- package/fur/wgsl/fur.fragment.js +94 -0
- package/fur/wgsl/fur.fragment.js.map +1 -0
- package/fur/wgsl/fur.vertex.d.ts +21 -0
- package/fur/wgsl/fur.vertex.js +127 -0
- package/fur/wgsl/fur.vertex.js.map +1 -0
- package/gradient/gradientMaterial.d.ts +8 -3
- package/gradient/gradientMaterial.js +21 -4
- package/gradient/gradientMaterial.js.map +1 -1
- package/gradient/wgsl/gradient.fragment.d.ts +18 -0
- package/gradient/wgsl/gradient.fragment.js +79 -0
- package/gradient/wgsl/gradient.fragment.js.map +1 -0
- package/gradient/wgsl/gradient.vertex.d.ts +21 -0
- package/gradient/wgsl/gradient.vertex.js +92 -0
- package/gradient/wgsl/gradient.vertex.js.map +1 -0
- package/grid/gridMaterial.d.ts +3 -3
- package/grid/gridMaterial.js +16 -4
- package/grid/gridMaterial.js.map +1 -1
- package/grid/wgsl/grid.fragment.d.ts +12 -0
- package/grid/wgsl/grid.fragment.js +74 -0
- package/grid/wgsl/grid.fragment.js.map +1 -0
- package/grid/wgsl/grid.vertex.d.ts +14 -0
- package/grid/wgsl/grid.vertex.js +65 -0
- package/grid/wgsl/grid.vertex.js.map +1 -0
- package/lava/lavaMaterial.d.ts +8 -3
- package/lava/lavaMaterial.js +21 -4
- package/lava/lavaMaterial.js.map +1 -1
- package/lava/wgsl/lava.fragment.d.ts +18 -0
- package/lava/wgsl/lava.fragment.js +89 -0
- package/lava/wgsl/lava.fragment.js.map +1 -0
- package/lava/wgsl/lava.vertex.d.ts +21 -0
- package/lava/wgsl/lava.vertex.js +116 -0
- package/lava/wgsl/lava.vertex.js.map +1 -0
- package/mix/mixMaterial.d.ts +8 -3
- package/mix/mixMaterial.js +21 -4
- package/mix/mixMaterial.js.map +1 -1
- package/mix/wgsl/mix.fragment.d.ts +18 -0
- package/mix/wgsl/mix.fragment.js +106 -0
- package/mix/wgsl/mix.fragment.js.map +1 -0
- package/mix/wgsl/mix.vertex.d.ts +21 -0
- package/mix/wgsl/mix.vertex.js +101 -0
- package/mix/wgsl/mix.vertex.js.map +1 -0
- package/normal/normalMaterial.d.ts +8 -3
- package/normal/normalMaterial.js +21 -4
- package/normal/normalMaterial.js.map +1 -1
- package/normal/wgsl/normal.fragment.d.ts +18 -0
- package/normal/wgsl/normal.fragment.js +85 -0
- package/normal/wgsl/normal.fragment.js.map +1 -0
- package/normal/wgsl/normal.vertex.d.ts +20 -0
- package/normal/wgsl/normal.vertex.js +93 -0
- package/normal/wgsl/normal.vertex.js.map +1 -0
- package/package.json +2 -2
- package/shadowOnly/shadowOnlyMaterial.d.ts +8 -3
- package/shadowOnly/shadowOnlyMaterial.js +21 -4
- package/shadowOnly/shadowOnlyMaterial.js.map +1 -1
- package/shadowOnly/wgsl/shadowOnly.fragment.d.ts +17 -0
- package/shadowOnly/wgsl/shadowOnly.fragment.js +57 -0
- package/shadowOnly/wgsl/shadowOnly.fragment.js.map +1 -0
- package/shadowOnly/wgsl/shadowOnly.vertex.d.ts +21 -0
- package/shadowOnly/wgsl/shadowOnly.vertex.js +69 -0
- package/shadowOnly/wgsl/shadowOnly.vertex.js.map +1 -0
- package/simple/simpleMaterial.d.ts +8 -3
- package/simple/simpleMaterial.js +21 -4
- package/simple/simpleMaterial.js.map +1 -1
- package/simple/wgsl/simple.fragment.d.ts +18 -0
- package/simple/wgsl/simple.fragment.js +81 -0
- package/simple/wgsl/simple.fragment.js.map +1 -0
- package/simple/wgsl/simple.vertex.d.ts +21 -0
- package/simple/wgsl/simple.vertex.js +101 -0
- package/simple/wgsl/simple.vertex.js.map +1 -0
- package/sky/skyMaterial.d.ts +3 -3
- package/sky/skyMaterial.js +26 -5
- package/sky/skyMaterial.js.map +1 -1
- package/sky/wgsl/sky.fragment.d.ts +13 -0
- package/sky/wgsl/sky.fragment.js +69 -0
- package/sky/wgsl/sky.fragment.js.map +1 -0
- package/sky/wgsl/sky.vertex.d.ts +11 -0
- package/sky/wgsl/sky.vertex.js +45 -0
- package/sky/wgsl/sky.vertex.js.map +1 -0
- package/terrain/terrainMaterial.d.ts +8 -3
- package/terrain/terrainMaterial.js +21 -4
- package/terrain/terrainMaterial.js.map +1 -1
- package/terrain/wgsl/terrain.fragment.d.ts +18 -0
- package/terrain/wgsl/terrain.fragment.js +108 -0
- package/terrain/wgsl/terrain.fragment.js.map +1 -0
- package/terrain/wgsl/terrain.vertex.d.ts +21 -0
- package/terrain/wgsl/terrain.vertex.js +101 -0
- package/terrain/wgsl/terrain.vertex.js.map +1 -0
- package/triPlanar/triPlanarMaterial.d.ts +8 -3
- package/triPlanar/triPlanarMaterial.js +21 -4
- package/triPlanar/triPlanarMaterial.js.map +1 -1
- package/triPlanar/wgsl/triplanar.fragment.d.ts +18 -0
- package/triPlanar/wgsl/triplanar.fragment.js +125 -0
- package/triPlanar/wgsl/triplanar.fragment.js.map +1 -0
- package/triPlanar/wgsl/triplanar.vertex.d.ts +22 -0
- package/triPlanar/wgsl/triplanar.vertex.js +102 -0
- package/triPlanar/wgsl/triplanar.vertex.js.map +1 -0
- package/water/waterMaterial.d.ts +3 -3
- package/water/waterMaterial.js +16 -4
- package/water/waterMaterial.js.map +1 -1
- package/water/wgsl/water.fragment.d.ts +18 -0
- package/water/wgsl/water.fragment.js +159 -0
- package/water/wgsl/water.fragment.js.map +1 -0
- package/water/wgsl/water.vertex.d.ts +21 -0
- package/water/wgsl/water.vertex.js +138 -0
- package/water/wgsl/water.vertex.js.map +1 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/helperFunctions.js";
|
|
2
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightUboDeclaration.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragment.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/depthPrePass.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightFragment.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthFragment.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragment.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility.js";
|
|
14
|
+
/** @internal */
|
|
15
|
+
export declare const furPixelShaderWGSL: {
|
|
16
|
+
name: string;
|
|
17
|
+
shader: string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/helperFunctions.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightUboDeclaration.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragment.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/depthPrePass.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightFragment.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthFragment.js";
|
|
14
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragment.js";
|
|
15
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility.js";
|
|
16
|
+
const name = "furPixelShader";
|
|
17
|
+
const shader = `uniform vEyePosition: vec4f;uniform vDiffuseColor: vec4f;uniform furColor: vec4f;uniform furLength: f32;varying vPositionW: vec3f;varying vfur_length: f32;
|
|
18
|
+
#ifdef NORMAL
|
|
19
|
+
varying vNormalW: vec3f;
|
|
20
|
+
#endif
|
|
21
|
+
#ifdef VERTEXCOLOR
|
|
22
|
+
varying vColor: vec4f;
|
|
23
|
+
#endif
|
|
24
|
+
#include<helperFunctions>
|
|
25
|
+
#include<lightUboDeclaration>[0..maxSimultaneousLights]
|
|
26
|
+
#ifdef DIFFUSE
|
|
27
|
+
varying vDiffuseUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;uniform vDiffuseInfos: vec2f;
|
|
28
|
+
#endif
|
|
29
|
+
#ifdef HIGHLEVEL
|
|
30
|
+
uniform furOffset: f32;uniform furOcclusion: f32;var furTextureSampler: sampler;var furTexture: texture_2d<f32>;varying vFurUV: vec2f;
|
|
31
|
+
#endif
|
|
32
|
+
#include<logDepthDeclaration>
|
|
33
|
+
#include<lightsFragmentFunctions>
|
|
34
|
+
#include<shadowsFragmentFunctions>
|
|
35
|
+
#include<fogFragmentDeclaration>
|
|
36
|
+
#include<clipPlaneFragmentDeclaration>
|
|
37
|
+
fn Rand(rv: vec3f)->f32 {var x: f32=dot(rv, vec3f(12.9898,78.233,24.65487));return fract(sin(x)*43758.5453);}
|
|
38
|
+
#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
|
|
39
|
+
varying vViewDepth: f32;
|
|
40
|
+
#endif
|
|
41
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
42
|
+
@fragment
|
|
43
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
44
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
45
|
+
#include<clipPlaneFragment>
|
|
46
|
+
var viewDirectionW: vec3f=normalize(uniforms.vEyePosition.xyz-fragmentInputs.vPositionW);var baseColor: vec4f=uniforms.furColor;var diffuseColor: vec3f=uniforms.vDiffuseColor.rgb;var alpha: f32=uniforms.vDiffuseColor.a;
|
|
47
|
+
#ifdef DIFFUSE
|
|
48
|
+
baseColor=baseColor*textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vDiffuseUV);
|
|
49
|
+
#ifdef ALPHATEST
|
|
50
|
+
if (baseColor.a<0.4) {discard;}
|
|
51
|
+
#endif
|
|
52
|
+
#include<depthPrePass>
|
|
53
|
+
baseColor=vec4f(baseColor.rgb*uniforms.vDiffuseInfos.y,baseColor.a);
|
|
54
|
+
#endif
|
|
55
|
+
#ifdef VERTEXCOLOR
|
|
56
|
+
baseColor=vec4f(baseColor.rgb*fragmentInputs.vColor.rgb,baseColor.a);
|
|
57
|
+
#endif
|
|
58
|
+
#ifdef NORMAL
|
|
59
|
+
var normalW: vec3f=normalize(fragmentInputs.vNormalW);
|
|
60
|
+
#else
|
|
61
|
+
var normalW: vec3f= vec3f(1.0,1.0,1.0);
|
|
62
|
+
#endif
|
|
63
|
+
#ifdef HIGHLEVEL
|
|
64
|
+
var furTextureColor: vec4f=textureSample(furTexture,furTextureSampler, vec2f(fragmentInputs.vFurUV.x,fragmentInputs.vFurUV.y));if (furTextureColor.a<=0.0 || furTextureColor.g<uniforms.furOffset) {discard;}
|
|
65
|
+
var occlusion: f32=mix(0.0,furTextureColor.b*1.2,uniforms.furOffset);baseColor= vec4f(baseColor.xyz*max(occlusion,uniforms.furOcclusion),1.1-uniforms.furOffset);
|
|
66
|
+
#endif
|
|
67
|
+
var diffuseBase: vec3f= vec3f(0.,0.,0.);var info: lightingInfo;var shadow: f32=1.;var glossiness: f32=0.;var aggShadow: f32=0.;var numLights: f32=0.;
|
|
68
|
+
#ifdef SPECULARTERM
|
|
69
|
+
var specularBase: vec3f= vec3f(0.,0.,0.);
|
|
70
|
+
#endif
|
|
71
|
+
#include<lightFragment>[0..maxSimultaneousLights]
|
|
72
|
+
#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)
|
|
73
|
+
alpha*=fragmentInputs.vColor.a;
|
|
74
|
+
#endif
|
|
75
|
+
var finalDiffuse: vec3f=clamp(diffuseBase.rgb*baseColor.rgb,vec3f(0.0),vec3f(1.0));
|
|
76
|
+
#ifdef HIGHLEVEL
|
|
77
|
+
var color: vec4f= vec4f(finalDiffuse,alpha);
|
|
78
|
+
#else
|
|
79
|
+
var rr: f32=fragmentInputs.vfur_length/uniforms.furLength*0.5;var color: vec4f= vec4f(finalDiffuse*(0.5+rr),alpha);
|
|
80
|
+
#endif
|
|
81
|
+
#include<logDepthFragment>
|
|
82
|
+
#include<fogFragment>
|
|
83
|
+
fragmentOutputs.color=color;
|
|
84
|
+
#include<imageProcessingCompatibility>
|
|
85
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
// Sideeffect
|
|
89
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
90
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
91
|
+
}
|
|
92
|
+
/** @internal */
|
|
93
|
+
export const furPixelShaderWGSL = { name, shader };
|
|
94
|
+
//# sourceMappingURL=fur.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fur.fragment.js","sourceRoot":"","sources":["../../../../../dev/materials/src/fur/wgsl/fur.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,iDAAiD,CAAC;AACzD,OAAO,qDAAqD,CAAC;AAC7D,OAAO,qDAAqD,CAAC;AAC7D,OAAO,yDAAyD,CAAC;AACjE,OAAO,0DAA0D,CAAC;AAClE,OAAO,wDAAwD,CAAC;AAChE,OAAO,8DAA8D,CAAC;AACtE,OAAO,mDAAmD,CAAC;AAC3D,OAAO,8CAA8C,CAAC;AACtD,OAAO,+CAA+C,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,6CAA6C,CAAC;AACrD,OAAO,8DAA8D,CAAC;AAEtE,MAAM,IAAI,GAAG,gBAAgB,CAAC;AAC9B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEd,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,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport \"core/ShadersWGSL/ShadersInclude/helperFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/lightUboDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/depthPrePass\";\nimport \"core/ShadersWGSL/ShadersInclude/lightFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/fogFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility\";\n\nconst name = \"furPixelShader\";\nconst shader = `uniform vEyePosition: vec4f;uniform vDiffuseColor: vec4f;uniform furColor: vec4f;uniform furLength: f32;varying vPositionW: vec3f;varying vfur_length: f32;\n#ifdef NORMAL\nvarying vNormalW: vec3f;\n#endif\n#ifdef VERTEXCOLOR\nvarying vColor: vec4f;\n#endif\n#include<helperFunctions>\n#include<lightUboDeclaration>[0..maxSimultaneousLights]\n#ifdef DIFFUSE\nvarying vDiffuseUV: vec2f;var diffuseSamplerSampler: sampler;var diffuseSampler: texture_2d<f32>;uniform vDiffuseInfos: vec2f;\n#endif\n#ifdef HIGHLEVEL\nuniform furOffset: f32;uniform furOcclusion: f32;var furTextureSampler: sampler;var furTexture: texture_2d<f32>;varying vFurUV: vec2f;\n#endif\n#include<logDepthDeclaration>\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<fogFragmentDeclaration>\n#include<clipPlaneFragmentDeclaration>\nfn Rand(rv: vec3f)->f32 {var x: f32=dot(rv, vec3f(12.9898,78.233,24.65487));return fract(sin(x)*43758.5453);}\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying vViewDepth: f32;\n#endif\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\nvar viewDirectionW: vec3f=normalize(uniforms.vEyePosition.xyz-fragmentInputs.vPositionW);var baseColor: vec4f=uniforms.furColor;var diffuseColor: vec3f=uniforms.vDiffuseColor.rgb;var alpha: f32=uniforms.vDiffuseColor.a;\n#ifdef DIFFUSE\nbaseColor=baseColor*textureSample(diffuseSampler,diffuseSamplerSampler,fragmentInputs.vDiffuseUV);\n#ifdef ALPHATEST\nif (baseColor.a<0.4) {discard;}\n#endif\n#include<depthPrePass>\nbaseColor=vec4f(baseColor.rgb*uniforms.vDiffuseInfos.y,baseColor.a);\n#endif\n#ifdef VERTEXCOLOR\nbaseColor=vec4f(baseColor.rgb*fragmentInputs.vColor.rgb,baseColor.a);\n#endif\n#ifdef NORMAL\nvar normalW: vec3f=normalize(fragmentInputs.vNormalW);\n#else\nvar normalW: vec3f= vec3f(1.0,1.0,1.0);\n#endif\n#ifdef HIGHLEVEL\nvar furTextureColor: vec4f=textureSample(furTexture,furTextureSampler, vec2f(fragmentInputs.vFurUV.x,fragmentInputs.vFurUV.y));if (furTextureColor.a<=0.0 || furTextureColor.g<uniforms.furOffset) {discard;}\nvar occlusion: f32=mix(0.0,furTextureColor.b*1.2,uniforms.furOffset);baseColor= vec4f(baseColor.xyz*max(occlusion,uniforms.furOcclusion),1.1-uniforms.furOffset);\n#endif\nvar diffuseBase: vec3f= vec3f(0.,0.,0.);var info: lightingInfo;var shadow: f32=1.;var glossiness: f32=0.;var aggShadow: f32=0.;var numLights: f32=0.;\n#ifdef SPECULARTERM\nvar specularBase: vec3f= vec3f(0.,0.,0.);\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\n#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nalpha*=fragmentInputs.vColor.a;\n#endif\nvar finalDiffuse: vec3f=clamp(diffuseBase.rgb*baseColor.rgb,vec3f(0.0),vec3f(1.0));\n#ifdef HIGHLEVEL\nvar color: vec4f= vec4f(finalDiffuse,alpha);\n#else\nvar rr: f32=fragmentInputs.vfur_length/uniforms.furLength*0.5;var color: vec4f= vec4f(finalDiffuse*(0.5+rr),alpha);\n#endif\n#include<logDepthFragment>\n#include<fogFragment>\nfragmentOutputs.color=color;\n#include<imageProcessingCompatibility>\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const furPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesDeclaration.js";
|
|
2
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesDeclaration.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertexDeclaration.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesVertex.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesVertex.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertex.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthVertex.js";
|
|
14
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertex.js";
|
|
15
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsVertex.js";
|
|
16
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/vertexColorMixing.js";
|
|
17
|
+
/** @internal */
|
|
18
|
+
export declare const furVertexShaderWGSL: {
|
|
19
|
+
name: string;
|
|
20
|
+
shader: string;
|
|
21
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesDeclaration.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesDeclaration.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertexDeclaration.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesVertex.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesVertex.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js";
|
|
14
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertex.js";
|
|
15
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthVertex.js";
|
|
16
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertex.js";
|
|
17
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsVertex.js";
|
|
18
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/vertexColorMixing.js";
|
|
19
|
+
const name = "furVertexShader";
|
|
20
|
+
const shader = `attribute position: vec3f;attribute normal: vec3f;
|
|
21
|
+
#ifdef UV1
|
|
22
|
+
attribute uv: vec2f;
|
|
23
|
+
#endif
|
|
24
|
+
#ifdef UV2
|
|
25
|
+
attribute uv2: vec2f;
|
|
26
|
+
#endif
|
|
27
|
+
#ifdef VERTEXCOLOR
|
|
28
|
+
attribute color: vec4f;
|
|
29
|
+
#endif
|
|
30
|
+
#include<bonesDeclaration>
|
|
31
|
+
#include<bakedVertexAnimationDeclaration>
|
|
32
|
+
uniform furLength: f32;uniform furAngle: f32;
|
|
33
|
+
#ifdef HIGHLEVEL
|
|
34
|
+
uniform furOffset: f32;uniform furGravity: vec3f;uniform furTime: f32;uniform furSpacing: f32;uniform furDensity: f32;
|
|
35
|
+
#endif
|
|
36
|
+
#ifdef HEIGHTMAP
|
|
37
|
+
var heightTextureSampler: sampler;var heightTexture: texture_2d<f32>;
|
|
38
|
+
#endif
|
|
39
|
+
#ifdef HIGHLEVEL
|
|
40
|
+
varying vFurUV: vec2f;
|
|
41
|
+
#endif
|
|
42
|
+
#include<instancesDeclaration>
|
|
43
|
+
uniform view: mat4x4f;uniform viewProjection: mat4x4f;
|
|
44
|
+
#ifdef DIFFUSE
|
|
45
|
+
varying vDiffuseUV: vec2f;uniform diffuseMatrix: mat4x4f;uniform vDiffuseInfos: vec2f;
|
|
46
|
+
#endif
|
|
47
|
+
#ifdef POINTSIZE
|
|
48
|
+
uniform pointSize: f32;
|
|
49
|
+
#endif
|
|
50
|
+
varying vPositionW: vec3f;
|
|
51
|
+
#ifdef NORMAL
|
|
52
|
+
varying vNormalW: vec3f;
|
|
53
|
+
#endif
|
|
54
|
+
varying vfur_length: f32;
|
|
55
|
+
#ifdef VERTEXCOLOR
|
|
56
|
+
varying vColor: vec4f;
|
|
57
|
+
#endif
|
|
58
|
+
#include<clipPlaneVertexDeclaration>
|
|
59
|
+
#include<logDepthDeclaration>
|
|
60
|
+
#include<fogVertexDeclaration>
|
|
61
|
+
#include<__decl__lightVxFragment>[0..maxSimultaneousLights]
|
|
62
|
+
fn Rand(rv: vec3f)->f32 {var x: f32=dot(rv, vec3f(12.9898,78.233,24.65487));return fract(sin(x)*43758.5453);}
|
|
63
|
+
#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
|
|
64
|
+
varying vViewDepth: f32;
|
|
65
|
+
#endif
|
|
66
|
+
#define CUSTOM_VERTEX_DEFINITIONS
|
|
67
|
+
@vertex
|
|
68
|
+
fn main(input : VertexInputs)->FragmentInputs {
|
|
69
|
+
#define CUSTOM_VERTEX_MAIN_BEGIN
|
|
70
|
+
#ifdef VERTEXCOLOR
|
|
71
|
+
var colorUpdated: vec4f=vertexInputs.color;
|
|
72
|
+
#endif
|
|
73
|
+
#include<instancesVertex>
|
|
74
|
+
#include<bonesVertex>
|
|
75
|
+
#include<bakedVertexAnimation>
|
|
76
|
+
var r: f32=Rand(vertexInputs.position);
|
|
77
|
+
#ifdef HEIGHTMAP
|
|
78
|
+
vertexOutputs.vfur_length=uniforms.furLength*textureSampleLevel(heightTexture,heightTextureSampler,vertexInputs.uv,0.).x;
|
|
79
|
+
#else
|
|
80
|
+
vertexOutputs.vfur_length=(uniforms.furLength*r);
|
|
81
|
+
#endif
|
|
82
|
+
var tangent1: vec3f= vec3f(vertexInputs.normal.y,-vertexInputs.normal.x,0);var tangent2: vec3f= vec3f(-vertexInputs.normal.z,0,vertexInputs.normal.x);r=Rand(tangent1*r);var J: f32=(2.0+4.0*r);r=Rand(tangent2*r);var K: f32=(2.0+2.0*r);tangent1=tangent1*J+tangent2*K;tangent1=normalize(tangent1);var newPosition: vec3f=vertexInputs.position+vertexInputs.normal*vertexOutputs.vfur_length*cos(uniforms.furAngle)+tangent1*vertexOutputs.vfur_length*sin(uniforms.furAngle);
|
|
83
|
+
#ifdef HIGHLEVEL
|
|
84
|
+
var forceDirection: vec3f= vec3f(0.0,0.0,0.0);forceDirection.x=sin(uniforms.furTime+vertexInputs.position.x*0.05)*0.2;forceDirection.y=cos(uniforms.furTime*0.7+vertexInputs.position.y*0.04)*0.2;forceDirection.z=sin(uniforms.furTime*0.7+vertexInputs.position.z*0.04)*0.2;var displacement: vec3f= vec3f(0.0,0.0,0.0);displacement=uniforms.furGravity+forceDirection;var displacementFactor: f32=pow(uniforms.furOffset,3.0);var aNormal: vec3f=vertexInputs.normal;aNormal=vec3f(aNormal.xyz+displacement*displacementFactor);newPosition= vec3f(newPosition.x,newPosition.y,newPosition.z)+(normalize(aNormal)*uniforms.furOffset*uniforms.furSpacing);
|
|
85
|
+
#endif
|
|
86
|
+
#ifdef NORMAL
|
|
87
|
+
vertexOutputs.vNormalW=normalize(( finalWorld* vec4f(vertexInputs.normal,0.0)).xyz);
|
|
88
|
+
#endif
|
|
89
|
+
vertexOutputs.position=uniforms.viewProjection*finalWorld* vec4f(newPosition,1.0);var worldPos: vec4f=finalWorld* vec4f(newPosition,1.0);vertexOutputs.vPositionW= worldPos.xyz;
|
|
90
|
+
#ifndef UV1
|
|
91
|
+
var uv: vec2f= vec2f(0.,0.);
|
|
92
|
+
#else
|
|
93
|
+
var uv: vec2f=vertexInputs.uv;
|
|
94
|
+
#endif
|
|
95
|
+
#ifndef UV2
|
|
96
|
+
var uv2: vec2f= vec2f(0.,0.);
|
|
97
|
+
#else
|
|
98
|
+
var uv2: vec2f=vertexInputs.uv2;
|
|
99
|
+
#endif
|
|
100
|
+
#ifdef DIFFUSE
|
|
101
|
+
if (uniforms.vDiffuseInfos.x==0.)
|
|
102
|
+
{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv,1.0,0.0)).xy;}
|
|
103
|
+
else
|
|
104
|
+
{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv2,1.0,0.0)).xy;}
|
|
105
|
+
#ifdef HIGHLEVEL
|
|
106
|
+
vertexOutputs.vFurUV=vertexOutputs.vDiffuseUV*uniforms.furDensity;
|
|
107
|
+
#endif
|
|
108
|
+
#else
|
|
109
|
+
#ifdef HIGHLEVEL
|
|
110
|
+
vertexOutputs.vFurUV=uv*uniforms.furDensity;
|
|
111
|
+
#endif
|
|
112
|
+
#endif
|
|
113
|
+
#include<clipPlaneVertex>
|
|
114
|
+
#include<logDepthVertex>
|
|
115
|
+
#include<fogVertex>
|
|
116
|
+
#include<shadowsVertex>[0..maxSimultaneousLights]
|
|
117
|
+
#include<vertexColorMixing>
|
|
118
|
+
#define CUSTOM_VERTEX_MAIN_END
|
|
119
|
+
}
|
|
120
|
+
`;
|
|
121
|
+
// Sideeffect
|
|
122
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
123
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
124
|
+
}
|
|
125
|
+
/** @internal */
|
|
126
|
+
export const furVertexShaderWGSL = { name, shader };
|
|
127
|
+
//# sourceMappingURL=fur.vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fur.vertex.js","sourceRoot":"","sources":["../../../../../dev/materials/src/fur/wgsl/fur.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,iEAAiE,CAAC;AACzE,OAAO,sDAAsD,CAAC;AAC9D,OAAO,4DAA4D,CAAC;AACpE,OAAO,qDAAqD,CAAC;AAC7D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,4DAA4D,CAAC;AACpE,OAAO,uDAAuD,CAAC;AAC/D,OAAO,iDAAiD,CAAC;AACzD,OAAO,6CAA6C,CAAC;AACrD,OAAO,sDAAsD,CAAC;AAC9D,OAAO,iDAAiD,CAAC;AACzD,OAAO,gDAAgD,CAAC;AACxD,OAAO,2CAA2C,CAAC;AACnD,OAAO,+CAA+C,CAAC;AACvD,OAAO,mDAAmD,CAAC;AAE3D,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGd,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,gBAAgB;AAChB,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport \"core/ShadersWGSL/ShadersInclude/bonesDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/instancesDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/fogVertexDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/lightVxUboDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/instancesVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/bonesVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/bakedVertexAnimation\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/fogVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/shadowsVertex\";\nimport \"core/ShadersWGSL/ShadersInclude/vertexColorMixing\";\n\nconst name = \"furVertexShader\";\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#ifdef VERTEXCOLOR\nattribute color: vec4f;\n#endif\n#include<bonesDeclaration>\n#include<bakedVertexAnimationDeclaration>\nuniform furLength: f32;uniform furAngle: f32;\n#ifdef HIGHLEVEL\nuniform furOffset: f32;uniform furGravity: vec3f;uniform furTime: f32;uniform furSpacing: f32;uniform furDensity: f32;\n#endif\n#ifdef HEIGHTMAP\nvar heightTextureSampler: sampler;var heightTexture: texture_2d<f32>;\n#endif\n#ifdef HIGHLEVEL\nvarying vFurUV: vec2f;\n#endif\n#include<instancesDeclaration>\nuniform view: mat4x4f;uniform viewProjection: mat4x4f;\n#ifdef DIFFUSE\nvarying vDiffuseUV: vec2f;uniform diffuseMatrix: mat4x4f;uniform vDiffuseInfos: vec2f;\n#endif\n#ifdef POINTSIZE\nuniform pointSize: f32;\n#endif\nvarying vPositionW: vec3f;\n#ifdef NORMAL\nvarying vNormalW: vec3f;\n#endif\nvarying vfur_length: f32;\n#ifdef VERTEXCOLOR\nvarying vColor: vec4f;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<logDepthDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightVxFragment>[0..maxSimultaneousLights]\nfn Rand(rv: vec3f)->f32 {var x: f32=dot(rv, vec3f(12.9898,78.233,24.65487));return fract(sin(x)*43758.5453);}\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying vViewDepth: f32;\n#endif\n#define CUSTOM_VERTEX_DEFINITIONS\n@vertex\nfn main(input : VertexInputs)->FragmentInputs {\n#define CUSTOM_VERTEX_MAIN_BEGIN\n#ifdef VERTEXCOLOR\nvar colorUpdated: vec4f=vertexInputs.color;\n#endif\n#include<instancesVertex>\n#include<bonesVertex>\n#include<bakedVertexAnimation>\nvar r: f32=Rand(vertexInputs.position);\n#ifdef HEIGHTMAP\nvertexOutputs.vfur_length=uniforms.furLength*textureSampleLevel(heightTexture,heightTextureSampler,vertexInputs.uv,0.).x;\n#else\nvertexOutputs.vfur_length=(uniforms.furLength*r);\n#endif\nvar tangent1: vec3f= vec3f(vertexInputs.normal.y,-vertexInputs.normal.x,0);var tangent2: vec3f= vec3f(-vertexInputs.normal.z,0,vertexInputs.normal.x);r=Rand(tangent1*r);var J: f32=(2.0+4.0*r);r=Rand(tangent2*r);var K: f32=(2.0+2.0*r);tangent1=tangent1*J+tangent2*K;tangent1=normalize(tangent1);var newPosition: vec3f=vertexInputs.position+vertexInputs.normal*vertexOutputs.vfur_length*cos(uniforms.furAngle)+tangent1*vertexOutputs.vfur_length*sin(uniforms.furAngle);\n#ifdef HIGHLEVEL\nvar forceDirection: vec3f= vec3f(0.0,0.0,0.0);forceDirection.x=sin(uniforms.furTime+vertexInputs.position.x*0.05)*0.2;forceDirection.y=cos(uniforms.furTime*0.7+vertexInputs.position.y*0.04)*0.2;forceDirection.z=sin(uniforms.furTime*0.7+vertexInputs.position.z*0.04)*0.2;var displacement: vec3f= vec3f(0.0,0.0,0.0);displacement=uniforms.furGravity+forceDirection;var displacementFactor: f32=pow(uniforms.furOffset,3.0);var aNormal: vec3f=vertexInputs.normal;aNormal=vec3f(aNormal.xyz+displacement*displacementFactor);newPosition= vec3f(newPosition.x,newPosition.y,newPosition.z)+(normalize(aNormal)*uniforms.furOffset*uniforms.furSpacing);\n#endif\n#ifdef NORMAL\nvertexOutputs.vNormalW=normalize(( finalWorld* vec4f(vertexInputs.normal,0.0)).xyz);\n#endif\nvertexOutputs.position=uniforms.viewProjection*finalWorld* vec4f(newPosition,1.0);var worldPos: vec4f=finalWorld* vec4f(newPosition,1.0);vertexOutputs.vPositionW= worldPos.xyz;\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\n#ifdef DIFFUSE\nif (uniforms.vDiffuseInfos.x==0.)\n{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv,1.0,0.0)).xy;}\nelse\n{vertexOutputs.vDiffuseUV=(uniforms.diffuseMatrix* vec4f(uv2,1.0,0.0)).xy;}\n#ifdef HIGHLEVEL\nvertexOutputs.vFurUV=vertexOutputs.vDiffuseUV*uniforms.furDensity;\n#endif\n#else\n#ifdef HIGHLEVEL\nvertexOutputs.vFurUV=uv*uniforms.furDensity;\n#endif\n#endif\n#include<clipPlaneVertex>\n#include<logDepthVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#include<vertexColorMixing>\n#define CUSTOM_VERTEX_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const furVertexShaderWGSL = { name, shader };\n"]}
|
|
@@ -8,8 +8,6 @@ import { type AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js";
|
|
|
8
8
|
import { type SubMesh } from "@babylonjs/core/Meshes/subMesh.js";
|
|
9
9
|
import { type Mesh } from "@babylonjs/core/Meshes/mesh.js";
|
|
10
10
|
import { Scene } from "@babylonjs/core/scene.js";
|
|
11
|
-
import "./gradient.fragment.js";
|
|
12
|
-
import "./gradient.vertex.js";
|
|
13
11
|
export declare class GradientMaterial extends PushMaterial {
|
|
14
12
|
private _maxSimultaneousLights;
|
|
15
13
|
maxSimultaneousLights: number;
|
|
@@ -22,7 +20,14 @@ export declare class GradientMaterial extends PushMaterial {
|
|
|
22
20
|
smoothness: number;
|
|
23
21
|
private _disableLighting;
|
|
24
22
|
disableLighting: boolean;
|
|
25
|
-
|
|
23
|
+
private _shadersLoaded;
|
|
24
|
+
/**
|
|
25
|
+
* Instantiates a Gradient Material in the given scene
|
|
26
|
+
* @param name The friendly name of the material
|
|
27
|
+
* @param scene The scene to add the material to
|
|
28
|
+
* @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false
|
|
29
|
+
*/
|
|
30
|
+
constructor(name: string, scene?: Scene, forceGLSL?: boolean);
|
|
26
31
|
needAlphaBlending(): boolean;
|
|
27
32
|
needAlphaTesting(): boolean;
|
|
28
33
|
getAlphaTestTexture(): Nullable<BaseTexture>;
|
|
@@ -7,8 +7,6 @@ import { PushMaterial } from "@babylonjs/core/Materials/pushMaterial.js";
|
|
|
7
7
|
import { VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
|
|
8
8
|
import { Scene } from "@babylonjs/core/scene.js";
|
|
9
9
|
import { RegisterClass } from "@babylonjs/core/Misc/typeStore.js";
|
|
10
|
-
import "./gradient.fragment.js";
|
|
11
|
-
import "./gradient.vertex.js";
|
|
12
10
|
import { EffectFallbacks } from "@babylonjs/core/Materials/effectFallbacks.js";
|
|
13
11
|
import { AddClipPlaneUniforms, BindClipPlane } from "@babylonjs/core/Materials/clipPlaneMaterialHelper.js";
|
|
14
12
|
import { BindBonesParameters, BindFogParameters, BindLights, BindLogDepth, HandleFallbacksForShadows, PrepareAttributesForBones, PrepareAttributesForInstances, PrepareDefinesForAttributes, PrepareDefinesForFrameBoundValues, PrepareDefinesForLights, PrepareDefinesForMisc, PrepareUniformsAndSamplersList, } from "@babylonjs/core/Materials/materialHelper.functions.js";
|
|
@@ -44,8 +42,14 @@ class GradientMaterialDefines extends MaterialDefines {
|
|
|
44
42
|
}
|
|
45
43
|
}
|
|
46
44
|
export class GradientMaterial extends PushMaterial {
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Instantiates a Gradient Material in the given scene
|
|
47
|
+
* @param name The friendly name of the material
|
|
48
|
+
* @param scene The scene to add the material to
|
|
49
|
+
* @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false
|
|
50
|
+
*/
|
|
51
|
+
constructor(name, scene, forceGLSL = false) {
|
|
52
|
+
super(name, scene, undefined, forceGLSL);
|
|
49
53
|
this._maxSimultaneousLights = 4;
|
|
50
54
|
// The gradient top color, red by default
|
|
51
55
|
this.topColor = new Color3(1, 0, 0);
|
|
@@ -58,6 +62,7 @@ export class GradientMaterial extends PushMaterial {
|
|
|
58
62
|
this.scale = 1.0;
|
|
59
63
|
this.smoothness = 1.0;
|
|
60
64
|
this._disableLighting = false;
|
|
65
|
+
this._shadersLoaded = false;
|
|
61
66
|
}
|
|
62
67
|
needAlphaBlending() {
|
|
63
68
|
return this.alpha < 1.0 || this.topColorAlpha < 1.0 || this.bottomColorAlpha < 1.0;
|
|
@@ -161,6 +166,18 @@ export class GradientMaterial extends PushMaterial {
|
|
|
161
166
|
onCompiled: this.onCompiled,
|
|
162
167
|
onError: this.onError,
|
|
163
168
|
indexParameters: { maxSimultaneousLights: 4 },
|
|
169
|
+
shaderLanguage: this._shaderLanguage,
|
|
170
|
+
extraInitializationsAsync: this._shadersLoaded
|
|
171
|
+
? undefined
|
|
172
|
+
: async () => {
|
|
173
|
+
if (this.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
174
|
+
await Promise.all([import("./wgsl/gradient.vertex.js"), import("./wgsl/gradient.fragment.js")]);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
await Promise.all([import("./gradient.vertex.js"), import("./gradient.fragment.js")]);
|
|
178
|
+
}
|
|
179
|
+
this._shadersLoaded = true;
|
|
180
|
+
},
|
|
164
181
|
}, engine), defines, this._materialContext);
|
|
165
182
|
}
|
|
166
183
|
// Check if Area Lights have LTC texture.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradientMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/gradient/gradientMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serialize, expandToProperty, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { type IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\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 { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./gradient.fragment\";\r\nimport \"./gradient.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"core/Materials/materialHelper.functions\";\r\n\r\nclass GradientMaterialDefines extends MaterialDefines {\r\n public EMISSIVE = false;\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 ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public LOGARITHMICDEPTH = false;\r\n public AREALIGHTSUPPORTED = true;\r\n public AREALIGHTNOROUGHTNESS = true;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class GradientMaterial extends PushMaterial {\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n // The gradient top color, red by default\r\n @serializeAsColor3()\r\n public topColor = new Color3(1, 0, 0);\r\n\r\n @serialize()\r\n public topColorAlpha = 1.0;\r\n\r\n // The gradient top color, blue by default\r\n @serializeAsColor3()\r\n public bottomColor = new Color3(0, 0, 1);\r\n\r\n @serialize()\r\n public bottomColorAlpha = 1.0;\r\n\r\n // Gradient offset\r\n @serialize()\r\n public offset = 0;\r\n\r\n @serialize()\r\n public scale = 1.0;\r\n\r\n @serialize()\r\n public smoothness = 1.0;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n public override needAlphaBlending(): boolean {\r\n return this.alpha < 1.0 || this.topColorAlpha < 1.0 || this.bottomColorAlpha < 1.0;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return true;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n // Methods\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 GradientMaterialDefines();\r\n }\r\n\r\n const defines = <GradientMaterialDefines>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 const engine = scene.getEngine();\r\n\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._isVertexOutputInvariant\r\n );\r\n\r\n defines._needNormals = PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n defines.EMISSIVE = this._disableLighting;\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n HandleFallbacksForShadows(defines, fallbacks);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"gradient\";\r\n const join = defines.toString();\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"logarithmicDepthConstant\",\r\n \"topColor\",\r\n \"bottomColor\",\r\n \"offset\",\r\n \"smoothness\",\r\n \"scale\",\r\n ];\r\n AddClipPlaneUniforms(uniforms);\r\n const samplers: string[] = [\"areaLightsLTC1Sampler\", \"areaLightsLTC2Sampler\"];\r\n const uniformBuffers: string[] = [];\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: 4,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: 4 },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\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 = <GradientMaterialDefines>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\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n BindBonesParameters(mesh, effect);\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._activeEffect.setColor4(\"topColor\", this.topColor, this.topColorAlpha);\r\n this._activeEffect.setColor4(\"bottomColor\", this.bottomColor, this.bottomColorAlpha);\r\n this._activeEffect.setFloat(\"offset\", this.offset);\r\n this._activeEffect.setFloat(\"scale\", this.scale);\r\n this._activeEffect.setFloat(\"smoothness\", this.smoothness);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n public override getAnimatables(): IAnimatable[] {\r\n return [];\r\n }\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): GradientMaterial {\r\n return SerializationHelper.Clone(() => new GradientMaterial(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.GradientMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"GradientMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GradientMaterial {\r\n return SerializationHelper.Parse(() => new GradientMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GradientMaterial\", GradientMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"gradientMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/gradient/gradientMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serialize, expandToProperty, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { type IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { type IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\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 { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"core/Materials/materialHelper.functions\";\r\n\r\nclass GradientMaterialDefines extends MaterialDefines {\r\n public EMISSIVE = false;\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 ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public LOGARITHMICDEPTH = false;\r\n public AREALIGHTSUPPORTED = true;\r\n public AREALIGHTNOROUGHTNESS = true;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class GradientMaterial extends PushMaterial {\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n // The gradient top color, red by default\r\n @serializeAsColor3()\r\n public topColor = new Color3(1, 0, 0);\r\n\r\n @serialize()\r\n public topColorAlpha = 1.0;\r\n\r\n // The gradient top color, blue by default\r\n @serializeAsColor3()\r\n public bottomColor = new Color3(0, 0, 1);\r\n\r\n @serialize()\r\n public bottomColorAlpha = 1.0;\r\n\r\n // Gradient offset\r\n @serialize()\r\n public offset = 0;\r\n\r\n @serialize()\r\n public scale = 1.0;\r\n\r\n @serialize()\r\n public smoothness = 1.0;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * Instantiates a Gradient Material in the given scene\r\n * @param name The friendly name of the material\r\n * @param scene The scene to add the material to\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 public override needAlphaBlending(): boolean {\r\n return this.alpha < 1.0 || this.topColorAlpha < 1.0 || this.bottomColorAlpha < 1.0;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return true;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n // Methods\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 GradientMaterialDefines();\r\n }\r\n\r\n const defines = <GradientMaterialDefines>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 const engine = scene.getEngine();\r\n\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._isVertexOutputInvariant\r\n );\r\n\r\n defines._needNormals = PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n defines.EMISSIVE = this._disableLighting;\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n HandleFallbacksForShadows(defines, fallbacks);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"gradient\";\r\n const join = defines.toString();\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"logarithmicDepthConstant\",\r\n \"topColor\",\r\n \"bottomColor\",\r\n \"offset\",\r\n \"smoothness\",\r\n \"scale\",\r\n ];\r\n AddClipPlaneUniforms(uniforms);\r\n const samplers: string[] = [\"areaLightsLTC1Sampler\", \"areaLightsLTC2Sampler\"];\r\n const uniformBuffers: string[] = [];\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: 4,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: 4 },\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/gradient.vertex\"), import(\"./wgsl/gradient.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"./gradient.vertex\"), import(\"./gradient.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\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 = <GradientMaterialDefines>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\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n BindBonesParameters(mesh, effect);\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n // Clip plane\r\n BindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._activeEffect.setColor4(\"topColor\", this.topColor, this.topColorAlpha);\r\n this._activeEffect.setColor4(\"bottomColor\", this.bottomColor, this.bottomColorAlpha);\r\n this._activeEffect.setFloat(\"offset\", this.offset);\r\n this._activeEffect.setFloat(\"scale\", this.scale);\r\n this._activeEffect.setFloat(\"smoothness\", this.smoothness);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n public override getAnimatables(): IAnimatable[] {\r\n return [];\r\n }\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): GradientMaterial {\r\n return SerializationHelper.Clone(() => new GradientMaterial(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.GradientMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"GradientMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): GradientMaterial {\r\n return SerializationHelper.Parse(() => new GradientMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GradientMaterial\", GradientMaterial);\r\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/helperFunctions.js";
|
|
2
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightUboDeclaration.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragment.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/depthPrePass.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightFragment.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthFragment.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragment.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility.js";
|
|
14
|
+
/** @internal */
|
|
15
|
+
export declare const gradientPixelShaderWGSL: {
|
|
16
|
+
name: string;
|
|
17
|
+
shader: string;
|
|
18
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/helperFunctions.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightUboDeclaration.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneFragment.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/depthPrePass.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightFragment.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthFragment.js";
|
|
14
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogFragment.js";
|
|
15
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility.js";
|
|
16
|
+
const name = "gradientPixelShader";
|
|
17
|
+
const shader = `uniform vEyePosition: vec4f;uniform topColor: vec4f;uniform bottomColor: vec4f;uniform offset: f32;uniform scale: f32;uniform smoothness: f32;varying vPositionW: vec3f;varying vPosition: vec3f;
|
|
18
|
+
#ifdef NORMAL
|
|
19
|
+
varying vNormalW: vec3f;
|
|
20
|
+
#endif
|
|
21
|
+
#ifdef VERTEXCOLOR
|
|
22
|
+
varying vColor: vec4f;
|
|
23
|
+
#endif
|
|
24
|
+
#include<helperFunctions>
|
|
25
|
+
#include<lightUboDeclaration>[0]
|
|
26
|
+
#include<lightUboDeclaration>[1]
|
|
27
|
+
#include<lightUboDeclaration>[2]
|
|
28
|
+
#include<lightUboDeclaration>[3]
|
|
29
|
+
#include<lightsFragmentFunctions>
|
|
30
|
+
#include<shadowsFragmentFunctions>
|
|
31
|
+
#include<clipPlaneFragmentDeclaration>
|
|
32
|
+
#include<logDepthDeclaration>
|
|
33
|
+
#include<fogFragmentDeclaration>
|
|
34
|
+
#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
|
|
35
|
+
varying vViewDepth: f32;
|
|
36
|
+
#endif
|
|
37
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
38
|
+
@fragment
|
|
39
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
40
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
41
|
+
#include<clipPlaneFragment>
|
|
42
|
+
var viewDirectionW: vec3f=normalize(uniforms.vEyePosition.xyz-fragmentInputs.vPositionW);var h: f32=fragmentInputs.vPosition.y*uniforms.scale+uniforms.offset;var mysmoothness: f32=clamp(uniforms.smoothness,0.01,max(uniforms.smoothness,10.));var baseColor: vec4f=mix(uniforms.bottomColor,uniforms.topColor,vec4f(max(pow(max(h,0.0),mysmoothness),0.0)));var diffuseColor: vec3f=baseColor.rgb;var alpha: f32=baseColor.a;
|
|
43
|
+
#ifdef ALPHATEST
|
|
44
|
+
if (baseColor.a<0.4) {discard;}
|
|
45
|
+
#endif
|
|
46
|
+
#include<depthPrePass>
|
|
47
|
+
#ifdef VERTEXCOLOR
|
|
48
|
+
baseColor=vec4f(baseColor.rgb*fragmentInputs.vColor.rgb,baseColor.a);
|
|
49
|
+
#endif
|
|
50
|
+
#ifdef NORMAL
|
|
51
|
+
var normalW: vec3f=normalize(fragmentInputs.vNormalW);
|
|
52
|
+
#else
|
|
53
|
+
var normalW: vec3f= vec3f(1.0,1.0,1.0);
|
|
54
|
+
#endif
|
|
55
|
+
#ifdef EMISSIVE
|
|
56
|
+
var diffuseBase: vec3f=baseColor.rgb;
|
|
57
|
+
#else
|
|
58
|
+
var diffuseBase: vec3f= vec3f(0.,0.,0.);
|
|
59
|
+
#endif
|
|
60
|
+
var info: lightingInfo;var shadow: f32=1.;var glossiness: f32=0.;var aggShadow: f32=0.;var numLights: f32=0.;
|
|
61
|
+
#include<lightFragment>[0..maxSimultaneousLights]
|
|
62
|
+
#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)
|
|
63
|
+
alpha*=fragmentInputs.vColor.a;
|
|
64
|
+
#endif
|
|
65
|
+
var finalDiffuse: vec3f=clamp(diffuseBase*diffuseColor,vec3f(0.0),vec3f(1.0))*baseColor.rgb;var color: vec4f= vec4f(finalDiffuse,alpha);
|
|
66
|
+
#include<logDepthFragment>
|
|
67
|
+
#include<fogFragment>
|
|
68
|
+
fragmentOutputs.color=color;
|
|
69
|
+
#include<imageProcessingCompatibility>
|
|
70
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
// Sideeffect
|
|
74
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
75
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
76
|
+
}
|
|
77
|
+
/** @internal */
|
|
78
|
+
export const gradientPixelShaderWGSL = { name, shader };
|
|
79
|
+
//# sourceMappingURL=gradient.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient.fragment.js","sourceRoot":"","sources":["../../../../../dev/materials/src/gradient/wgsl/gradient.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,iDAAiD,CAAC;AACzD,OAAO,qDAAqD,CAAC;AAC7D,OAAO,yDAAyD,CAAC;AACjE,OAAO,0DAA0D,CAAC;AAClE,OAAO,8DAA8D,CAAC;AACtE,OAAO,qDAAqD,CAAC;AAC7D,OAAO,wDAAwD,CAAC;AAChE,OAAO,mDAAmD,CAAC;AAC3D,OAAO,8CAA8C,CAAC;AACtD,OAAO,+CAA+C,CAAC;AACvD,OAAO,kDAAkD,CAAC;AAC1D,OAAO,6CAA6C,CAAC;AACrD,OAAO,8DAA8D,CAAC;AAEtE,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDd,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,gBAAgB;AAChB,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\nimport \"core/ShadersWGSL/ShadersInclude/helperFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/lightUboDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/lightsFragmentFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/fogFragmentDeclaration\";\nimport \"core/ShadersWGSL/ShadersInclude/clipPlaneFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/depthPrePass\";\nimport \"core/ShadersWGSL/ShadersInclude/lightFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/logDepthFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/fogFragment\";\nimport \"core/ShadersWGSL/ShadersInclude/imageProcessingCompatibility\";\n\nconst name = \"gradientPixelShader\";\nconst shader = `uniform vEyePosition: vec4f;uniform topColor: vec4f;uniform bottomColor: vec4f;uniform offset: f32;uniform scale: f32;uniform smoothness: f32;varying vPositionW: vec3f;varying vPosition: vec3f;\n#ifdef NORMAL\nvarying vNormalW: vec3f;\n#endif\n#ifdef VERTEXCOLOR\nvarying vColor: vec4f;\n#endif\n#include<helperFunctions>\n#include<lightUboDeclaration>[0]\n#include<lightUboDeclaration>[1]\n#include<lightUboDeclaration>[2]\n#include<lightUboDeclaration>[3]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0\nvarying vViewDepth: f32;\n#endif\n#define CUSTOM_FRAGMENT_DEFINITIONS\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\nvar viewDirectionW: vec3f=normalize(uniforms.vEyePosition.xyz-fragmentInputs.vPositionW);var h: f32=fragmentInputs.vPosition.y*uniforms.scale+uniforms.offset;var mysmoothness: f32=clamp(uniforms.smoothness,0.01,max(uniforms.smoothness,10.));var baseColor: vec4f=mix(uniforms.bottomColor,uniforms.topColor,vec4f(max(pow(max(h,0.0),mysmoothness),0.0)));var diffuseColor: vec3f=baseColor.rgb;var alpha: f32=baseColor.a;\n#ifdef ALPHATEST\nif (baseColor.a<0.4) {discard;}\n#endif\n#include<depthPrePass>\n#ifdef VERTEXCOLOR\nbaseColor=vec4f(baseColor.rgb*fragmentInputs.vColor.rgb,baseColor.a);\n#endif\n#ifdef NORMAL\nvar normalW: vec3f=normalize(fragmentInputs.vNormalW);\n#else\nvar normalW: vec3f= vec3f(1.0,1.0,1.0);\n#endif\n#ifdef EMISSIVE\nvar diffuseBase: vec3f=baseColor.rgb;\n#else\nvar diffuseBase: vec3f= vec3f(0.,0.,0.);\n#endif\nvar info: lightingInfo;var shadow: f32=1.;var glossiness: f32=0.;var aggShadow: f32=0.;var numLights: f32=0.;\n#include<lightFragment>[0..maxSimultaneousLights]\n#if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)\nalpha*=fragmentInputs.vColor.a;\n#endif\nvar finalDiffuse: vec3f=clamp(diffuseBase*diffuseColor,vec3f(0.0),vec3f(1.0))*baseColor.rgb;var color: vec4f= vec4f(finalDiffuse,alpha);\n#include<logDepthFragment>\n#include<fogFragment>\nfragmentOutputs.color=color;\n#include<imageProcessingCompatibility>\n#define CUSTOM_FRAGMENT_MAIN_END\n}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n/** @internal */\nexport const gradientPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesDeclaration.js";
|
|
2
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js";
|
|
3
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesDeclaration.js";
|
|
4
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js";
|
|
5
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthDeclaration.js";
|
|
6
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertexDeclaration.js";
|
|
7
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js";
|
|
8
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js";
|
|
9
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/instancesVertex.js";
|
|
10
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bonesVertex.js";
|
|
11
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js";
|
|
12
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/clipPlaneVertex.js";
|
|
13
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/logDepthVertex.js";
|
|
14
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/fogVertex.js";
|
|
15
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/shadowsVertex.js";
|
|
16
|
+
import "@babylonjs/core/ShadersWGSL/ShadersInclude/vertexColorMixing.js";
|
|
17
|
+
/** @internal */
|
|
18
|
+
export declare const gradientVertexShaderWGSL: {
|
|
19
|
+
name: string;
|
|
20
|
+
shader: string;
|
|
21
|
+
};
|