Shader
レイトレーシングの概念を理解するためにUnityでレイトレしてみます。 今回は球を表示して簡単なライティングを行うところまで実装します。
ライトの方向を考慮したリムシェーダを書いてみます。
Unityにおけるポストエフェクトは二つの実装方法が混在していてどちらを使えばいいのか少しわかりづらいです。 この記事ではUnityでポストエフェクトを掛ける二つの方法とそれぞれのメリット・デメリットを紹介します。
UnityのSurface Shaderを使うと、簡単にシェーダが作成できます。 複雑なライティング計算はUnityが用意したものを使うことができるので、 表面の色や材質を定義するだけでシェーダが出来上がります。
ノードベースで簡単にシェーダを作ることができるShader Graphの使い方をまとめました。
距離を表すグラデーションテクスチャを使ってこのようなアニメーションを作ります。 テクスチャを変えるだけでいろんなアニメーションが作れます。
シェーダで扱う関数のインライン化とそのメリット・デメリットについてまとめました。
Matcapにノーマルマップを適用する方法です。
UnityのFowardRenderingにおけるFogの設定方法と、カスタムシェーダの書き方です。
MaterialPropertyBlockの使い方です。
自作のポストエフェクトをPost Processingのカスタムエフェクトとして実装する方法です。
地面にキューブマッピング&ノーマルマッピングすると、反射するはずのないキューブマップの下半分が映り込んでしまいます。 その原因の解説と解決方法の記事です。
AssetBundleから参照されるcgincファイルにはAssetBundle名をつけないとcgincの更新が反映されない現象と対応方法です。 2019/2/20追記 準備 問題点 解決方法
別階層のcgincを変更してもそれをincludeするシェーダがコンパイルされない(されなかった)話です。 Unity2018では修正されているようなのでこれから直面する方は少ないと思いますが一応。
ノーマルマップをフローマップで流す方法です。
2つのノーマルマップをブレンド率を指定して合成する方法です。
金属におけるフレネル反射の考え方とシェーダにおける実装についてまとめました。
エディタ拡張でHDRテクスチャをLDRにエンコードするウィンドウを作る方法です。
Uniteのクォータニオン完全マスターの動画を見ていたら座標変換の説明がとてもわかりやすかったので、 復習と用語の整理を兼ねてまとめてみました。
ノーマルマッピングとキューブマッピングを組み合わせたシェーダの実装方法です。
フラグメントシェーダで接空間<->ワールド空間変換する方法です。
シェーダコードは一般的にプロジェクトの規模が大きいほど共通化の重要性が増しますが、 共通化のために知っておかなければいけない知識がそれなりにあるのでまとめました。
使用するTEXCOORDをマテリアルから指定できるようにする方法です。
シェーダプロパティ用のアトリビュートを自作するMaterialPropertyDrawerの使い方です。
KeywordEnumがスクリプトから扱いづらい問題とその解決案です。
MaterialのInspectorでブレンドモード(加算とか乗算とか)を選べるようにしてみます。
shader_featureやmulti_compileでシェーダのバリアントを作る方法です。
RenderQueueやRenderTypeをシェーダの外側から、つまりスクリプトから変更する方法です。
UnityのシェーダでUsePassにより他のシェーダのパスを使う方法です。
シェーダでcgincファイルをインクルードして使う方法です。