Standard Shader

レンダリングモード (Rendering Mode)
  • Opaque不透明
  • Cutoutアルファ値が閾値より小さいピクセルを描画せず、それ以外のピクセルを描画する。
  • Transparentアルファ値に応じてマテリアルの透過度を決める。反射やハイライトは透過度に関わらず完全に描画される。
  • Fade反射やハイライトの描画も含めてアルファ値に応じて徐々にフェードさせる。

ドキュメント:

Rendering Mode | Unity マニュアル [公式]

アルベドカラーと透明度 | Unity マニュアル [公式]

参考:

Rendering Mode の違いメモ – Qiita

スクリプトで Unity の Standard シェーダーの Rendering Mode を変える – Qiita

標準シェーダーのレンダリングモードをスクリプトから切り替える | Kludge Factory

シェーダーを作成する

ブレンドモード
  • Blend Offブレンドしない (デフォルト)
  • Blend SrcAlpha OneMinusSrcAlphaアルファブレンディング
  • Blend One OneMinusSrcAlphaアルファ乗算済み画像のブレンディング
  • Blend One One加算
  • Blend OneMinusDstColor Oneソフト加算
  • Blend DstColor Zero乗算
  • Blend DstColor SrcColor2倍乗算
カットアウト (Cutout)
// SubShader
Tags {
   "Queue"           = "AlphaTest"
   "RenderType"      = "TransparentCutout"
   "IgnoreProjector" = "True"
}

// fragment shader
clip(textureColor.a - alphaCutoffValue);Code language: Arduino (arduino)
Alpha to Coverage

アルファ抜きのエッジにアンチエイリアス (MSAA) を適用して、切り抜きの品質を向上させる。

// SubShader
Tags {
    "Queue"           = "AlphaTest"
    "RenderType"      = "TransparentCutout"
    "IgnoreProjector" = "True"
}

// Pass
AlphaToMask OnCode language: Arduino (arduino)

ドキュメント:

デプス書き込みありの透過シェーダー | Unity 2018.4 マニュアル [公式]

ShaderLab コマンドBlend | Unity マニュアル [公式]

参考:

Blend を試してみる – Qiita

スタンダードシェーダーでモデルを綺麗に半透明表示する – Qiita

アルファブレンディングとステンシルバッファ – Qiita

3D モデルの半透明をキレイに表示するシェーダを実装する | コガネブログ

アルファとアルファテスト | Tsumiki Tech Times

Alpha Test を綺麗に見せる方法 | Tsumiki Tech Times

透明なシェーダを作る | おもちゃラボ

Unlit/Transparent Cutout | 強火で進め

フラグメントシェーダーで背景を透過してみる | マカロン

ToonLit シェーダでテクスチャの透過がされない – teratail

How add support to alpha on this shader ? – Unity Forum

Why does this transparent shader cause objects’ z-sorting to be backwards? – Game Development Stack Exchange

Possible to create transparency shader which doesn’t stack alpha values – Game Development Stack Exchange

ブレンドモード (Blend)

シェーダーパスのブレンドモードを指定するには、Blend コマンドを使用する。

ドキュメント:

ShaderLab コマンドBlend | Unity マニュアル [公式]

参考:

描画モード切替に対応して、似たようなシェーダーを1つにまとめよう – Qiita

ブレンドモードをインスペクタから指定する | LIGHT11

エフェクト統一シェーダーがあると捗るよね | SEGA TECH Blog

final alpha value wrong – Unity Answers

Graphics.Blit trail alpha artifact – reddit

レンダーキュー (Render Queue)

参考:

ZWrite / ZTest / RenderQueue を理解する | KENTO

半透明化のために Render Queue や ZWrite と戦ってみた | リクルス

clip や discard を使うときには Render Queue を Alpha Test にする話 | LIGHT11

Transparent シェーダーレンダリング Tips Render Queue 編 | すぎしーの XR と 3DCG

不透明度のシェーダーの表示順 | albatrus のブログ

サーフェスシェーダー

パラメータ
  • alpha または alpha:auto フェード及び事前乗算アルファ透明を有効にする
  • alpha:blend アルファブレンディング
  • alpha:fade アルファ値を用いてフェードを適用する
  • alpha:premul 透明度として事前乗算アルファ値を用いる
  • alphatest:VariableName アルファ値を用いてカットアウトを適用する
  • keepalpha アルファ値に 1.0 を書き込む
  • decal:add 加算デカール
  • decal:blend 半透明デカール

ドキュメント:

オプションのパラメータ – サーフェスシェーダーの記述 | Unity 2021.3 マニュアル [公式]

参考:

半透明描画するサーフェースシェーダー – Qiita

Surface Shader オプションの alpha / alpha:fade の違いについて – Qiita

アルファとアルファテスト | Tsumiki Tech Times

pragma の alpha | 知識 0 からの Unity Shader 勉強

Transparency with Standard Surface shader – Unity Forum

Transparency Sort Mode

ドキュメント:

TransparencySortMode | Unity スクリプトリファレンス [公式]

参考:

Transparent sprites have incorrect depth sorting from one direction – Unity Forum

Transparent Depth Prepass

HDRP で Transparent Depth Prepass を有効にするには、メニューから「Edit > Project Settings」を開いて、「Quality > HDRP > HDRPxxxQuality > Rendering > Transparent Depth Prepass」を有効にする。

ドキュメント:

Rendering – The High Definition Render Pipeline Asset | High Definition RP 10.4 Manual [Official]

参考:

#12 andywatts – Transparent doesn’t work see video – Unity Forum

アルファテスト (AlphaTest)

ドキュメント:

旧 Alpha Testing | Unity マニュアル [Official]

参考:

アルファテストがレガシーなものになっていた件 | 渋谷ほととぎす通信

アルファクリップ

ドキュメント:

clip | Microsoft Learn [公式]

参考:

アルファクリップなシェーダーを書く | 夜風の MixedReality

clip や discard を使うときには Render Queue を Alpha Test にする話 | LIGHT11

アルファテストがレガシーなものになっていた件 | 渋谷ほととぎす通信

Alpha to Coverage

参考:

Alpha Test を綺麗に見せる方法 | 積木製作

深度

コマンド

ドキュメント:

デプス書き込みありの透過シェーダー | Unity 2018.4 マニュアル [公式]

参考:

custom shader not obeying alpha (transparency) – Stack Overflow

HDRP

リンク:

透過性の正確な表現 – ハイエンドビジュアライゼーション用に HD レンダーパイプラインをセットアップする方法 | Unity Blog [公式]

描画順がおかしい

対処法:

  • 「深度プリパス」 (Depth Pre-Pass) を用いる。
  • モデル毎に透明度が同じ → 別バッファーに不透明で描画してスプライトとして表示する。
  • モデル内でポリゴンをソートしておく。(実用上は実現不可能???)
こちらのページを参照

参考:

Zバッファとレンダリング順の仕組み – Qiita

#2 bgolus – Transparent doesn’t work see video – Unity Forum

深度ピーリング

参考:

Depth Peeling – Wikipedia

アウトライン/輪郭を描画する

参考:

How to make Outline Shader draw by Z-Order? – Unity Forum

Weighted Blended Transparency

動画:

Weighted Blended Transparency in Unity

Order-Independent Transparency (Approximation)

Approximated Order Independent transparency

リポジトリ:

NegInfinity/WeightedBlendedTransparency – GitHub

リンク:

Weighted Blended Transparency | Negative Infinity

フォーラム:

Approximated Order Independent Transparency | Unity Forum

OIT Lab

リポジトリ:

candycat1992/OIT_Lab: Order-Independent Transparent – GitHub

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA