シェーダー入門したくないけど書いてみたい その1
はじめに
この記事ではシェーダに関して入門することができません。とりえあずUnityでシェーダを書いて見たい人向けのブログです。シェーダに関する詳細な知識は一切紹介しません。
予めカミングアウトしておくと筆者もシェーダー入門してません。
前提
- Unityをそこそこ使ってる
- シェーダーを書いたことがない(人向け)
諸注意
この記事は薄っぺらい知識で記述されています。記事に誤りがございましたらコメント欄からご指摘お願いいたします。
事前準備
alfa-jpn/ShaderLesson · GitHub から ShaderLesson.unitypackage を取得し、Unityにインポートしてください。
00.シェーダについて最低限知っておくべきこと
そもそもシェーダーとは
とても難しそうに思えてしまいますが、シェーダーで実装しなければいけないことは色情報を決定する処理だけです。
数学的知識は必ずしも必須ではない。
プログラミングと聞くと数学が必要と勘違いしている人たちと同様の勘違いです。Unityのシェーダーにおいては用途によって必要になるだけです。
でもライトの計算とか必要なんでしょ?
そういう難しいことは積極的にUnityの便利な機能に委託していきましょう!
01.HelloShader
`01.HelloShader/HelloShader.unity` を開いてみてください。開くとこのように真っ黒な箱が表示されていると思います。
このCubeオブジェクトのマテリアルには次のようなシェーダが適用されています。
Shader "ShaderLesson/01.HelloShader/Question" { SubShader { Pass { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma vertex vert #pragma fragment frag float4 vert(float4 v:POSITION) : SV_POSITION { return mul (UNITY_MATRIX_MVP, v); } fixed4 frag() : SV_Target { return fixed4(0, 0, 0, 1.0); } ENDCG } } }
このシェーダのポイント
このシェーダには2つの重要なポイントがあります。一つ目はvertという頂点シェーダが存在すること、二つ目はfragというフラグメントシェーダーが存在することです。他の部分は定型文みたいなものだと覚えてください。このレッスンでは触れません。
頂点シェーダ
名前のまんまです。モデルの頂点を画面上の座標に変換するシェーダです。本当は非常に面倒くさい計算が必要になりますが `UNITY_MATRIX_MVP` のおかげで、モデルの頂点を乗算するだけで画面上の座標に変換できます。
フラグメントシェーダ(別名:ピクセルシェーダ)
ピクセルシェーダと言われたほうがピンときますね。最終的な色を決定するシェーダです。今回は `return fixed4(0, 0, 0, 1.0);` で黒色を返しているだけです。
御託はこのへんまでにして、シェーダ書いてみましょう!