Standard Shader
レンダリングモード (Rendering Mode)
Opaque
:不透明Cutout
:アルファ値が閾値より小さいピクセルを描画せず、それ以外のピクセルを描画する。Transparent
:アルファ値に応じてマテリアルの透過度を決める。反射やハイライトは透過度に関わらず完全に描画される。Fade
:反射やハイライトの描画も含めてアルファ値に応じて徐々にフェードさせる。
ドキュメント:
Rendering Mode | Unity マニュアル [公式]
アルベドカラーと透明度 | Unity マニュアル [公式]
参考:
スクリプトで 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 SrcColor
:2倍乗算
カットアウト (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 On
Code language: Arduino (arduino)
ドキュメント:
デプス書き込みありの透過シェーダー | Unity 2018.4 マニュアル [公式]
ShaderLab コマンド:Blend | Unity マニュアル [公式]
参考:
スタンダードシェーダーでモデルを綺麗に半透明表示する – 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
ブレンドモード (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 マニュアル [公式]
参考:
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]
参考:
アルファテストがレガシーなものになっていた件 | 渋谷ほととぎす通信
アルファクリップ
ドキュメント:
参考:
アルファクリップなシェーダーを書く | 夜風の MixedReality
clip や discard を使うときには Render Queue を Alpha Test にする話 | LIGHT11
アルファテストがレガシーなものになっていた件 | 渋谷ほととぎす通信
Alpha to Coverage
参考:
深度
コマンド
ドキュメント:
デプス書き込みありの透過シェーダー | Unity 2018.4 マニュアル [公式]
参考:
custom shader not obeying alpha (transparency) – Stack Overflow
HDRP
リンク:
透過性の正確な表現 – ハイエンドビジュアライゼーション用に HD レンダーパイプラインをセットアップする方法 | Unity Blog [公式]
描画順がおかしい
対処法:
- 「深度プリパス」 (Depth Pre-Pass) を用いる。
- モデル毎に透明度が同じ → 別バッファーに不透明で描画してスプライトとして表示する。
- モデル内でポリゴンをソートしておく。(実用上は実現不可能???)
参考:
#2 bgolus – Transparent doesn’t work see video – Unity Forum
深度ピーリング
参考:
アウトライン/輪郭を描画する
参考:
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