{"id":2613,"date":"2022-01-17T22:15:07","date_gmt":"2022-01-17T14:15:07","guid":{"rendered":"http:\/\/www.u3d8.com\/?p=2613"},"modified":"2022-01-23T13:26:53","modified_gmt":"2022-01-23T05:26:53","slug":"shader%e9%ab%98%e5%85%89%e5%8f%8d%e5%b0%84","status":"publish","type":"post","link":"http:\/\/www.u3d8.com\/?p=2613","title":{"rendered":"Shader\u9ad8\u5149\u53cd\u5c04Phong"},"content":{"rendered":"\n<h2>\u5b9a\u4e49<\/h2>\n\n\n\n<p>\u9ad8\u5149\u53cd\u5c04\u662f\u4e00\u79cd\u7ecf\u9a8c\u6a21\u578b\uff0c\u5e76\u4e0d\u5b8c\u5168\u7b26\u5408\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u9ad8\u5149\u53cd\u5c04\u73b0\u8c61\uff0c\u7528\u4e8e\u8ba1\u7b97\u90a3\u4e9b\u6cbf\u7740\u5b8c\u5168\u955c\u9762\u53cd\u5c04\u65b9\u5411\u88ab\u53cd\u5c04\u7684\u5149\u7ebf\uff0c\u53ef\u4ee5\u8ba9\u7269\u4f53\u770b\u8d77\u6765\u6709\u5149\u6cfd\uff0c\u6bd4\u5982\u91d1\u5c5e\u6750\u8d28\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/v2-1e6c353f07632e931efb9b76f65a587b_1440w.png\" data-lightbox=\"image_lg\"><img title=\"Shader\u9ad8\u5149\u53cd\u5c04Phong - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"Shader\u9ad8\u5149\u53cd\u5c04Phong - \u7b2c1\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" width=\"447\" height=\"322\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/v2-1e6c353f07632e931efb9b76f65a587b_1440w.png\" alt=\"\" class=\"wp-image-2614\" srcset=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/v2-1e6c353f07632e931efb9b76f65a587b_1440w.png 447w, http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/v2-1e6c353f07632e931efb9b76f65a587b_1440w-300x216.png 300w\" sizes=\"(max-width: 447px) 100vw, 447px\" \/><\/a><\/figure>\n\n\n\n<p>\u8ba1\u7b97\u9ad8\u5149\u53cd\u5c04\u9700\u8981\u77e5\u9053 \u8868\u9762\u6cd5\u7ebf\uff0c\u89c6\u89d2\u65b9\u5411\uff0c\u5149\u6e90\u65b9\u5411\uff0c\u53cd\u5c04\u65b9\u5411\u7b49<\/p>\n\n\n\n<h2>\u516c\u5f0f<\/h2>\n\n\n\n<p>\u9ad8\u5149\u53cd\u5c04Specular = \u76f4\u5c04\u5149 * pow(max(0, cos\u03b8), \u9ad8\u5149\u53cd\u5c04\u53c2\u6570)<\/p>\n\n\n\n<p>\u03b8 = \u53cd\u5c04\u5149\u65b9\u5411\u548c\u89c6\u91ce\u65b9\u5411\u7684\u5939\u89d2<\/p>\n\n\n\n<p><a href=\"https:\/\/zh.numberempire.com\/graphingcalculator.php?functions=pow(max(cos(x)%2C0)%2C10)&amp;xmin=0&amp;xmax=3.14&amp;ymin=-1&amp;ymax=1&amp;var=x\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/zh.numberempire.com\/graphingcalculator.php?functions=pow(max(cos(x)%2C0)%2C10)&amp;xmin=0&amp;xmax=3.14&amp;ymin=-1&amp;ymax=1&amp;var=x<\/a><\/p>\n\n\n\n<h2>\u9876\u70b9\u8ba1\u7b97\/\u7247\u5143\u8ba1\u7b97<\/h2>\n\n\n\n<h3>\u6548\u679c<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/Snipaste_2022-01-17_23-32-03.jpg\" data-lightbox=\"image_lg\"><img title=\"Shader\u9ad8\u5149\u53cd\u5c04Phong - \u7b2c2\u5f20  | u3d8\u6280\u672f\u5206\u4eab\" alt=\"Shader\u9ad8\u5149\u53cd\u5c04Phong - \u7b2c2\u5f20  | u3d8\u6280\u672f\u5206\u4eab\"  loading=\"lazy\" width=\"627\" height=\"342\"  data-src=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/Snipaste_2022-01-17_23-32-03.jpg\" alt=\"\" class=\"wp-image-2622\" srcset=\"http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/Snipaste_2022-01-17_23-32-03.jpg 627w, http:\/\/www.u3d8.com\/wp-content\/uploads\/2022\/01\/Snipaste_2022-01-17_23-32-03-300x164.jpg 300w\" sizes=\"(max-width: 627px) 100vw, 627px\" \/><\/a><\/figure>\n\n\n\n<h3>\u9010\u9876\u70b9\u8ba1\u7b97<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Shader \"WCC\/Specular\"{\n    Properties\n    {\n        _Diffuse (\"Diffuse\", Color) = (1, 1, 1, 1)\n        \/\/\u63a7\u5236\u9ad8\u5149\u53cd\u5c04\u989c\u8272\n        _Specular (\"Specular\", Color) = (1, 1, 1, 1)\n        \/\/\u63a7\u5236\u9ad8\u5149\u533a\u57df\u5927\u5c0f\n        _Gloss (\"Gloss\", Range(8.0, 256)) = 20\n    }\n    SubShader\n    {\n        Pass\n        {\n            Tags { \"LightMode\"=\"ForwardBase\" }\n \n            CGPROGRAM\n \n            #pragma vertex vert\n            #pragma fragment frag\n \n            #include \"Lighting.cginc\"\n \n            fixed4 _Diffuse;\n            fixed4 _Specular;\n            float _Gloss;\n \n            struct a2v\n            {\n                \/\/\u6a21\u578b\u7a7a\u95f4\u7684\u9876\u70b9\u5750\u6807\n                float4 vertex:POSITION;\n                \/\/\u6a21\u578b\u7a7a\u95f4\u7684\u6cd5\u7ebf\u65b9\u5411\n                float3 normal:NORMAL;\n \n            };\n \n            struct v2f\n            {\n                \/\/\u8f93\u51fa\u7684\u662f\u88c1\u526a\u7a7a\u95f4\u7684\u9876\u70b9\u5750\u6807\n                float4 pos:SV_POSITION;\n \n                float3 color:COLOR;\n \n            };\n \n            v2f vert(a2v v){\n                v2f o;\n \n                \/\/\u5229\u7528unity\u5185\u7f6e\u7684\u6a21\u578b-\u89c2\u5bdf-\u6295\u5f71\u77e9\u9635\u5c06\u9876\u70b9\u5750\u6807\u8f6c\u6362\u5230\u88c1\u526a\u7a7a\u95f4\n                o.pos=UnityObjectToClipPos(v.vertex);\n                \/\/\u901a\u8fc7\u5185\u7f6e\u53d8\u91cf\u83b7\u53d6\u73af\u5883\u5149\n                fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz;\n                \/\/\u6cd5\u7ebf\u8f6c\u6362\u5230\u4e16\u754c\u5750\u6807\n                \/\/unity_WorldToObject\u4e3a\u6a21\u578b\u7a7a\u95f4\u5230\u4e16\u754c\u7a7a\u95f4\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635\n                fixed3 worldNormal=normalize(mul(v.normal,(float3x3)unity_WorldToObject));\n                \/\/\u83b7\u53d6\u5149\u6e90\u65b9\u5411\n                fixed3 worldLight=normalize(_WorldSpaceLightPos0.xyz);\n                \/\/\u5229\u7528\u6f2b\u53cd\u5c04\u5149\u7167\u516c\u5f0f\u8ba1\u7b97\u6f2b\u53cd\u5c04\n                fixed3 diffuse=_LightColor0.rgb*_Diffuse.rgb*max(0,dot(worldNormal,worldLight));\n                \/\/\u5229\u7528Cg\u5185\u7f6e\u53cd\u5c04\u5149\u7ebf\u65b9\u5411\u8ba1\u7b97\u51fd\u6570\u8ba1\u7b97\u53cd\u5c04\u5149\u7ebf\n                fixed3 reflectDir = normalize(reflect(-worldLight, worldNormal));\n                \/\/mul(unity_ObjectToWorld, v.vertex)\u5c06\u9876\u70b9\u5750\u6807\u8f6c\u6362\u4e3a\u4e16\u754c\u5750\u6807\n                \/\/\u89c6\u89d2\u65b9\u5411=\u6444\u50cf\u5934\u4f4d\u7f6e-\u9876\u70b9\u4f4d\u7f6e\n                fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, v.vertex).xyz);\n                \/\/\u6839\u636e\u516c\u5f0f\u8ba1\u7b97\u9ad8\u5149\u53cd\u5c04\n                fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);\n                o.color=ambient + diffuse + specular;\n \n                return o;\n            }\n \n            fixed4 frag(v2f f):SV_Target\n            {\n                return fixed4(f.color,1.0);\n            }\n \n            ENDCG\n        }\n    }\n    FallBack \"Specular\"\n}<\/code><\/pre>\n\n\n\n<h3>\u9010\u7247\u5143\u8ba1\u7b97<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Shader \"WCC\/Specular Fragment\"{\n    Properties\n    {\n        _Diffuse (\"Diffuse\", Color) = (1, 1, 1, 1)\n        \/\/\u63a7\u5236\u9ad8\u5149\u53cd\u5c04\u989c\u8272\n        _Specular (\"Specular\", Color) = (1, 1, 1, 1)\n        \/\/\u63a7\u5236\u9ad8\u5149\u533a\u57df\u5927\u5c0f\n        _Gloss (\"Gloss\", Range(8.0, 256)) = 20\n    }\n    SubShader\n    {\n        Pass\n        {\n            Tags { \"LightMode\"=\"ForwardBase\" }\n \n            CGPROGRAM\n \n            #pragma vertex vert\n            #pragma fragment frag\n \n            #include \"Lighting.cginc\"\n \n            fixed4 _Diffuse;\n            fixed4 _Specular;\n            float _Gloss;\n \n            struct a2v\n            {\n                \/\/\u6a21\u578b\u7a7a\u95f4\u7684\u9876\u70b9\u5750\u6807\n                float4 vertex:POSITION;\n                \/\/\u6a21\u578b\u7a7a\u95f4\u7684\u6cd5\u7ebf\u65b9\u5411\n                float3 normal:NORMAL;\n \n            };\n \n            struct v2f\n            {\n                \/\/\u8f93\u51fa\u7684\u662f\u88c1\u526a\u7a7a\u95f4\u7684\u9876\u70b9\u5750\u6807\n                float4 pos:SV_POSITION;\n                float3 worldNormal:TEXCOORD0;\n                float3 worldVertex:TEXCOORD1;\n \n            };\n \n            v2f vert(a2v v){\n                v2f f;\n \n                \/\/\u5229\u7528unity\u5185\u7f6e\u7684\u6a21\u578b-\u89c2\u5bdf-\u6295\u5f71\u77e9\u9635\u5c06\u9876\u70b9\u5750\u6807\u8f6c\u6362\u5230\u88c1\u526a\u7a7a\u95f4\n                f.pos=UnityObjectToClipPos(v.vertex);\n                \/\/\u6cd5\u7ebf\u8f6c\u6362\u5230\u4e16\u754c\u5750\u6807\n                \/\/unity_WorldToObject\u4e3a\u6a21\u578b\u7a7a\u95f4\u5230\u4e16\u754c\u7a7a\u95f4\u7684\u53d8\u6362\u77e9\u9635\u7684\u9006\u77e9\u9635\n                f.worldNormal=mul(v.normal,(float3x3)unity_WorldToObject);\n                \/\/mul(unity_ObjectToWorld, v.vertex)\u5c06\u9876\u70b9\u5750\u6807\u8f6c\u6362\u4e3a\u4e16\u754c\u5750\u6807\n                f.worldVertex=mul(unity_ObjectToWorld, v.vertex);\n                return f;\n            }\n \n            fixed4 frag(v2f f):SV_Target\n            {\n                \/\/\u901a\u8fc7\u5185\u7f6e\u53d8\u91cf\u83b7\u53d6\u73af\u5883\u5149\n                fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz;\n                fixed3 normalDir=normalize(f.worldNormal);\n                \/\/\u83b7\u53d6\u5149\u6e90\u65b9\u5411\n                fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);\n                \/\/\u5229\u7528\u6f2b\u53cd\u5c04\u5149\u7167\u516c\u5f0f\u8ba1\u7b97\u6f2b\u53cd\u5c04\n                fixed3 diffuse=_LightColor0.rgb*_Diffuse.rgb*max(0,dot(normalDir,lightDir));\n                \/\/\u5229\u7528Cg\u5185\u7f6e\u53cd\u5c04\u5149\u7ebf\u65b9\u5411\u8ba1\u7b97\u51fd\u6570\u8ba1\u7b97\u53cd\u5c04\u5149\u7ebf\n                fixed3 reflectDir = normalize(reflect(-lightDir, normalDir));\n                \/\/\u89c6\u89d2\u65b9\u5411=\u6444\u50cf\u5934\u4f4d\u7f6e-\u9876\u70b9\u4f4d\u7f6e\n                fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - f.worldVertex.xyz);\n                \/\/\u6839\u636e\u516c\u5f0f\u8ba1\u7b97\u9ad8\u5149\u53cd\u5c04\n                fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir, viewDir)), _Gloss);\n                fixed3 color=ambient + diffuse + specular;\n\n                return fixed4(color,1.0);\n            }\n \n            ENDCG\n        }\n    }\n    FallBack \"Specular\"\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5b9a\u4e49 \u9ad8\u5149\u53cd\u5c04\u662f\u4e00\u79cd\u7ecf\u9a8c\u6a21\u578b\uff0c\u5e76\u4e0d\u5b8c\u5168\u7b26\u5408\u771f\u5b9e\u4e16\u754c\u4e2d\u7684\u9ad8\u5149\u53cd\u5c04\u73b0\u8c61\uff0c\u7528\u4e8e\u8ba1\u7b97\u90a3\u4e9b &hellip; <a href=\"http:\/\/www.u3d8.com\/?p=2613\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[419],"tags":[],"_links":{"self":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2613"}],"collection":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2613"}],"version-history":[{"count":7,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2613\/revisions"}],"predecessor-version":[{"id":2649,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=\/wp\/v2\/posts\/2613\/revisions\/2649"}],"wp:attachment":[{"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2613"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.u3d8.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}