Sorting Fudgeは、Unityのレガシーパーティクルシステム(Shuriken)のレンダラー(Particle System Renderer)に搭載されている、半透明ソート順制御用の特殊なプロパティです。半透明マテリアルを描画する際の優先度に「バイアス(偏り)」を付与し、カメラからの物理的な距離関係を無視して特定の順番で描画させることができます。

現実世界での例え:映画館の座席予約システムと『ひいき優先権』

Sorting Fudgeの動作は、「映画館の座席予約システムにおける、特定の客に対するちょっとしたひいき(整理番号の改ざん)」に例えることができます。

  • 従来(ソート調整なし): 映画館の入場順(半透明オブジェクトの描画順)は、純粋にカメラ(スクリーン)からの「物理的な距離関係(重心の近さ)」だけで機械的に判定されます。しかし、ほぼ同じ距離に「背の低い子供(奥に描画したいエフェクト)」と「背の高い大人(手前に描画したい背景の水面)」が並んだ場合、システムが判定ミスをして、子供が大人の前に重なり不自然に視界を遮ってしまいます。
  • Sorting Fudgeによる解決: システム上の距離計算にちょっとした「ひいき(バイアス)」を加えます。子供の整理番号に『+50(奥側へ)』というバイアスを加えることで、物理的には大人と並んでいたとしても、入場整理システム上は「強制的に大人の後ろ」に配置し、大人(水面)の背後に子供(パーティクル)が美しく隠れて描画されるよう順序を騙して補正します。
Unity Sorting Fudge order bias logic diagram

図:Sorting Fudge値によるオブジェクト計算深度のバイアスシフトと描画順制御のインフォグラフィック

詳細な判定ロジック

Unityのレンダリングパイプラインにおいて、半透明オブジェクトは不透明オブジェクトの描画が終わった後に、カメラから遠い順番(Back-to-Front)でソートされて描画されます。この際、描画優先度は各オブジェクトのバウンディングボックスの「重心」とカメラとの距離に基づいて計算されます。しかし、巨大なパーティクルと小さな水面が交差する場合などに計算が狂い、前後関係が不自然に前後することがあります。

Sorting Fudgeは、このカメラとの計算距離に対して、指定した値を差し引いたり足したりします。値が「正(プラス)」の値であればカメラから遠く判定され、先に(背後に)描画されます。逆に「負(マイナス)」の値であればカメラから近く判定され、後に(手前に)描画されます。