イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Shaderの勉強に役立ったサイト

++基礎のオススメ学習順

Unity Shader Programming Vol.01 (v.1.1.2)【PDF】 - XJINE's - BOOTH

OpenGL が世界を描画する仕組み · けんごのお屋敷

でシェーダ・レンダリングパイプラインの仕組みと基礎文法の習得

(基礎中の基礎について書かれた書籍であるが、この基礎をちゃんと書いてくれている文書がないので、非常に貴重な資料。これを抑えておかないと他のサンプルとか読んでなんとなく分かった気になれても理解不足で学習効果が低くなる)

 

=>

7日間でマスターするUnityシェーダ入門 - おもちゃラボ

=>可能な限りコードを再現してパラメータを弄るなどする。

Unity Shader 勉強会 - Google スライド

=>頂点シェーダについて勉強出来る

 とりあえず、基本はこれで把握できると思う

楽しい!Unityシェーダー お絵描き入門! - Google スライド

=>フラグメントシェーダでお絵かき出来ることを知れる

 

+++++その他

++Shaderでメソッドを定義して使用する場合、使用するメソッドは使用されるより上の行に書かれている必要がある

 

++float4x4みたいなマトリクスの扱い

Per-Component Math Operations - Windows applications | Microsoft Docs

 

++教科書的なレンダリングパイプラインの解説

https://web.wakayama-u.ac.jp/~tokoi/lecture/gg/ggbook03.pdf

 

++配列の記法

shader 配列の文法 - イラスト、モデリング、Unity、VR関連

 

++ヘルパー関数・セマンティクスなどのUnityの機能

ビルトインシェーダーヘルパー機能 - Unity マニュアル

UnityObjectToClipPosなど

ビルトインのシェーダー include ファイル - Unity マニュアル

セマンティクスやappdataの内容など 

Unityのシェーダーセマンティクスまとめ - Qiita

 プロパティ

Cg/HLSL でシェーダープロパティーを参照する - Unity マニュアル

Shader Code - Unify Community Wiki

 

 cgincのコード

Unity-Built-in-Shaders/UnityCG.cginc at master · TwoTailsGames/Unity-Built-in-Shaders · GitHub

 

++UsePass

ShaderLab: UsePass - Unity マニュアル

importするみたく、他のシェーダを使える

 

++レンダリングパイプラインの概要

OpenGL が世界を描画する仕組み · けんごのお屋敷

 

++座標空間について

ShaderLab 定義済みの値と座標空間とその変換について - イラスト、モデリング、Unity、VR関連

行列、MvpMatrix(モデル行列、ビュー行列、プロジェクション行列)について | whaison.jugem.jp

モデルビュー変換

 

++数学関連

行列とは?行列の足し算・引き算・かけ算とその有用性【3次元以上のデータを一括計算する知恵】 | アタリマエ!

外積とは何か。ベクトルの外積の定義・意味・大きさについて | アタリマエ!

【内積とは】ベクトルの内積の意味や公式・計算方法を知って大学合格へ! | Studyplus(スタディプラス)

知っておくべき特殊な行列と便利な性質 (大学学部生の方にもおすすめ) - HELLO CYBERNETICS

 

++三次元の回転行列

回転行列 - Wikipedia

HLSLではfloat3x3のように行列を表す。

float3x3 rotate = float3x3(1,0,0,0,cos(angle),-sin(angle),0,sin(angle),cos(angle));

X軸での回転行列ならこのようになる

 

++基礎的なShaderの文法の解説が比較的詳しい

Unityで始めるシェーダー入門 - @IT

Unity シェーダーチュートリアル 基本とサーフェースシェーダー – Tsumiki Tech Times|積木製作

 

++サンプル数が多く、解説まである

7日間でマスターするUnityシェーダ入門 - おもちゃラボ

 

++サンプル数は多いが、解説がないので自力で理解する必要がある

Shaders

https://www.shadertoy.com/browse

すごいシェーダがたくさん投稿されているが、GLSL

とりあえず、以下を読んでおけばちょっと読めるようになる

(シェーダ†入門† | 東京工業大学デジタル創作同好会traP

ShaderToyで座標を変換して円を描くところまでを簡単な解説を交えてやってみる – 3DCG ストラグル!

 =>まとめたもの:

GLSLの文法 - イラスト、モデリング、Unity、VR関連

 

++レイマーチング、特に分かりやすかったサイト

[GLSL] レイマーチング入門 vol.1 - Qiita

 

++レイマーチング・距離関数

GLSL Graphics Compo向けのレイマーチング向けのチュートリアルです

[SphereTracing:領域操作関数]ハニカム構造 - Qiita

GLSL でのレイマーチングについて雑に語ってみます - Qiita

[GLSL] レイマーチング入門 vol.1 - Qiita 

Unity でオブジェクトスペースの Raymarching をフォワードレンダリングでやってみた - 凹みTips

 Unity で Command Buffer を使って Raymarching をしてみた - 凹みTips

Unity でオブジェクトスペースのレイマーチをやってみた - 凹みTips

距離関数のfold(折りたたみ)による形状設計 | gam0022.net

正解するカドの「カド」をレイマーチングでリアルタイム描画する | gam0022.net

 

++距離関数リスト

Inigo Quilez :: fractals, computer graphics, mathematics, shaders, demoscene and more

 

++Fog

フォグは生成されたピクセルの色を、カメラからの距離にもとづいた一定のカラーに向けて、ブレンドします。フォグにより、ブレンドされたピクセルのアルファ値は修正せず、RGB のみ変更します。

ShaderLab: 古い Fog - Unity マニュアル

 

++Pass

ShaderLab: Pass - Unity マニュアル

Passブロックごとに1回レンダリングされる

 

 

++G-Buffer

Deferred Shadingについてまとめてみた - しゅみぷろ

 

++コマンドバッファ・GrabPass

ShaderLab: GrabPass - Unity マニュアル

Unity 5 の CommandBuffer を利用したレンダリングパイプラインの拡張について調べてみた - 凹みTips

【Unity】【シェーダ】GrabPassの説明とシェーダの実装例 - LIGHT11

ShaderLab: GrabPass - Unity マニュアル

 ざっくりいうと、任意の時点でのレンダリング結果、つまり画面に映ってる画像をテクスチャとして取得しシェーダで扱えるようになる、らしい。

 

++Grabpass

【Unity】【シェーダ】GrabPassを使って屈折シェーダを作る - LIGHT11

 Unity 5 の CommandBuffer を利用したレンダリングパイプラインの拡張について調べてみた - 凹みTips

 

++法線マップと接空間

法線マップと接空間 - しゅみぷろ

[Unity] バンプマッピング(法線マッピング)をやってみる - Qiita

 

++ステンシルバッファ

【Unity】ステンシルバッファ入門 - LIGHT11

 

++SurfaceShader

サーフェスシェーダーの記述 - Unity マニュアル

入力は、サーフェスシェーダーの input 構造体に

出力は、SurfaceOutputに

 

++裏と表で別テクスチャを張る方法

【Unity】ポリゴンの裏表で描画を変える - 7080 + 1

surfaceshaderで表裏で違うテクスチャーを貼る – TAKOYAKI (山神廉弥のブログ)

 

++vertex/fragment shader

Unityシェーダーチュートリアル Vertex/Fragment Shader の基本 – Tsumiki Tech Times|積木製作

 

++公式ドキュメント(初心者には優しくない

SurfaceOutputなどについて

サーフェスシェーダーの記述 - Unity マニュアル

pragmaについての解説

頂点シェーダーとフラグメントシェーダーのプログラミング - Unity マニュアル

 

++ジオメトリシェーダ

ジオメトリシェーダ入門 - e.blog

 

++テクスチャマッピング

【Unity】【シェーダ】スクリーンに対してテクスチャをマッピングする方法を完全解説する - LIGHT11

 

++デブスバッファ

【Unityシェーダ入門】デプスバッファの内容を表示する - おもちゃラボ

 

++カスタムレンダーテクスチャ

CustomRenderTextureを使って波紋エフェクトを作る - e.blog

シェーダでレンダリングを行い、それをテクスチャとして使えるようになる、という代物。GrabPassっぽい

 

++Math系のメソッド

組み込み関数 (DirectX HLSL) | Microsoft Docs

 

++inout記法について

void surf (Input IN, inout SurfaceOutput o) 

引数の先頭につけられる、in,out,inoutはそれが入力・出力となる変数であることを表してる。inoutならその変数は入力であると同時に出力・返り値(returnした場合の)となる。見かけ上、参照渡しと同じ

 

++Unityにおける正規化されたスクリーンのポジションの取得

SV_POSITION をつけた vertex はフラグメントシェーダでは [0, 1] の範囲の値ではなく、ビューポートの座標として渡ってきます(例えば (640, 480))。それに対し、TEXCOORD0 をつけた screenPos の方は、ラスタライザを経由して [0, 1] のスクリーン座標として渡ってきています。

Unity でオブジェクトスペースのレイマーチをやってみた - 凹みTips

 

++#include

シェーダファイルの取り込み、分割

【Unity】【シェーダ】シェーダでcgincファイルをインクルードして使う - LIGHT11

Cgのincludeはインライン展開として機能するっぽい

 

++uniform

Unity でShaderの勉強 その1 - Qiita

uniformはvert関数/frag関数で自由に使える変数。
uniformはPropertiesで定義した変数をvert関数/frag関数でアクセスできるようにするやつ。
uniformで定義することでスクリプトから変数を制御することができるようになる。
頂点やピクセル毎の変数ではなく、マテリアル毎の変数となる。

 

++投影テクスチャマッピングの仕組み

Grabpassなど

Unityで投影テクスチャマッピングを実装する際に抑えておくべき基礎情報 - 土屋つかさの技術ブログは今か無しか

 

【Unity】【シェーダ】スクリーンに対してテクスチャをマッピングする方法を完全解説する - LIGHT11

++その他

【Unity入門】Shaderってなんだ?誰でもわかるシェーダー解説! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips

Shader

Unity - マニュアル: ShaderLab 定義済みの値

Shader 勉強メモ 「サンプルを理解する2」 - Unity Days

Unity Shader 勉強会 - Google スライド

【Unity】【シェーダ】Unityシェーダチートシート - LIGHT11

 

 

++有料書籍

Unity Shader Programming Vol.01 (v.1.1.2)【PDF】 - XJINE's - BOOTH

=>買う価値あり。というか、サイト巡りするより、素直にこれ一冊買うのが時間を無駄にしないと思われる