{"id":1302,"date":"2022-06-29T17:38:53","date_gmt":"2022-06-29T09:38:53","guid":{"rendered":"https:\/\/www.mapleriver.cn\/?p=1302"},"modified":"2022-06-29T17:42:03","modified_gmt":"2022-06-29T09:42:03","slug":"shadertoy%e5%9f%ba%e7%a1%80","status":"publish","type":"post","link":"https:\/\/www.mapleriver.cn\/?p=1302","title":{"rendered":"ShaderToy\u57fa\u7840"},"content":{"rendered":"<p>&emsp;\u00a0&emsp;\u672c\u6765\u4e4b\u524d\u5df2\u7ecf\u51b3\u5b9a\u4e0d\u518d\u78b0\u6e32\u67d3\u76f8\u5173\u4e86\uff0c\u56e0\u4e3a\u81ea\u5df1\u7684\u6570\u5b66\u5b9e\u5728\u662f\u592a\u5dee\u4e86\uff0c\u4e5f\u6ca1\u90a3\u4e2a\u5929\u5206\u5b66\u6e32\u67d3\u3002\u4f46\u662f\u4e0a\u5468\u5e2e\u540c\u4e8b\u60f3\u4e00\u4e2a\u8fc7\u6ee4\u6b63\u5f26\u6ce2\u7684\u7b97\u6cd5\u7684\u65f6\u5019\u53d1\u73b0\u8fd8\u662f\u5f88\u60f3\u7814\u7a76\u8fd9\u4e9b\u7684\u3002\u4e8e\u662f\u5c31\u7167\u7740\u5176\u4ed6\u5927\u4f6c\u7684\u60f3\u6cd5\uff0c\u6709\u65f6\u95f4\u7684\u65f6\u5019\u5c31\u53bb\u642c\u642cShaderToy\u7684\u6548\u679c\u5427~<br \/>\n&emsp;\u00a0&emsp;\u524d\u51e0\u7bc7\u51c6\u5907\u8fd8\u662f\u7eaf\u6284\u5927\u4f6c\u4eec\u5df2\u7ecf\u642c\u5230Unity\u5185\u7684\u601d\u8def\u627e\u627e\u611f\u89c9\uff0c\u5927\u6982\u7b2c\u56db\u7bc7\u5de6\u53f3\u5c31\u5f00\u59cb\u81ea\u5df1\u7814\u7a76\u548c\u642c\u8fd0\u6548\u679c\u3002<\/p>\n<h5>1.ShaderToy\u7684\u7279\u70b9<\/h5>\n<p>&emsp;\u00a0&emsp;ShaderToy\u4e2d\u7684shader\u90fd\u662f\u7ed8\u5236\u5728\u6574\u4e2a\u5c4f\u5e55\u8303\u56f4\u7684\uff0c\u4e5f\u5c31\u662fpixel shader\u3002\u5728Unity\u4e2dshader\u90fd\u662f\u8d34\u5728material\u4e0a\u7136\u540e\u8d34\u5728\u5177\u4f53\u7684\u6e38\u620f\u7269\u4f53\u4e0a\u7684\u3002<br \/>\n&emsp;\u00a0&emsp;\u6240\u4ee5ShaderToy\u7684shader\u5c31\u76f8\u5f53\u4e8eUnity\u5185\u751f\u6210\u4e86\u4e00\u4e2a<strong>\u521a\u597d\u94fa\u6ee1\u6574\u4e2a\u5c4f\u5e55\u7684\u5168\u5c4f\u65b9\u5f62\u5e73\u677f<\/strong>\uff0c\u7136\u540e\u8fd9\u4e2a\u5e73\u677f\u7684\u6750\u8d28\u4e0a\u8d34\u4e86\u5bf9\u5e94\u7684shader\u3002<br \/>\n&emsp;\u00a0&emsp;\u548cUnity\u5dee\u4e0d\u591a\uff0cShaderToy\u5185\u4e5f\u662f\u5206\u4e3a\u9876\u70b9\u7740\u8272\u548c\u7247\u5143\u7740\u8272\uff0c\u6240\u4ee5\u5728ShaderToy\u4e0a\u9762\u7684Shader Input\u5185\uff0c\u53ef\u4ee5\u770b\u5230\u9876\u70b9\u7740\u8272\u5668\u63d0\u4f9b\u4e86\u54ea\u4e9b\u516c\u5171\u53d8\u91cf\u8fdb\u884c\u8bbf\u95ee\uff0c\u6211\u4eec\u540e\u9762\u5728Unity\u8fdb\u884c\u4fee\u6539\u65f6\uff0c\u5927\u591a\u4e5f\u662f\u5bf9\u8fd9\u4e9b\u516c\u5171\u53d8\u91cf\u8fdb\u884c\u8f6c\u6362\u3002<br \/>\n<a href=\"https:\/\/www.mapleriver.cn\/wp-content\/uploads\/2022\/06\/pixel-input.png\"><img decoding=\"async\" src=\"https:\/\/www.mapleriver.cn\/wp-content\/uploads\/2022\/06\/pixel-input.png\" alt=\"\" \/><\/a><\/p>\n<h5>2.Unity\u4e2d\u7684\u6a21\u677f<\/h5>\n<pre><code class=\"language-cg\">Shader &quot;Shadertoy\/Template&quot; { \n    Properties{\n        iMouse (&quot;Mouse Pos&quot;, Vector) = (100, 100, 0, 0)\n        iChannel0(&quot;iChannel0&quot;, 2D) = &quot;white&quot; {}  \n        iChannelResolution0 (&quot;iChannelResolution0&quot;, Vector) = (100, 100, 0, 0)\n    }\n\n    CGINCLUDE    \n    #include &quot;UnityCG.cginc&quot;   \n    #pragma target 3.0      \n\n    #define vec2 float2\n    #define vec3 float3\n    #define vec4 float4\n    #define mat2 float2x2\n    #define mat3 float3x3\n    #define mat4 float4x4\n    #define iGlobalTime _Time.y\n    #define mod fmod\n    #define mix lerp\n    #define fract frac\n    #define texture2D tex2D\n    #define iResolution _ScreenParams\n    #define gl_FragCoord ((_iParam.scrPos.xy\/_iParam.scrPos.w) * _ScreenParams.xy)\n\n    #define PI2 6.28318530718\n    #define pi 3.14159265358979\n    #define halfpi (pi * 0.5)\n    #define oneoverpi (1.0 \/ pi)\n\n    fixed4 iMouse;\n    sampler2D iChannel0;\n    fixed4 iChannelResolution0;\n\n    struct v2f {    \n        float4 pos : SV_POSITION;    \n        float4 scrPos : TEXCOORD0;   \n    };              \n\n    v2f vert(appdata_base v) {  \n        v2f o;\n        o.pos = mul (UNITY_MATRIX_MVP, v.vertex);\n        o.scrPos = ComputeScreenPos(o.pos);\n        return o;\n    }  \n\n    vec4 main(vec2 fragCoord);\n\n    fixed4 frag(v2f _iParam) : COLOR0 { \n        vec2 fragCoord = gl_FragCoord;\n        return main(gl_FragCoord);\n    }  \n\n    vec4 main(vec2 fragCoord) {\n        return vec4(1, 1, 1, 1);\n    }\n\n    ENDCG    \n\n    SubShader {    \n        Pass {    \n            CGPROGRAM    \n\n            #pragma vertex vert    \n            #pragma fragment frag    \n            #pragma fragmentoption ARB_precision_hint_fastest     \n\n            ENDCG    \n        }    \n    }     \n    FallBack Off    \n}<\/code><\/pre>\n<p>&emsp;\u00a0&emsp;\u4ee3\u7801\u662f\u4ece\u4e50\u4e50\u8001\u5e08\u90a3\u8fb9\u6284\u6765\u7684\uff0c\u4e3b\u8981\u529f\u80fd\u662f\u5728\u5f00\u5934\u5b9a\u4e49\u4e86\u4e00\u7cfb\u5217\u5b8f\u6765\u548cShaderToy\u4e2d\u7684GLSL\u8fdb\u884c\u8854\u63a5\uff0c\u56e0\u4e3aGLSL\u5185\u7684\u9884\u5b9a\u4e49\u7684\u4e00\u4e9b\u53d8\u91cfCG\u5185\u5e76\u6ca1\u6709\uff0c\u6240\u4ee5\u5728\u5f00\u5934\u58f0\u660e\u4e86\u4e00\u4e0b\u3002<br \/>\n&emsp;\u00a0&emsp;\u9876\u70b9\u7740\u8272\u5668\u5185\u53ea\u5305\u542b\u4e86\u4e00\u4e2a\u628a\u6a21\u578b\u5750\u6807\u8f6c\u6362\u5230\u5c4f\u5e55\u5750\u6807\u7684\u8ba1\u7b97\uff0c\u56e0\u4e3aShaderToy\u5185\u7684pixel shader\u90fd\u662f\u57fa\u4e8e\u5c4f\u5e55\u7684~<br \/>\n&emsp;\u00a0&emsp;\u6b64\u5916\uff0c\u4e3a\u4e86\u54cd\u5e94\u9f20\u6807\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5b9a\u4e49\u4e00\u4e2aC#\u811a\u672c\uff0c\u6765\u628a\u9f20\u6807\u4f4d\u7f6e\u4f20\u9012\u7ed9shader<\/p>\n<pre><code class=\"language-C#\">using UnityEngine;\nusing System.Collections;\n\npublic class ShaderToyHelper : MonoBehaviour {\n\n    private Material _material = null;\n\n    private bool _isDragging = false;\n\n    \/\/ Use this for initialization\n    void Start () {\n        Renderer render  = GetComponent&lt;Renderer&gt;();\n        if (render != null) {\n            _material = render.material;\n        }\n\n        _isDragging = false;\n    }\n\n    \/\/ Update is called once per frame\n    void Update () {\n        Vector3 mousePosition = Vector3.zero;\n        if (_isDragging) {\n            mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1.0f);\n        } else {\n            mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.0f);\n        }\n\n        if (_material != null) {\n            _material.SetVector(&quot;iMouse&quot;, mousePosition);\n        }\n    }\n\n    void OnMouseDown() {\n        _isDragging = true;\n    }\n\n    void OnMouseUp() {\n        _isDragging = false;\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&emsp;\u00a0&emsp;\u672c\u6765\u4e4b\u524d\u5df2\u7ecf\u51b3\u5b9a\u4e0d\u518d\u78b0\u6e32\u67d3\u76f8\u5173\u4e86\uff0c\u56e0\u4e3a\u81ea\u5df1\u7684\u6570\u5b66\u5b9e\u5728\u662f\u592a\u5dee\u4e86\uff0c\u4e5f\u6ca1\u90a3\u4e2a\u5929\u5206\u5b66\u6e32\u67d3\u3002\u4f46 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-1302","post","type-post","status-publish","format-standard","hentry","category-shadertoy"],"_links":{"self":[{"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/posts\/1302","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1302"}],"version-history":[{"count":2,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/posts\/1302\/revisions"}],"predecessor-version":[{"id":1306,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=\/wp\/v2\/posts\/1302\/revisions\/1306"}],"wp:attachment":[{"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mapleriver.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}