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); 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 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); }