nekoblog

nekoblog

ちょっとためになるブログ

データ指向設計(Data Oriented Design)でのゲーム開発について

詳細

ゲーム開発を行う上での考え方にデータ指向設計 (Data Oriented Design)というものがあります。

この数十年でCPUの性能が1万倍以上になっているのに対して、メモリの性能は10倍未満しか達していません。更に今後もCPUとメモリとの差はだんだん増えていくと思われます。 そのため、ゲーム開発でのボトルネックがメモリ帯域となることが多くなりました。01.png 参考:INTRODUCTION TO DATA ORIENTED DESIGN https://www.ea.com/frostbite/news/introduction-to-data-oriented-design

ゲームの処理やパフォーマンスに一番影響されるのはメモリの読み取りスピードです。現在、CPUのほとんどの時間がメモリからのデータの転送待ちになっています。CPUの性能を引き出すためには、メモリ帯域をいかに効率よく使うかが重要になっています。

今後のゲーム開発では、メモリのデータを読み取るプロセスをできるだけ少なくすることに着目した設計が求められます。データ指向設計 (Data Oriented Design)ではこの様な考え方のもと、効率の良いメモリレイアウトを考えて設計します。

データ指向設計とは

プログラムでは、データを入力として受け取り、データに何らかの加工を行い、結果のデータを出力しています。
何をするにもデータが絡みます。そのため、データのメモリレイアウトや、データがどう読まれて書き出されるのかに着目した設計がデータ指向設計です。

Unityでのデータ指向設計について

Unityの場合はEntity Component System(略称:ECS)というソフトウェアアーキテクチャパターンがあります。

サンプルコード:EntityComponentSystemSamples https://github.com/Unity-Technologies/EntityComponentSystemSamples 02.gif

参考