private static void SetUnityShaderPassSettings(Material material, MToon10AlphaMode alphaMode, MToon10TransparentWithZWriteMode zWriteMode, int renderQueueOffset, MToon10DoubleSidedMode doubleSidedMode) { material.SetInt(MToon10Prop.AlphaMode, (int)alphaMode); material.SetInt(MToon10Prop.TransparentWithZWrite, (int)zWriteMode); material.SetInt(MToon10Prop.DoubleSided, (int)doubleSidedMode); switch (alphaMode) { case MToon10AlphaMode.Opaque: material.SetOverrideTag(UnityRenderTag.Key, UnityRenderTag.OpaqueValue); material.SetInt(MToon10Prop.UnitySrcBlend, (int)BlendMode.One); material.SetInt(MToon10Prop.UnityDstBlend, (int)BlendMode.Zero); material.SetInt(MToon10Prop.UnityZWrite, (int)UnityZWriteMode.On); material.SetInt(MToon10Prop.UnityAlphaToMask, (int)UnityAlphaToMaskMode.Off); renderQueueOffset = 0; material.renderQueue = (int)RenderQueue.Geometry; break; case MToon10AlphaMode.Cutout: material.SetOverrideTag(UnityRenderTag.Key, UnityRenderTag.TransparentCutoutValue); material.SetInt(MToon10Prop.UnitySrcBlend, (int)BlendMode.One); material.SetInt(MToon10Prop.UnityDstBlend, (int)BlendMode.Zero); material.SetInt(MToon10Prop.UnityZWrite, (int)UnityZWriteMode.On); material.SetInt(MToon10Prop.UnityAlphaToMask, (int)UnityAlphaToMaskMode.On); renderQueueOffset = 0; material.renderQueue = (int)RenderQueue.AlphaTest; break; case MToon10AlphaMode.Transparent when zWriteMode == MToon10TransparentWithZWriteMode.Off: material.SetOverrideTag(UnityRenderTag.Key, UnityRenderTag.TransparentValue); material.SetInt(MToon10Prop.UnitySrcBlend, (int)BlendMode.SrcAlpha); material.SetInt(MToon10Prop.UnityDstBlend, (int)BlendMode.OneMinusSrcAlpha); material.SetInt(MToon10Prop.UnityZWrite, (int)UnityZWriteMode.Off); material.SetInt(MToon10Prop.UnityAlphaToMask, (int)UnityAlphaToMaskMode.Off); renderQueueOffset = Mathf.Clamp(renderQueueOffset, -9, 0); material.renderQueue = (int)RenderQueue.Transparent + renderQueueOffset; break; case MToon10AlphaMode.Transparent when zWriteMode == MToon10TransparentWithZWriteMode.On: material.SetOverrideTag(UnityRenderTag.Key, UnityRenderTag.TransparentValue); material.SetInt(MToon10Prop.UnitySrcBlend, (int)BlendMode.SrcAlpha); material.SetInt(MToon10Prop.UnityDstBlend, (int)BlendMode.OneMinusSrcAlpha); material.SetInt(MToon10Prop.UnityZWrite, (int)UnityZWriteMode.On); material.SetInt(MToon10Prop.UnityAlphaToMask, (int)UnityAlphaToMaskMode.Off); renderQueueOffset = Mathf.Clamp(renderQueueOffset, 0, +9); material.renderQueue = (int)RenderQueue.GeometryLast + 1 + renderQueueOffset; // Transparent First + N break; default: throw new ArgumentOutOfRangeException(nameof(alphaMode), alphaMode, null); } switch (doubleSidedMode) { case MToon10DoubleSidedMode.Off: material.SetInt(MToon10Prop.UnityCullMode, (int)UnityCullMode.Back); break; case MToon10DoubleSidedMode.On: material.SetInt(MToon10Prop.UnityCullMode, (int)UnityCullMode.Off); break; default: throw new ArgumentOutOfRangeException(nameof(doubleSidedMode), doubleSidedMode, null); } // Set after validation material.SetInt(MToon10Prop.RenderQueueOffsetNumber, renderQueueOffset); }
private static void SetUnityCullingSettings(Material material, MToon10DoubleSidedMode doubleSidedMode) { }