unity-shaders-rendering について
Unity開発者向けのレンダリングとシェーダーのリファレンスです。Built-in RP、URP、HDRPを対象に、Shader Graph、手書きシェーダー、ライティング、視覚効果を扱います。
主な機能
- 01Built-in RP、URP、HDRPの比較
- 02Shader Graphのノード構成
- 03ShaderLabとHLSLによるシェーダー作成
- 04ライティング、ライトマップ、ポストプロセスの設定
- 05VFX GraphとURPレンダーフィーチャーの利用
活用シーン
- 01Unityプロジェクトのレンダーパイプライン選定
- 02ディゾルブ、発光、頂点変位シェーダーの作成
- 03シーンのライティングとライトベイクの設定
- 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 RP | URP | HDRP |
|---|---|---|---|
| 対象 | レガシープロジェクト | モバイル、VR、幅広い用途 | ハイエンド PC/コンソール |
| シェーダー言語 | Surface シェーダー + HLSL | HLSL(Surface シェーダーなし) | HLSL |
| Shader Graph | あり | あり | あり |
| SRP Batcher | なし | あり | あり |
| レンダリング機能 | なし | あり(ScriptableRendererFeature) | Custom Pass |
| ポストプロセス | Post Processing Stack v2 | Volume システム(組み込み) | Volume システム(組み込み) |
| レイトレーシング | なし | なし(プローブベース) | あり(DXR) |
| パフォーマンス | 中程度 | 幅広い用途に最適化 | 最高品質 |
推奨: ハイエンドなビジュアルのみを対象とする場合(HDRP)を除き、新規プロジェクトには URP を使用してください。Built-in RP はレガシーです。可能であれば移行してください。
Shader Graph
はじめに
- Project 内で右クリックし、Create > Shader Graph > URP > Lit Shader Graph を選択します
- ダブルクリックして Shader Graph エディターを開きます
- Master Stack の出力に接続するノードネットワークを構築します
- シェーダーを使用する Material を作成し、レンダラーに割り当てます
Master Stack の出力(URP Lit)
| 出力 | 型 | 用途 |
|---|---|---|
| Base Color | Color(RGB) | アルベド/ディフューズカラー |
| Normal | Vector3 | タンジェント空間の法線マップ |
| Metallic | Float(0-1) | 金属/誘電体 |
| Smoothness | Float(0-1) | Roughness の逆数 |
| Emission | Color(RGB) | 自己発光 |
| Alpha | Float(0-1) | 透明度 |
| Alpha Clip Threshold | Float | アルファテストのしきい値 |
よく使われるノードパターン
| 効果 | 主なノード |
|---|---|
| ディゾルブ | 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 |
|---|---|---|
| 実行 | CPU | GPU(コンピュートシェーダー) |
| パーティクル数 | 数千 | 数百万 |
| 複雑さ | コンポーネントベース、シンプル | ノードベース、複雑 |
| プラットフォーム | すべて | コンピュートシェーダー対応環境のみ |
| 統合 | 物理、衝突 | 物理との統合は限定的 |
ゲームプレイと統合するエフェクト(物理衝突、少数のパーティクル)には 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 のカスタマイズ、カスタムレンダーパス
コメント
Markdown 対応