public static MToonMaterial Load(VrmMaterial mp, List <Texture> textures) { var mtoon = new MToonMaterial(mp.name); if (mp.floatProperties.TryGetValue(Utils.PropDebugMode, out float value)) { mtoon._DebugMode = value; } mtoon.Definition = MToon.Utils.FromVrm0x(mp, textures); return(mtoon); }
public void ExportMaterialMToon(Material src, MToonMaterial mtoon, List <Texture> textures) { if (!Storage.Gltf.extensionsUsed.Contains(UnlitMaterial.ExtensionName)) { Storage.Gltf.extensionsUsed.Add(UnlitMaterial.ExtensionName); } var material = mtoon.MToonToGltf(textures); Storage.Gltf.materials.Add(material); if (!Storage.Gltf.extensionsUsed.Contains(MToonMaterial.ExtensionName)) { Storage.Gltf.extensionsUsed.Add(MToonMaterial.ExtensionName); } }
public void ExportMaterialMToon(Material src, MToonMaterial mtoon, List <Texture> textures) { if (!Gltf.ExtensionsUsed.Contains(UnlitMaterial.ExtensionName)) { Gltf.ExtensionsUsed.Add(UnlitMaterial.ExtensionName); } var material = mtoon.MToonToGltf(src.Name, textures); Gltf.Materials.Add(material); if (!Gltf.ExtensionsUsed.Contains(MToonMaterial.ExtensionName)) { Gltf.ExtensionsUsed.Add(MToonMaterial.ExtensionName); } }
public static MToonMaterial MToonFromGltf(VrmProtobuf.Material material, List <Texture> textures) { var mtoon = new MToonMaterial(material.Name); var extension = material.Extensions.VRMCMaterialsMtoon; mtoon.Definition = new MToonDefinition { Meta = new MetaDefinition { Implementation = "Santarh/MToon", }, Color = new ColorDefinition { LitColor = material.PbrMetallicRoughness.BaseColorFactor.ToLinearColor(Nan), ShadeColor = extension.ShadeFactor.ToLinearColor(Nan), ShadeMultiplyTexture = extension.ShadeMultiplyTexture.GetTexture(textures), CutoutThresholdValue = material.AlphaCutoff.Value, }, Outline = new OutlineDefinition { OutlineColorMode = (OutlineColorMode)extension.OutlineColorMode, OutlineColor = extension.OutlineFactor.ToLinearColor(Nan), OutlineLightingMixValue = extension.OutlineLightingMixFactor.Value, OutlineScaledMaxDistanceValue = extension.OutlineScaledMaxDistanceFactor.Value, OutlineWidthMode = (OutlineWidthMode)extension.OutlineWidthMode, OutlineWidthValue = extension.OutlineWidthFactor.Value, OutlineWidthMultiplyTexture = extension.OutlineWidthMultiplyTexture.GetTexture(textures), }, Emission = new EmissionDefinition { EmissionColor = material.EmissiveFactor.ToLinearColor(Nan), }, Lighting = new LightingDefinition { LightingInfluence = new LightingInfluenceDefinition { GiIntensityValue = extension.GiIntensityFactor.Value, LightColorAttenuationValue = extension.LightColorAttenuationFactor.Value, }, LitAndShadeMixing = new LitAndShadeMixingDefinition { ShadingShiftValue = extension.ShadingShiftFactor.Value, ShadingToonyValue = extension.ShadingToonyFactor.Value, }, Normal = new NormalDefinition { }, }, MatCap = new MatCapDefinition { AdditiveTexture = extension.AdditiveTexture.GetTexture(textures) }, Rendering = new RenderingDefinition { CullMode = material.DoubleSided.Value ? CullMode.Off : CullMode.Back, RenderMode = GetRenderMode(material.AlphaMode, extension.TransparentWithZWrite.Value), RenderQueueOffsetNumber = extension.RenderQueueOffsetNumber.Value, }, Rim = new RimDefinition { RimColor = extension.RimFactor.ToLinearColor(Nan), RimMultiplyTexture = extension.RimMultiplyTexture.GetTexture(textures), RimLiftValue = extension.RimLiftFactor.Value, RimFresnelPowerValue = extension.RimFresnelPowerFactor.Value, RimLightingMixValue = extension.RimLightingMixFactor.Value, }, TextureOption = new TextureUvCoordsDefinition { UvAnimationMaskTexture = extension.UvAnimationMaskTexture.GetTexture(textures), UvAnimationRotationSpeedValue = extension.UvAnimationRotationSpeedFactor.Value, UvAnimationScrollXSpeedValue = extension.UvAnimationScrollXSpeedFactor.Value, UvAnimationScrollYSpeedValue = extension.UvAnimationScrollYSpeedFactor.Value, }, }; if (material.PbrMetallicRoughness.BaseColorTexture != null) { mtoon.Definition.Color.LitMultiplyTexture = material.PbrMetallicRoughness.BaseColorTexture.Index.GetTexture(textures); if (material.PbrMetallicRoughness.BaseColorTexture.Extensions != null && material.PbrMetallicRoughness.BaseColorTexture.Extensions.KHRTextureTransform != null) { mtoon.Definition.TextureOption.MainTextureLeftBottomOriginOffset = material.PbrMetallicRoughness.BaseColorTexture.Extensions.KHRTextureTransform.Offset.ToVector2(); mtoon.Definition.TextureOption.MainTextureLeftBottomOriginScale = material.PbrMetallicRoughness.BaseColorTexture.Extensions.KHRTextureTransform.Scale.ToVector2(); } } if (material.EmissiveTexture != null) { mtoon.Definition.Emission.EmissionMultiplyTexture = material.EmissiveTexture.Index.GetTexture(textures); } if (material.NormalTexture != null) { mtoon.Definition.Lighting.Normal.NormalScaleValue = material.NormalTexture.Scale.Value; mtoon.Definition.Lighting.Normal.NormalTexture = material.NormalTexture.Index.GetTexture(textures); } return(mtoon); }
public static VrmProtobuf.Material MToonToGltf(this MToonMaterial mtoon, List <Texture> textures) { var material = mtoon.UnlitToGltf(textures); var dst = new VrmProtobuf.VRMC_materials_mtoon(); material.Extensions.VRMCMaterialsMtoon = dst; // Color // unlit で済んでいる // material.PbrMetallicRoughness.BaseColorFactor.Assign(mtoon.Definition.Color.LitColor); if (mtoon.Definition.Color.LitMultiplyTexture != null) { // material.PbrMetallicRoughness.BaseColorTexture = new VrmProtobuf.TextureInfo // { // Index = mtoon.Definition.Color.LitMultiplyTexture.ToIndex(textures), // }; // standard, unlit, mtoon で共通処理にすべき? material.PbrMetallicRoughness.BaseColorTexture.Extensions = new VrmProtobuf.TextureInfo.Types.Extensions { KHRTextureTransform = new VrmProtobuf.TextureInfo.Types.KHR_texture_transformtextureInfoextension { }, }; material.PbrMetallicRoughness.BaseColorTexture.Extensions.KHRTextureTransform.Offset.Assign(mtoon.Definition.TextureOption.MainTextureLeftBottomOriginOffset); material.PbrMetallicRoughness.BaseColorTexture.Extensions.KHRTextureTransform.Scale.Assign(mtoon.Definition.TextureOption.MainTextureLeftBottomOriginScale); } dst.ShadeFactor.Assign(mtoon.Definition.Color.ShadeColor); dst.ShadeMultiplyTexture = mtoon.Definition.Color.ShadeMultiplyTexture.ToIndex(textures); material.AlphaCutoff = mtoon.Definition.Color.CutoutThresholdValue; // Outline dst.OutlineColorMode = (VrmProtobuf.VRMC_materials_mtoon.Types.OutlineColorMode)mtoon.Definition.Outline.OutlineColorMode; dst.OutlineFactor.Assign(mtoon.Definition.Outline.OutlineColor); dst.OutlineLightingMixFactor = mtoon.Definition.Outline.OutlineLightingMixValue; dst.OutlineScaledMaxDistanceFactor = mtoon.Definition.Outline.OutlineScaledMaxDistanceValue; dst.OutlineWidthMode = (VrmProtobuf.VRMC_materials_mtoon.Types.OutlineWidthMode)mtoon.Definition.Outline.OutlineWidthMode; dst.OutlineWidthFactor = mtoon.Definition.Outline.OutlineWidthValue; dst.OutlineWidthMultiplyTexture = mtoon.Definition.Outline.OutlineWidthMultiplyTexture.ToIndex(textures); // Emission material.EmissiveFactor.Assign(mtoon.Definition.Emission.EmissionColor); if (mtoon.Definition.Emission.EmissionMultiplyTexture != null) { material.EmissiveTexture = new VrmProtobuf.TextureInfo { Index = textures.IndexOfNullable(mtoon.Definition.Emission.EmissionMultiplyTexture.Texture) }; } // Light dst.GiIntensityFactor = mtoon.Definition.Lighting.LightingInfluence.GiIntensityValue; dst.LightColorAttenuationFactor = mtoon.Definition.Lighting.LightingInfluence.LightColorAttenuationValue; dst.ShadingShiftFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingShiftValue; dst.ShadingToonyFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingToonyValue; if (mtoon.Definition.Lighting.Normal.NormalTexture != null) { material.NormalTexture = new VrmProtobuf.MaterialNormalTextureInfo { Scale = mtoon.Definition.Lighting.Normal.NormalScaleValue, Index = textures.IndexOfNullable(mtoon.Definition.Lighting.Normal.NormalTexture.Texture) }; } // matcap dst.AdditiveTexture = mtoon.Definition.MatCap.AdditiveTexture.ToIndex(textures); // rendering switch (mtoon.Definition.Rendering.CullMode) { case CullMode.Back: material.DoubleSided = false; break; case CullMode.Off: material.DoubleSided = true; break; case CullMode.Front: // GLTF not support material.DoubleSided = false; break; default: throw new NotImplementedException(); } (material.AlphaMode, dst.TransparentWithZWrite) = GetRenderMode(mtoon.Definition.Rendering.RenderMode); dst.RenderQueueOffsetNumber = mtoon.Definition.Rendering.RenderQueueOffsetNumber; // rim dst.RimFactor.Assign(mtoon.Definition.Rim.RimColor); dst.RimMultiplyTexture = mtoon.Definition.Rim.RimMultiplyTexture.ToIndex(textures); dst.RimLiftFactor = mtoon.Definition.Rim.RimLiftValue; dst.RimFresnelPowerFactor = mtoon.Definition.Rim.RimFresnelPowerValue; dst.RimLightingMixFactor = mtoon.Definition.Rim.RimLightingMixValue; // texture option dst.UvAnimationMaskTexture = mtoon.Definition.TextureOption.UvAnimationMaskTexture.ToIndex(textures); dst.UvAnimationRotationSpeedFactor = mtoon.Definition.TextureOption.UvAnimationRotationSpeedValue; dst.UvAnimationScrollXSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollXSpeedValue; dst.UvAnimationScrollYSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollYSpeedValue; return(material); }
public static MToonMaterial MToonFromGltf(glTFMaterial material, List <Texture> textures, VRMC_materials_mtoon extension) { var mtoon = new MToonMaterial(material.name); var Meta = new MetaDefinition { Implementation = "Santarh/MToon", }; var Color = new ColorDefinition { LitColor = material.pbrMetallicRoughness.baseColorFactor.ToLinearColor(Nan), LitMultiplyTexture = material.pbrMetallicRoughness.baseColorTexture?.index.GetTexture(textures), ShadeColor = extension.ShadeFactor.ToLinearColor(Nan), ShadeMultiplyTexture = extension.ShadeMultiplyTexture.GetTexture(textures), CutoutThresholdValue = material.alphaCutoff, }; var Outline = new OutlineDefinition { OutlineColorMode = (VrmLib.MToon.OutlineColorMode)extension.OutlineColorMode, OutlineColor = extension.OutlineFactor.ToLinearColor(Nan), OutlineLightingMixValue = extension.OutlineLightingMixFactor.Value, OutlineScaledMaxDistanceValue = extension.OutlineScaledMaxDistanceFactor.Value, OutlineWidthMode = (VrmLib.MToon.OutlineWidthMode)extension.OutlineWidthMode, OutlineWidthValue = extension.OutlineWidthFactor.Value, OutlineWidthMultiplyTexture = extension.OutlineWidthMultiplyTexture.GetTexture(textures), }; var Emission = new EmissionDefinition { EmissionColor = material.emissiveFactor.ToLinearColor(Nan), }; if (material.emissiveTexture != null) { Emission.EmissionMultiplyTexture = material.emissiveTexture.index.GetTexture(textures); } var Lighting = new LightingDefinition { LightingInfluence = new LightingInfluenceDefinition { GiIntensityValue = extension.GiIntensityFactor.Value, LightColorAttenuationValue = extension.LightColorAttenuationFactor.Value, }, LitAndShadeMixing = new LitAndShadeMixingDefinition { ShadingShiftValue = extension.ShadingShiftFactor.Value, ShadingToonyValue = extension.ShadingToonyFactor.Value, }, Normal = new NormalDefinition { }, }; if (material.normalTexture != null) { Lighting.Normal.NormalScaleValue = material.normalTexture.scale; Lighting.Normal.NormalTexture = material.normalTexture.index.GetTexture(textures); } var MatCap = new MatCapDefinition { AdditiveTexture = extension.AdditiveTexture.GetTexture(textures) }; var Rendering = new RenderingDefinition { CullMode = material.doubleSided ? CullMode.Off : CullMode.Back, RenderMode = GetRenderMode(material.alphaMode, extension.TransparentWithZWrite.Value), RenderQueueOffsetNumber = extension.RenderQueueOffsetNumber.Value, }; var Rim = new RimDefinition { RimColor = extension.RimFactor.ToLinearColor(Nan), RimMultiplyTexture = extension.RimMultiplyTexture.GetTexture(textures), RimLiftValue = extension.RimLiftFactor.Value, RimFresnelPowerValue = extension.RimFresnelPowerFactor.Value, RimLightingMixValue = extension.RimLightingMixFactor.Value, }; var TextureOption = new TextureUvCoordsDefinition { UvAnimationMaskTexture = extension.UvAnimationMaskTexture.GetTexture(textures), UvAnimationRotationSpeedValue = extension.UvAnimationRotationSpeedFactor.Value, UvAnimationScrollXSpeedValue = extension.UvAnimationScrollXSpeedFactor.Value, UvAnimationScrollYSpeedValue = extension.UvAnimationScrollYSpeedFactor.Value, }; if (glTF_KHR_texture_transform.TryGet(material.pbrMetallicRoughness.baseColorTexture, out glTF_KHR_texture_transform t)) { TextureOption.MainTextureLeftBottomOriginOffset = t.offset.ToVector2(); TextureOption.MainTextureLeftBottomOriginScale = t.scale.ToVector2(); } mtoon.Definition = new MToonDefinition { Meta = Meta, Color = Color, Outline = Outline, Emission = Emission, Lighting = Lighting, MatCap = MatCap, Rendering = Rendering, Rim = Rim, TextureOption = TextureOption, }; return(mtoon); }
public static glTFMaterial MToonToGltf(this MToonMaterial mtoon, List <Texture> textures) { var material = mtoon.UnlitToGltf(textures); var dst = new VRMC_materials_mtoon(); // Color material.pbrMetallicRoughness.baseColorFactor = mtoon.Definition.Color.LitColor.ToFloat4(); if (mtoon.Definition.Color.LitMultiplyTexture != null) { material.pbrMetallicRoughness.baseColorTexture = new glTFMaterialBaseColorTextureInfo { index = mtoon.Definition.Color.LitMultiplyTexture.ToIndex(textures).Value }; } dst.ShadeFactor = mtoon.Definition.Color.ShadeColor.ToFloat3(); dst.ShadeMultiplyTexture = mtoon.Definition.Color.ShadeMultiplyTexture.ToIndex(textures); material.alphaCutoff = mtoon.Definition.Color.CutoutThresholdValue; // Outline dst.OutlineColorMode = (UniGLTF.Extensions.VRMC_materials_mtoon.OutlineColorMode)mtoon.Definition.Outline.OutlineColorMode; dst.OutlineFactor = mtoon.Definition.Outline.OutlineColor.ToFloat3(); dst.OutlineLightingMixFactor = mtoon.Definition.Outline.OutlineLightingMixValue; dst.OutlineScaledMaxDistanceFactor = mtoon.Definition.Outline.OutlineScaledMaxDistanceValue; dst.OutlineWidthMode = (UniGLTF.Extensions.VRMC_materials_mtoon.OutlineWidthMode)mtoon.Definition.Outline.OutlineWidthMode; dst.OutlineWidthFactor = mtoon.Definition.Outline.OutlineWidthValue; dst.OutlineWidthMultiplyTexture = mtoon.Definition.Outline.OutlineWidthMultiplyTexture.ToIndex(textures); // Emission material.emissiveFactor = mtoon.Definition.Emission.EmissionColor.ToFloat3(); if (mtoon.Definition.Emission.EmissionMultiplyTexture != null) { material.emissiveTexture = new glTFMaterialEmissiveTextureInfo { index = textures.IndexOfNullable(mtoon.Definition.Emission.EmissionMultiplyTexture.Texture).Value }; } // Light dst.GiIntensityFactor = mtoon.Definition.Lighting.LightingInfluence.GiIntensityValue; dst.LightColorAttenuationFactor = mtoon.Definition.Lighting.LightingInfluence.LightColorAttenuationValue; dst.ShadingShiftFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingShiftValue; dst.ShadingToonyFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingToonyValue; if (mtoon.Definition.Lighting.Normal.NormalTexture != null) { material.normalTexture = new glTFMaterialNormalTextureInfo { index = textures.IndexOfNullable(mtoon.Definition.Lighting.Normal.NormalTexture.Texture).Value, scale = mtoon.Definition.Lighting.Normal.NormalScaleValue }; } // matcap dst.AdditiveTexture = mtoon.Definition.MatCap.AdditiveTexture.ToIndex(textures); // rendering switch (mtoon.Definition.Rendering.CullMode) { case CullMode.Back: material.doubleSided = false; break; case CullMode.Off: material.doubleSided = true; break; case CullMode.Front: // GLTF not support material.doubleSided = false; break; default: throw new NotImplementedException(); } (material.alphaMode, dst.TransparentWithZWrite) = GetRenderMode(mtoon.Definition.Rendering.RenderMode); dst.RenderQueueOffsetNumber = mtoon.Definition.Rendering.RenderQueueOffsetNumber; // rim dst.RimFactor = mtoon.Definition.Rim.RimColor.ToFloat3(); dst.RimMultiplyTexture = mtoon.Definition.Rim.RimMultiplyTexture.ToIndex(textures); dst.RimLiftFactor = mtoon.Definition.Rim.RimLiftValue; dst.RimFresnelPowerFactor = mtoon.Definition.Rim.RimFresnelPowerValue; dst.RimLightingMixFactor = mtoon.Definition.Rim.RimLightingMixValue; // texture option dst.UvAnimationMaskTexture = mtoon.Definition.TextureOption.UvAnimationMaskTexture.ToIndex(textures); dst.UvAnimationRotationSpeedFactor = mtoon.Definition.TextureOption.UvAnimationRotationSpeedValue; dst.UvAnimationScrollXSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollXSpeedValue; dst.UvAnimationScrollYSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollYSpeedValue; if (material.pbrMetallicRoughness.baseColorTexture != null) { var offset = mtoon.Definition.TextureOption.MainTextureLeftBottomOriginOffset; var scale = mtoon.Definition.TextureOption.MainTextureLeftBottomOriginScale; glTF_KHR_texture_transform.Serialize( material.pbrMetallicRoughness.baseColorTexture, (offset.X, offset.Y), (scale.X, scale.Y) ); } UniGLTF.Extensions.VRMC_materials_mtoon.GltfSerializer.SerializeTo(ref material.extensions, dst); return(material); }
public static VrmProtobuf.Material MToonToGltf(this MToonMaterial mtoon, List <Texture> textures) { var material = mtoon.UnlitToGltf(textures); // Unlitも有効にする // material.Extensions.KHRMaterialsUnlit = null; var dst = new VrmProtobuf.VRMC_materials_mtoon(); material.Extensions.VRMCMaterialsMtoon = dst; // Color dst.LitFactor.Assign(mtoon.Definition.Color.LitColor); dst.LitMultiplyTexture = mtoon.Definition.Color.LitMultiplyTexture.ToIndex(textures); dst.ShadeFactor.Assign(mtoon.Definition.Color.ShadeColor); dst.ShadeMultiplyTexture = mtoon.Definition.Color.ShadeMultiplyTexture.ToIndex(textures); dst.CutoutThresholdFactor = mtoon.Definition.Color.CutoutThresholdValue; // Outline dst.OutlineColorMode = (VrmProtobuf.VRMC_materials_mtoon.Types.OutlineColorMode)mtoon.Definition.Outline.OutlineColorMode; dst.OutlineFactor.Assign(mtoon.Definition.Outline.OutlineColor); dst.OutlineLightingMixFactor = mtoon.Definition.Outline.OutlineLightingMixValue; dst.OutlineScaledMaxDistanceFactor = mtoon.Definition.Outline.OutlineScaledMaxDistanceValue; dst.OutlineWidthMode = (VrmProtobuf.VRMC_materials_mtoon.Types.OutlineWidthMode)mtoon.Definition.Outline.OutlineWidthMode; dst.OutlineWidthFactor = mtoon.Definition.Outline.OutlineWidthValue; dst.OutlineWidthMultiplyTexture = mtoon.Definition.Outline.OutlineWidthMultiplyTexture.ToIndex(textures); // Emission dst.EmissionFactor.Assign(mtoon.Definition.Emission.EmissionColor); dst.EmissionMultiplyTexture = mtoon.Definition.Emission.EmissionMultiplyTexture.ToIndex(textures); if (mtoon.Definition.Emission.EmissionMultiplyTexture != null) { material.EmissiveTexture = new VrmProtobuf.TextureInfo { Index = textures.IndexOfNullable(mtoon.Definition.Emission.EmissionMultiplyTexture.Texture) }; } // Light dst.GiIntensityFactor = mtoon.Definition.Lighting.LightingInfluence.GiIntensityValue; dst.LightColorAttenuationFactor = mtoon.Definition.Lighting.LightingInfluence.LightColorAttenuationValue; dst.ShadingShiftFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingShiftValue; dst.ShadingToonyFactor = mtoon.Definition.Lighting.LitAndShadeMixing.ShadingToonyValue; dst.NormalScaleFactor = mtoon.Definition.Lighting.Normal.NormalScaleValue; dst.NormalTexture = mtoon.Definition.Lighting.Normal.NormalTexture.ToIndex(textures); if (mtoon.Definition.Lighting.Normal.NormalTexture != null) { material.NormalTexture = new VrmProtobuf.MaterialNormalTextureInfo { Index = textures.IndexOfNullable(mtoon.Definition.Lighting.Normal.NormalTexture.Texture) }; } // matcap dst.AdditiveTexture = mtoon.Definition.MatCap.AdditiveTexture.ToIndex(textures); // rendering dst.CullMode = (VrmProtobuf.VRMC_materials_mtoon.Types.CullMode)mtoon.Definition.Rendering.CullMode; switch (mtoon.Definition.Rendering.CullMode) { case CullMode.Back: material.DoubleSided = false; break; case CullMode.Off: material.DoubleSided = true; break; case CullMode.Front: // GLTF not support material.DoubleSided = false; break; default: throw new NotImplementedException(); } dst.RenderMode = (VrmProtobuf.VRMC_materials_mtoon.Types.RenderMode)mtoon.Definition.Rendering.RenderMode; dst.RenderQueueOffsetNumber = mtoon.Definition.Rendering.RenderQueueOffsetNumber; // rim dst.RimFactor.Assign(mtoon.Definition.Rim.RimColor); dst.RimMultiplyTexture = mtoon.Definition.Rim.RimMultiplyTexture.ToIndex(textures); dst.RimLiftFactor = mtoon.Definition.Rim.RimLiftValue; dst.RimFresnelPowerFactor = mtoon.Definition.Rim.RimFresnelPowerValue; dst.RimLightingMixFactor = mtoon.Definition.Rim.RimLightingMixValue; // texture option dst.UvAnimationMaskTexture = mtoon.Definition.TextureOption.UvAnimationMaskTexture.ToIndex(textures); dst.UvAnimationRotationSpeedFactor = mtoon.Definition.TextureOption.UvAnimationRotationSpeedValue; dst.UvAnimationScrollXSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollXSpeedValue; dst.UvAnimationScrollYSpeedFactor = mtoon.Definition.TextureOption.UvAnimationScrollYSpeedValue; dst.MainTextureLeftBottomOriginOffset.Assign(mtoon.Definition.TextureOption.MainTextureLeftBottomOriginOffset); dst.MainTextureLeftBottomOriginScale.Assign(mtoon.Definition.TextureOption.MainTextureLeftBottomOriginScale); return(material); }
public static MToonMaterial MToonFromGltf(VrmProtobuf.Material material, List <Texture> textures) { var mtoon = new MToonMaterial(material.Name); var extension = material.Extensions.VRMCMaterialsMtoon; mtoon.Definition = new MToonDefinition { Meta = new MetaDefinition { Implementation = "Santarh/MToon", }, Color = new ColorDefinition { LitColor = extension.LitFactor.ToLinearColor(Nan), LitMultiplyTexture = extension.LitMultiplyTexture.GetTexture(textures), ShadeColor = extension.ShadeFactor.ToLinearColor(Nan), ShadeMultiplyTexture = extension.ShadeMultiplyTexture.GetTexture(textures), CutoutThresholdValue = extension.CutoutThresholdFactor, }, Outline = new OutlineDefinition { OutlineColorMode = (OutlineColorMode)extension.OutlineColorMode, OutlineColor = extension.OutlineFactor.ToLinearColor(Nan), OutlineLightingMixValue = extension.OutlineLightingMixFactor, OutlineScaledMaxDistanceValue = extension.OutlineScaledMaxDistanceFactor, OutlineWidthMode = (OutlineWidthMode)extension.OutlineWidthMode, OutlineWidthValue = extension.OutlineWidthFactor, OutlineWidthMultiplyTexture = extension.OutlineWidthMultiplyTexture.GetTexture(textures), }, Emission = new EmissionDefinition { EmissionColor = extension.EmissionFactor.ToLinearColor(Nan), EmissionMultiplyTexture = extension.EmissionMultiplyTexture.GetTexture(textures), }, Lighting = new LightingDefinition { LightingInfluence = new LightingInfluenceDefinition { GiIntensityValue = extension.GiIntensityFactor, LightColorAttenuationValue = extension.LightColorAttenuationFactor, }, LitAndShadeMixing = new LitAndShadeMixingDefinition { ShadingShiftValue = extension.ShadingShiftFactor, ShadingToonyValue = extension.ShadingToonyFactor, }, Normal = new NormalDefinition { NormalScaleValue = extension.NormalScaleFactor, NormalTexture = extension.NormalTexture.GetTexture(textures), }, }, MatCap = new MatCapDefinition { AdditiveTexture = extension.AdditiveTexture.GetTexture(textures) }, Rendering = new RenderingDefinition { CullMode = (CullMode)extension.CullMode, RenderMode = (RenderMode)extension.RenderMode, RenderQueueOffsetNumber = extension.RenderQueueOffsetNumber, }, Rim = new RimDefinition { RimColor = extension.RimFactor.ToLinearColor(Nan), RimMultiplyTexture = extension.RimMultiplyTexture.GetTexture(textures), RimLiftValue = extension.RimLiftFactor, RimFresnelPowerValue = extension.RimFresnelPowerFactor, RimLightingMixValue = extension.RimLightingMixFactor, }, TextureOption = new TextureUvCoordsDefinition { UvAnimationMaskTexture = extension.UvAnimationMaskTexture.GetTexture(textures), UvAnimationRotationSpeedValue = extension.UvAnimationRotationSpeedFactor, UvAnimationScrollXSpeedValue = extension.UvAnimationScrollXSpeedFactor, UvAnimationScrollYSpeedValue = extension.UvAnimationScrollYSpeedFactor, MainTextureLeftBottomOriginOffset = extension.MainTextureLeftBottomOriginOffset.ToVector2(), MainTextureLeftBottomOriginScale = extension.MainTextureLeftBottomOriginScale.ToVector2(), }, }; return(mtoon); }