知識0からのUnityShader勉強

知識0からのUnityShader勉強

UnityのShaderをメインとして、0から学んでいくブログです。

【Unity Shader】BoatAttackの崖シェーダー【2】 #122

はじめに 環境 Normal 草のノーマルマップのサンプリング 岩と崖のノーマルマップのブレンド 崖のディテールテクスチャ ノーマルマップのブレンド Normalの出力 Smoothness 岩の滑らかさ 水のマスクとブレンドする Ambient Occlusion PBR 結果 ソースコード …

【Unity Shader】BoatAttackの崖シェーダー【1】 #121

はじめに 環境 CliffShader Albedo 草のテクスチャのサンプリング 崖のテクスチャのサンプリング 草のマスク 草のマスクの補完 草のマスクの補完される値 崖テクスチャ 接空間をワールド空間に変換 Inを計算する 水のマスク Albedoの出力 結果 はじめに 今回…

【Unity】使用しているTagsAndLayersを検索 #120

はじめに 環境 ソースコード TagとLayer SortingLayer 使い方 はじめに TagsAndLayersで使用しているものをリストアップするエディタ拡張を制作しました。 TagsAndLayersはEdit/Project Settings...にある、以下の部分になります。 環境 Unity 2021.3.6f1 ソ…

【Unity Shader】SwapBuffer #119

はじめに ソースコード ScriptableRendererFeature ScriptableRenderPass シェーダー SwapBufferとは 以前との比較 描画結果 参考サイト様 はじめに 今回はURP12で追加されたSwapBufferを解説します。 Unity 2021.3.6f1 Universal RP 12.1.7 ソースコード Sc…

【Unity Shader】Shader Graphでレイマーチング #118

はじめに コード ShaderGraph Raymerching.hlsl GetLight.hlsl 円の描画 カメラの位置 レイの向き レイをすすめる RayMarching.hlsl CustomFunctionのinspector レイにあたった部分を描画 円を表示するレイマーチングの全体 描画結果 ライティング ライトの…

【Unity Shader】Built-inのポストエフェクトをURPに変更 #117

はじめに ソースコード ScriptableRendererFeature ScriptableRenderPass シェーダー スクリプト側について URP Assetの設定 シェーダーをURPに対応 TransformObjectToHClip SAMPLE_DEPTH_TEXTURE Linear01Depth 結果 Threshold Attenuation Intensity 不明…

【Unity Shader】Renderer Featureによるポストプロセス #116

はじめに ソースコード ScriptableRendererFeature ScriptableRenderPass シェーダー RendererFeature ScriptableRendererFeature ScriptableRenderPass コンストラクタ CoreUtils.CreateEngineMaterial RenderPassEvent RenderTargetHandle Execute Command…

【UnityShader】ライティングの基礎シェーダー #115

はじめに シェーダー 拡散反射光 求め方 _WorldSpaceLightPos0 鏡面反射光 求め方 環境光 求め方 ShadeSH9 深堀り 使わなかったもの 各光の描画結果 拡散反射光 鏡面反射光 環境光 上記3つを合わせたもの 他のライトの実装 他のライトを追加した描画結果 参…

【UnityShader】Deferred Shading #114

はじめに Forward Rendering ライティング パス 問題点 Differd Rendering パス G-Buffer メリット デメリット 半透明のオブジェクトを正しく描画できない MSAAが使えない MSAA 実装 結果 CameraDepthTexture ShadowMapTexture GBufferTexture0 GBufferTextu…

【UnityShader】Cascade Shadow Maps【3】 #114

はじめに 深度を渡すシェーダー 影を受け取るシェーダー 解説 深度を渡すシェーダー 頂点シェーダー フラグメントシェーダー 影を受け取るシェーダー 頂点シェーダー フラグメントシェーダー 影の重み Near Far 参考 影の計算 結果 はじめに 前回、CSMsのス…

【UnityShader】Cascade Shadow Maps【2】 #113

はじめに 実装 Unity上 カメラのInspector PlaneのInspector ソースコード スクリプト 影を描画するシェーダー 影を受け取るシェーダー 解説 初期化 視錐台 DirectionalLightカメラ Update MainCameraを4分割した、視錐台の計算 各視錐台のnearとfar 各視錐…

【UnityShader】Cascade Shadow Maps【1】 #112

Cascade Shadow Mapsとは ジャギーが目立ってしまっている例 発生してしまう原因 考え方 CSMsでのシャドウマップイメージ ソースコード無しでの実装 オブジェクトの配置 ライトの設定 影をレンダリングするカメラの距離を伸ばす 設定後 Cascadeの追加 Cascad…

【UnityShader】オブジェクトに軌跡をつける #111

はじめに 実装 Unity上 オブジェクト マテリアル スクリプト シェーダー 解説 Trail() InverseTransformDirection バーテックスシェーダー weight tex2Dlod tex2Dlodの詳しい解説 結果 参考サイト様 はじめに UnityのTrailRendererに似た、オブジェクトに追…

【UnityShader】投影テクスチャシャドウ #110

投影テクスチャシャドウとは 実装 Unity上 影用のカメラのInspector オブジェクト Scene スクリプト シェーダー 解説 CameraSettings() depth allowHDR UpdateRenderTexture() フラグメントシェーダー 結果 参考サイト様 投影テクスチャシャドウとは 前回行…

【UnityShader】投影テクスチャマッピング #109

前回の成果 オブジェクトの影を受け取った。 soramamenatan.hatenablog.com 今回やること 投影テクスチャマッピングを実装します。 light11.hatenadiary.com 事前準備 Scene上にGameObjectを配置し、今回制作したスクリプトをアタッチします。 スクリーンと…

【UnityShader】オブジェクトの影を受け取る #108

前回の成果 オブジェクトの影を落とした。 soramamenatan.hatenablog.com 今回やること 前回のコードのままですと、他のオブジェクトからの影を受け取ることができません。 なので、その部分を修正します。 影を受け取れていない 手前のオブジェクトが前回、…

【UnityShader】オブジェクトの影を落とす #107

前回の成果 Bloomシェーダーについて学んだ。 soramamenatan.hatenablog.com 今回やること シェーダーでの影について学んでいきます。 事前準備 Scene上にCubeを配置します。 Cubeの影が出るようにPlaneを配置して準備は完了となります。 影 Unityのデフォル…

【UnityShader】Bloomシェーダー #106

前回の成果 3Dモデルを液体のようにするシェーダーについて学んだ。 soramamenatan.hatenablog.com 今回やること 以下のサイト様を参考に、Bloomシェーダーを実装します。 www.shibuya24.info 事前準備 Scene上にSpriteRendererを配置します。 そして、MainC…

【UnityShader】3Dモデルを液体のようにする #105

前回の成果 その他のオペレータについてまとめた。 soramamenatan.hatenablog.com 今回やること 以下のサイト様を参考に、3Dモデルを液体のようにするシェーダーを制作します。 qiita.com 事前準備 Scene上に適当な3Dモデルを配置します。 そして、今回制作…

【UniRx】その他のオペレータ #104

前回の成果 Observableが完了したときに処理を行うオペレータについてまとめた。 soramamenatan.hatenablog.com 今回やること その他のオペレータについてまとめます。 前回の成果 今回やること 購読時に指定したメッセージを最初の値として発行する StartWi…

【UniRx】Observableが完了時に処理を行うオペレータ #103

前回の成果 エラーハンドリングのオペレータをまとめた。 soramamenatan.hatenablog.com 今回やること Observableが完了時に処理を行うオペレータをまとめます。 前回の成果 今回やること ストリームのOnCompletedが呼ばれたら、同じストリームを生成する Re…

【UniRx】エラーハンドリング系のオペレータ #102

前回の成果 非同期処理のオペレータをまとめた。 soramamenatan.hatenablog.com 今回やること エラーハンドリング系のオペレータをまとめます。 前回の成果 今回やること 例外発生時に、例外を補足せずに処理を行う DoOnError ソースコード 結果 例外発生時…

【UniRx】非同期処理のオペレータ #101

前回の成果 時間系のオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回は非同期処理のオペレータについてまとめます。 前回の成果 今回やること 処理を別スレッドで実行したい ToAsync ソースコード 結果 Invoke()の呼ぶタイミン…

【UniRx】時間系のオペレータ #100

前回の成果 メッセージを変換するオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回は時間系のオペレータについてまとめます。 前回の成果 今回やること 一定時間後にメッセージを発行したい Timer 一定時間後にメッセージを発行 …

【UniRx】メッセージを変換するオペレータ #99

前回の成果 Observableを分岐させるオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はメッセージの変換をするオペレータについてまとめます。 前回の成果 今回やること 値を変換したい Select 値を変換する 結果 型変換をし、失…

【UniRx】Observableを分岐させるオペレータ #98

前回の成果 メッセージを合成するオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はObservableを分岐させるオペレータについてまとめます。 いわゆるHot変換になりますので、そちらに関しては以下を参考にしてみてください。 so…

【UniRx】メッセージ同士の合成 #97

前回の成果 Observable自体を合成するオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はメッセージ同士の合成についてまとめます。 前回の成果 今回やること 前回のメッセージの結果と今回の結果を使用したい Scan 前回のメッセ…

【UniRx】Observable自体を変換するオペレータ #96

前回の成果 Obsevableを合成するオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はObservable自体の変換をまとめます。 前回の成果 今回やること ObservableをReadOnlyReactivePropertyに変換 ToReadOnlyReactiveProperty ToRea…

【UniRx】Observableを合成するオペレータ #95

前回の成果 メッセージのフィルタリングをするオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はObservableを合成するオペレータについてまとめます。 前回の成果 今回やること 複数のObservableから一番早く値が流れてきたもの…

【UniRx】メッセージをフィルタリングするオペレータ #94

前回の成果 ファクトリメソッド系のオペレータについて学んだ。 soramamenatan.hatenablog.com 今回やること 今回はメッセージのフィルタのオペレータについてまとめます。 前回の成果 今回やること メッセージのフィルタ 条件を満たすものを流す Where 結果…