{"id":5026,"date":"2023-08-20T19:03:09","date_gmt":"2023-08-20T11:03:09","guid":{"rendered":"http:\/\/blog.coolcoding.cn\/?p=5026"},"modified":"2023-08-20T19:04:07","modified_gmt":"2023-08-20T11:04:07","slug":"%e5%b1%8f%e5%b9%95%e8%b4%b4%e8%8a%b1%e6%96%b9%e6%a1%88","status":"publish","type":"post","link":"https:\/\/blog.coolcoding.cn\/?p=5026","title":{"rendered":"\u5c4f\u5e55\u8d34\u82b1\u6d4b\u8bd5"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>Shader \"Unlit\/DecalV2\"\n{\n    Properties\n    {\n        _MainTex (\"Texture\", 2D) = \"white\" {}\n    }\n    \n    SubShader\n    {\n        Blend SrcAlpha OneMinusSrcAlpha\n        Tags { \"Queue\"=\"Transparent\" }\n\n        Pass\n        {\n            CGPROGRAM\n            #pragma vertex vert\n            #pragma fragment frag\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                float4 screenPos : TEXCOORD1;\n                float4 vertex : SV_POSITION;\n            };\n\n            sampler2D _MainTex;\n            float4 _MainTex_ST;\n\n            sampler2D _CameraDepthTexture;\n\n            v2f vert (appdata v)\n            {\n                v2f o;\n                o.vertex = UnityObjectToClipPos(v.vertex);\n                o.screenPos = ComputeScreenPos(o.vertex);\n                return o;\n            }\n\n            fixed4 frag (v2f i) : SV_Target\n            {\n                \/\/\u9f50\u6b21\u9664\u6cd5\uff0c\u8ba1\u7b97ndc\n                float4 divW = i.screenPos \/ i.screenPos.w;\n                float4 ndcPos = divW * 2 - 1;\n                \/\/\u5c06\u5c4f\u5e55\u50cf\u7d20\u5bf9\u5e94\u5728\u6444\u50cf\u673a\u8fdc\u5e73\u9762\u7684\u70b9\u8f6c\u6362\u5230\u526a\u88c1\u7a7a\u95f4\uff0c\u4e5f\u662f\u76f8\u673a(0,0,0)\u6307\u5411\u8be5\u70b9\u7684\u5411\u91cf\n                float far = _ProjectionParams.z;\n                float3 farClipVec = float3(ndcPos.xy, 1) * far;\n                \/\/\u901a\u8fc7\u9006\u6295\u5f71\u77e9\u9635\u5c06\u5411\u91cf\u8f6c\u6362\u5230\u89c2\u5bdf\u7a7a\u95f4\n                float3 viewVec = mul(unity_CameraInvProjection, farClipVec.xyzz).xyz;\n                \/\/\u5c06\u5411\u91cf\u4e58\u4ee5\u7ebf\u6027\u6df1\u5ea6\u503c\uff0c\u5f97\u5230\u5728\u6df1\u5ea6\u7f13\u51b2\u4e2d\u50a8\u5b58\u7684\u503c\u5728\u89c2\u5bdf\u7a7a\u95f4\u7684\u4f4d\u7f6e\n                float2 screenUV = divW.xy;\n                float depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screenUV);\n                float3 viewPos = viewVec * Linear01Depth(depth);\n                \/\/\u89c2\u5bdf\u7a7a\u95f4\u53d8\u6362\u5230\u4e16\u754c\u7a7a\u95f4\n                float4 worldPos = mul(UNITY_MATRIX_I_V, float4(viewPos, 1.0));\n\n                float4 objectPos = mul(unity_WorldToObject, worldPos);\n                clip(float3(0.5, 0.5, 0.5) - abs(objectPos));\n                float2 uv = objectPos.xz + 0.5;\n\n                fixed4 finalColor = tex2D(_MainTex, uv);\n                return finalColor;\n            }\n            ENDCG\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u5c06\u6b64\u6750\u8d28\u653e\u7f6e\u4e8e1\u4e2aCube\u4e0a\uff0c\u7136\u540e\u4e0e\u5176\u5b83\u7269\u4ef6\u8d34\u5408<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"502\" src=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1-1024x502.png\" alt=\"\" class=\"wp-image-5027\" srcset=\"https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1-1024x502.png 1024w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1-300x147.png 300w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1-768x377.png 768w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1-70x34.png 70w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/693d83b2ee6c4573f15028010b17709f-1.png 1387w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\n\n\u5982\u679c\u628a\u706f\u5149\u5173\u95ed\uff0c\u5219\n\n<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1019\" height=\"685\" src=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/61929d8fd1d79f4bc576947cc41e23aa.png\" alt=\"\" class=\"wp-image-5028\" srcset=\"https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/61929d8fd1d79f4bc576947cc41e23aa.png 1019w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/61929d8fd1d79f4bc576947cc41e23aa-300x202.png 300w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/61929d8fd1d79f4bc576947cc41e23aa-768x516.png 768w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/61929d8fd1d79f4bc576947cc41e23aa-70x47.png 70w\" sizes=\"(max-width: 1019px) 100vw, 1019px\" \/><\/figure>\n\n\n\n<p> \u539f\u56e0\u662f\u5173\u95ed\u4e86\u706f\u5149\uff0c\u6ca1\u6709\u9634\u5f71\uff0c\u5219\u6ca1\u6709\u6df1\u5ea6\u8fc7\u7a0b <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"957\" height=\"686\" src=\"http:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/88cc5d715338e58399fbe24e6328b4b8.png\" alt=\"\" class=\"wp-image-5029\" srcset=\"https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/88cc5d715338e58399fbe24e6328b4b8.png 957w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/88cc5d715338e58399fbe24e6328b4b8-300x215.png 300w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/88cc5d715338e58399fbe24e6328b4b8-768x551.png 768w, https:\/\/blog.coolcoding.cn\/wp-content\/uploads\/2023\/08\/88cc5d715338e58399fbe24e6328b4b8-70x50.png 70w\" sizes=\"(max-width: 957px) 100vw, 957px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u5c06\u6b64\u6750\u8d28\u653e\u7f6e\u4e8e1\u4e2aCube\u4e0a\uff0c\u7136\u540e\u4e0e\u5176\u5b83\u7269\u4ef6\u8d34\u5408 \u5982\u679c\u628a\u706f\u5149\u5173\u95ed\uff0c\u5219 \u539f\u56e0\u662f\u5173\u95ed\u4e86\u706f\u5149\uff0c\u6ca1\u6709\u9634\u5f71\uff0c\u5219\u6ca1\u6709\u6df1\u5ea6\u8fc7 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5026"}],"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=5026"}],"version-history":[{"count":2,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5026\/revisions"}],"predecessor-version":[{"id":5031,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=\/wp\/v2\/posts\/5026\/revisions\/5031"}],"wp:attachment":[{"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.coolcoding.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}