mcpField
U
unity-shaders-rendering

unity-shaders-rendering

github.com/josiahsiegel開発59127 回インストール19 週間前に更新
リポジトリ

unity-shaders-rendering について

Unity開発者向けのレンダリングとシェーダーのリファレンスです。Built-in RP、URP、HDRPを対象に、Shader Graph、手書きシェーダー、ライティング、視覚効果を扱います。

主な機能

  1. 01Built-in RP、URP、HDRPの比較
  2. 02Shader Graphのノード構成
  3. 03ShaderLabとHLSLによるシェーダー作成
  4. 04ライティング、ライトマップ、ポストプロセスの設定
  5. 05VFX GraphとURPレンダーフィーチャーの利用

活用シーン

  1. 01Unityプロジェクトのレンダーパイプライン選定
  2. 02ディゾルブ、発光、頂点変位シェーダーの作成
  3. 03シーンのライティングとライトベイクの設定
  4. 04URPでアウトラインやスクリーンスペース効果を実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill unity-shaders-rendering

インストール後、Claude Code で/unity-shaders-renderingを入力して読み込まれたか確認します。

詳細

Unity のシェーダーとレンダリング

概要

Unity のレンダリングシステム、シェーダー開発、ライティング設定、ビジュアルエフェクトのリファレンスです。3 種類すべてのレンダーパイプライン、Shader Graph、手書きシェーダー、VFX Graph を取り上げます。

レンダーパイプラインの比較

機能Built-in RPURPHDRP
対象レガシープロジェクトモバイル、VR、幅広い用途ハイエンド PC/コンソール
シェーダー言語Surface シェーダー + HLSLHLSL(Surface シェーダーなし)HLSL
Shader Graphありありあり
SRP Batcherなしありあり
レンダリング機能なしあり(ScriptableRendererFeature)Custom Pass
ポストプロセスPost Processing Stack v2Volume システム(組み込み)Volume システム(組み込み)
レイトレーシングなしなし(プローブベース)あり(DXR)
パフォーマンス中程度幅広い用途に最適化最高品質

推奨: ハイエンドなビジュアルのみを対象とする場合(HDRP)を除き、新規プロジェクトには URP を使用してください。Built-in RP はレガシーです。可能であれば移行してください。

Shader Graph

はじめに
  1. Project 内で右クリックし、Create > Shader Graph > URP > Lit Shader Graph を選択します
  2. ダブルクリックして Shader Graph エディターを開きます
  3. Master Stack の出力に接続するノードネットワークを構築します
  4. シェーダーを使用する Material を作成し、レンダラーに割り当てます
Master Stack の出力(URP Lit)
出力型用途
Base ColorColor(RGB)アルベド/ディフューズカラー
NormalVector3タンジェント空間の法線マップ
MetallicFloat(0-1)金属/誘電体
SmoothnessFloat(0-1)Roughness の逆数
EmissionColor(RGB)自己発光
AlphaFloat(0-1)透明度
Alpha Clip ThresholdFloatアルファテストのしきい値
よく使われるノードパターン
効果主なノード
ディゾルブNoise > Step > Alpha Clip + エッジの発光
UV スクロールTime > Multiply > UV に Add
フレネルグローFresnel Effect > Multiply color > Emission
トライプラナー マッピングTriplanar ノード(UV の伸びを回避)
色の変化パラメーターまたは時間を使って色を Lerp
頂点変位Noise > Multiply > Position に Add
アウトライン2 パス:カスタムレンダリング機能で反転ハルを使用
Shader Graph サブグラフ

再利用可能なノードグループをサブグラフに抽出します(Create > Shader Graph > Sub Graph)。共通のノイズ関数、UV 変換、カスタムライティングモデルに使用します。

手書きシェーダー(ShaderLab + HLSL)

URP シェーダーの構造
Shader "Custom/SimpleUnlit"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
    }

    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" }

        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes
            {
                float4 positionOS : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct Varyings
            {
                float4 positionHCS : SV_POSITION;
                float2 uv : TEXCOORD0;
            };

            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);

            CBUFFER_START(UnityPerMaterial)
                float4 _MainTex_ST;
                half4 _Color;
            CBUFFER_END

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                OUT.uv = TRANSFORM_TEX(IN.uv, _MainTex);
                return OUT;
            }

            half4 frag(Varyings IN) : SV_Target
            {
                half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv);
                return tex * _Color;
            }
            ENDHLSL
        }
    }
}

Built-in シェーダーとの主な違い:

  • HLSLPROGRAM/ENDHLSL を使用します(CGPROGRAM/ENDCG ではありません)
  • UnityCG.cginc ではなく、URP シェーダーライブラリをインクルードします
  • sampler2D ではなく、TEXTURE2D/SAMPLER マクロを使用します
  • SRP Batcher との互換性のため、プロパティを CBUFFER_START(UnityPerMaterial) で囲みます

ライティング

ライトの種類
種類用途シャドウのコスト
Directional太陽、グローバルイルミネーション低(カスケードシャドウマップ)
Pointたいまつ、ランプ中
Spot懐中電灯、ステージライト中
Area(ベイクのみ)窓からの柔らかな光、パネル高(ベイクのみ)
ライティングモード
モード説明最適な用途
Realtime毎フレーム計算動的オブジェクト、少数のライト
Bakedライトマップに事前計算静的環境
Mixedベイクした間接光 + リアルタイムの直接光最適なバランス
ライトマップのベイクに関するヒント
  • シーンのスケールに基づいてライトマップの解像度を設定します(屋内では 1 単位あたり 10~40 テクセル)
  • ベイク済みシーン内の動的オブジェクトには Light Probes を使用します
  • 金属面や反射面には Reflection Probes を使用します
  • ベイク時間を短縮するには GPU Lightmapper を有効にします
  • Static フラグでオブジェクトを Contribute GI として設定します

ポストプロセッシング(ボリュームシステム)

Setup:
1. Add a Volume (Global or Local) to the scene
2. Create a Volume Profile asset
3. Add overrides: Bloom, Color Adjustments, Tonemapping, etc.
4. Camera must have Post Processing enabled (URP Camera settings)
エフェクトパフォーマンス備考
ブルーム低しきい値を使って強度を調整します
色調補正非常に低彩度、コントラスト、カラーフィルター
トーンマッピング非常に低映画のような見た目には ACES を使用します
ビネット非常に低フレームを暗くします
アンビエントオクルージョン(SSAO)中モバイルでは無効にします
被写界深度高映画的な演出にはボケのみを使用します
モーションブラー中VR では乗り物酔いを引き起こす場合があります

VFX Graph と Particle System の比較

機能Particle System(Shuriken)VFX Graph
実行CPUGPU(コンピュートシェーダー)
パーティクル数数千数百万
複雑さコンポーネントベース、シンプルノードベース、複雑
プラットフォームすべてコンピュートシェーダー対応環境のみ
統合物理、衝突物理との統合は限定的

ゲームプレイと統合するエフェクト(物理衝突、少数のパーティクル)には Particle System を使用します。視覚的な演出(雨、炎、魔法、環境パーティクル)には VFX Graph を使用します。

URP レンダリング機能

カスタム ScriptableRendererFeatures を使って URP のレンダリングを拡張します。

public class OutlineFeature : ScriptableRendererFeature
{
    OutlinePass _pass;

    public override void Create()
    {
        _pass = new OutlinePass();
        _pass.renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
    }

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData data)
    {
        renderer.EnqueuePass(_pass);
    }
}

一般的な用途:カスタムアウトライン、スクリーンスペースエフェクト、レンダーテクスチャの生成、ステンシルベースのエフェクト。

その他のリソース

参照ファイル
  • references/shader-recipes.md -- シェーダー実装の完全な例:トゥーン/セルシェーディング、水、ディゾルブ、ホログラム、フォースフィールド、プロシージャルスカイボックス、ステンシルポータル、頂点アニメーション、カスタムライティングモデル
  • references/lighting-vfx-detail.md -- 高度なライティング設定、GI のトラブルシューティング、VFX Graph のレシピ集(炎、煙、電気、ポータル)、Scriptable Render Pipeline のカスタマイズ、カスタムレンダーパス

コメント