Standard Shader

レンダリングモード (Rendering Mode)

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

参考:

Unity の Rendering Mode の違いメモ – Qiita

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

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

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

Albedo カラーと Transparency (透明度) | Unity マニュアル [公式]

シェーダーを作成する

  • 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);

Alpha to Coverage

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

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

// Pass
AlphaToMask On

参考:

Blend を試してみる – Qiita

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

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

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

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

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

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

Unlit/Transparent Cutout | 強火で進め

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

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

ShaderLab: Blending | Unity マニュアル [公式]

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

レンダーキュー (Render Queue)

参考:

clip() や discard を使うときには RenderQueue を AlphaTest にする話 | LIGHT11

TransparencySortMode

参考:

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]

HDRP

参考:

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

描画順がおかしい

  • 深度プリパス (Depth Pre-Pass)
  • モデル毎に透明度が同じ → 別バッファーに不透明で描画してスプライトとして表示
  • モデル内でポリゴンをソートしておく (実現不可能???)

参考:

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

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

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

参考:

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

Weighted Blended Transparency

参考:

NegInfinity/WeightedBlendedTransparency – GitHub

Weighted blended transparency in Unity | Negative Infinity

Approximated Order Independent Transparency | Unity Forum

Weighted Blended Transparency in Unity – YouTube

Order-Independent Transparency (Approximation) – YouTube

Approximated Order Independent transparency – YouTube

OIT Lab

参考:

candycat1992/OIT_Lab: Order-independent Transparent in Unity – GitHub

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

コメントを残す

メールアドレスが公開されることはありません。