@babylonjs/gui 9.10.0 → 9.11.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/3D/materials/fluent/fluentMaterial.d.ts +12 -0
- package/3D/materials/fluent/fluentMaterial.js +22 -0
- package/3D/materials/fluent/fluentMaterial.js.map +1 -1
- package/3D/materials/fluent/wgsl/fluent.fragment.d.ts +5 -0
- package/3D/materials/fluent/wgsl/fluent.fragment.js +44 -0
- package/3D/materials/fluent/wgsl/fluent.fragment.js.map +1 -0
- package/3D/materials/fluent/wgsl/fluent.vertex.d.ts +5 -0
- package/3D/materials/fluent/wgsl/fluent.vertex.js +29 -0
- package/3D/materials/fluent/wgsl/fluent.vertex.js.map +1 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.d.ts +12 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js +22 -0
- package/3D/materials/fluentBackplate/fluentBackplateMaterial.js.map +1 -1
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.fragment.d.ts +5 -0
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.fragment.js +32 -0
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.fragment.js.map +1 -0
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.vertex.d.ts +5 -0
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.vertex.js +72 -0
- package/3D/materials/fluentBackplate/wgsl/fluentBackplate.vertex.js.map +1 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.d.ts +13 -0
- package/3D/materials/fluentButton/fluentButtonMaterial.js +29 -2
- package/3D/materials/fluentButton/fluentButtonMaterial.js.map +1 -1
- package/3D/materials/fluentButton/wgsl/fluentButton.fragment.d.ts +5 -0
- package/3D/materials/fluentButton/wgsl/fluentButton.fragment.js +20 -0
- package/3D/materials/fluentButton/wgsl/fluentButton.fragment.js.map +1 -0
- package/3D/materials/fluentButton/wgsl/fluentButton.vertex.d.ts +5 -0
- package/3D/materials/fluentButton/wgsl/fluentButton.vertex.js +31 -0
- package/3D/materials/fluentButton/wgsl/fluentButton.vertex.js.map +1 -0
- package/3D/materials/handle/handleMaterial.js +7 -0
- package/3D/materials/handle/handleMaterial.js.map +1 -1
- package/3D/materials/handle/wgsl/handle.fragment.d.ts +5 -0
- package/3D/materials/handle/wgsl/handle.fragment.js +13 -0
- package/3D/materials/handle/wgsl/handle.fragment.js.map +1 -0
- package/3D/materials/handle/wgsl/handle.vertex.d.ts +5 -0
- package/3D/materials/handle/wgsl/handle.vertex.js +13 -0
- package/3D/materials/handle/wgsl/handle.vertex.js.map +1 -0
- package/package.json +2 -2
|
@@ -22,6 +22,7 @@ export declare class FluentMaterialDefines extends MaterialDefines {
|
|
|
22
22
|
* Class used to render controls with fluent design
|
|
23
23
|
*/
|
|
24
24
|
export declare class FluentMaterial extends PushMaterial {
|
|
25
|
+
private _shadersLoaded;
|
|
25
26
|
/**
|
|
26
27
|
* Gets or sets inner glow intensity. A value of 0 means no glow (default is 0.5)
|
|
27
28
|
*/
|
|
@@ -82,9 +83,20 @@ export declare class FluentMaterial extends PushMaterial {
|
|
|
82
83
|
bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void;
|
|
83
84
|
getActiveTextures(): BaseTexture[];
|
|
84
85
|
hasTexture(texture: BaseTexture): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Disposes the material.
|
|
88
|
+
* @param forceDisposeEffect specifies if effects should be forcefully disposed
|
|
89
|
+
*/
|
|
85
90
|
dispose(forceDisposeEffect?: boolean): void;
|
|
86
91
|
clone(name: string): FluentMaterial;
|
|
87
92
|
serialize(): any;
|
|
88
93
|
getClassName(): string;
|
|
94
|
+
/**
|
|
95
|
+
* Creates a fluent material from parsed material data.
|
|
96
|
+
* @param source defines the JSON representation of the material
|
|
97
|
+
* @param scene defines the hosting scene
|
|
98
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
99
|
+
* @returns a new fluent material
|
|
100
|
+
*/
|
|
89
101
|
static Parse(source: any, scene: Scene, rootUrl: string): FluentMaterial;
|
|
90
102
|
}
|
|
@@ -32,6 +32,7 @@ export class FluentMaterial extends PushMaterial {
|
|
|
32
32
|
*/
|
|
33
33
|
constructor(name, scene) {
|
|
34
34
|
super(name, scene);
|
|
35
|
+
this._shadersLoaded = false;
|
|
35
36
|
/**
|
|
36
37
|
* Gets or sets inner glow intensity. A value of 0 means no glow (default is 0.5)
|
|
37
38
|
*/
|
|
@@ -151,6 +152,7 @@ export class FluentMaterial extends PushMaterial {
|
|
|
151
152
|
samplers: samplers,
|
|
152
153
|
defines: defines,
|
|
153
154
|
maxSimultaneousLights: 4,
|
|
155
|
+
shaderLanguage: this._shaderLanguage,
|
|
154
156
|
});
|
|
155
157
|
const join = defines.toString();
|
|
156
158
|
subMesh.setEffect(scene.getEngine().createEffect(shaderName, {
|
|
@@ -163,6 +165,15 @@ export class FluentMaterial extends PushMaterial {
|
|
|
163
165
|
onCompiled: this.onCompiled,
|
|
164
166
|
onError: this.onError,
|
|
165
167
|
indexParameters: { maxSimultaneousLights: 4 },
|
|
168
|
+
shaderLanguage: this._shaderLanguage,
|
|
169
|
+
extraInitializationsAsync: this._shadersLoaded
|
|
170
|
+
? undefined
|
|
171
|
+
: async () => {
|
|
172
|
+
if (this.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
173
|
+
await Promise.all([import("./wgsl/fluent.vertex.js"), import("./wgsl/fluent.fragment.js")]);
|
|
174
|
+
}
|
|
175
|
+
this._shadersLoaded = true;
|
|
176
|
+
},
|
|
166
177
|
}, engine), defines, this._materialContext);
|
|
167
178
|
}
|
|
168
179
|
if (!subMesh.effect || !subMesh.effect.isReady()) {
|
|
@@ -221,6 +232,10 @@ export class FluentMaterial extends PushMaterial {
|
|
|
221
232
|
}
|
|
222
233
|
return false;
|
|
223
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Disposes the material.
|
|
237
|
+
* @param forceDisposeEffect specifies if effects should be forcefully disposed
|
|
238
|
+
*/
|
|
224
239
|
dispose(forceDisposeEffect) {
|
|
225
240
|
super.dispose(forceDisposeEffect);
|
|
226
241
|
}
|
|
@@ -236,6 +251,13 @@ export class FluentMaterial extends PushMaterial {
|
|
|
236
251
|
return "FluentMaterial";
|
|
237
252
|
}
|
|
238
253
|
// Statics
|
|
254
|
+
/**
|
|
255
|
+
* Creates a fluent material from parsed material data.
|
|
256
|
+
* @param source defines the JSON representation of the material
|
|
257
|
+
* @param scene defines the hosting scene
|
|
258
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
259
|
+
* @returns a new fluent material
|
|
260
|
+
*/
|
|
239
261
|
static Parse(source, scene, rootUrl) {
|
|
240
262
|
return SerializationHelper.Parse(() => new FluentMaterial(source.name, scene), source, scene, rootUrl);
|
|
241
263
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluentMaterial.js","sourceRoot":"","sources":["../../../../../../dev/gui/src/3D/materials/fluent/fluentMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serializeAsColor4, serializeAsVector3, serializeAsTexture, serialize, expandToProperty, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector3, TmpVectors } from \"core/Maths/math.vector\";\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 { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\n\r\nimport \"./shaders/fluent.vertex\";\r\nimport \"./shaders/fluent.fragment\";\r\nimport { PrepareUniformsAndSamplersList } from \"core/Materials/materialHelper.functions\";\r\n\r\n/** @internal */\r\nexport class FluentMaterialDefines extends MaterialDefines {\r\n public INNERGLOW = false;\r\n public BORDER = false;\r\n public HOVERLIGHT = false;\r\n public TEXTURE = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * Class used to render controls with fluent design\r\n */\r\nexport class FluentMaterial extends PushMaterial {\r\n /**\r\n * Gets or sets inner glow intensity. A value of 0 means no glow (default is 0.5)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public innerGlowColorIntensity = 0.5;\r\n\r\n /**\r\n * Gets or sets the inner glow color (white by default)\r\n */\r\n @serializeAsColor3()\r\n public innerGlowColor = new Color3(1.0, 1.0, 1.0);\r\n\r\n /**\r\n * Gets or sets the albedo color (Default is Color3(0.3, 0.35, 0.4))\r\n */\r\n @serializeAsColor3()\r\n public albedoColor = new Color3(0.3, 0.35, 0.4);\r\n\r\n /**\r\n * Gets or sets a boolean indicating if borders must be rendered (default is false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public renderBorders = false;\r\n\r\n /**\r\n * Gets or sets border width (default is 0.5)\r\n */\r\n @serialize()\r\n public borderWidth = 0.5;\r\n\r\n /**\r\n * Gets or sets a value indicating the smoothing value applied to border edges (0.02 by default)\r\n */\r\n @serialize()\r\n public edgeSmoothingValue = 0.02;\r\n\r\n /**\r\n * Gets or sets the minimum value that can be applied to border width (default is 0.1)\r\n */\r\n @serialize()\r\n public borderMinValue = 0.1;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if hover light must be rendered (default is false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public renderHoverLight = false;\r\n\r\n /**\r\n * Gets or sets the radius used to render the hover light (default is 0.01)\r\n */\r\n @serialize()\r\n public hoverRadius = 0.01;\r\n\r\n /**\r\n * Gets or sets the color used to render the hover light (default is Color4(0.3, 0.3, 0.3, 1.0))\r\n */\r\n @serializeAsColor4()\r\n public hoverColor = new Color4(0.3, 0.3, 0.3, 1.0);\r\n\r\n /**\r\n * Gets or sets the hover light position in world space (default is Vector3.Zero())\r\n */\r\n @serializeAsVector3()\r\n public hoverPosition = Vector3.Zero();\r\n\r\n @serializeAsTexture(\"albedoTexture\")\r\n private _albedoTexture: Nullable<BaseTexture>;\r\n\r\n /** Gets or sets the texture to use for albedo color */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public albedoTexture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Creates a new Fluent material\r\n * @param name defines the name of the material\r\n * @param scene defines the hosting scene\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;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new FluentMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n const defines = <FluentMaterialDefines>subMesh.materialDefines;\r\n if (!this.checkReadyOnEveryCall && subMesh.effect) {\r\n if (defines._renderId === scene.getRenderId()) {\r\n return true;\r\n }\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.INNERGLOW = this.innerGlowColorIntensity > 0;\r\n defines.BORDER = this.renderBorders;\r\n defines.HOVERLIGHT = this.renderHoverLight;\r\n\r\n if (this._albedoTexture) {\r\n if (!this._albedoTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n } else {\r\n defines.TEXTURE = true;\r\n }\r\n } else {\r\n defines.TEXTURE = false;\r\n }\r\n }\r\n\r\n const engine = scene.getEngine();\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 const attribs = [VertexBuffer.PositionKind];\r\n attribs.push(VertexBuffer.NormalKind);\r\n attribs.push(VertexBuffer.UVKind);\r\n\r\n const shaderName = \"fluent\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"viewProjection\",\r\n \"innerGlowColor\",\r\n \"albedoColor\",\r\n \"borderWidth\",\r\n \"edgeSmoothingValue\",\r\n \"scaleFactor\",\r\n \"borderMinValue\",\r\n \"hoverColor\",\r\n \"hoverPosition\",\r\n \"hoverRadius\",\r\n \"textureMatrix\",\r\n ];\r\n\r\n const samplers = [\"albedoSampler\"];\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 const join = defines.toString();\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: null,\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 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\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 = <FluentMaterialDefines>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 // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n this._activeEffect.setColor4(\"albedoColor\", this.albedoColor, this.alpha);\r\n\r\n if (defines.INNERGLOW) {\r\n this._activeEffect.setColor4(\"innerGlowColor\", this.innerGlowColor, this.innerGlowColorIntensity);\r\n }\r\n\r\n if (defines.BORDER) {\r\n this._activeEffect.setFloat(\"borderWidth\", this.borderWidth);\r\n this._activeEffect.setFloat(\"edgeSmoothingValue\", this.edgeSmoothingValue);\r\n this._activeEffect.setFloat(\"borderMinValue\", this.borderMinValue);\r\n\r\n mesh.getBoundingInfo().boundingBox.extendSize.multiplyToRef(mesh.scaling, TmpVectors.Vector3[0]);\r\n this._activeEffect.setVector3(\"scaleFactor\", TmpVectors.Vector3[0]);\r\n }\r\n\r\n if (defines.HOVERLIGHT) {\r\n this._activeEffect.setDirectColor4(\"hoverColor\", this.hoverColor);\r\n this._activeEffect.setFloat(\"hoverRadius\", this.hoverRadius);\r\n this._activeEffect.setVector3(\"hoverPosition\", this.hoverPosition);\r\n }\r\n\r\n if (defines.TEXTURE && this._albedoTexture) {\r\n this._activeEffect.setTexture(\"albedoSampler\", this._albedoTexture);\r\n const matrix = this._albedoTexture.getTextureMatrix();\r\n this._activeEffect.setMatrix(\"textureMatrix\", matrix);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n return activeTextures;\r\n }\r\n\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n return false;\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): FluentMaterial {\r\n return SerializationHelper.Clone(() => new FluentMaterial(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.GUI.FluentMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FluentMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): FluentMaterial {\r\n return SerializationHelper.Parse(() => new FluentMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.FluentMaterial\", FluentMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"fluentMaterial.js","sourceRoot":"","sources":["../../../../../../dev/gui/src/3D/materials/fluent/fluentMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serializeAsColor4, serializeAsVector3, serializeAsTexture, serialize, expandToProperty, serializeAsColor3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector3, TmpVectors } from \"core/Maths/math.vector\";\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 { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nimport \"./shaders/fluent.vertex\";\r\nimport \"./shaders/fluent.fragment\";\r\nimport { PrepareUniformsAndSamplersList } from \"core/Materials/materialHelper.functions\";\r\n\r\n/** @internal */\r\nexport class FluentMaterialDefines extends MaterialDefines {\r\n public INNERGLOW = false;\r\n public BORDER = false;\r\n public HOVERLIGHT = false;\r\n public TEXTURE = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * Class used to render controls with fluent design\r\n */\r\nexport class FluentMaterial extends PushMaterial {\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * Gets or sets inner glow intensity. A value of 0 means no glow (default is 0.5)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public innerGlowColorIntensity = 0.5;\r\n\r\n /**\r\n * Gets or sets the inner glow color (white by default)\r\n */\r\n @serializeAsColor3()\r\n public innerGlowColor = new Color3(1.0, 1.0, 1.0);\r\n\r\n /**\r\n * Gets or sets the albedo color (Default is Color3(0.3, 0.35, 0.4))\r\n */\r\n @serializeAsColor3()\r\n public albedoColor = new Color3(0.3, 0.35, 0.4);\r\n\r\n /**\r\n * Gets or sets a boolean indicating if borders must be rendered (default is false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public renderBorders = false;\r\n\r\n /**\r\n * Gets or sets border width (default is 0.5)\r\n */\r\n @serialize()\r\n public borderWidth = 0.5;\r\n\r\n /**\r\n * Gets or sets a value indicating the smoothing value applied to border edges (0.02 by default)\r\n */\r\n @serialize()\r\n public edgeSmoothingValue = 0.02;\r\n\r\n /**\r\n * Gets or sets the minimum value that can be applied to border width (default is 0.1)\r\n */\r\n @serialize()\r\n public borderMinValue = 0.1;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if hover light must be rendered (default is false)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public renderHoverLight = false;\r\n\r\n /**\r\n * Gets or sets the radius used to render the hover light (default is 0.01)\r\n */\r\n @serialize()\r\n public hoverRadius = 0.01;\r\n\r\n /**\r\n * Gets or sets the color used to render the hover light (default is Color4(0.3, 0.3, 0.3, 1.0))\r\n */\r\n @serializeAsColor4()\r\n public hoverColor = new Color4(0.3, 0.3, 0.3, 1.0);\r\n\r\n /**\r\n * Gets or sets the hover light position in world space (default is Vector3.Zero())\r\n */\r\n @serializeAsVector3()\r\n public hoverPosition = Vector3.Zero();\r\n\r\n @serializeAsTexture(\"albedoTexture\")\r\n private _albedoTexture: Nullable<BaseTexture>;\r\n\r\n /** Gets or sets the texture to use for albedo color */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public albedoTexture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Creates a new Fluent material\r\n * @param name defines the name of the material\r\n * @param scene defines the hosting scene\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;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new FluentMaterialDefines();\r\n }\r\n\r\n const scene = this.getScene();\r\n const defines = <FluentMaterialDefines>subMesh.materialDefines;\r\n if (!this.checkReadyOnEveryCall && subMesh.effect) {\r\n if (defines._renderId === scene.getRenderId()) {\r\n return true;\r\n }\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.INNERGLOW = this.innerGlowColorIntensity > 0;\r\n defines.BORDER = this.renderBorders;\r\n defines.HOVERLIGHT = this.renderHoverLight;\r\n\r\n if (this._albedoTexture) {\r\n if (!this._albedoTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n } else {\r\n defines.TEXTURE = true;\r\n }\r\n } else {\r\n defines.TEXTURE = false;\r\n }\r\n }\r\n\r\n const engine = scene.getEngine();\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 const attribs = [VertexBuffer.PositionKind];\r\n attribs.push(VertexBuffer.NormalKind);\r\n attribs.push(VertexBuffer.UVKind);\r\n\r\n const shaderName = \"fluent\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"viewProjection\",\r\n \"innerGlowColor\",\r\n \"albedoColor\",\r\n \"borderWidth\",\r\n \"edgeSmoothingValue\",\r\n \"scaleFactor\",\r\n \"borderMinValue\",\r\n \"hoverColor\",\r\n \"hoverPosition\",\r\n \"hoverRadius\",\r\n \"textureMatrix\",\r\n ];\r\n\r\n const samplers = [\"albedoSampler\"];\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 shaderLanguage: this._shaderLanguage,\r\n });\r\n\r\n const join = defines.toString();\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: null,\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/fluent.vertex\"), import(\"./wgsl/fluent.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 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\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 = <FluentMaterialDefines>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 // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n this._activeEffect.setColor4(\"albedoColor\", this.albedoColor, this.alpha);\r\n\r\n if (defines.INNERGLOW) {\r\n this._activeEffect.setColor4(\"innerGlowColor\", this.innerGlowColor, this.innerGlowColorIntensity);\r\n }\r\n\r\n if (defines.BORDER) {\r\n this._activeEffect.setFloat(\"borderWidth\", this.borderWidth);\r\n this._activeEffect.setFloat(\"edgeSmoothingValue\", this.edgeSmoothingValue);\r\n this._activeEffect.setFloat(\"borderMinValue\", this.borderMinValue);\r\n\r\n mesh.getBoundingInfo().boundingBox.extendSize.multiplyToRef(mesh.scaling, TmpVectors.Vector3[0]);\r\n this._activeEffect.setVector3(\"scaleFactor\", TmpVectors.Vector3[0]);\r\n }\r\n\r\n if (defines.HOVERLIGHT) {\r\n this._activeEffect.setDirectColor4(\"hoverColor\", this.hoverColor);\r\n this._activeEffect.setFloat(\"hoverRadius\", this.hoverRadius);\r\n this._activeEffect.setVector3(\"hoverPosition\", this.hoverPosition);\r\n }\r\n\r\n if (defines.TEXTURE && this._albedoTexture) {\r\n this._activeEffect.setTexture(\"albedoSampler\", this._albedoTexture);\r\n const matrix = this._albedoTexture.getTextureMatrix();\r\n this._activeEffect.setMatrix(\"textureMatrix\", matrix);\r\n }\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n return activeTextures;\r\n }\r\n\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Disposes the material.\r\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\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): FluentMaterial {\r\n return SerializationHelper.Clone(() => new FluentMaterial(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.GUI.FluentMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FluentMaterial\";\r\n }\r\n\r\n // Statics\r\n /**\r\n * Creates a fluent material from parsed material data.\r\n * @param source defines the JSON representation of the material\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 fluent material\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): FluentMaterial {\r\n return SerializationHelper.Parse(() => new FluentMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.FluentMaterial\", FluentMaterial);\r\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
const name = "fluentPixelShader";
|
|
4
|
+
const shader = `varying vUV: vec2f;uniform albedoColor: vec4f;
|
|
5
|
+
#ifdef INNERGLOW
|
|
6
|
+
uniform innerGlowColor: vec4f;
|
|
7
|
+
#endif
|
|
8
|
+
#ifdef BORDER
|
|
9
|
+
varying scaleInfo: vec2f;uniform edgeSmoothingValue: f32;uniform borderMinValue: f32;
|
|
10
|
+
#endif
|
|
11
|
+
#ifdef HOVERLIGHT
|
|
12
|
+
varying worldPosition: vec3f;uniform hoverPosition: vec3f;uniform hoverColor: vec4f;uniform hoverRadius: f32;
|
|
13
|
+
#endif
|
|
14
|
+
#ifdef TEXTURE
|
|
15
|
+
uniform textureMatrix: mat4x4f;var albedoSamplerSampler: sampler;var albedoSampler: texture_2d<f32>;
|
|
16
|
+
#endif
|
|
17
|
+
@fragment
|
|
18
|
+
fn main(input: FragmentInputs)->FragmentOutputs {var albedo: vec3f=uniforms.albedoColor.rgb;var alpha: f32=uniforms.albedoColor.a;
|
|
19
|
+
#ifdef TEXTURE
|
|
20
|
+
let finalUV: vec2f=(uniforms.textureMatrix*vec4f(input.vUV,1.0,0.0)).xy;albedo=textureSample(albedoSampler,albedoSamplerSampler,finalUV).rgb;
|
|
21
|
+
#endif
|
|
22
|
+
#ifdef HOVERLIGHT
|
|
23
|
+
let pointToHover: f32=(1.0-clamp(length(uniforms.hoverPosition-input.worldPosition)/uniforms.hoverRadius,0.0,1.0))*uniforms.hoverColor.a;albedo=clamp(albedo+uniforms.hoverColor.rgb*pointToHover,vec3f(0.0),vec3f(1.0));
|
|
24
|
+
#else
|
|
25
|
+
let pointToHover: f32=1.0;
|
|
26
|
+
#endif
|
|
27
|
+
#ifdef BORDER
|
|
28
|
+
let borderPower: f32=10.0;let inverseBorderPower: f32=1.0/borderPower;var borderColor: vec3f=albedo*borderPower;let distanceToEdge: vec2f=abs(input.vUV-vec2f(0.5))*2.0;let borderValue: f32=max(
|
|
29
|
+
smoothstep(input.scaleInfo.x-uniforms.edgeSmoothingValue,input.scaleInfo.x+uniforms.edgeSmoothingValue,distanceToEdge.x),
|
|
30
|
+
smoothstep(input.scaleInfo.y-uniforms.edgeSmoothingValue,input.scaleInfo.y+uniforms.edgeSmoothingValue,distanceToEdge.y)
|
|
31
|
+
);borderColor=borderColor*borderValue*max(uniforms.borderMinValue*inverseBorderPower,pointToHover);albedo+=borderColor;alpha=max(alpha,borderValue);
|
|
32
|
+
#endif
|
|
33
|
+
#ifdef INNERGLOW
|
|
34
|
+
var uvGlow: vec2f=(input.vUV-vec2f(0.5))*(uniforms.innerGlowColor.a*2.0);uvGlow=uvGlow*uvGlow;uvGlow=uvGlow*uvGlow;albedo+=mix(vec3f(0.0),uniforms.innerGlowColor.rgb,uvGlow.x+uvGlow.y);
|
|
35
|
+
#endif
|
|
36
|
+
fragmentOutputs.color=vec4f(albedo,alpha);}
|
|
37
|
+
`;
|
|
38
|
+
// Sideeffect
|
|
39
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
40
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
41
|
+
}
|
|
42
|
+
/** @internal */
|
|
43
|
+
export const fluentPixelShaderWGSL = { name, shader };
|
|
44
|
+
//# sourceMappingURL=fluent.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluent.fragment.js","sourceRoot":"","sources":["../../../../../../../dev/gui/src/3D/materials/fluent/wgsl/fluent.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,IAAI,GAAG,mBAAmB,CAAC;AACjC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCd,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;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\n\nconst name = \"fluentPixelShader\";\nconst shader = `varying vUV: vec2f;uniform albedoColor: vec4f;\n#ifdef INNERGLOW\nuniform innerGlowColor: vec4f;\n#endif\n#ifdef BORDER\nvarying scaleInfo: vec2f;uniform edgeSmoothingValue: f32;uniform borderMinValue: f32;\n#endif\n#ifdef HOVERLIGHT\nvarying worldPosition: vec3f;uniform hoverPosition: vec3f;uniform hoverColor: vec4f;uniform hoverRadius: f32;\n#endif\n#ifdef TEXTURE\nuniform textureMatrix: mat4x4f;var albedoSamplerSampler: sampler;var albedoSampler: texture_2d<f32>;\n#endif\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {var albedo: vec3f=uniforms.albedoColor.rgb;var alpha: f32=uniforms.albedoColor.a;\n#ifdef TEXTURE\nlet finalUV: vec2f=(uniforms.textureMatrix*vec4f(input.vUV,1.0,0.0)).xy;albedo=textureSample(albedoSampler,albedoSamplerSampler,finalUV).rgb;\n#endif\n#ifdef HOVERLIGHT\nlet pointToHover: f32=(1.0-clamp(length(uniforms.hoverPosition-input.worldPosition)/uniforms.hoverRadius,0.0,1.0))*uniforms.hoverColor.a;albedo=clamp(albedo+uniforms.hoverColor.rgb*pointToHover,vec3f(0.0),vec3f(1.0));\n#else\nlet pointToHover: f32=1.0;\n#endif\n#ifdef BORDER\nlet borderPower: f32=10.0;let inverseBorderPower: f32=1.0/borderPower;var borderColor: vec3f=albedo*borderPower;let distanceToEdge: vec2f=abs(input.vUV-vec2f(0.5))*2.0;let borderValue: f32=max(\nsmoothstep(input.scaleInfo.x-uniforms.edgeSmoothingValue,input.scaleInfo.x+uniforms.edgeSmoothingValue,distanceToEdge.x),\nsmoothstep(input.scaleInfo.y-uniforms.edgeSmoothingValue,input.scaleInfo.y+uniforms.edgeSmoothingValue,distanceToEdge.y)\n);borderColor=borderColor*borderValue*max(uniforms.borderMinValue*inverseBorderPower,pointToHover);albedo+=borderColor;alpha=max(alpha,borderValue);\n#endif\n#ifdef INNERGLOW\nvar uvGlow: vec2f=(input.vUV-vec2f(0.5))*(uniforms.innerGlowColor.a*2.0);uvGlow=uvGlow*uvGlow;uvGlow=uvGlow*uvGlow;albedo+=mix(vec3f(0.0),uniforms.innerGlowColor.rgb,uvGlow.x+uvGlow.y);\n#endif\nfragmentOutputs.color=vec4f(albedo,alpha);}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n\n/** @internal */\nexport const fluentPixelShaderWGSL = { name, shader };\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
const name = "fluentVertexShader";
|
|
4
|
+
const shader = `attribute position: vec3f;attribute normal: vec3f;attribute uv: vec2f;uniform world: mat4x4f;uniform viewProjection: mat4x4f;varying vUV: vec2f;
|
|
5
|
+
#ifdef BORDER
|
|
6
|
+
varying scaleInfo: vec2f;uniform borderWidth: f32;uniform scaleFactor: vec3f;
|
|
7
|
+
#endif
|
|
8
|
+
#ifdef HOVERLIGHT
|
|
9
|
+
varying worldPosition: vec3f;
|
|
10
|
+
#endif
|
|
11
|
+
@vertex
|
|
12
|
+
fn main(input: VertexInputs)->FragmentInputs {vertexOutputs.vUV=vertexInputs.uv;
|
|
13
|
+
#ifdef BORDER
|
|
14
|
+
var scale: vec3f=uniforms.scaleFactor;let minScale: f32=min(min(scale.x,scale.y),scale.z);let maxScale: f32=max(max(scale.x,scale.y),scale.z);let minOverMiddleScale: f32=minScale/(scale.x+scale.y+scale.z-minScale-maxScale);let areaYZ: f32=scale.y*scale.z;let areaXZ: f32=scale.x*scale.z;let areaXY: f32=scale.x*scale.y;var scaledBorderWidth: f32=uniforms.borderWidth;if (abs(vertexInputs.normal.x)==1.0) {scale.x=scale.y;scale.y=scale.z;if (areaYZ>areaXZ && areaYZ>areaXY) {scaledBorderWidth*=minOverMiddleScale;}} else if (abs(vertexInputs.normal.y)==1.0) {scale.x=scale.z;if (areaXZ>areaXY && areaXZ>areaYZ) {scaledBorderWidth*=minOverMiddleScale;}} else {if (areaXY>areaYZ && areaXY>areaXZ) {scaledBorderWidth*=minOverMiddleScale;}}
|
|
15
|
+
let scaleRatio: f32=min(scale.x,scale.y)/max(scale.x,scale.y);if (scale.x>scale.y) {vertexOutputs.scaleInfo=vec2f(1.0-scaledBorderWidth*scaleRatio,1.0-scaledBorderWidth);} else {vertexOutputs.scaleInfo=vec2f(1.0-scaledBorderWidth,1.0-scaledBorderWidth*scaleRatio);}
|
|
16
|
+
#endif
|
|
17
|
+
let worldPos: vec4f=uniforms.world*vec4f(vertexInputs.position,1.0);
|
|
18
|
+
#ifdef HOVERLIGHT
|
|
19
|
+
vertexOutputs.worldPosition=worldPos.xyz;
|
|
20
|
+
#endif
|
|
21
|
+
vertexOutputs.position=uniforms.viewProjection*worldPos;}
|
|
22
|
+
`;
|
|
23
|
+
// Sideeffect
|
|
24
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
25
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
26
|
+
}
|
|
27
|
+
/** @internal */
|
|
28
|
+
export const fluentVertexShaderWGSL = { name, shader };
|
|
29
|
+
//# sourceMappingURL=fluent.vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluent.vertex.js","sourceRoot":"","sources":["../../../../../../../dev/gui/src/3D/materials/fluent/wgsl/fluent.vertex.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,IAAI,GAAG,oBAAoB,CAAC;AAClC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBd,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;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\n\nconst name = \"fluentVertexShader\";\nconst shader = `attribute position: vec3f;attribute normal: vec3f;attribute uv: vec2f;uniform world: mat4x4f;uniform viewProjection: mat4x4f;varying vUV: vec2f;\n#ifdef BORDER\nvarying scaleInfo: vec2f;uniform borderWidth: f32;uniform scaleFactor: vec3f;\n#endif\n#ifdef HOVERLIGHT\nvarying worldPosition: vec3f;\n#endif\n@vertex\nfn main(input: VertexInputs)->FragmentInputs {vertexOutputs.vUV=vertexInputs.uv;\n#ifdef BORDER\nvar scale: vec3f=uniforms.scaleFactor;let minScale: f32=min(min(scale.x,scale.y),scale.z);let maxScale: f32=max(max(scale.x,scale.y),scale.z);let minOverMiddleScale: f32=minScale/(scale.x+scale.y+scale.z-minScale-maxScale);let areaYZ: f32=scale.y*scale.z;let areaXZ: f32=scale.x*scale.z;let areaXY: f32=scale.x*scale.y;var scaledBorderWidth: f32=uniforms.borderWidth;if (abs(vertexInputs.normal.x)==1.0) {scale.x=scale.y;scale.y=scale.z;if (areaYZ>areaXZ && areaYZ>areaXY) {scaledBorderWidth*=minOverMiddleScale;}} else if (abs(vertexInputs.normal.y)==1.0) {scale.x=scale.z;if (areaXZ>areaXY && areaXZ>areaYZ) {scaledBorderWidth*=minOverMiddleScale;}} else {if (areaXY>areaYZ && areaXY>areaXZ) {scaledBorderWidth*=minOverMiddleScale;}}\nlet scaleRatio: f32=min(scale.x,scale.y)/max(scale.x,scale.y);if (scale.x>scale.y) {vertexOutputs.scaleInfo=vec2f(1.0-scaledBorderWidth*scaleRatio,1.0-scaledBorderWidth);} else {vertexOutputs.scaleInfo=vec2f(1.0-scaledBorderWidth,1.0-scaledBorderWidth*scaleRatio);}\n#endif\nlet worldPos: vec4f=uniforms.world*vec4f(vertexInputs.position,1.0);\n#ifdef HOVERLIGHT\nvertexOutputs.worldPosition=worldPos.xyz;\n#endif\nvertexOutputs.position=uniforms.viewProjection*worldPos;}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n\n/** @internal */\nexport const fluentVertexShaderWGSL = { name, shader };\n"]}
|
|
@@ -14,6 +14,7 @@ import "./shaders/fluentBackplate.vertex.js";
|
|
|
14
14
|
* Class used to render square buttons with fluent design
|
|
15
15
|
*/
|
|
16
16
|
export declare class FluentBackplateMaterial extends PushMaterial {
|
|
17
|
+
private _shadersLoaded;
|
|
17
18
|
/**
|
|
18
19
|
* URL pointing to the texture used to define the coloring for the fluent blob effect.
|
|
19
20
|
*/
|
|
@@ -146,9 +147,20 @@ export declare class FluentBackplateMaterial extends PushMaterial {
|
|
|
146
147
|
* @returns the list of animatables object used in the material
|
|
147
148
|
*/
|
|
148
149
|
getAnimatables(): IAnimatable[];
|
|
150
|
+
/**
|
|
151
|
+
* Disposes the material.
|
|
152
|
+
* @param forceDisposeEffect specifies if effects should be forcefully disposed
|
|
153
|
+
*/
|
|
149
154
|
dispose(forceDisposeEffect?: boolean): void;
|
|
150
155
|
clone(name: string): FluentBackplateMaterial;
|
|
151
156
|
serialize(): any;
|
|
152
157
|
getClassName(): string;
|
|
158
|
+
/**
|
|
159
|
+
* Creates a fluent backplate material from parsed material data.
|
|
160
|
+
* @param source defines the JSON representation of the material
|
|
161
|
+
* @param scene defines the hosting scene
|
|
162
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
163
|
+
* @returns a new fluent backplate material
|
|
164
|
+
*/
|
|
153
165
|
static Parse(source: any, scene: Scene, rootUrl: string): FluentBackplateMaterial;
|
|
154
166
|
}
|
|
@@ -32,6 +32,7 @@ class FluentBackplateMaterialDefines extends MaterialDefines {
|
|
|
32
32
|
export class FluentBackplateMaterial extends PushMaterial {
|
|
33
33
|
constructor(name, scene) {
|
|
34
34
|
super(name, scene);
|
|
35
|
+
this._shadersLoaded = false;
|
|
35
36
|
/**
|
|
36
37
|
* Gets or sets the corner radius on the backplate. Best to keep this value between 0.01 and 0.5. Default is 0.03.
|
|
37
38
|
*/
|
|
@@ -266,6 +267,7 @@ export class FluentBackplateMaterial extends PushMaterial {
|
|
|
266
267
|
samplers: samplers,
|
|
267
268
|
defines: defines,
|
|
268
269
|
maxSimultaneousLights: 4,
|
|
270
|
+
shaderLanguage: this._shaderLanguage,
|
|
269
271
|
});
|
|
270
272
|
subMesh.setEffect(scene.getEngine().createEffect(shaderName, {
|
|
271
273
|
attributes: attribs,
|
|
@@ -277,6 +279,15 @@ export class FluentBackplateMaterial extends PushMaterial {
|
|
|
277
279
|
onCompiled: this.onCompiled,
|
|
278
280
|
onError: this.onError,
|
|
279
281
|
indexParameters: { maxSimultaneousLights: 4 },
|
|
282
|
+
shaderLanguage: this._shaderLanguage,
|
|
283
|
+
extraInitializationsAsync: this._shadersLoaded
|
|
284
|
+
? undefined
|
|
285
|
+
: async () => {
|
|
286
|
+
if (this.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
|
|
287
|
+
await Promise.all([import("./wgsl/fluentBackplate.vertex.js"), import("./wgsl/fluentBackplate.fragment.js")]);
|
|
288
|
+
}
|
|
289
|
+
this._shadersLoaded = true;
|
|
290
|
+
},
|
|
280
291
|
}, engine), defines, this._materialContext);
|
|
281
292
|
}
|
|
282
293
|
if (!subMesh.effect || !subMesh.effect.isReady()) {
|
|
@@ -367,6 +378,10 @@ export class FluentBackplateMaterial extends PushMaterial {
|
|
|
367
378
|
getAnimatables() {
|
|
368
379
|
return [];
|
|
369
380
|
}
|
|
381
|
+
/**
|
|
382
|
+
* Disposes the material.
|
|
383
|
+
* @param forceDisposeEffect specifies if effects should be forcefully disposed
|
|
384
|
+
*/
|
|
370
385
|
dispose(forceDisposeEffect) {
|
|
371
386
|
super.dispose(forceDisposeEffect);
|
|
372
387
|
this._blobTexture.dispose();
|
|
@@ -384,6 +399,13 @@ export class FluentBackplateMaterial extends PushMaterial {
|
|
|
384
399
|
return "FluentBackplateMaterial";
|
|
385
400
|
}
|
|
386
401
|
// Statics
|
|
402
|
+
/**
|
|
403
|
+
* Creates a fluent backplate material from parsed material data.
|
|
404
|
+
* @param source defines the JSON representation of the material
|
|
405
|
+
* @param scene defines the hosting scene
|
|
406
|
+
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
407
|
+
* @returns a new fluent backplate material
|
|
408
|
+
*/
|
|
387
409
|
static Parse(source, scene, rootUrl) {
|
|
388
410
|
return SerializationHelper.Parse(() => new FluentBackplateMaterial(source.name, scene), source, scene, rootUrl);
|
|
389
411
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluentBackplateMaterial.js","sourceRoot":"","sources":["../../../../../../dev/gui/src/3D/materials/fluentBackplate/fluentBackplateMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serialize, serializeAsVector3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport { type IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\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 { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\nimport \"./shaders/fluentBackplate.fragment\";\r\nimport \"./shaders/fluentBackplate.vertex\";\r\nimport { HandleFallbacksForShadows, PrepareAttributesForInstances, PrepareDefinesForAttributes, PrepareUniformsAndSamplersList } from \"core/Materials/materialHelper.functions\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\n/** @internal */\r\nclass FluentBackplateMaterialDefines extends MaterialDefines {\r\n public BLOB_ENABLE = true;\r\n public BLOB_ENABLE_2 = true;\r\n public SMOOTH_EDGES = true;\r\n public IRIDESCENT_MAP_ENABLE = true;\r\n\r\n constructor() {\r\n super();\r\n this._needNormals = true;\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * Class used to render square buttons with fluent design\r\n */\r\nexport class FluentBackplateMaterial extends PushMaterial {\r\n /**\r\n * URL pointing to the texture used to define the coloring for the fluent blob effect.\r\n */\r\n public static BLOB_TEXTURE_URL = \"https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-blob.png\";\r\n\r\n /**\r\n * URL pointing to the texture used to define iridescent map.\r\n */\r\n public static IM_TEXTURE_URL = \"https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-iridescence.png\";\r\n\r\n private _blobTexture: Texture;\r\n private _iridescentMap: Texture;\r\n\r\n /**\r\n * Gets or sets the corner radius on the backplate. Best to keep this value between 0.01 and 0.5. Default is 0.03.\r\n */\r\n @serialize()\r\n public radius = 0.03;\r\n\r\n /**\r\n * Gets or sets the line width of the backplate.\r\n */\r\n @serialize()\r\n public lineWidth = 0.01;\r\n\r\n /**\r\n * Gets or sets whether to use absolute sizes when calculating effects on the backplate.\r\n * Since desktop and VR/AR have different relative sizes, it's usually best to keep this false.\r\n */\r\n @serialize()\r\n public absoluteSizes = false;\r\n\r\n /** @internal */\r\n public _filterWidth = 1;\r\n\r\n /**\r\n * Gets or sets the base color of the backplate.\r\n */\r\n @serialize()\r\n public baseColor = new Color4(0.0392157, 0.0666667, 0.207843, 1);\r\n\r\n /**\r\n * Gets or sets the line color of the backplate.\r\n */\r\n @serialize()\r\n public lineColor = new Color4(0.14902, 0.133333, 0.384314, 1);\r\n\r\n /**\r\n * Gets or sets the intensity of the fluent hover glow effect.\r\n */\r\n @serialize()\r\n public blobIntensity = 0.98;\r\n\r\n /**\r\n * Gets or sets the far size of the fluent hover glow effect.\r\n */\r\n @serialize()\r\n public blobFarSize = 0.04;\r\n\r\n /**\r\n * Gets or sets the distance considered \"near\" to the backplate, which controls the size of the fluent hover glow effect (see blobNearSize).\r\n */\r\n @serialize()\r\n public blobNearDistance = 0;\r\n\r\n /**\r\n * Gets or sets the distance considered \"far\" from the backplate, which controls the size of the fluent hover glow effect (see blobFarSize).\r\n */\r\n @serialize()\r\n public blobFarDistance = 0.08;\r\n\r\n /**\r\n * Gets or sets the length of the fluent hover glow effect fade.\r\n */\r\n @serialize()\r\n public blobFadeLength = 0.08;\r\n\r\n /**\r\n * Gets or sets the size of the fluent hover glow effect when the left pointer is considered \"near\" to the backplate (see blobNearDistance).\r\n */\r\n @serialize()\r\n public blobNearSize = 0.22;\r\n\r\n /**\r\n * Gets or sets the progress of the fluent hover glow effect selection animation corresponding to the left pointer (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public blobPulse = 0;\r\n\r\n /**\r\n * Gets or sets the opacity of the fluent hover glow effect corresponding to the left pointer (0.0 - 1.0). Default is 0.\r\n */\r\n @serialize()\r\n public blobFade = 0;\r\n\r\n /**\r\n * Gets or sets the size of the fluent hover glow effect when the right pointer is considered \"near\" to the backplate (see blobNearDistance).\r\n */\r\n @serialize()\r\n public blobNearSize2 = 0.22;\r\n\r\n /**\r\n * Gets or sets the progress of the fluent hover glow effect selection animation corresponding to the right pointer (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public blobPulse2 = 0;\r\n\r\n /**\r\n * Gets or sets the opacity of the fluent hover glow effect corresponding to the right pointer (0.0 - 1.0). Default is 0.\r\n */\r\n @serialize()\r\n public blobFade2 = 0;\r\n\r\n /** @internal */\r\n public _rate = 0.135;\r\n\r\n /**\r\n * Gets or sets the color of the highlights on the backplate line.\r\n */\r\n @serialize()\r\n public highlightColor = new Color4(0.98, 0.98, 0.98, 1);\r\n\r\n /**\r\n * Gets or sets the width of the highlights on the backplate line.\r\n */\r\n @serialize()\r\n public highlightWidth = 0.25;\r\n\r\n /** @internal */\r\n public _highlightTransform = new Vector4(1, 1, 0, 0);\r\n\r\n /** @internal */\r\n public _highlight = 1;\r\n\r\n /**\r\n * Gets or sets the intensity of the iridescence effect.\r\n */\r\n @serialize()\r\n public iridescenceIntensity = 0;\r\n\r\n /**\r\n * Gets or sets the intensity of the iridescence effect on the backplate edges.\r\n */\r\n @serialize()\r\n public iridescenceEdgeIntensity = 1;\r\n\r\n /** @internal */\r\n public _angle = -45;\r\n\r\n /**\r\n * Gets or sets the opacity of the backplate (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public fadeOut = 1;\r\n\r\n /** @internal */\r\n public _reflected = true;\r\n\r\n /** @internal */\r\n public _frequency = 1;\r\n\r\n /** @internal */\r\n public _verticalOffset = 0;\r\n\r\n /**\r\n * Gets or sets the world-space position of the tip of the left index finger.\r\n */\r\n @serializeAsVector3()\r\n public globalLeftIndexTipPosition = Vector3.Zero();\r\n private _globalLeftIndexTipPosition4 = Vector4.Zero();\r\n\r\n /**\r\n * Gets or sets the world-space position of the tip of the right index finger.\r\n */\r\n @serializeAsVector3()\r\n public globalRightIndexTipPosition = Vector3.Zero();\r\n private _globalRightIndexTipPosition4 = Vector4.Zero();\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n this.alphaMode = Constants.ALPHA_DISABLE;\r\n this.backFaceCulling = false;\r\n const blobTextureUrl = Tools.GetAssetUrl(FluentBackplateMaterial.BLOB_TEXTURE_URL);\r\n const iridescentMapUrl = Tools.GetAssetUrl(FluentBackplateMaterial.IM_TEXTURE_URL);\r\n this._blobTexture = new Texture(blobTextureUrl, this.getScene(), true, false, Texture.NEAREST_SAMPLINGMODE);\r\n this._iridescentMap = new Texture(iridescentMapUrl, this.getScene(), true, false, Texture.NEAREST_SAMPLINGMODE);\r\n }\r\n\r\n public override needAlphaBlending(): boolean {\r\n return false;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!this._blobTexture.isReady() || !this._iridescentMap.isReady()) {\r\n return false;\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new FluentBackplateMaterialDefines();\r\n }\r\n\r\n const defines = <FluentBackplateMaterialDefines>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 // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\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 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 if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"fluentBackplate\";\r\n const join = defines.toString();\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"viewProjection\",\r\n \"cameraPosition\",\r\n \"_Radius_\",\r\n \"_Line_Width_\",\r\n \"_Absolute_Sizes_\",\r\n \"_Filter_Width_\",\r\n \"_Base_Color_\",\r\n \"_Line_Color_\",\r\n \"_Radius_Top_Left_\",\r\n \"_Radius_Top_Right_\",\r\n \"_Radius_Bottom_Left_\",\r\n \"_Radius_Bottom_Right_\",\r\n \"_Blob_Position_\",\r\n \"_Blob_Intensity_\",\r\n \"_Blob_Near_Size_\",\r\n \"_Blob_Far_Size_\",\r\n \"_Blob_Near_Distance_\",\r\n \"_Blob_Far_Distance_\",\r\n \"_Blob_Fade_Length_\",\r\n \"_Blob_Pulse_\",\r\n \"_Blob_Fade_\",\r\n \"_Blob_Texture_\",\r\n \"_Blob_Position_2_\",\r\n \"_Blob_Near_Size_2_\",\r\n \"_Blob_Pulse_2_\",\r\n \"_Blob_Fade_2_\",\r\n \"_Rate_\",\r\n \"_Highlight_Color_\",\r\n \"_Highlight_Width_\",\r\n \"_Highlight_Transform_\",\r\n \"_Highlight_\",\r\n \"_Iridescence_Intensity_\",\r\n \"_Iridescence_Edge_Intensity_\",\r\n \"_Angle_\",\r\n \"_Fade_Out_\",\r\n \"_Reflected_\",\r\n \"_Frequency_\",\r\n \"_Vertical_Offset_\",\r\n \"_Iridescent_Map_\",\r\n \"_Use_Global_Left_Index_\",\r\n \"_Use_Global_Right_Index_\",\r\n \"Global_Left_Index_Tip_Position\",\r\n \"Global_Right_Index_Tip_Position\",\r\n ];\r\n const samplers: string[] = [\"_Blob_Texture_\", \"_Iridescent_Map_\"];\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 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\r\n return true;\r\n }\r\n\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const defines = <FluentBackplateMaterialDefines>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\", this.getScene().getTransformMatrix());\r\n this._activeEffect.setVector3(\"cameraPosition\", this.getScene().activeCamera?.position ?? Vector3.ZeroReadOnly);\r\n\r\n // \"Round Rect\"\r\n this._activeEffect.setFloat(\"_Radius_\", this.radius);\r\n this._activeEffect.setFloat(\"_Line_Width_\", this.lineWidth);\r\n this._activeEffect.setFloat(\"_Absolute_Sizes_\", this.absoluteSizes ? 1.0 : 0.0);\r\n this._activeEffect.setFloat(\"_Filter_Width_\", this._filterWidth);\r\n this._activeEffect.setDirectColor4(\"_Base_Color_\", this.baseColor);\r\n this._activeEffect.setDirectColor4(\"_Line_Color_\", this.lineColor);\r\n\r\n // \"Radii Multipliers\"\r\n this._activeEffect.setFloat(\"_Radius_Top_Left_\", 1);\r\n this._activeEffect.setFloat(\"_Radius_Top_Right_\", 1.0);\r\n this._activeEffect.setFloat(\"_Radius_Bottom_Left_\", 1.0);\r\n this._activeEffect.setFloat(\"_Radius_Bottom_Right_\", 1.0);\r\n\r\n // \"Blob\"\r\n //define BLOB_ENABLE true;\r\n this._activeEffect.setFloat(\"_Blob_Intensity_\", this.blobIntensity);\r\n this._activeEffect.setFloat(\"_Blob_Near_Size_\", this.blobNearSize);\r\n this._activeEffect.setFloat(\"_Blob_Far_Size_\", this.blobFarSize);\r\n this._activeEffect.setFloat(\"_Blob_Near_Distance_\", this.blobNearDistance);\r\n this._activeEffect.setFloat(\"_Blob_Far_Distance_\", this.blobFarDistance);\r\n this._activeEffect.setFloat(\"_Blob_Fade_Length_\", this.blobFadeLength);\r\n this._activeEffect.setFloat(\"_Blob_Pulse_\", this.blobPulse);\r\n this._activeEffect.setFloat(\"_Blob_Fade_\", this.blobFade);\r\n\r\n // \"Blob Texture\"\r\n this._activeEffect.setTexture(\"_Blob_Texture_\", this._blobTexture);\r\n\r\n // \"Blob 2\"\r\n //define BLOB_ENABLE_2 true;\r\n this._activeEffect.setFloat(\"_Blob_Near_Size_2_\", this.blobNearSize2);\r\n this._activeEffect.setFloat(\"_Blob_Pulse_2_\", this.blobPulse2);\r\n this._activeEffect.setFloat(\"_Blob_Fade_2_\", this.blobFade2);\r\n\r\n // \"Line Highlight\"\r\n this._activeEffect.setFloat(\"_Rate_\", this._rate);\r\n this._activeEffect.setDirectColor4(\"_Highlight_Color_\", this.highlightColor);\r\n this._activeEffect.setFloat(\"_Highlight_Width_\", this.highlightWidth);\r\n this._activeEffect.setVector4(\"_Highlight_Transform_\", this._highlightTransform);\r\n this._activeEffect.setFloat(\"_Highlight_\", this._highlight);\r\n\r\n // \"Iridescence\"\r\n this._activeEffect.setFloat(\"_Iridescence_Intensity_\", this.iridescenceIntensity);\r\n this._activeEffect.setFloat(\"_Iridescence_Edge_Intensity_\", this.iridescenceEdgeIntensity);\r\n this._activeEffect.setFloat(\"_Angle_\", this._angle);\r\n\r\n // \"Fade\"\r\n this._activeEffect.setFloat(\"_Fade_Out_\", this.fadeOut);\r\n\r\n // \"Antialiasing\"\r\n //define SMOOTH_EDGES true;\r\n\r\n // \"ChooseAngle\"\r\n this._activeEffect.setFloat(\"_Reflected_\", this._reflected ? 1.0 : 0.0);\r\n\r\n // \"Multiply\"\r\n this._activeEffect.setFloat(\"_Frequency_\", this._frequency);\r\n this._activeEffect.setFloat(\"_Vertical_Offset_\", this._verticalOffset);\r\n\r\n // \"Color Texture\"\r\n //define IRIDESCENT_MAP_ENABLE true;\r\n this._activeEffect.setTexture(\"_Iridescent_Map_\", this._iridescentMap);\r\n\r\n // \"Global\"\r\n this._activeEffect.setFloat(\"_Use_Global_Left_Index_\", 1.0);\r\n this._activeEffect.setFloat(\"_Use_Global_Right_Index_\", 1.0);\r\n\r\n this._globalLeftIndexTipPosition4.set(this.globalLeftIndexTipPosition.x, this.globalLeftIndexTipPosition.y, this.globalLeftIndexTipPosition.z, 1.0);\r\n this._activeEffect.setVector4(\"Global_Left_Index_Tip_Position\", this._globalLeftIndexTipPosition4);\r\n\r\n this._globalRightIndexTipPosition4.set(this.globalRightIndexTipPosition.x, this.globalRightIndexTipPosition.y, this.globalRightIndexTipPosition.z, 1.0);\r\n this._activeEffect.setVector4(\"Global_Right_Index_Tip_Position\", this._globalRightIndexTipPosition4);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n /**\r\n * Get the list of animatables in the material.\r\n * @returns the list of animatables object used in the material\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 this._blobTexture.dispose();\r\n this._iridescentMap.dispose();\r\n }\r\n\r\n public override clone(name: string): FluentBackplateMaterial {\r\n return SerializationHelper.Clone(() => new FluentBackplateMaterial(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.FluentBackplateMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FluentBackplateMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): FluentBackplateMaterial {\r\n return SerializationHelper.Parse(() => new FluentBackplateMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.FluentBackplateMaterial\", FluentBackplateMaterial);\r\n"]}
|
|
1
|
+
{"version":3,"file":"fluentBackplateMaterial.js","sourceRoot":"","sources":["../../../../../../dev/gui/src/3D/materials/fluentBackplate/fluentBackplateMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { serialize, serializeAsVector3 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\r\nimport { type Matrix, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport { type IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { type BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { Texture } from \"core/Materials/Textures/texture\";\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 { type Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { Color4 } from \"core/Maths/math.color\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nimport \"./shaders/fluentBackplate.fragment\";\r\nimport \"./shaders/fluentBackplate.vertex\";\r\nimport { HandleFallbacksForShadows, PrepareAttributesForInstances, PrepareDefinesForAttributes, PrepareUniformsAndSamplersList } from \"core/Materials/materialHelper.functions\";\r\nimport { Tools } from \"core/Misc/tools\";\r\n\r\n/** @internal */\r\nclass FluentBackplateMaterialDefines extends MaterialDefines {\r\n public BLOB_ENABLE = true;\r\n public BLOB_ENABLE_2 = true;\r\n public SMOOTH_EDGES = true;\r\n public IRIDESCENT_MAP_ENABLE = true;\r\n\r\n constructor() {\r\n super();\r\n this._needNormals = true;\r\n this.rebuild();\r\n }\r\n}\r\n\r\n/**\r\n * Class used to render square buttons with fluent design\r\n */\r\nexport class FluentBackplateMaterial extends PushMaterial {\r\n private _shadersLoaded = false;\r\n\r\n /**\r\n * URL pointing to the texture used to define the coloring for the fluent blob effect.\r\n */\r\n public static BLOB_TEXTURE_URL = \"https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-blob.png\";\r\n\r\n /**\r\n * URL pointing to the texture used to define iridescent map.\r\n */\r\n public static IM_TEXTURE_URL = \"https://assets.babylonjs.com/core/MRTK/mrtk-fluent-backplate-iridescence.png\";\r\n\r\n private _blobTexture: Texture;\r\n private _iridescentMap: Texture;\r\n\r\n /**\r\n * Gets or sets the corner radius on the backplate. Best to keep this value between 0.01 and 0.5. Default is 0.03.\r\n */\r\n @serialize()\r\n public radius = 0.03;\r\n\r\n /**\r\n * Gets or sets the line width of the backplate.\r\n */\r\n @serialize()\r\n public lineWidth = 0.01;\r\n\r\n /**\r\n * Gets or sets whether to use absolute sizes when calculating effects on the backplate.\r\n * Since desktop and VR/AR have different relative sizes, it's usually best to keep this false.\r\n */\r\n @serialize()\r\n public absoluteSizes = false;\r\n\r\n /** @internal */\r\n public _filterWidth = 1;\r\n\r\n /**\r\n * Gets or sets the base color of the backplate.\r\n */\r\n @serialize()\r\n public baseColor = new Color4(0.0392157, 0.0666667, 0.207843, 1);\r\n\r\n /**\r\n * Gets or sets the line color of the backplate.\r\n */\r\n @serialize()\r\n public lineColor = new Color4(0.14902, 0.133333, 0.384314, 1);\r\n\r\n /**\r\n * Gets or sets the intensity of the fluent hover glow effect.\r\n */\r\n @serialize()\r\n public blobIntensity = 0.98;\r\n\r\n /**\r\n * Gets or sets the far size of the fluent hover glow effect.\r\n */\r\n @serialize()\r\n public blobFarSize = 0.04;\r\n\r\n /**\r\n * Gets or sets the distance considered \"near\" to the backplate, which controls the size of the fluent hover glow effect (see blobNearSize).\r\n */\r\n @serialize()\r\n public blobNearDistance = 0;\r\n\r\n /**\r\n * Gets or sets the distance considered \"far\" from the backplate, which controls the size of the fluent hover glow effect (see blobFarSize).\r\n */\r\n @serialize()\r\n public blobFarDistance = 0.08;\r\n\r\n /**\r\n * Gets or sets the length of the fluent hover glow effect fade.\r\n */\r\n @serialize()\r\n public blobFadeLength = 0.08;\r\n\r\n /**\r\n * Gets or sets the size of the fluent hover glow effect when the left pointer is considered \"near\" to the backplate (see blobNearDistance).\r\n */\r\n @serialize()\r\n public blobNearSize = 0.22;\r\n\r\n /**\r\n * Gets or sets the progress of the fluent hover glow effect selection animation corresponding to the left pointer (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public blobPulse = 0;\r\n\r\n /**\r\n * Gets or sets the opacity of the fluent hover glow effect corresponding to the left pointer (0.0 - 1.0). Default is 0.\r\n */\r\n @serialize()\r\n public blobFade = 0;\r\n\r\n /**\r\n * Gets or sets the size of the fluent hover glow effect when the right pointer is considered \"near\" to the backplate (see blobNearDistance).\r\n */\r\n @serialize()\r\n public blobNearSize2 = 0.22;\r\n\r\n /**\r\n * Gets or sets the progress of the fluent hover glow effect selection animation corresponding to the right pointer (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public blobPulse2 = 0;\r\n\r\n /**\r\n * Gets or sets the opacity of the fluent hover glow effect corresponding to the right pointer (0.0 - 1.0). Default is 0.\r\n */\r\n @serialize()\r\n public blobFade2 = 0;\r\n\r\n /** @internal */\r\n public _rate = 0.135;\r\n\r\n /**\r\n * Gets or sets the color of the highlights on the backplate line.\r\n */\r\n @serialize()\r\n public highlightColor = new Color4(0.98, 0.98, 0.98, 1);\r\n\r\n /**\r\n * Gets or sets the width of the highlights on the backplate line.\r\n */\r\n @serialize()\r\n public highlightWidth = 0.25;\r\n\r\n /** @internal */\r\n public _highlightTransform = new Vector4(1, 1, 0, 0);\r\n\r\n /** @internal */\r\n public _highlight = 1;\r\n\r\n /**\r\n * Gets or sets the intensity of the iridescence effect.\r\n */\r\n @serialize()\r\n public iridescenceIntensity = 0;\r\n\r\n /**\r\n * Gets or sets the intensity of the iridescence effect on the backplate edges.\r\n */\r\n @serialize()\r\n public iridescenceEdgeIntensity = 1;\r\n\r\n /** @internal */\r\n public _angle = -45;\r\n\r\n /**\r\n * Gets or sets the opacity of the backplate (0.0 - 1.0).\r\n */\r\n @serialize()\r\n public fadeOut = 1;\r\n\r\n /** @internal */\r\n public _reflected = true;\r\n\r\n /** @internal */\r\n public _frequency = 1;\r\n\r\n /** @internal */\r\n public _verticalOffset = 0;\r\n\r\n /**\r\n * Gets or sets the world-space position of the tip of the left index finger.\r\n */\r\n @serializeAsVector3()\r\n public globalLeftIndexTipPosition = Vector3.Zero();\r\n private _globalLeftIndexTipPosition4 = Vector4.Zero();\r\n\r\n /**\r\n * Gets or sets the world-space position of the tip of the right index finger.\r\n */\r\n @serializeAsVector3()\r\n public globalRightIndexTipPosition = Vector3.Zero();\r\n private _globalRightIndexTipPosition4 = Vector4.Zero();\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n this.alphaMode = Constants.ALPHA_DISABLE;\r\n this.backFaceCulling = false;\r\n const blobTextureUrl = Tools.GetAssetUrl(FluentBackplateMaterial.BLOB_TEXTURE_URL);\r\n const iridescentMapUrl = Tools.GetAssetUrl(FluentBackplateMaterial.IM_TEXTURE_URL);\r\n this._blobTexture = new Texture(blobTextureUrl, this.getScene(), true, false, Texture.NEAREST_SAMPLINGMODE);\r\n this._iridescentMap = new Texture(iridescentMapUrl, this.getScene(), true, false, Texture.NEAREST_SAMPLINGMODE);\r\n }\r\n\r\n public override needAlphaBlending(): boolean {\r\n return false;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!this._blobTexture.isReady() || !this._iridescentMap.isReady()) {\r\n return false;\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new FluentBackplateMaterialDefines();\r\n }\r\n\r\n const defines = <FluentBackplateMaterialDefines>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 // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, false, false);\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 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 if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"fluentBackplate\";\r\n const join = defines.toString();\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"viewProjection\",\r\n \"cameraPosition\",\r\n \"_Radius_\",\r\n \"_Line_Width_\",\r\n \"_Absolute_Sizes_\",\r\n \"_Filter_Width_\",\r\n \"_Base_Color_\",\r\n \"_Line_Color_\",\r\n \"_Radius_Top_Left_\",\r\n \"_Radius_Top_Right_\",\r\n \"_Radius_Bottom_Left_\",\r\n \"_Radius_Bottom_Right_\",\r\n \"_Blob_Position_\",\r\n \"_Blob_Intensity_\",\r\n \"_Blob_Near_Size_\",\r\n \"_Blob_Far_Size_\",\r\n \"_Blob_Near_Distance_\",\r\n \"_Blob_Far_Distance_\",\r\n \"_Blob_Fade_Length_\",\r\n \"_Blob_Pulse_\",\r\n \"_Blob_Fade_\",\r\n \"_Blob_Texture_\",\r\n \"_Blob_Position_2_\",\r\n \"_Blob_Near_Size_2_\",\r\n \"_Blob_Pulse_2_\",\r\n \"_Blob_Fade_2_\",\r\n \"_Rate_\",\r\n \"_Highlight_Color_\",\r\n \"_Highlight_Width_\",\r\n \"_Highlight_Transform_\",\r\n \"_Highlight_\",\r\n \"_Iridescence_Intensity_\",\r\n \"_Iridescence_Edge_Intensity_\",\r\n \"_Angle_\",\r\n \"_Fade_Out_\",\r\n \"_Reflected_\",\r\n \"_Frequency_\",\r\n \"_Vertical_Offset_\",\r\n \"_Iridescent_Map_\",\r\n \"_Use_Global_Left_Index_\",\r\n \"_Use_Global_Right_Index_\",\r\n \"Global_Left_Index_Tip_Position\",\r\n \"Global_Right_Index_Tip_Position\",\r\n ];\r\n const samplers: string[] = [\"_Blob_Texture_\", \"_Iridescent_Map_\"];\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 shaderLanguage: this._shaderLanguage,\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/fluentBackplate.vertex\"), import(\"./wgsl/fluentBackplate.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 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\r\n return true;\r\n }\r\n\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const defines = <FluentBackplateMaterialDefines>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\", this.getScene().getTransformMatrix());\r\n this._activeEffect.setVector3(\"cameraPosition\", this.getScene().activeCamera?.position ?? Vector3.ZeroReadOnly);\r\n\r\n // \"Round Rect\"\r\n this._activeEffect.setFloat(\"_Radius_\", this.radius);\r\n this._activeEffect.setFloat(\"_Line_Width_\", this.lineWidth);\r\n this._activeEffect.setFloat(\"_Absolute_Sizes_\", this.absoluteSizes ? 1.0 : 0.0);\r\n this._activeEffect.setFloat(\"_Filter_Width_\", this._filterWidth);\r\n this._activeEffect.setDirectColor4(\"_Base_Color_\", this.baseColor);\r\n this._activeEffect.setDirectColor4(\"_Line_Color_\", this.lineColor);\r\n\r\n // \"Radii Multipliers\"\r\n this._activeEffect.setFloat(\"_Radius_Top_Left_\", 1);\r\n this._activeEffect.setFloat(\"_Radius_Top_Right_\", 1.0);\r\n this._activeEffect.setFloat(\"_Radius_Bottom_Left_\", 1.0);\r\n this._activeEffect.setFloat(\"_Radius_Bottom_Right_\", 1.0);\r\n\r\n // \"Blob\"\r\n //define BLOB_ENABLE true;\r\n this._activeEffect.setFloat(\"_Blob_Intensity_\", this.blobIntensity);\r\n this._activeEffect.setFloat(\"_Blob_Near_Size_\", this.blobNearSize);\r\n this._activeEffect.setFloat(\"_Blob_Far_Size_\", this.blobFarSize);\r\n this._activeEffect.setFloat(\"_Blob_Near_Distance_\", this.blobNearDistance);\r\n this._activeEffect.setFloat(\"_Blob_Far_Distance_\", this.blobFarDistance);\r\n this._activeEffect.setFloat(\"_Blob_Fade_Length_\", this.blobFadeLength);\r\n this._activeEffect.setFloat(\"_Blob_Pulse_\", this.blobPulse);\r\n this._activeEffect.setFloat(\"_Blob_Fade_\", this.blobFade);\r\n\r\n // \"Blob Texture\"\r\n this._activeEffect.setTexture(\"_Blob_Texture_\", this._blobTexture);\r\n\r\n // \"Blob 2\"\r\n //define BLOB_ENABLE_2 true;\r\n this._activeEffect.setFloat(\"_Blob_Near_Size_2_\", this.blobNearSize2);\r\n this._activeEffect.setFloat(\"_Blob_Pulse_2_\", this.blobPulse2);\r\n this._activeEffect.setFloat(\"_Blob_Fade_2_\", this.blobFade2);\r\n\r\n // \"Line Highlight\"\r\n this._activeEffect.setFloat(\"_Rate_\", this._rate);\r\n this._activeEffect.setDirectColor4(\"_Highlight_Color_\", this.highlightColor);\r\n this._activeEffect.setFloat(\"_Highlight_Width_\", this.highlightWidth);\r\n this._activeEffect.setVector4(\"_Highlight_Transform_\", this._highlightTransform);\r\n this._activeEffect.setFloat(\"_Highlight_\", this._highlight);\r\n\r\n // \"Iridescence\"\r\n this._activeEffect.setFloat(\"_Iridescence_Intensity_\", this.iridescenceIntensity);\r\n this._activeEffect.setFloat(\"_Iridescence_Edge_Intensity_\", this.iridescenceEdgeIntensity);\r\n this._activeEffect.setFloat(\"_Angle_\", this._angle);\r\n\r\n // \"Fade\"\r\n this._activeEffect.setFloat(\"_Fade_Out_\", this.fadeOut);\r\n\r\n // \"Antialiasing\"\r\n //define SMOOTH_EDGES true;\r\n\r\n // \"ChooseAngle\"\r\n this._activeEffect.setFloat(\"_Reflected_\", this._reflected ? 1.0 : 0.0);\r\n\r\n // \"Multiply\"\r\n this._activeEffect.setFloat(\"_Frequency_\", this._frequency);\r\n this._activeEffect.setFloat(\"_Vertical_Offset_\", this._verticalOffset);\r\n\r\n // \"Color Texture\"\r\n //define IRIDESCENT_MAP_ENABLE true;\r\n this._activeEffect.setTexture(\"_Iridescent_Map_\", this._iridescentMap);\r\n\r\n // \"Global\"\r\n this._activeEffect.setFloat(\"_Use_Global_Left_Index_\", 1.0);\r\n this._activeEffect.setFloat(\"_Use_Global_Right_Index_\", 1.0);\r\n\r\n this._globalLeftIndexTipPosition4.set(this.globalLeftIndexTipPosition.x, this.globalLeftIndexTipPosition.y, this.globalLeftIndexTipPosition.z, 1.0);\r\n this._activeEffect.setVector4(\"Global_Left_Index_Tip_Position\", this._globalLeftIndexTipPosition4);\r\n\r\n this._globalRightIndexTipPosition4.set(this.globalRightIndexTipPosition.x, this.globalRightIndexTipPosition.y, this.globalRightIndexTipPosition.z, 1.0);\r\n this._activeEffect.setVector4(\"Global_Right_Index_Tip_Position\", this._globalRightIndexTipPosition4);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n /**\r\n * Get the list of animatables in the material.\r\n * @returns the list of animatables object used in the material\r\n */\r\n public override getAnimatables(): IAnimatable[] {\r\n return [];\r\n }\r\n\r\n /**\r\n * Disposes the material.\r\n * @param forceDisposeEffect specifies if effects should be forcefully disposed\r\n */\r\n public override dispose(forceDisposeEffect?: boolean): void {\r\n super.dispose(forceDisposeEffect);\r\n\r\n this._blobTexture.dispose();\r\n this._iridescentMap.dispose();\r\n }\r\n\r\n public override clone(name: string): FluentBackplateMaterial {\r\n return SerializationHelper.Clone(() => new FluentBackplateMaterial(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.FluentBackplateMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FluentBackplateMaterial\";\r\n }\r\n\r\n // Statics\r\n /**\r\n * Creates a fluent backplate material from parsed material data.\r\n * @param source defines the JSON representation of the material\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 fluent backplate material\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): FluentBackplateMaterial {\r\n return SerializationHelper.Parse(() => new FluentBackplateMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GUI.FluentBackplateMaterial\", FluentBackplateMaterial);\r\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Do not edit.
|
|
2
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
|
3
|
+
const name = "fluentBackplatePixelShader";
|
|
4
|
+
const shader = `uniform cameraPosition: vec3f;varying vPosition: vec3f;varying vNormal: vec3f;varying vUV: vec2f;varying vTangent: vec3f;varying vBinormal: vec3f;varying vColor: vec4f;varying vExtra1: vec4f;varying vExtra2: vec4f;varying vExtra3: vec4f;uniform _Filter_Width_: f32;uniform _Base_Color_: vec4f;uniform _Line_Color_: vec4f;uniform _Rate_: f32;uniform _Highlight_Color_: vec4f;uniform _Highlight_Width_: f32;uniform _Highlight_: f32;uniform _Iridescence_Intensity_: f32;uniform _Iridescence_Edge_Intensity_: f32;uniform _Fade_Out_: f32;uniform _Reflected_: f32;uniform _Frequency_: f32;uniform _Vertical_Offset_: f32;var _Blob_Texture_Sampler: sampler;var _Blob_Texture_: texture_2d<f32>;var _Iridescent_Map_Sampler: sampler;var _Iridescent_Map_: texture_2d<f32>;fn roundRectFragment(radius: f32,lineWidth: f32,lineColor: vec4f,filterWidth: f32,uv: vec2f,rectParms: vec4f,fillColor: vec4f)->vec4f {let d: f32=length(max(abs(uv)-rectParms.xy,vec2f(0.0)));let dx: f32=max(fwidth(d)*filterWidth,0.00001);let g: f32=min(rectParms.z,rectParms.w);let dgrad: f32=max(fwidth(g)*filterWidth,0.00001);let insideRect: f32=clamp(g/dgrad,0.0,1.0);let inner: f32=clamp((d+dx*0.5-max(radius-lineWidth,d-dx*0.5))/dx,0.0,1.0);return clamp(mix(fillColor,lineColor,inner),vec4f(0.0),vec4f(1.0))*insideRect;}
|
|
5
|
+
fn blobFragment(blobInfo1: vec4f,blobInfo2: vec4f)->vec4f {let k1: f32=dot(blobInfo1.xy,blobInfo1.xy);let k2: f32=dot(blobInfo2.xy,blobInfo2.xy);var closer: vec3f;if (k1<k2) {closer=vec3f(k1,blobInfo1.z,blobInfo1.w);} else {closer=vec3f(k2,blobInfo2.z,blobInfo2.w);}
|
|
6
|
+
let blobUV: vec2f=vec2f(sqrt(closer.x),1.0-closer.y);return closer.z*textureSample(_Blob_Texture_,_Blob_Texture_Sampler,blobUV)*clamp(1.0-closer.x,0.0,1.0);}
|
|
7
|
+
fn lineFragment(baseColor: vec4f,highlightColor: vec4f,highlightWidth: f32,lineVertex: vec3f,highlight: f32)->vec4f {let k2: f32=1.0-clamp(abs(lineVertex.y/highlightWidth),0.0,1.0);return mix(baseColor,highlightColor,highlight*k2);}
|
|
8
|
+
fn scaleRGB(color: vec4f,scalar: f32)->vec4f {return vec4f(scalar,scalar,scalar,1.0)*color;}
|
|
9
|
+
@fragment
|
|
10
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
11
|
+
#ifdef BLOB_ENABLE
|
|
12
|
+
let blobColor: vec4f=blobFragment(input.vExtra2,input.vExtra3);
|
|
13
|
+
#else
|
|
14
|
+
let blobColor: vec4f=vec4f(0.0);
|
|
15
|
+
#endif
|
|
16
|
+
let lineColor: vec4f=lineFragment(uniforms._Line_Color_,uniforms._Highlight_Color_,uniforms._Highlight_Width_,input.vTangent,uniforms._Highlight_);let incident: vec3f=normalize(input.vPosition-uniforms.cameraPosition);let reflected: vec3f=reflect(incident,input.vBinormal);var reflectedResult: f32=dot(input.vNormal,incident);if (uniforms._Reflected_>0.5) {reflectedResult=dot(incident,reflected);}
|
|
17
|
+
let iridescentU: f32=fract((reflectedResult*uniforms._Frequency_+1.0)*0.5+input.vUV.y*uniforms._Vertical_Offset_);let iridescentUV: vec2f=vec2f(iridescentU,0.5);
|
|
18
|
+
#ifdef IRIDESCENT_MAP_ENABLE
|
|
19
|
+
let iridescentColor: vec4f=textureSample(_Iridescent_Map_,_Iridescent_Map_Sampler,iridescentUV);
|
|
20
|
+
#else
|
|
21
|
+
let iridescentColor: vec4f=vec4f(0.0);
|
|
22
|
+
#endif
|
|
23
|
+
let lineAndIridescent: vec4f=lineColor+vec4f(scaleRGB(iridescentColor,uniforms._Iridescence_Edge_Intensity_).rgb,0.0);let fillAndIridescent: vec4f=uniforms._Base_Color_+vec4f(scaleRGB(iridescentColor,uniforms._Iridescence_Intensity_).rgb,0.0);var lineOpaque: vec4f=lineAndIridescent;lineOpaque.a=1.0;let fillWithBlob: vec4f=blobColor+(1.0-blobColor.a)*fillAndIridescent;let color: vec4f=uniforms._Fade_Out_*roundRectFragment(input.vColor.r,input.vColor.g,lineOpaque,uniforms._Filter_Width_,input.vUV,input.vExtra1,fillWithBlob);if (color.a<0.001) {discard;}
|
|
24
|
+
fragmentOutputs.color=color;}
|
|
25
|
+
`;
|
|
26
|
+
// Sideeffect
|
|
27
|
+
if (!ShaderStore.ShadersStoreWGSL[name]) {
|
|
28
|
+
ShaderStore.ShadersStoreWGSL[name] = shader;
|
|
29
|
+
}
|
|
30
|
+
/** @internal */
|
|
31
|
+
export const fluentBackplatePixelShaderWGSL = { name, shader };
|
|
32
|
+
//# sourceMappingURL=fluentBackplate.fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluentBackplate.fragment.js","sourceRoot":"","sources":["../../../../../../../dev/gui/src/3D/materials/fluentBackplate/wgsl/fluentBackplate.fragment.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBd,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;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,8BAA8B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"core/Engines/shaderStore\";\n\nconst name = \"fluentBackplatePixelShader\";\nconst shader = `uniform cameraPosition: vec3f;varying vPosition: vec3f;varying vNormal: vec3f;varying vUV: vec2f;varying vTangent: vec3f;varying vBinormal: vec3f;varying vColor: vec4f;varying vExtra1: vec4f;varying vExtra2: vec4f;varying vExtra3: vec4f;uniform _Filter_Width_: f32;uniform _Base_Color_: vec4f;uniform _Line_Color_: vec4f;uniform _Rate_: f32;uniform _Highlight_Color_: vec4f;uniform _Highlight_Width_: f32;uniform _Highlight_: f32;uniform _Iridescence_Intensity_: f32;uniform _Iridescence_Edge_Intensity_: f32;uniform _Fade_Out_: f32;uniform _Reflected_: f32;uniform _Frequency_: f32;uniform _Vertical_Offset_: f32;var _Blob_Texture_Sampler: sampler;var _Blob_Texture_: texture_2d<f32>;var _Iridescent_Map_Sampler: sampler;var _Iridescent_Map_: texture_2d<f32>;fn roundRectFragment(radius: f32,lineWidth: f32,lineColor: vec4f,filterWidth: f32,uv: vec2f,rectParms: vec4f,fillColor: vec4f)->vec4f {let d: f32=length(max(abs(uv)-rectParms.xy,vec2f(0.0)));let dx: f32=max(fwidth(d)*filterWidth,0.00001);let g: f32=min(rectParms.z,rectParms.w);let dgrad: f32=max(fwidth(g)*filterWidth,0.00001);let insideRect: f32=clamp(g/dgrad,0.0,1.0);let inner: f32=clamp((d+dx*0.5-max(radius-lineWidth,d-dx*0.5))/dx,0.0,1.0);return clamp(mix(fillColor,lineColor,inner),vec4f(0.0),vec4f(1.0))*insideRect;}\nfn blobFragment(blobInfo1: vec4f,blobInfo2: vec4f)->vec4f {let k1: f32=dot(blobInfo1.xy,blobInfo1.xy);let k2: f32=dot(blobInfo2.xy,blobInfo2.xy);var closer: vec3f;if (k1<k2) {closer=vec3f(k1,blobInfo1.z,blobInfo1.w);} else {closer=vec3f(k2,blobInfo2.z,blobInfo2.w);}\nlet blobUV: vec2f=vec2f(sqrt(closer.x),1.0-closer.y);return closer.z*textureSample(_Blob_Texture_,_Blob_Texture_Sampler,blobUV)*clamp(1.0-closer.x,0.0,1.0);}\nfn lineFragment(baseColor: vec4f,highlightColor: vec4f,highlightWidth: f32,lineVertex: vec3f,highlight: f32)->vec4f {let k2: f32=1.0-clamp(abs(lineVertex.y/highlightWidth),0.0,1.0);return mix(baseColor,highlightColor,highlight*k2);}\nfn scaleRGB(color: vec4f,scalar: f32)->vec4f {return vec4f(scalar,scalar,scalar,1.0)*color;}\n@fragment\nfn main(input: FragmentInputs)->FragmentOutputs {\n#ifdef BLOB_ENABLE\nlet blobColor: vec4f=blobFragment(input.vExtra2,input.vExtra3);\n#else\nlet blobColor: vec4f=vec4f(0.0);\n#endif\nlet lineColor: vec4f=lineFragment(uniforms._Line_Color_,uniforms._Highlight_Color_,uniforms._Highlight_Width_,input.vTangent,uniforms._Highlight_);let incident: vec3f=normalize(input.vPosition-uniforms.cameraPosition);let reflected: vec3f=reflect(incident,input.vBinormal);var reflectedResult: f32=dot(input.vNormal,incident);if (uniforms._Reflected_>0.5) {reflectedResult=dot(incident,reflected);}\nlet iridescentU: f32=fract((reflectedResult*uniforms._Frequency_+1.0)*0.5+input.vUV.y*uniforms._Vertical_Offset_);let iridescentUV: vec2f=vec2f(iridescentU,0.5);\n#ifdef IRIDESCENT_MAP_ENABLE\nlet iridescentColor: vec4f=textureSample(_Iridescent_Map_,_Iridescent_Map_Sampler,iridescentUV);\n#else\nlet iridescentColor: vec4f=vec4f(0.0);\n#endif\nlet lineAndIridescent: vec4f=lineColor+vec4f(scaleRGB(iridescentColor,uniforms._Iridescence_Edge_Intensity_).rgb,0.0);let fillAndIridescent: vec4f=uniforms._Base_Color_+vec4f(scaleRGB(iridescentColor,uniforms._Iridescence_Intensity_).rgb,0.0);var lineOpaque: vec4f=lineAndIridescent;lineOpaque.a=1.0;let fillWithBlob: vec4f=blobColor+(1.0-blobColor.a)*fillAndIridescent;let color: vec4f=uniforms._Fade_Out_*roundRectFragment(input.vColor.r,input.vColor.g,lineOpaque,uniforms._Filter_Width_,input.vUV,input.vExtra1,fillWithBlob);if (color.a<0.001) {discard;}\nfragmentOutputs.color=color;}\n`;\n// Sideeffect\nif (!ShaderStore.ShadersStoreWGSL[name]) {\n ShaderStore.ShadersStoreWGSL[name] = shader;\n}\n\n/** @internal */\nexport const fluentBackplatePixelShaderWGSL = { name, shader };\n"]}
|