シェーダー入門したくないけど書いてみたい その4 テクスチャ編
はじめに
この記事ではシェーダに関して入門することができません。とりえあずUnityでシェーダを書いて見たい人向けのブログです。
今回はテクスチャを利用したシェーダを書いてみます。
事前準備
事前準備が済んでいない方は、第一回目の事前準備の項目を参考に事前準備を行ってください。
シェーダー入門したくないけど書いてみたい その1 - 波打際のブログさん
04.TextureShader
`04.TextureShader/TextureShader.unity` を開いてみてください。開くと箱に世界の理(ことわり)がレンダリングされていると思います。
このシェーダは次のように実装されています。
Shader "ShaderLesson/04.TextureShader/Question" { Properties { _MainTex("テクスチャ", 2D) = "white" { } } SubShader { Pass { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; uniform fixed4 _MainTex_ST; struct appdata { float4 vertex : POSITION; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; }; v2f vert (appdata v) { v2f o; o.pos = mul( UNITY_MATRIX_MVP, v.vertex ); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } fixed4 frag(v2f v) : SV_Target { return tex2D(_MainTex, v.uv); } ENDCG } } }
このシェーダのポイント
このシェーダのポイントは、TRANSFORM_TEXマクロでテクスチャ用のUV座標を作成していること、tex2D関数でテクスチャのピクセルカラーを取得していることです。
TRANSFORM_TEXマクロ
TRANSFORM_TEXマクロは `UnityCG.cginc` をインクルードすることで使えるUnityの便利マクロです。テクスチャに設定されたタイリングとオフセットを反映したUV座標(テクスチャ座標)を取得するためのマクロです。また、このマクロを利用するために `uniform fixed4 _MainTex_ST;` という一時変数を定義しています。
tex2D関数
tex2D関数はUV座標(テクスチャ座標)を指定してテクスチャのピクセルカラーを取得することができます。今回はTRANSFORM_TEXマクロで取得したUV座標を指定して `_MainTex` のピクセルカラーを取得しています。