何もわからないがShaderを学ぶ!第1回
VRChatでは様々な表現ができる。たとえばBlenderなど3Dモデリングツールを使った小物の作成や、トラッカーを用いたダンスなどの身体表現がある。VRChatを始めてからたくさんの表現を見た。中でも特に面白いと思ったのは、ShaderFes2021というワールドで展示されている、シェーダを使った多種多様な表現だ。
自分もこのようなシェーダーを活用した面白い視覚効果で遊びたい!と思ったが、シェーダーについてまったくの無知。そもそも3Dがどのように描画されているのかすらよくわかっていない。
そこで、「何もわからないがShaderを学ぶ」では、3Dの基本的な描画方法から始まり、Unity ShaderLabを使ったオリジナルのおもしろシェーダーを作成できるようになるまでの軌跡を残す。自分の振り返りと、Shaderに興味があるけど何をしたらいいかわからない初学者にとっての参考になればよいと思う。
そもそも3Dはどうやって描画されているの?
3Dはレンダリングパイプラインという一連の流れを通してスクリーンに描画される。ざっくりと把握する。
ApplicationとGeometry
ユーザの入力やアニメーション、衝突計算などにより、CPUが頂点、辺、ポリゴンの位置を決める。また、仮想空間がプレイヤー(カメラ)に対してどのように位置するかを決定する。
Illumination
モデルに色を付けて、照明を当てる。昔は計算資源が乏しかったため、前に計算されていた。
ViewingPerspective
透視投影か平行投影か、または視野などのカメラ設定情報を基に、パースをかける。クリッピングされる前に行われる点に注意。
ClippingとScreenSpaceProjection
カメラの外となる領域を切り落とし、3Dから2Dのスクリーンに投影する。
Reasterisation
ポストプロセスなど、3Dではなく2Dにかけるエフェクトを処理する。Unityの被写界深度やブルームなどはこれ。
Display
実際に見ることができます。うれしいね。
参考文献
[1] Graphics pipeline (https://en.wikipedia.org/wiki/Graphics_pipeline), 2023/10/03
[2] Shader Development from Scratch for Unity with Cg https://www.udemy.com/course/unity-shaders/, 2023/10/03