【Unity】軽量化する方法!物理演算の描画負荷を減らそう

URLをコピーする
URLをコピーしました!

CGBoxの一部の記事にはアフィリエイト広告が含まれております。

こんにちは!Unityでゲーム作りを進めていると、だんだんと動作が重くなってきた…ということがありますよね。

そんな時はワールドを軽量化して動作を軽くしてあげなければなりません。

ただ重くなっている原因と解決法はワールドによって違うので、様々な軽量化の方法を試していく必要があります。

そこで本記事では、色々な軽量化する方法を紹介していきます!

目次

軽量化とは

引用元:PLATEAU SDK for Unity

ここでいう軽量化とは、Unityプロジェクト内の様々な処理を軽くすることです。

ワールドを作り始めたばかりのときはオブジェクトが少なく快適に動作しますが、

3Dモデルが増えてくるとだんだん描画処理の負荷がかかり、

ゲーム実行時の動作が重かったり画面がカクカクするといった問題が生じてきます。

そんな時にカメラの設定や、3Dモデルの描画の設定などを見直して軽量化する必要がでてきます。

軽量化する方法

ここでは軽量化する方法を場合に分けて紹介していきます。

軽量化する方法一覧

ライトベイクで描画負荷を減らす

ライトマップのベイクで光の当たり方を事前に計算しておけば

リアルタイムで行う処理の負荷を下げることができます。

ライトマップのベイクの方法については下の記事で解説しています。

あわせて読みたい
【Unity】ライトマップのベイクが汚い・遅いときの対処法 こんにちは!コチラの記事では、Unity のライトマップのベイクの方法と、ベイクが汚い・遅いときの対処法について解説していきます! 【ライトマップのベイクとは】 ラ...

オクルージョンカリングを設定する

オクルージョンカリングとは、あるオブジェクトがほかのオブジェクトに隠れていて

カメラに映らない時に、オブジェクトのレンダリングを無効にする機能のことです。

オブジェクトの多いシーンでこれを設定していないと、

カメラから遠い必要のないオブジェクトの描画まで行われてしまい重くなってしまいます。

オクルージョンカリングの詳しい設定方法については下の記事が参考になります。

Cluster Creators Guide|バーチャ...
オクルージョンカリングを設定して、ワールドの軽量化をする - Cluster Creators Guide|バーチャル空間で... ワールド軽量化の1つの手段である「オクルージョンカリング」の設定の仕方を紹介します! 家や室内のワールドで動かないオブジェクトが多くあるワールドを制作するときに役...

3Dモデルのメッシュを軽量化する

複雑な3Dモデルをたくさん使うと当然プログラムは重くなってしまいます。

そんな時に試してみたいのが3Dモデルのポリゴン数を減らし軽量化するアセットです。

3Dモデルのメッシュを簡単に軽量化できるアセットはUnityアセットストアで

提供されているので、おすすめアセットの項目で紹介します。

2Dゲームの軽量化

2Dゲームを作る際には、タイルマップを使うと軽量化することができます。

タイルマップの作り方については下の記事で詳しく解説しています。

あわせて読みたい
【Unity】タイルマップで2Dマップを効率よく作ろう 2Dのマップを作る時、タイルを一個一個配置していませんか? Unity標準機能のタイルマップを使えば、効率的にタイルを配置してステージを作ることができます! 本記事...

タイルマップを使えば一つのタイルを繰り返し使用するため

一つ一つオブジェクトを作るよりもゲームオブジェクトの種類が少なくなります。

オブジェクトはそれぞれがTransformColliderなどの情報を持つので

種類が多ければ多いほど計算に負荷がかかり重くなってしまいます。

引用元:Unity

個別にオブジェクトを作っていて2Dゲームが重たい時は、

タイルマップに置き換えることを検討してみましょう!

大量のオブジェクトを軽量化

ゲーム開発をしていると、同じオブジェクトを大量に生成したい場合があるかと思います。

数十個くらいなら処理できても、100個や1000個を超えてくるとどうしても重くなってしまいます。

このようにヒエラルキーに全てのオブジェクトを配置してしまうと、

毎フレームごとに計算が発生し負荷がかかってしまいます。

そんな時に使えるのが、ゲームオブジェクトを作らずにスクリプトからメッシュを描画できるDrawMeshというメソッドです。

DrawMeshを使えば、一つ一つゲームオブジェクトを生成するよりも軽量に、大量のオブジェクトを描画することができます。

オブジェクトを大量生成したい場合にぜひ利用してみましょう!

DrawMeshの使い方については下の記事が参考になります。

RenderTextureを使って軽量化

RenderTextureと、Culling Maskという機能を使ってプロジェクトを軽量化することができます。

それぞれの機能は後に説明しますが、実現したい内容としては以下の通りです。

更新頻度の低いゲームオブジェクトをテクスチャとして表示して軽量化する

それではまずRenderTextureとCulling Maskがそれぞれどんな機能かを見ていきましょう。

RenderTextureとは

RenderTextureとは、カメラの映像を投影できるテクスチャのことです。

RenderTextureの使用例として、下のGIF画像のようなものがあります。

引用元:くろくまそふと

これは左の3Dモデルの表面にRenderTextureを貼り付けており、

それによってリアルタイムでカメラの映像を写しているようなモニターを表現しています。

このRenderTextureですが、工夫次第でいろいろな使い方ができます。

Culling Maskと組み合わせて軽量化に使う

Culling Maskとは、特定のゲームオブジェクトだけをカメラに映す機能のことです。

CullingMaskを使えば特定のゲームオブジェクトだけをカメラに映すことができ、

不要なオブジェクトは非表示にできるので、描画処理が軽量化できます。

つまり、RenderTextureとCulling Maskを使って下のような手順で軽量化することができます。

  1. RenderTextureで更新頻度の低いゲームオブジェクトをテクスチャとして保存する
  2. 保存したテクスチャを3Dモデルに貼り付け画面に表示する
  3. Culling Maskで更新頻度の低いゲームオブジェクトの描画をオフにする

これにより、あまり動かないゲームオブジェクトの描画をオフにして軽量化しつつ、

テクスチャとして画面に表示することができるので、ゲームの見た目を変えずに軽量化ができます。

RenderTextureとCullingMaskの具体的な設定方法については下の記事が参考になります。

軽量化するおすすめアセット

Mesh Optimizer

あわせて読みたい
Mesh Optimizer | Modeling | Unity Asset Store Get the Mesh Optimizer package from IndieChest and speed up your game development process. Find this & other Modeling options on the Unity Asset Store.

こちらは3Dモデルのメッシュを軽量化できる無料アセットです。

オブジェクトにスクリプトを取り付けるだけというUnity上での簡単な操作で

3Dモデルのポリゴン数を減らして軽量化することができます。

Mesh Simplify

あわせて読みたい
Mesh Simplify | Modeling | Unity Asset Store Get the Mesh Simplify package from Ultimate Game Tools and speed up your game development process. Find this & other Modeling options on the Unity Asset Store.

こちらは、1クリックで3Dモデルのメッシュを削減し軽量化してくれるアセットです。

軽量化する際に、ポリゴン数をより減らしたい箇所と減らしたくない箇所を指定することができます。

軽量化と3Dモデルのクオリティ両立できる便利アセットです。

まとめ

以上、Unityのワールドを軽量化する方法について解説してきました。

まとめると、下のような方法があります。

  • ライトマップのベイクやオクルージョンカリングでカメラの描画を軽量化
  • タイルマップで2Dマップを軽量化
  • DrawMeshで大量のオブジェクト生成を軽量化
  • RenderTextureを使って軽量化
  • アセットでメッシュを軽量化

有効な軽量化の方法はワールドによって違ってくるので、最適な方法を見つけたいですね!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Unityメインの個人開発者。UnityでAIを学習させてみたり、野球ゲームを作ってみたりと色々してました。現在はライターとして、Unityで開発する人の力になる記事が書けるよう奮闘中。

目次
閉じる