
透明度
Tutorial
intermediate
+0XP
15 mins
Unity Technologies

このチュートリアルでは、3D モバイルアプリケーションで透明度を使用する際の悩ましい利害得失について説明します。
1. 透明度の使用
透明なマテリアル設定を使用するとなれば、パフォーマンス上引き起こされる変化をよく考えておくことが重要になります。特にモバイルプラットフォーム向けの場合は、できる限り不透明なマテリアルを使用することをおすすめします。
透明なオブジェクトをレンダリングすると、不透明なオブジェクトをレンダリングする場合よりも多くの GPU リソースが使用されます。多数の透明オブジェクトを使用すると、モバイルプラットフォーム上でのパフォーマンスに影響が及びます。特に、透明オブジェクトが何度も重ねられる形でレンダリングされるオーバードローというプロセスがある場合に、これが顕著になります。
次のスクリーンショットでは、青色のライトは透明効果を出すのに効果的かもしれませんが、不透明なマテリアルでも優れた外観を得ることができています。
2. 透明度の実装方法の比較
シェーダーに透明度を実装する方法は多数あり、それぞれにメリットとデメリットがあります。
透明度の実装方法として最も一般的なのは、アルファテストとアルファブレンドです。アルファテストでは、マテリアルを 100% 不透明か 100% 透明にします。マスクのカットアウトのしきい値を設定できます。Unity では、これを「カットアウト」と呼びます。
アルファテストを使うと、GPU 内の一部の最適化機能が無効になります。そのため、必要でなければ使用しない方が良いでしょう。アルファテスト/カットアウトを使用する場合は、対象のモバイルプラットフォームでテストすることを強くおすすめします。また、パフォーマンスの違いについて、この透明度の実装方法のプロファイリングを行い、アルファブレンドと比較することが重要です。
アルファブレンドを使用すると、マテリアルにさまざまな透明度を適用し、オブジェクトの一部を透明にすることができます。Unity では、このブレンドモードを「Transparent(透明)」と呼びます。
モバイルプラットフォームの場合、Unity では、アルファテストよりもアルファブレンドを使用することを推奨しています。アルファテストを使用する場合は、アルファテストとアルファブレンドのパフォーマンスをプロファイリングし、比較する必要があります。それぞれユースケースはつまるところコンテンツ次第となるため、測定は欠かせません。アルファブレンドが必要な場合は、ブレンド範囲を小さくしてください。
アルファテストではシャープな形でカットアウトがされてしまいますが、アルファブレンドにすれば一部が透明化される形で行うことができます。アルファブレンドとアルファテストの比較は、次の画像で確認できます。
3. ユースケース:植生
植生の静的ビューでは、ソフトエッジによって、アルファテストの断ち切る形のカットよりもアルファブレンドの方が外観がよく見えます。
ただし、動きのある植生の場合は、アルファブレンドでは外観に問題が生じます。葉がリアルな順序でレンダリングされません。部分的に透明にすると、植生それぞれが前後に動く際に、幽霊のような効果が生まれるためです。
アルファテストでは、動く葉の透明度と順序を、より適切に処理できるため、それぞれの葉が部分的に透明になるのではなく、完全にレンダリングされるか曖昧化されます。ただし、アルファブレンドと比較すると、エッジは粗くなるか、エイリアシング(ぎざぎざ)に表示されてしまうことになります。
通常、アルファテストのビジュアルは許容できるクオリティになっています。これは、動いているシーンでは、エイリアシングされたエッジが目立たないためです。ただし、葉や枝でアルファブレンドの使用を切り替えると、表示がちらつくため錯視が損なわれます。
4. まとめ
過度なオーバードローを防ぐため、何が必要かを入念に評価してから、モバイルアプリケーションにいずれかのタイプの透明度を実装することが重要です。どのタイプの透明度を選択するべきかは、いつも明確なわけではありませんが、不明点がある場合は、アプリケーションのプロファイリングを行うことで、タイプを決めるのに役立つデータがより多く手に入ります。次のチュートリアルでは、3D モバイルアプリケーション向けのマテリアルとシェーダーに関するその他のベストプラクティスを紹介します。