Unity は、レンダリングの画質を設定することができます。一般的に言えば、画質はフレームレートを犠牲にしているのため、モバイルデバイスや古いハードウェアで最高画質に指定することはゲームプレイに悪影響を与えるため、正しいとはいえません。Edit > Project Settings > Quality を選択することで Quality Settings を開き、選択したデバイスの画質レベルを選択できます。主に 2 つのエリアに分けられていて、設定画面の上部には以下のようなものがあります。
Unity には、簡単に参照できるように、画質オプションの組み合わせに名前をつけることができます。マトリクスの行により、各画質水準をどのプラットフォームに割り当てるかを選択することができます。マトリクスの下の Default と書かれた行は画質設定そのものはではありませんが、各プラットフォームで使用されるデフォルトの画質を設定します。(列に緑のチェックボックスは、現在、そのプラットフォームの選択レベルを表す) Unity は 6 つの画質が標準で設定されていますが、マトリクスの下にあるボタンを使用してカスタムのレベルを追加することができます。ゴミ箱アイコン(右端の列)を使用することで不要な画質設定を削除することができます。
画質設定の名前をクリックすることで編集することができます。これはマトリクスの下部のパネルで設定します。
画質設定のために選ぶことができる画質オプションは次のとおりです。
プロパティー | 機能 |
---|---|
Name | 画質設定を参照するときに使用する名前 |
Rendering
プロパティー | 機能 |
---|---|
Pixel Light Count | フォワードレンダリング使用時の最大ピクセルライト数 |
Texture Quality | テクスチャを最大解像度で表示するか、何分の一かで表示するかを選択します(解像度が低い場合は処理オーバーヘッドを減少させます)。選択肢は Full Res (フル解像度),Half Res ( 1/2 解像度),Quarter Res ( 1/4 解像度),Eighth Res ( 1/8 解像度) です。 |
Anisotropic Textures | 異方性テクスチャの使い方を設定します。 Disabled (無効)、 Per Texture (テクスチャ毎) 、 Forced On(強制、つまり常に有効) のオプションがあります。 |
AntiAliasing | アンチエイリアシングのレベルを設定します。選択肢は 2x、4x、8x のマルチサンプリングです。 |
Soft Particles | ソフトブレンドをパーティクルに使用するかどうか。 |
Realtime Reflection Probes | ゲーム再生中にリフレクションプローブを更新するかどうか。 |
Shadows
プロパティー | 機能 |
---|---|
Shadows | 使用する影のタイプを選択します。選択オプションは、Hard and Soft Shadows、 Hard Shadows Only、 Disable Shadows です。 |
Shadow resolution | 影は異なる解像度でレンダリングすることができます。解像度が高いほど、処理オーバーヘッドは大きくなります。選択オプションは Low,Medium,High,Very High です。 |
Shadow Projection | ディレクショナルライトから影を投影するには 2 つの方法があります。Close Fit は高解像度の影をレンダリングしますが、カメラのわずかな動きで揺れることがあります。Stable Fit は、低解像度の影をレンダリングしますが、カメラの動きでは揺れません。 |
Shadow Cascades | シャドウカスケードの数は 0, 2, 4 に設定することができます。カスケードの数値が高いほど高品質が得られますが、処理オーバーヘッドが増加します (詳細は ディレクショナルライトの影 を参照してください)。 |
Shadow Distance | カメラから影が見える距離範囲。この距離を越えて投影される影はレンダリングされません。 |
Shadow Near Plane Offset | シャドウパンケーキ(丸影)で歪む大きな三角形を考慮した前方クリップ面のオフセット |
Other
プロパティー: | 機能 |
---|---|
Blend Weights | アニメーションのときに指定した頂点に影響を与えることができるボーンの数。使用可能なオプションは、1, 2, 4 つのボーンです。 |
VSync Count | レンダリング処理をディスプレイのリフレッシュレートと同期させることでティアリングによる画像乱れ (下記参照) を避けることができます。Every V Blank (すべての垂直ブランク (VBlank)と同期)、Every Second V Blank (1 つおきに VBlank と同期)、Don’t Sync (まったく同期しない) から選択することができます。 |
LOD Bias | LOD レベルはオブジェクトの画面表示サイズを基準に選択されます。表示サイズが2つの LOD レベルの間にあるとき、用意された2つのモデルからディティールの少ない方にするか、多い方にするか、選択を一方によせる事ができます。これは0から無限大までの実数として設定します。0から1の間に設定すると、細かいディティールを省こうとします。1以上に設定すると、ディティールを増やそうとします。例えば、LOD バイアスを2に設定し、50%の間隔で変わるようにすると、LOD はちょうど25%でのみ変わります。 |
Maximum LOD Level | ゲームで使用される最大の LOD。詳細については以下を参照してください。 |
Particle Raycast Budget | パーティクルシステムの衝突のために使用するレイキャストの最大数 (Medium か Low の品質)。パーティクルシステム を参照してください。 |
Async Upload Time Slice | バッファされたテクスチャを GPU にアップロードするための CPU 時間 (ミリ秒/フレーム)。非同期テクスチャアップロード を参照してください。 |
Async Upload Buffer Size | 非同期アップロード バッファのサイズ (MB)。非同期テクスチャアップロード を参照してください。 |
これより高い LOD を持つモデルは、使用されずビルド対象から外れます(ストレージとメモリ容量を節約)。Unity はターゲットプラットフォームに対して、すべての Quality Setting の中からもっとも高い LOD を使用します。もし LOD Level 0 がいずれかの Quality Setting で使用されている場合、ビルドに含まれてランタイムにロードされます。例えば、もし LOD level が含まれている場合、対応する LODGroup はビルドに含まれ、どの Quality Setting が使用されているかに関わらず、その LODGroup は必ず実行時にロードされる。もし Max LOD オプションを使用していずれかの LOD を外すとその LOD のモデルは含まれません(シーンの別の箇所で使用されていないかぎり)。
ディスプレイ上の画像は連続して更新されるのではなく、Unity のフレーム更新のような定期的な間隔で更新されます。しかし、Unity の更新は必ずしもディスプレイと同期しているとは限りませんので、ディスプレイがまだ前のフレームをレンダリングしている最中に Unity が新しいフレームを発行してしまうことがありえます。この場合、フレームの変更が発生した画面の中ほどの位置に “ティアリング”と呼ばれる目に見える画像の乱れが発生します。
Unity の設定により、ディスプレイが更新していないタイミング、いわゆる「垂直ブランク」のタイミングのみにフレームを切替えさせることができます。画質設定( Quality Settings )の VSync オプションにより、フレームの切替えをディスプレイの垂直ブランク、あるいはひとつおきの垂直ブランクと同期をとることができます。後者は、ゲームでのフレームのレンダリング処理に要する時間が複数回のディスプレイ更新分だけ時間を要する場合に役に立ちます。
アンチエイリアス処理により、ポリゴンの端の見た目が改善されるため、“ジャギー” のない、滑らかな輪郭になります。しかし、グラフィックカードのパフォーマンスが犠牲になり、ビデオメモリの使用量が増えます (CPU の負担は増えません)。アンチエイリアス処理のレベルにより、ポリゴンの端がどのくらい滑らかになるか (そして消費されるビデオメモリの量) が決定されます。
しかし、組み込みのハードウェアのアンチエイリアスは Deferred Shading レンダリングパス や HDRレンダリング では機能しません。これらのケースでは アンチエイリアス を使う必要があります。
ソフトパーティクルは、シーン中の物体同士の交点付近をフェードアウト処理します。見た目は良くなりますが、計算処理の負荷は高くなり(複雑なピクセルシェーダー)、かつ カメラの深度テクスチャ をサポートしているプラットフォームでしか動作しません。さらにレンダリングパスとして 旧 Deferred Lighting レンダリングパス を使用するか、あるいはカメラのレンダラーをスクリプトから カメラの深度テクスチャ とする必要があります。