サーフェスシェーダーで頂点を動かす
去年からちょこちょことシェーダーを勉強しているのだけれど、なかなか思ったように書けるようにならないので、2020年は本腰を入れてシェーダーを勉強しようと思う。
勉強するためにUdemy、書籍、同人誌、ブログなどを参考に進めているが、自分がアウトプットしていかないと憶えないので、ここにはやりたいこととその実装、メモを書いていく。
まずシェーダーで頂点を動かすのをやりたかったので、書いてみた。
Shader "Custom/SimpleVertex" { Properties { _BendWeight("Bend Scale", Range(0.0, 1.0)) = 0.2 _MainTex("Main Texture", 2D) = "white" {} } SubShader { CGPROGRAM // vertex: vertと指定すると、SurfaceShaderで頂点をいじれる #pragma surface surf Lambert vertex:vert #define PI 3.14159 float _BendWeight; sampler2D _MainTex; struct Input { float4 color: Color; }; void vert(inout appdata_full v) { // _Timeを使って動きをつくる float bend = sin(PI * _Time.x * 20); // v.texcoordを使うことでTextureの位置によって動く大きさが変えることができる float x = sin(v.texcoord.x * PI); float y = sin(v.texcoord.y * PI); v.vertex.y += _BendWeight * bend * (x+y); } void surf(Input IN, inout SurfaceOutput o) { o.Albedo = IN.color.rgb; } ENDCG } FallBack "Diffuse" }
こちらを参考にさせていただきました。