|
@@ -0,0 +1,489 @@
|
|
|
|
+/// <reference path="../../../dist/preview release/babylon.d.ts"/>
|
|
|
|
+
|
|
|
|
+module BABYLON {
|
|
|
|
+
|
|
|
|
+ class MixMaterialDefines extends MaterialDefines {
|
|
|
|
+ public DIFFUSE = false;
|
|
|
|
+ public BUMP = false;
|
|
|
|
+ public CLIPPLANE = false;
|
|
|
|
+ public ALPHATEST = false;
|
|
|
|
+ public DEPTHPREPASS = false;
|
|
|
|
+ public POINTSIZE = false;
|
|
|
|
+ public FOG = false;
|
|
|
|
+ public SPECULARTERM = false;
|
|
|
|
+ public NORMAL = false;
|
|
|
|
+ public UV1 = false;
|
|
|
|
+ public UV2 = false;
|
|
|
|
+ public VERTEXCOLOR = false;
|
|
|
|
+ public VERTEXALPHA = false;
|
|
|
|
+ public NUM_BONE_INFLUENCERS = 0;
|
|
|
|
+ public BonesPerMesh = 0;
|
|
|
|
+ public INSTANCES = false;
|
|
|
|
+ public MIXMAP2 = false;
|
|
|
|
+
|
|
|
|
+ constructor() {
|
|
|
|
+ super();
|
|
|
|
+ this.rebuild();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ export class MixMaterial extends PushMaterial {
|
|
|
|
+ /**
|
|
|
|
+ * Mix textures
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("mixTexture")
|
|
|
|
+ private _mixTexture: BaseTexture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public mixTexture: BaseTexture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("mixTexture")
|
|
|
|
+ private _mixTexture2: BaseTexture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public mixTexture2: BaseTexture;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Diffuse textures
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("diffuseTexture1")
|
|
|
|
+ private _diffuseTexture1: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public diffuseTexture1: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("diffuseTexture2")
|
|
|
|
+ private _diffuseTexture2: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public diffuseTexture2: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("diffuseTexture3")
|
|
|
|
+ private _diffuseTexture3: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public diffuseTexture3: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("diffuseTexture4")
|
|
|
|
+ private _diffuseTexture4: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public diffuseTexture4: Texture;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Bump textures
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("bumpTexture1")
|
|
|
|
+ private _bumpTexture1: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public bumpTexture1: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("bumpTexture2")
|
|
|
|
+ private _bumpTexture2: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public bumpTexture2: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("bumpTexture3")
|
|
|
|
+ private _bumpTexture3: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public bumpTexture3: Texture;
|
|
|
|
+
|
|
|
|
+ @serializeAsTexture("bumpTexture4")
|
|
|
|
+ private _bumpTexture4: Texture;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
|
+ public bumpTexture4: Texture;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Uniforms
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ @serializeAsColor3()
|
|
|
|
+ public diffuseColor = new Color3(1, 1, 1);
|
|
|
|
+
|
|
|
|
+ @serializeAsColor3()
|
|
|
|
+ public specularColor = new Color3(0, 0, 0);
|
|
|
|
+
|
|
|
|
+ @serialize()
|
|
|
|
+ public specularPower = 64;
|
|
|
|
+
|
|
|
|
+ @serialize("disableLighting")
|
|
|
|
+ private _disableLighting = false;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsLightsDirty")
|
|
|
|
+ public disableLighting: boolean;
|
|
|
|
+
|
|
|
|
+ @serialize("maxSimultaneousLights")
|
|
|
|
+ private _maxSimultaneousLights = 4;
|
|
|
|
+ @expandToProperty("_markAllSubMeshesAsLightsDirty")
|
|
|
|
+ public maxSimultaneousLights: number;
|
|
|
|
+
|
|
|
|
+ private _renderId: number;
|
|
|
|
+
|
|
|
|
+ constructor(name: string, scene: Scene) {
|
|
|
|
+ super(name, scene);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public needAlphaBlending(): boolean {
|
|
|
|
+ return (this.alpha < 1.0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public needAlphaTesting(): boolean {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public getAlphaTestTexture(): Nullable<BaseTexture> {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Methods
|
|
|
|
+ public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {
|
|
|
|
+ if (this.isFrozen) {
|
|
|
|
+ if (this._wasPreviouslyReady && subMesh.effect) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!subMesh._materialDefines) {
|
|
|
|
+ subMesh._materialDefines = new MixMaterialDefines();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var defines = <MixMaterialDefines>subMesh._materialDefines;
|
|
|
|
+ var scene = this.getScene();
|
|
|
|
+
|
|
|
|
+ if (!this.checkReadyOnEveryCall && subMesh.effect) {
|
|
|
|
+ if (this._renderId === scene.getRenderId()) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var engine = scene.getEngine();
|
|
|
|
+
|
|
|
|
+ // Textures
|
|
|
|
+ if (scene.texturesEnabled) {
|
|
|
|
+ if (StandardMaterial.DiffuseTextureEnabled) {
|
|
|
|
+ if (this.mixTexture) {
|
|
|
|
+ if (!this.mixTexture.isReady()) {
|
|
|
|
+ return false;
|
|
|
|
+ } else {
|
|
|
|
+ defines._needUVs = true;
|
|
|
|
+ defines.DIFFUSE = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (this.mixTexture2) {
|
|
|
|
+ if (!this.mixTexture2.isReady()) {
|
|
|
|
+ return false;
|
|
|
|
+ } else {
|
|
|
|
+ defines.MIXMAP2 = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ((this.bumpTexture1 || this.bumpTexture2 || this.bumpTexture3 || this.bumpTexture4) && StandardMaterial.BumpTextureEnabled) {
|
|
|
|
+ defines._needNormals = true;
|
|
|
|
+ defines.BUMP = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Misc.
|
|
|
|
+ MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);
|
|
|
|
+
|
|
|
|
+ // Lights
|
|
|
|
+ defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights, this._disableLighting);
|
|
|
|
+
|
|
|
|
+ // Values that need to be evaluated on every frame
|
|
|
|
+ MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);
|
|
|
|
+
|
|
|
|
+ // Attribs
|
|
|
|
+ MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);
|
|
|
|
+
|
|
|
|
+ // Get correct effect
|
|
|
|
+ if (defines.isDirty) {
|
|
|
|
+ defines.markAsProcessed();
|
|
|
|
+ scene.resetCachedMaterial();
|
|
|
|
+
|
|
|
|
+ // Fallbacks
|
|
|
|
+ var fallbacks = new EffectFallbacks();
|
|
|
|
+ if (defines.FOG) {
|
|
|
|
+ fallbacks.addFallback(1, "FOG");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);
|
|
|
|
+
|
|
|
|
+ if (defines.NUM_BONE_INFLUENCERS > 0) {
|
|
|
|
+ fallbacks.addCPUSkinningFallback(0, mesh);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //Attributes
|
|
|
|
+ var attribs = [VertexBuffer.PositionKind];
|
|
|
|
+
|
|
|
|
+ if (defines.NORMAL) {
|
|
|
|
+ attribs.push(VertexBuffer.NormalKind);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (defines.UV1) {
|
|
|
|
+ attribs.push(VertexBuffer.UVKind);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (defines.UV2) {
|
|
|
|
+ attribs.push(VertexBuffer.UV2Kind);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (defines.VERTEXCOLOR) {
|
|
|
|
+ attribs.push(VertexBuffer.ColorKind);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);
|
|
|
|
+ MaterialHelper.PrepareAttributesForInstances(attribs, defines);
|
|
|
|
+
|
|
|
|
+ // Legacy browser patch
|
|
|
|
+ var shaderName = "terrain";
|
|
|
|
+ var join = defines.toString();
|
|
|
|
+ var uniforms = ["world", "view", "viewProjection", "vEyePosition", "vLightsType", "vDiffuseColor", "vSpecularColor",
|
|
|
|
+ "vFogInfos", "vFogColor", "pointSize",
|
|
|
|
+ "vTextureInfos",
|
|
|
|
+ "mBones",
|
|
|
|
+ "vClipPlane", "textureMatrix",
|
|
|
|
+ "diffuse1Infos", "diffuse2Infos", "diffuse3Infos", "diffuse4Infos"
|
|
|
|
+ ];
|
|
|
|
+ var samplers = [
|
|
|
|
+ "mixMap1Sampler", "mixMap2Sampler",
|
|
|
|
+ "diffuse1Sampler", "diffuse2Sampler", "diffuse3Sampler", "diffuse4Sampler",
|
|
|
|
+ "bump1Sampler", "bump2Sampler", "bump3Sampler"
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ var uniformBuffers = new Array<string>()
|
|
|
|
+
|
|
|
|
+ MaterialHelper.PrepareUniformsAndSamplersList(<EffectCreationOptions>{
|
|
|
|
+ uniformsNames: uniforms,
|
|
|
|
+ uniformBuffersNames: uniformBuffers,
|
|
|
|
+ samplers: samplers,
|
|
|
|
+ defines: defines,
|
|
|
|
+ maxSimultaneousLights: this.maxSimultaneousLights
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ subMesh.setEffect(scene.getEngine().createEffect(shaderName,
|
|
|
|
+ <EffectCreationOptions>{
|
|
|
|
+ attributes: attribs,
|
|
|
|
+ uniformsNames: uniforms,
|
|
|
|
+ uniformBuffersNames: uniformBuffers,
|
|
|
|
+ samplers: samplers,
|
|
|
|
+ defines: join,
|
|
|
|
+ fallbacks: fallbacks,
|
|
|
|
+ onCompiled: this.onCompiled,
|
|
|
|
+ onError: this.onError,
|
|
|
|
+ indexParameters: { maxSimultaneousLights: this.maxSimultaneousLights }
|
|
|
|
+ }, engine), defines);
|
|
|
|
+ }
|
|
|
|
+ if (!subMesh.effect || !subMesh.effect.isReady()) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this._renderId = scene.getRenderId();
|
|
|
|
+ this._wasPreviouslyReady = true;
|
|
|
|
+
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {
|
|
|
|
+ var scene = this.getScene();
|
|
|
|
+
|
|
|
|
+ var defines = <MixMaterialDefines>subMesh._materialDefines;
|
|
|
|
+ if (!defines) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var effect = subMesh.effect;
|
|
|
|
+ if (!effect) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ this._activeEffect = effect;
|
|
|
|
+
|
|
|
|
+ // Matrices
|
|
|
|
+ this.bindOnlyWorldMatrix(world);
|
|
|
|
+ this._activeEffect.setMatrix("viewProjection", scene.getTransformMatrix());
|
|
|
|
+
|
|
|
|
+ // Bones
|
|
|
|
+ MaterialHelper.BindBonesParameters(mesh, this._activeEffect);
|
|
|
|
+
|
|
|
|
+ if (this._mustRebind(scene, effect)) {
|
|
|
|
+ // Textures
|
|
|
|
+ if (this.mixTexture) {
|
|
|
|
+ this._activeEffect.setTexture("mixMap1Sampler", this._mixTexture);
|
|
|
|
+ this._activeEffect.setFloat2("vTextureInfos", this._mixTexture.coordinatesIndex, this._mixTexture.level);
|
|
|
|
+ this._activeEffect.setMatrix("textureMatrix", this._mixTexture.getTextureMatrix());
|
|
|
|
+
|
|
|
|
+ if (StandardMaterial.DiffuseTextureEnabled) {
|
|
|
|
+ if (this._diffuseTexture1) {
|
|
|
|
+ this._activeEffect.setTexture("diffuse1Sampler", this._diffuseTexture1);
|
|
|
|
+ this._activeEffect.setFloat2("diffuse1Infos", this._diffuseTexture1.uScale, this._diffuseTexture1.vScale);
|
|
|
|
+ }
|
|
|
|
+ if (this._diffuseTexture2) {
|
|
|
|
+ this._activeEffect.setTexture("diffuse2Sampler", this._diffuseTexture2);
|
|
|
|
+ this._activeEffect.setFloat2("diffuse2Infos", this._diffuseTexture2.uScale, this._diffuseTexture2.vScale);
|
|
|
|
+ }
|
|
|
|
+ if (this._diffuseTexture3) {
|
|
|
|
+ this._activeEffect.setTexture("diffuse3Sampler", this._diffuseTexture3);
|
|
|
|
+ this._activeEffect.setFloat2("diffuse3Infos", this._diffuseTexture3.uScale, this._diffuseTexture3.vScale);
|
|
|
|
+ }
|
|
|
|
+ if (this._diffuseTexture4) {
|
|
|
|
+ this._activeEffect.setTexture("diffuse4Sampler", this._diffuseTexture4);
|
|
|
|
+ this._activeEffect.setFloat2("diffuse4Infos", this._diffuseTexture4.uScale, this._diffuseTexture4.vScale);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (StandardMaterial.BumpTextureEnabled && scene.getEngine().getCaps().standardDerivatives) {
|
|
|
|
+ if (this._bumpTexture1) {
|
|
|
|
+ this._activeEffect.setTexture("bump1Sampler", this._bumpTexture1);
|
|
|
|
+ }
|
|
|
|
+ if (this._bumpTexture2) {
|
|
|
|
+ this._activeEffect.setTexture("bump2Sampler", this._bumpTexture2);
|
|
|
|
+ }
|
|
|
|
+ if (this._bumpTexture3) {
|
|
|
|
+ this._activeEffect.setTexture("bump3Sampler", this._bumpTexture3);
|
|
|
|
+ }
|
|
|
|
+ if (this.bumpTexture4) {
|
|
|
|
+ this._activeEffect.setTexture("bump4Sampler", this._bumpTexture4);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this.mixTexture2) {
|
|
|
|
+ this._activeEffect.setTexture("mixMap2Sampler", this._mixTexture2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Clip plane
|
|
|
|
+ MaterialHelper.BindClipPlane(this._activeEffect, scene);
|
|
|
|
+
|
|
|
|
+ // Point size
|
|
|
|
+ if (this.pointsCloud) {
|
|
|
|
+ this._activeEffect.setFloat("pointSize", this.pointSize);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MaterialHelper.BindEyePosition(effect, scene);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this._activeEffect.setColor4("vDiffuseColor", this.diffuseColor, this.alpha * mesh.visibility);
|
|
|
|
+
|
|
|
|
+ if (defines.SPECULARTERM) {
|
|
|
|
+ this._activeEffect.setColor4("vSpecularColor", this.specularColor, this.specularPower);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (scene.lightsEnabled && !this.disableLighting) {
|
|
|
|
+ MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // View
|
|
|
|
+ if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {
|
|
|
|
+ this._activeEffect.setMatrix("view", scene.getViewMatrix());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Fog
|
|
|
|
+ MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);
|
|
|
|
+
|
|
|
|
+ this._afterBind(mesh, this._activeEffect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public getAnimatables(): IAnimatable[] {
|
|
|
|
+ var results = [];
|
|
|
|
+
|
|
|
|
+ if (this.mixTexture && this.mixTexture.animations && this.mixTexture.animations.length > 0) {
|
|
|
|
+ results.push(this.mixTexture);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return results;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public getActiveTextures(): BaseTexture[] {
|
|
|
|
+ var activeTextures = super.getActiveTextures();
|
|
|
|
+
|
|
|
|
+ if (this._mixTexture) {
|
|
|
|
+ activeTextures.push(this._mixTexture);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture1) {
|
|
|
|
+ activeTextures.push(this._diffuseTexture1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture2) {
|
|
|
|
+ activeTextures.push(this._diffuseTexture2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture3) {
|
|
|
|
+ activeTextures.push(this._diffuseTexture3);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture1) {
|
|
|
|
+ activeTextures.push(this._bumpTexture1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture2) {
|
|
|
|
+ activeTextures.push(this._bumpTexture2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture3) {
|
|
|
|
+ activeTextures.push(this._bumpTexture3);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return activeTextures;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public hasTexture(texture: BaseTexture): boolean {
|
|
|
|
+ if (super.hasTexture(texture)) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._mixTexture === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture1 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture2 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._diffuseTexture3 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture1 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture2 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (this._bumpTexture3 === texture) {
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public dispose(forceDisposeEffect?: boolean): void {
|
|
|
|
+ if (this.mixTexture) {
|
|
|
|
+ this.mixTexture.dispose();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ super.dispose(forceDisposeEffect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public clone(name: string): MixMaterial {
|
|
|
|
+ return SerializationHelper.Clone(() => new MixMaterial(name, this.getScene()), this);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public serialize(): any {
|
|
|
|
+ var serializationObject = SerializationHelper.Serialize(this);
|
|
|
|
+ serializationObject.customType = "BABYLON.MixMaterial";
|
|
|
|
+ return serializationObject;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public getClassName(): string {
|
|
|
|
+ return "MixMaterial";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Statics
|
|
|
|
+ public static Parse(source: any, scene: Scene, rootUrl: string): MixMaterial {
|
|
|
|
+ return SerializationHelper.Parse(() => new MixMaterial(source.name, scene), source, scene, rootUrl);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|