{"id":3528,"date":"2021-10-08T22:51:00","date_gmt":"2021-10-08T14:51:00","guid":{"rendered":"https:\/\/www.yumefx.com\/?p=3528"},"modified":"2021-10-08T17:56:55","modified_gmt":"2021-10-08T09:56:55","slug":"%e6%9e%81%e5%9d%90%e6%a0%87shader%e5%8e%9f%e7%90%86%e5%8f%8a%e5%ae%9e%e7%8e%b0","status":"publish","type":"post","link":"https:\/\/www.yumefx.com\/?p=3528","title":{"rendered":"\u6781\u5750\u6807shader\u539f\u7406\u53ca\u5b9e\u73b0"},"content":{"rendered":"\n<h1 style=\"text-align: center;\">\u524d\u8a00<\/h1>\n<p>\u56fd\u5e86\u4e03\u5929\u5fd9\u4e8e\u5904\u7406\u4eba\u9645\u5f80\u6765\u7684\u79c1\u4e8b\uff0c\u4e8e\u662f\u559c\u95fb\u4e50\u89c1(hou yan wu chi)\u7684\u62d6\u66f4\u4e86\u3002\u4e4b\u524d\u8fd8\u6709\u56e0\u642c\u5bb6\u6b20\u7684\u4e00\u7bc7\u6ca1\u8865\uff0c\u503a\u52a1\u4e0d\u80fd\u8d8a\u79ef\u8d8a\u591a\u554a\uff0c\u4eca\u5929\u5148\u628a\u4e0a\u5468\u7684\u8865\u4e0a\uff0c\u672c\u5468\u5c3d\u91cf\u53cc\u66f4\u3002<\/p>\n<p><a href=\"https:\/\/www.yumefx.com\/?p=3493\">\u524d\u6587<\/a>\u7b80\u5355\u8bf4\u4e86\u4e0b\u901a\u8fc7UV\u7684\u504f\u79fb\u5236\u4f5c\u52a8\u6001Shader\u7684\u65b9\u5f0f\uff0c\u4eca\u5929\u7684\u5185\u5bb9\u540c\u6837\u662f\u901a\u8fc7\u4fee\u6539UV\u5b9e\u73b0\u7684\u4e00\u79cd\u52a8\u6001\u6548\u679c\u2014\u2014\u6781\u5750\u6807\u3002<\/p>\n<p>\u4e0d\u8fc7\u76f8\u6bd4\u4e8e\u524d\u8005\u53ea\u662f\u7b80\u5355\u7684\u5b9a\u5411\u504f\u79fb\uff0c\u6781\u5750\u6807\u5219\u662f\u76f4\u63a5\u5c06\u5750\u6807\u7cfb\u6539\u4e86\uff0c\u7531\u9ed8\u8ba4UV\u4e24\u8f74\u5750\u6807\u5b9a\u4e49\u7684\u65b9\u5f62\u7b1b\u5361\u5c14\u76f4\u89d2\u5750\u6807\u7cfb\uff0c\u8f6c\u6362\u6210\u4e86\u7531\u5f27\u5ea6\u3001\u534a\u5f84\u4e24\u4e2a\u5750\u6807\u5b9a\u4e49\u7684\u5706\u5f62\u6781\u5750\u6807\u7cfb\uff0c\u5728\u8fd9\u57fa\u7840\u4e0a\u8fdb\u884c\u52a8\u6001\u504f\u79fb\u7684\u6548\u679c\u3002<\/p>\n<h1>\u00a0<\/h1>\n<h1 style=\"text-align: center;\">\u7b1b\u5361\u5c14\u76f4\u89d2\u5750\u6807\u7cfb\u4e0e\u6781\u5750\u6807\u7cfb<\/h1>\n<p>\u9996\u5148\u770b\u4e0b\u9762\u7684\u56fe<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-3533 aligncenter\" src=\"https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_02.jpg\" alt=\"\" width=\"615\" height=\"568\" srcset=\"https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_02.jpg 615w, https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_02-300x277.jpg 300w\" sizes=\"(max-width: 615px) 100vw, 615px\" \/><\/p>\n<p>\u5bf9\u4e8e\u56fe\u4e2d\u7684A\u70b9\uff0c\u5728\u4f20\u7edf\u7684\u7b1b\u5361\u5c14\u76f4\u89d2\u5750\u6807\u7cfb\u4e2d\u8868\u793a\u4e3a(x,y)\uff0c\u5176\u4e2dx\u503c\u4e3aA\u70b9\u5728x\u8f74\u7684\u6295\u5f71\u957f\u5ea6\uff0cy\u503c\u4e3aA\u70b9\u5728y\u8f74\u7684\u6295\u5f71\u957f\u5ea6\uff0cA\u7684\u4f4d\u7f6e\u8303\u56f4\u4e3a\u77e9\u5f62\u3002<\/p>\n<p>\u800c\u5982\u679c\u4f7f\u7528\u6781\u5750\u6807\u7cfb\uff0c\u5219A\u70b9\u8868\u793a\u4e3a(\u03c1,\u03b8)\uff0c\u5176\u4e2d\u03c1\u503c\u4e3aA\u70b9\u8ddd\u79bb\u5750\u6807\u539f\u70b9O\u7684\u8ddd\u79bb\uff0c\u03b8\u503c\u4e3aAO\u4e0ex\u8f74\u6b63\u65b9\u5411\u7684\u5939\u89d2\uff0cA\u7684\u4f4d\u7f6e\u8303\u56f4\u4e3a\u5706\u5f62\u3002<\/p>\n<p>\u4e24\u8005\u7684\u8f6c\u5316\u65b9\u5f0f\u56fe\u4e0a\u5df2\u7ecf\u7ed9\u51fa\uff0c\u5f88\u5bb9\u6613\u770b\u61c2\u5c31\u4e0d\u8d58\u8ff0\u4e86\u3002<\/p>\n<p>\u90a3\u4e48\u6211\u4eec\u6765\u770b\u4e00\u4e0b\uff0c\u5728Shader\u4e2d\u4f7f\u7528\u9ed8\u8ba4UV\u548c\u6781\u5750\u6807\u65f6\uff0c\u6548\u679c\u7684\u533a\u522b\u3002<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-3532 aligncenter\" src=\"https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_01.jpg\" alt=\"\" width=\"900\" height=\"636\" srcset=\"https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_01.jpg 900w, https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_01-300x212.jpg 300w, https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_01-768x543.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>\u8fd9\u4e2a\u611f\u89c9\u5c31\u50cf\u62fd\u7740\u56fe\u7247\u7684\u4e24\u4fa7\u8fb9\u5411\u4e0b\u7ed5\u4e86\u4e00\u4e2a\u5708\u76f4\u5230\u4e24\u8fb9\u91cd\u5408\uff0c\u5c06\u65b9\u5f62\u62bb\u6210\u4e00\u4e2a\u5706\u5f62\uff0c\u518d\u628a\u91cd\u5408\u5904\u65cb\u8f6c\u5230\u5de6\u4fa7\u3002<\/p>\n<p>\u5f53\u7136\u5b9e\u9645\u5236\u4f5c\u4e2d\u7528\u7684\u8d34\u56fe\u80af\u5b9a\u662f\u53ef\u4ee5\u65e0\u7f1d\u62fc\u63a5\u7684\u8d34\u56fe\uff0c\u91cd\u5408\u5904\u5c31\u4e0d\u4f1a\u51fa\u73b0\u8fd9\u6837\u7684\u786c\u8fb9\u3002<\/p>\n<p>\u6781\u5750\u6807\u7684\u4f18\u70b9\u5c31\u662f\u6a21\u578b\u53ea\u9700\u8981\u5f88\u4f4e\u7684\u9762\u6570\u5c31\u80fd\u591f\u8f7b\u6613\u5236\u4f5c\u51fa\u5b8c\u7f8e\u7684\u5706\u5f62\u6548\u679c\uff0c\u540c\u65f6\u6781\u5750\u6807\u7684\u504f\u79fb\u8f74\u662f\u5f84\u5411\u548c\u89d2\u5ea6\u8fd9\u4e24\u4e2a\u8f74\u5411\uff0c\u53ef\u4ee5\u5236\u4f5c\u51fa\u4ece\u5706\u5fc3\u5904\u6536\u7f29\u6216\u6269\u6563\u4ee5\u53ca\u65cb\u8f6c\u7684\u6548\u679c\uff0c\u5f88\u9002\u5408\u5236\u4f5c\u9b54\u6cd5\u9635\u3001Buff\u7b49\u5706\u5f62\u52a8\u6001\u7279\u6548\u3002<\/p>\n<p>\u7f3a\u70b9\u662f\u56fe\u7247\u4e2d\u95f4\u504f\u4e0b\u7684\u90e8\u5206\u50cf\u7d20\u4f1a\u5806\u79ef\uff0c\u800c\u4e2d\u95f4\u504f\u4e0a\u7684\u90e8\u5206\u50cf\u7d20\u4f1a\u62c9\u4f38\uff0c\u53ef\u4ee5\u914d\u5408\u6e10\u5165\u6e10\u51fa\u6548\u679c\u8fdb\u884c\u4f18\u5316\u3002<\/p>\n<h1>\u00a0<\/h1>\n<h1 style=\"text-align: center;\">\u5b9e\u73b0<\/h1>\n<p>\u4e0b\u9762\u8bf4\u4e00\u4e0b\u5728Unity\u4e2d\u5b9e\u73b0\u6781\u5750\u6807\u6548\u679c\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<pre><span>\/\/ shader\u7684\u8def\u5f84\u548c\u540d\u79f0<\/span>\n<span>Shader \"Shader Forge\/PolarCoord\" {<\/span>\n<span>    \/\/ \u66b4\u9732\u5c5e\u6027\u5230\u9762\u677f<\/span>\n<span>    Properties {<\/span>\n<span>        _MainTex(\"RGB: Color A: Alpha\", 2d) = \"gray\"{}<\/span>\n<span>        _Opacity(\"Opacity\", range(0.0, 1.0)) = 1.0<\/span>\n<span>    }<\/span>\n<span>    SubShader {<\/span>\n<span>        Tags {<\/span>\n<span>            \"Queue\"=\"Transparent\"                \/\/\u8c03\u6574\u6e32\u67d3\u987a\u5e8f<\/span>\n<span>            \"RenderType\"=\"Transparent\"           \/\/\u6539\u4e3a\u5bf9\u5e94\u7684<\/span>\n<span>            \"ForceNoShadowCasting\"=\"True\"        \/\/\u5173\u95ed\u9634\u5f71\u6295\u5c04<\/span>\n<span>            \"IgnoreProjector\"=\"True\"             \/\/\u4e0d\u54cd\u5e94\u6295\u5c04\u5668<\/span>\n<span>        }<\/span>\n<span>        Pass {<\/span>\n<span>            Name \"FORWARD\"<\/span>\n<span>            Tags {<\/span>\n<span>                \"LightMode\"=\"ForwardBase\"<\/span>\n<span>            }<\/span>\n<span>            Blend One OneMinusSrcAlpha          \/\/\u4fee\u6539\u6df7\u5408\u6a21\u5f0fOne One<\/span>\n<span>            <\/span>\n<span>            <\/span>\n<span>            CGPROGRAM<\/span>\n<span>            #pragma vertex vert<\/span>\n<span>            #pragma fragment frag<\/span>\n<span>            #include \"UnityCG.cginc\"<\/span>\n<span>            #pragma multi_compile_fwdbase_fullshadows<\/span>\n<span>            #pragma target 3.0<\/span>\n<span>            <\/span>\n<span>            \/\/ \u58f0\u660e\u53d8\u91cf<\/span>\n<span>            uniform sampler2D _MainTex; uniform float4 _MainTex_ST; \/\/\u652f\u6301UV TillingOffset<\/span>\n<span>            uniform half _Opacity;<\/span>\n<span>            <\/span>\n<span>            \/\/ \u8f93\u5165\u7ed3\u6784<\/span>\n<span>            struct VertexInput {<\/span>\n<span>                float4 vertex : POSITION;<\/span>\n<span>                float2 uv : TEXCOORD0;<\/span>\n<span>                float4 color : COLOR;<\/span>\n<span>            };<\/span>\n<span>            <\/span>\n<span>            \/\/ \u8f93\u51fa\u7ed3\u6784<\/span>\n<span>            struct VertexOutput {<\/span>\n<span>                float4 pos : SV_POSITION;<\/span>\n<span>                float2 uv : TEXCOORD0;<\/span>\n<span>                float4 color : COLOR;<\/span>\n<span>            };<\/span>\n<span>            <\/span>\n<span>            \/\/ \u9876\u70b9shader<\/span>\n<span>            VertexOutput vert (VertexInput v) {<\/span>\n<span>                VertexOutput o = (VertexOutput)0;<\/span>\n<span>                o.pos = UnityObjectToClipPos( v.vertex );<\/span>\n<span>                o.uv = TRANSFORM_TEX(v.uv, _MainTex);<\/span>\n<span>                o.color = v.color;<\/span>\n<span>                return o;<\/span>\n<span>            }<\/span>\n<span>            <\/span>\n<span>            \/\/ \u50cf\u7d20shader<\/span>\n<span>            float4 frag(VertexOutput i) : COLOR {<\/span>\n<span>                i.uv = i.uv - float2(0.5, 0.5);  \/\/\u5750\u6807\u4e2d\u5fc3\u79fb\u5230\u7269\u4f53\u4e2d\u5fc3<\/span>\n<span>                float theta = atan2(i.uv.y, i.uv.x); \/\/\u83b7\u53d6\u5939\u89d2\uff0c\u503c\u57df\u4e3a-\u03a0\u5230\u03a0<\/span>\n<span>                theta = theta \/ 3.1415926  * 0.5 + 0.5; \/\/\u5c06\u5939\u89d2\u503c\u57df\u8f6c\u4e3a-1\u52301<\/span>\n<span>                float r = length(i.uv) + frac(_Time.x*3); \/\/\u83b7\u53d6\u534a\u5f84\uff0c\u52a0\u4e0a\u4e86\u65f6\u95f4\u504f\u79fb\uff0c\u5f97\u5230\u5411\u5706\u5fc3\u6536\u7f29\u7684\u52a8\u6001\u6548\u679c<\/span>\n<span>                i.uv = float2(theta, r);<\/span>\n<span><\/span>\n<span><\/span>\n<span>                half4 var_MainTex = tex2D(_MainTex, i.uv);   \/\/\u4f7f\u7528\u6781\u5750\u6807\u91c7\u6837\u8d34\u56fe<\/span>\n<span>                half finalOpacity = var_MainTex.a * _Opacity;  <\/span>\n<span>                return half4(var_MainTex.rgb * finalOpacity,finalOpacity);<\/span>\n<span>            }<\/span>\n<span>            ENDCG<\/span>\n<span>        }<\/span>\n<span>    }<\/span>\n<span>    FallBack \"Diffuse\"<\/span>\n<span>}<\/span>\n<\/pre>\n\n\n\n<p>\u6548\u679c\u5982\u4e0b<\/p>\n<p><img loading=\"lazy\" class=\"size-full wp-image-3535 aligncenter\" src=\"https:\/\/www.yumefx.com\/wp-content\/uploads\/2021\/10\/PolarCoord_03.gif\" alt=\"\" width=\"752\" height=\"557\"><\/p>\n<p>\u5982\u679c\u505a\u7684\u590d\u6742\u70b9\uff0c\u53ef\u4ee5\u5c06\u5f84\u5411\u901f\u5ea6\u3001\u65cb\u8f6c\u901f\u5ea6\u7b49\u5f00\u653e\u6210\u5c5e\u6027\uff0c\u81ea\u7531\u5730\u63a7\u5236\u52a8\u6001\u6548\u679c\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u672c\u6587\u540c\u6837\u53c2\u8003\u81ea<a href=\"https:\/\/space.bilibili.com\/6373917\/video\">B\u7ad9\u5e84\u61c2\u7684\u6280\u672f\u7f8e\u672f\u5165\u95e8\u8bfe<\/a>\uff0c\u611f\u8c22\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u6c38\u8fdc\u52aa\u529b\u5728\u4f60\u7684\u751f\u6d3b\u4e4b\u4e0a\uff0c<br \/>\u4fdd\u7559\u4e00\u7247\u5929\u7a7a\u3002<\/p>\n<p style=\"text-align: right;\">\u2014\u2014\u9a6c\u585e\u5c14\u00b7\u666e\u9c81\u65af\u7279<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u56fd\u5e86\u4e03\u5929\u5fd9\u4e8e\u5904\u7406\u4eba\u9645\u5f80\u6765\u7684\u79c1\u4e8b\uff0c\u4e8e\u662f\u559c\u95fb\u4e50\u89c1(hou yan wu chi)\u7684\u62d6\u66f4\u4e86\u3002\u4e4b\u524d\u8fd8\u6709\u56e0\u642c\u5bb6\u6b20\u7684 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3530,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,69],"tags":[71,14,72],"_links":{"self":[{"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/posts\/3528"}],"collection":[{"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3528"}],"version-history":[{"count":0,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/posts\/3528\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=\/wp\/v2\/media\/3530"}],"wp:attachment":[{"href":"https:\/\/www.yumefx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yumefx.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}