示例#1
0
        private static string ExportAlphaMode(MToon10AlphaMode alphaMode)
        {
            switch (alphaMode)
            {
            case MToon10AlphaMode.Opaque:
                return("OPAQUE");

            case MToon10AlphaMode.Cutout:
                return("MASK");

            case MToon10AlphaMode.Transparent:
                return("BLEND");

            default:
                throw new ArgumentOutOfRangeException(nameof(alphaMode), alphaMode, null);
            }
        }
示例#2
0
        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);
        }