{"id":1840,"date":"2020-04-25T20:49:57","date_gmt":"2020-04-25T12:49:57","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=1840"},"modified":"2020-04-25T20:59:49","modified_gmt":"2020-04-25T12:59:49","slug":"unityshader%e5%8f%98%e4%bd%93%e4%bb%a5%e5%8f%8a%e4%bd%bf%e7%94%a8ipreprocessshaders%e5%89%a5%e7%a6%bb","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=1840","title":{"rendered":"[Unity]Shader\u53d8\u4f53\u4ee5\u53ca\u4f7f\u7528IPreprocessShaders\u5265\u79bb"},"content":{"rendered":"\n<p>\u5efa\u7acb\u6d4b\u8bd5Shader<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Shader \"Unlit\/NewUnlitShader\"\n{\n    Properties\n    {\n        _MainTex (\"Texture\", 2D) = \"white\" {}\n    }\n    SubShader\n    {\n        Tags { \"RenderType\"=\"Opaque\" }\n        LOD 100\n\n        Pass\n        {\n            Name \"MyShader\"\n            Tags { \"LightMode\" = \"ForwardBase\" }\n            CGPROGRAM\n            #pragma vertex vert\n            #pragma fragment frag\n            #pragma multi_compile _ A1 A2 A3\n            #pragma multi_compile _ B1 B2 B3\n            #pragma shader_feature _ C1 C2\n\n            #include \"UnityCG.cginc\"\n\n            struct appdata\n            {\n                float4 vertex : POSITION;\n                float2 uv : TEXCOORD0;\n            };\n\n            struct v2f\n            {\n                float2 uv : TEXCOORD0;\n                UNITY_FOG_COORDS(1)\n                float4 vertex : SV_POSITION;\n            };\n\n            sampler2D _MainTex;\n            float4 _MainTex_ST;\n\n            v2f vert (appdata v)\n            {\n                v2f o;\n                o.vertex = UnityObjectToClipPos(v.vertex);\n                o.uv = TRANSFORM_TEX(v.uv, _MainTex);\n                UNITY_TRANSFER_FOG(o,o.vertex);\n                return o;\n            }\n\n            fixed4 frag (v2f i) : SV_Target\n            {\n                fixed4 col = tex2D(_MainTex, i.uv);\n\n#if defined(COLOR_1)\n            col.a *= 1.5;\n#endif\n\n#if defined(COLOR_2)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_3)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_4)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_5)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_6)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_7)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_8)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_9)\n            col.a *= 0.7;\n#endif\n\n#if defined(COLOR_10)\n            col.a *= 0.7;\n#endif\n\n                UNITY_APPLY_FOG(i.fogCoord, col);\n\n                return col;\n            }\n            ENDCG\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u6dfb\u52a0\u5904\u7406\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System.Collections.Generic;\nusing UnityEditor.Build;\nusing UnityEditor.Rendering;\nusing UnityEngine;\n\npublic class ShaderVarBuildProcess: IPreprocessShaders\n{\n    public int callbackOrder { get { return 0; } }\n\n    public UwShaderVarBuildProcess()\n    {\n    }\n\n    public void OnProcessShader(Shader shader, ShaderSnippetData snippet, IList&lt;ShaderCompilerData> data)\n    {\n        if(\"Unlit\/NewUnlitShader\" != shader.name)\n        {\n            return;\n        }\n\n        System.Text.StringBuilder sb = new System.Text.StringBuilder();\n        sb.AppendFormat(\"shader={3}, passType={0}, passName={1}, shaderType={2}\\n\", \n            snippet.passType, snippet.passName, snippet.shaderType, shader.name);\n\n        for(int i=0;i&lt;data.Count; ++i)\n        {\n            var pdata = data[i];\n            sb.AppendFormat(\"{0}.{1},{2}: \", i, pdata.graphicsTier, pdata.shaderCompilerPlatform);\n            var ks = pdata.shaderKeywordSet.GetShaderKeywords();\n            foreach(var k in ks)\n            {\n                sb.AppendFormat(\"{0}, \", k.GetKeywordName());\n            }           \n            sb.Append(\"\\n\");\n        }\n        Debug.Log(sb.ToString());\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u8f93\u51fa\u4ee5\u4e0b\u65e5\u5fd7\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shader=Unlit\/NewUnlitShader, passType=ForwardBase, passName=MyShader, shaderType=Vertex\n0.Tier1,GLES20: \n1.Tier2,GLES20: \n2.Tier3,GLES20: \n3.Tier1,GLES3x: \n4.Tier2,GLES3x: \n5.Tier3,GLES3x: \n6.Tier1,GLES20: B1, \n7.Tier2,GLES20: B1, \n8.Tier3,GLES20: B1, \n9.Tier1,GLES3x: B1, \n10.Tier2,GLES3x: B1, \n11.Tier3,GLES3x: B1, \n12.Tier1,GLES20: B2, \n13.Tier2,GLES20: B2, \n14.Tier3,GLES20: B2, \n15.Tier1,GLES3x: B2, \n16.Tier2,GLES3x: B2, \n17.Tier3,GLES3x: B2, \n18.Tier1,GLES20: B3, \n19.Tier2,GLES20: B3, \n20.Tier3,GLES20: B3, \n21.Tier1,GLES3x: B3, \n22.Tier2,GLES3x: B3, \n23.Tier3,GLES3x: B3, \n24.Tier1,GLES20: A1, \n25.Tier2,GLES20: A1, \n26.Tier3,GLES20: A1, \n27.Tier1,GLES3x: A1, \n28.Tier2,GLES3x: A1, \n29.Tier3,GLES3x: A1, \n30.Tier1,GLES20: A1, B1, \n31.Tier2,GLES20: A1, B1, \n32.Tier3,GLES20: A1, B1, \n33.Tier1,GLES3x: A1, B1, \n34.Tier2,GLES3x: A1, B1, \n35.Tier3,GLES3x: A1, B1, \n36.Tier1,GLES20: A1, B2, \n37.Tier2,GLES20: A1, B2, \n38.Tier3,GLES20: A1, B2, \n39.Tier1,GLES3x: A1, B2, \n40.Tier2,GLES3x: A1, B2, \n41.Tier3,GLES3x: A1, B2, \n42.Tier1,GLES20: A1, B3, \n43.Tier2,GLES20: A1, B3, \n44.Tier3,GLES20: A1, B3, \n45.Tier1,GLES3x: A1, B3, \n46.Tier2,GLES3x: A1, B3, \n47.Tier3,GLES3x: A1, B3, \n48.Tier1,GLES20: A2, \n49.Tier2,GLES20: A2, \n50.Tier3,GLES20: A2, \n51.Tier1,GLES3x: A2, \n52.Tier2,GLES3x: A2, \n53.Tier3,GLES3x: A2, \n54.Tier1,GLES20: A2, B1, \n55.Tier2,GLES20: A2, B1, \n56.Tier3,GLES20: A2, B1, \n57.Tier1,GLES3x: A2, B1, \n58.Tier2,GLES3x: A2, B1, \n59.Tier3,GLES3x: A2, B1, \n60.Tier1,GLES20: A2, B2, \n61.Tier2,GLES20: A2, B2, \n62.Tier3,GLES20: A2, B2, \n63.Tier1,GLES3x: A2, B2, \n64.Tier2,GLES3x: A2, B2, \n65.Tier3,GLES3x: A2, B2, \n66.Tier1,GLES20: A2, B3, \n67.Tier2,GLES20: A2, B3, \n68.Tier3,GLES20: A2, B3, \n69.Tier1,GLES3x: A2, B3, \n70.Tier2,GLES3x: A2, B3, \n71.Tier3,GLES3x: A2, B3, \n72.Tier1,GLES20: A3, \n73.Tier2,GLES20: A3, \n74.Tier3,GLES20: A3, \n75.Tier1,GLES3x: A3, \n76.Tier2,GLES3x: A3, \n77.Tier3,GLES3x: A3, \n78.Tier1,GLES20: A3, B1, \n79.Tier2,GLES20: A3, B1, \n80.Tier3,GLES20: A3, B1, \n81.Tier1,GLES3x: A3, B1, \n82.Tier2,GLES3x: A3, B1, \n83.Tier3,GLES3x: A3, B1, \n84.Tier1,GLES20: A3, B2, \n85.Tier2,GLES20: A3, B2, \n86.Tier3,GLES20: A3, B2, \n87.Tier1,GLES3x: A3, B2, \n88.Tier2,GLES3x: A3, B2, \n89.Tier3,GLES3x: A3, B2, \n90.Tier1,GLES20: A3, B3, \n91.Tier2,GLES20: A3, B3, \n92.Tier3,GLES20: A3, B3, \n93.Tier1,GLES3x: A3, B3, \n94.Tier2,GLES3x: A3, B3, \n95.Tier3,GLES3x: A3, B3, \n\nshader=Unlit\/NewUnlitShader, passType=ForwardBase, passName=MyShader, shaderType=Fragment\n0.Tier1,GLES20: \n1.Tier2,GLES20: \n2.Tier3,GLES20: \n3.Tier1,GLES3x: \n4.Tier2,GLES3x: \n5.Tier3,GLES3x: \n6.Tier1,GLES20: B1, \n7.Tier2,GLES20: B1, \n8.Tier3,GLES20: B1, \n9.Tier1,GLES3x: B1, \n10.Tier2,GLES3x: B1, \n11.Tier3,GLES3x: B1, \n12.Tier1,GLES20: B2, \n13.Tier2,GLES20: B2, \n14.Tier3,GLES20: B2, \n15.Tier1,GLES3x: B2, \n16.Tier2,GLES3x: B2, \n17.Tier3,GLES3x: B2, \n18.Tier1,GLES20: B3, \n19.Tier2,GLES20: B3, \n20.Tier3,GLES20: B3, \n21.Tier1,GLES3x: B3, \n22.Tier2,GLES3x: B3, \n23.Tier3,GLES3x: B3, \n24.Tier1,GLES20: A1, \n25.Tier2,GLES20: A1, \n26.Tier3,GLES20: A1, \n27.Tier1,GLES3x: A1, \n28.Tier2,GLES3x: A1, \n29.Tier3,GLES3x: A1, \n30.Tier1,GLES20: A1, B1, \n31.Tier2,GLES20: A1, B1, \n32.Tier3,GLES20: A1, B1, \n33.Tier1,GLES3x: A1, B1, \n34.Tier2,GLES3x: A1, B1, \n35.Tier3,GLES3x: A1, B1, \n36.Tier1,GLES20: A1, B2, \n37.Tier2,GLES20: A1, B2, \n38.Tier3,GLES20: A1, B2, \n39.Tier1,GLES3x: A1, B2, \n40.Tier2,GLES3x: A1, B2, \n41.Tier3,GLES3x: A1, B2, \n42.Tier1,GLES20: A1, B3, \n43.Tier2,GLES20: A1, B3, \n44.Tier3,GLES20: A1, B3, \n45.Tier1,GLES3x: A1, B3, \n46.Tier2,GLES3x: A1, B3, \n47.Tier3,GLES3x: A1, B3, \n48.Tier1,GLES20: A2, \n49.Tier2,GLES20: A2, \n50.Tier3,GLES20: A2, \n51.Tier1,GLES3x: A2, \n52.Tier2,GLES3x: A2, \n53.Tier3,GLES3x: A2, \n54.Tier1,GLES20: A2, B1, \n55.Tier2,GLES20: A2, B1, \n56.Tier3,GLES20: A2, B1, \n57.Tier1,GLES3x: A2, B1, \n58.Tier2,GLES3x: A2, B1, \n59.Tier3,GLES3x: A2, B1, \n60.Tier1,GLES20: A2, B2, \n61.Tier2,GLES20: A2, B2, \n62.Tier3,GLES20: A2, B2, \n63.Tier1,GLES3x: A2, B2, \n64.Tier2,GLES3x: A2, B2, \n65.Tier3,GLES3x: A2, B2, \n66.Tier1,GLES20: A2, B3, \n67.Tier2,GLES20: A2, B3, \n68.Tier3,GLES20: A2, B3, \n69.Tier1,GLES3x: A2, B3, \n70.Tier2,GLES3x: A2, B3, \n71.Tier3,GLES3x: A2, B3, \n72.Tier1,GLES20: A3, \n73.Tier2,GLES20: A3, \n74.Tier3,GLES20: A3, \n75.Tier1,GLES3x: A3, \n76.Tier2,GLES3x: A3, \n77.Tier3,GLES3x: A3, \n78.Tier1,GLES20: A3, B1, \n79.Tier2,GLES20: A3, B1, \n80.Tier3,GLES20: A3, B1, \n81.Tier1,GLES3x: A3, B1, \n82.Tier2,GLES3x: A3, B1, \n83.Tier3,GLES3x: A3, B1, \n84.Tier1,GLES20: A3, B2, \n85.Tier2,GLES20: A3, B2, \n86.Tier3,GLES20: A3, B2, \n87.Tier1,GLES3x: A3, B2, \n88.Tier2,GLES3x: A3, B2, \n89.Tier3,GLES3x: A3, B2, \n90.Tier1,GLES20: A3, B3, \n91.Tier2,GLES20: A3, B3, \n92.Tier3,GLES20: A3, B3, \n93.Tier1,GLES3x: A3, B3, \n94.Tier2,GLES3x: A3, B3, \n95.Tier3,GLES3x: A3, B3, <\/code><\/pre>\n\n\n\n<p>4\u4e2amulti_compile\uff0c2\u7ec4\uff0c\u4e00\u517116\u4e2a\u60c5\u51b5<br>3\u6863\uff0c2\u4e2a\u5e73\u53f0\uff0c6\u4e2a\u60c5\u51b5\uff0c\u603b\u8ba116*6=96\u4e2a\u53d8\u4f53<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5efa\u7acb\u6d4b\u8bd5Shader \u6dfb\u52a0\u5904\u7406\uff1a \u8f93\u51fa\u4ee5\u4e0b\u65e5\u5fd7\uff1a 4\u4e2amulti_compile\uff0c2\u7ec4\uff0c\u4e00\u517116\u4e2a\u60c5\u51b53\u6863\uff0c2 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/1840"}],"collection":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1840"}],"version-history":[{"count":2,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/1840\/revisions"}],"predecessor-version":[{"id":1842,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/1840\/revisions\/1842"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}