スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スキンメッシュの前に革命

スキンメッシュアニメーションに取り掛かる前に、現在のプログラムには
構造的に とてもとても無駄があったので、それを修正しようと思います。


まず、何が無駄だったのかを解説。
自分はとりあえず、Meshというクラスを作り、
読み込み・表示は下記の様に行っていました。
------------------------
  Mesh m;
  m.LoadFile("Player.txt");
  m.Draw();

------------------------
(おまかなので、プログラムは色々と省略してます)

ついでにMeshクラスの中には、頂点インデックス、テクスチャ、マテリアルなど、
3Dモデルを表示するためのデータ一式が揃ってます。

これはとても無駄でした。

「何が無駄なのか?」というと、
例えば、ザコ敵、宝箱などのメッシュをどんどん生成するとします。

すると下記の様な状態になります。
無駄なデータ

まずテクスチャが無駄です。
(同じテクスチャが何度も生成されている為)

敵を10匹 表示したいからといって、
同じ敵のテクスチャを10回も読み込む必要など無い のです。
テクスチャは一種類につき1回だけ読み込めば充分

なので、テクスチャを管理するクラスを作ろうと思います。
↓こんな感じ

無駄なデータ2
※「下さい」という、プログラム的に意味不明な表現がありますが、これは
ポインタをもらったり、参照したりする事だと思ってください。



テクスチャ管理クラスに「●●.bmp」「●●.png」はありますか?と聞き、
あればそのテクスチャ情報をもらい、
無ければ新たにテクスチャを生成し、テクスチャ管理クラスの管理下に置けば良いのです。
これで、同じテクスチャを何枚も読み込むという状態にはなりません。

そして、頂点情報なども同じ事がいえます。
現在の状態だと、敵のポリゴンを表示するための頂点数が5000だとします。

敵を10体出すだけで、全く同じ頂点情報などを読み込み、
約5万ものデータがやりとりされることになります。

やはり大いに無駄があります。

なので、詳細データを管理するクラスも作ろうと思います。
↓下記の様に。

無駄なデータ3

こうすれば、同じ頂点データをオブジェクトの数だけ読み込むといった事はなくなります。
最高です。
パッと見ただけでも、なんとなくスッキリしてきたなと分かるのではないかと。

まぁ、要は
同じ3Dモデルを表示する場合、異なるものと同じものはそれぞれ何か?
という事です。
---------------------------------------
同じもの
・姿、形

異なるもの
・動き(アニメーション)
・体の色(テクスチャ)

---------------------------------------

これを、「上手く使いまわせるものは使いまわす」という風に
重複している情報などを省いていけばいいわけです。
(SQLの正規化みたいだ)

ここら辺を とりあえず修正しようと思う。
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。