データ指向設計(Data Oriented Design)でのゲーム開発について
詳細
ゲーム開発を行う上での考え方にデータ指向設計 (Data Oriented Design)というものがあります。
この数十年でCPUの性能が1万倍以上になっているのに対して、メモリの性能は10倍未満しか達していません。更に今後もCPUとメモリとの差はだんだん増えていくと思われます。 そのため、ゲーム開発でのボトルネックがメモリ帯域となることが多くなりました。 参考: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
参考
Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP) http://gamesfromwithin.com/data-oriented-design
INTRODUCTION TO DATA ORIENTED DESIGN https://www.ea.com/frostbite/news/introduction-to-data-oriented-design