コード例 #1
0
        protected static List <Action <ConvertContext> > CreateConverterList()
        {
            return(new List <Action <ConvertContext> >()
            {
                ctx => {
                    bool cnv = false;
                    var shader = ctx.target.shader;
                    while (WFCommonUtility.IsSupportedShader(shader) && !WFCommonUtility.IsMobileSupportedShader(shader))
                    {
                        // シェーダ切り替え
                        var fallback = WFCommonUtility.GetShaderFallBackTarget(shader) ?? "Hidden/UnlitWF/WF_UnToon_Hidden";
                        WFCommonUtility.ChangeShader(fallback, ctx.target);

                        // シェーダ切り替え後に RenderQueue をコピー
                        ctx.target.renderQueue = ctx.oldMaterial.renderQueue;

                        shader = ctx.target.shader;
                        cnv = true;
                    }
                    if (cnv)
                    {
                        WFCommonUtility.SetupShaderKeyword(ctx.target);
                        EditorUtility.SetDirty(ctx.target);
                    }
                },
                ctx => {
                    if (IsMatchShaderName(ctx.oldMaterial.shader, "Transparent3Pass") && !IsMatchShaderName(ctx.target.shader, "Transparent3Pass"))
                    {
                        // Transparent3Pass からそうではないシェーダの切り替えでは、_AL_ZWrite を ON に変更する
                        ctx.target.SetInt("_AL_ZWrite", 1);
                    }
                },
            });
        }
コード例 #2
0
            private void AppendUsedShaderVariant(Material mat, Shader shader)
            {
                // マテリアルから _XX_ENABLE となっているキーワードを回収
                IEnumerable <string> keywords = mat.shaderKeywords.Where(kwd => WFCommonUtility.IsEnableKeyword(kwd));

                UsedShaderVariant usv = new UsedShaderVariant(shader.name, keywords);

                if (!usedShaderVariantList.Contains(usv))
                {
                    usedShaderVariantList.Add(usv);

                    // 直接のシェーダではなく、そのフォールバックを利用できるならばそれも追加する
                    if (settings == null || !settings.stripFallback)
                    {
                        var name     = WFCommonUtility.GetShaderFallBackTarget(shader);
                        var fallback = name == null ? null : Shader.Find(name);
                        if (IsStripTargetShader(fallback))
                        {
                            AppendUsedShaderVariant(mat, fallback);
                        }
                    }
                }
            }