モデリングの前に計画を立てることはとても重要です。素早く作成されたモデルは、プリプロダクションや空間の大体の計画をするためには適切です。しかし、アセットを完成させて適切なシーンを作るときには、以下をよく検討してください。
現段階で一般的に使用されるハードウェアはこれまで以上に機能的に優れていますが、常にシーンのジオメトリをシンプルにすることに越したことはありません。不要なテッセレーションと複雑なジオメトリは、リアルタイムの設定では管理が難しく、パフォーマンスに影響し、メモリを不必要に使用する可能性があります。以下の例は、まったくプレイヤーの目に触れないジオメトリが、ライトマップやオーバードローなどのリソースを無駄にし、光が漏れる原因になる様子を示しています。
ベイクしたライトまたはリアルタイム GI をライトプローブと一緒に使用する場合、ゲームオブジェクトがシーンのライティングに影響を与えるかどうかを決定する必要があります。
ライティングに影響するゲームオブジェクトを設定するには、インスペクターウィンドウで Lightmap Static が選択されている必要があります。 これによりシンプルで滑らかな表面領域が得られ、高品質の間接光反射またはベイクした光が可能になります。これは、表面のライトマップテクスチャの空間使用の効率が良いためです。
時には、リアルタイム GI でメッシュの UV を簡略化して、ジオメトリに著しく少ないリソースを使わせ、アーティファクトのほとんどない最高の結果を得ることができます。
ゲームオブジェクトがリアルタイムのライティングとライトプローブからライトを受けるだけの場合、ジオメトリにはライトマップ UV の制限がありません。ただし、このジオメトリが大きい場合は特別の注意が必要です。単一のライトプローブでは正しく照明されない場合があり、定義した複数のライトプローブを一つに組み合わせるために Light Probe Proxy Volume コンポーネント が必要な場合があるからです。
移動しないゲームオブジェクトには、ライトマップや リアルタイム GI が常に必要というわけではありません。ゲームオブジェクトが小さい場合や、光を反射する表面があまりない場合は、ゲームオブジェクトがライトマップに含まれていない可能性があります。以下に示すベンチと手すりはその良い例です。
UV レイアウトを使うと、法線マップ (通常 UV1)、ライトマップ (UV2)、リアルタイムのライトマップ (UV3) をベイクするのと同じ量のメモリ消費でビジュアルの品質を向上することができます。特に、タイルを使用できないテクスチャを持つジオメトリには有効です。
以下は、UV レイアウトの手法を用いる場合に考慮する点です。
リアルタイム GI (UV3) の場合は、モデルの大きな表面を示す大きな領域の UV 空間を優先し、メモリ消費を軽減し継ぎ目を避けます。多くの場合、モデルの自動 UV 設定は、チャートを最適化するのにとても役に立ちます。リアルタイム GI のチャート最適化の詳しい情報は、Unity チュートリアルの Optimizing Unity’s auto unwrapping を参照してください。
ライトマップを必要としないゲームオブジェクトの場合は、カスタムシェーダーが必要としない限り、追加の UV のオーサリングによるメモリと時間を無駄にするのを避けてください。
実世界のゲームオブジェクトは非常に詳細です。リアルタイムのジオメトリを作成するには、ジオメトリに設定する細部、法線マップとテクスチャに設定する細部を特定する必要があります。リアルタイムのシーンのアセットを開発するときは、ハイポリゴンからローポリゴンの法線マップをベイクするのが普通です。
気を付けるべき重要な細部の 1 つは、ゲームオブジェクトのエッジがハイライトされる様子です。現実世界のオブジェクトが非常に鋭いエッジ、ベベルのないエッジ、詳細なエッジの定義を持たないことは、通常はありません。リアルなエッジ効果を模倣することはシーンの現実味をより向上させます。
適切なスムージンググループを使用することによって、モデルと法線マップの効率を向上させることができます。 以下は、スムージンググループの使用に関するヒントです。
適切な法線マップを持つ滑らかなポリゴンでは頂点数が節約されます。これは、より効率的なジオメトリをレンダリングするのと同じことです。以下は簡単な設定を比較した例です。
スムージンググループが分かれている 1 つの平面は 36 頂点と同等です。
スムージンググループが 1 つの 18 の三角形をもつ 1 つの平面は 16 頂点と同等です。
1 つの平面と三角平面の頂点数の比較
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.