開発ニュース

【初心者OK】Unity 6.5で約10万個のブロックを高速描画する方法をサムザップが解説

大量のブロックをUnityで高速描画する実装事例のイメージ

※本記事にはアフィリエイトリンクが含まれています。

サムザップが、イラストを大量のブロックに分解してアニメーションさせる実装手法をブログで公開しました。Unity 6.5とRenderMeshPrimitivesを使い、GameObjectより大幅に描画負荷を抑えた事例が紹介されています。

そもそもRenderMeshPrimitivesとは?

RenderMeshPrimitivesは、同じメッシュを大量に描画したいときに使えるUnityのAPIです。GameObjectを大量に置く方式に比べて、描画のたびに発生する処理を減らしやすいのが特徴です。

ニュース概要

今回のブログ記事は、キャラクターイラストを細かなブロックに分解し、崩壊や再構成といった演出を低負荷で動かすための考え方をまとめたものです。検証環境はMacBook Pro(Apple M4 Max搭載)とUnity 6.5、URP 17.5.0。ブロックはすべてのピクセルから作るのではなく、ダウンサンプリングで数を絞り、透明部分やほぼ黒の部分を背景として除外してから配置しています。描画方法としてはGameObjectではなくRenderMeshPrimitivesを採用し、約10.3万個のブロックを使うサンプルで、シーン全体のDraw Callは54,525回から42回となり、UnityのStatistics上のFPSも6を下回る状態から約710〜865まで改善したとしています。さらに約104万個まで増やしても、435FPS前後を維持できたと紹介されています。

紹介された描画と演出の手法

記事では、ブロックを使った演出を2種類に分けて解説しています。ひとつは、時間経過だけで位置が決まる処理です。たとえば、ブロックが崩れて再び元の形に戻るようなアニメーションは、前フレームの状態を参照しなくても成立するため、VertexShaderで実装しています。VertexShaderは各頂点の位置や属性を描画時に計算する仕組みで、進行度を0から1まで渡すことで動きを完結させられます。もうひとつは、前フレームの位置や速度を引き継ぐ処理です。サムザップの重力崩壊例では、前フレームの位置や速度を引き継ぐため、ComputeShaderで状態を更新しています。ComputeShaderは描画だけでなく計算処理にも使えるシェーダーで、物理っぽい挙動や状態更新に向いています。記事ではこのほか、イラスト全体が波打つ表現や、マウスカーソルを当てた部分が磁力で押し広げられるような演出も、サンプルコードとともに紹介しています。大量描画を前提に演出を分けて設計することで、見た目と性能の両立を目指した内容です。

このニュースから考えられること

✅ メリット

  • GameObjectを大量配置する方式より、ドローコールを大きく削減できる
  • 紹介された検証環境では、約10万個のブロックで高いFPSを記録した。結果は機材やシーンの条件によって異なる
  • VertexShaderとComputeShaderを使い分ける設計の考え方が学べる

⚠️ 課題

  • すべてのピクセルをブロック化すると数が増えるため、対象機器に応じて間引きなどの調整を検討する
  • 演出に状態の保持が必要かを考え、適した実装方法を選ぶ
  • 高性能でも、素材やシーン構成次第では同じ結果にならない

学ぶならこの講座

Unityで大量描画やGPU活用を学びたい初心者〜中級者に向いています。まずは少数のブロックで再構成アニメーションを作り、次にRenderMeshPrimitivesで描画数を増やす流れで試すと理解しやすいでしょう。

※本リンクはアフィリエイトリンクです。

Unityを学べる講座を見る

まとめ

サムザップの事例は、Unity 6.5で大量のオブジェクトを扱うときに、描画方法とシェーダーの役割分担をどう考えるかを示した内容です。大量ブロック表現に興味がある人は、RenderMeshPrimitivesとComputeShaderの使い分けを学ぶ参考になります。

ソース

サムザップの検証記事 / GameMakers

← 記事一覧・検索