8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[3D Animation] DirectX8の時代にゼロから創ったMeshのロードから3Dアニメーションエンジンのエンジン開発した際のノウハウやTips まとめ Part1

Last updated at Posted at 2016-06-26

これからVRの時代に突入し、3Dアニメーションもより楽に導入できる時代になったのかなと感じています。
ただ、ロジックについては過去の遺物で触らない領域としてあまり目にする機会が減ったのではないかと感じ、
私はここに学生時代に創ったコードをまぜつつ3Dアニメーションの技術解説として残すものとします。

まずは、第一弾として概要から説明します。

以下の構成で載せます。
・Direct 8.0時代の3Dエンジン環境
 ・作成した3Dアニメーション エンジンの構成
 ・X Fileの構成

Direct 8.0時代の3Dエンジン環境

私が、学生時代に開発していたころのDirect Xの話をします。
学生時代にリリースされたのは、Direct X 7.0 ~ Direct X 9.0です。

DirectX 7.0ではDirectDraw (2D)とDirect3Dが分離しており、Direct3Dとしては、Hardware T&Lのサポートが大きな変更でした。
DirectX 8.0では、DirectDraw (2D)がDirect 3Dに吸収されDirect Graphicsになった。
DirectX 9.0で3D AnimationもサポートしたAPIが公開された。

学生時代のゼミナールでは、Direct X 8.0を使って3Dアクションゲームを一人で開発しました。
その際に、アニメーションをさせるというテーマを貰っていたので、研究テーマとして取り入れました。

今回は、この時に作成した3Dアニメーションのノウハウを共有しようと思います。
前提知識としては、3次元行列と線形補間などがあれば十分だと思います。

作成した3Dアニメーション エンジンの構成

では、私が学生時代に作成した3Dアニメーション エンジンの構成について説明します。

XFile … Meshファイル(X File)のロード及びフレームの管理
Frame … アニメーションフレームクラス (1キャラクター)
Mesh … メッシュ情報クラス (マテリアル・頂点・法泉)
Animation … アニメーション情報クラス

構成イメージは、以下の通りです。
アニメーションエンジンの構図.png

X FileをCMeshManagerクラスを介してロードしてCFrameManagerを作成する。
CFrameManagerでは、X File内部のメッシュ情報やFrame情報,アニメーションフレームなどに
分割し、それぞれのクラスに格納する。
また、Frameクラスでは、Frameに関連しているメッシュとアニメーションフレームを関連付ける
ため、関連するデータのアドレスをリストで参照する形とすることで、重複するオブジェクトも
実体はひとつのみと出来るように工夫した。

X Fileの構成

エンジンの構成の説明を終えたので、X Fileのフォーマットについて説明を始めます。
メッシュファイルを自作したいとか考えている方には最適です。
大雑把な構成としては、以下の画像の通りです。

X File構成.png

  • template
     Frame, Mesh, AnimationSetなどのフォーマットの定義が書かれているヘッダー部分なので、
    X Fileのロードの際に気にする箇所です。

  • Frame
    Mesh情報をレイヤー別に格納する領域です。

    • Layer (レイヤー[関節]の数だけ存在する)
      Layerには、Layer内の頂点座標、頂点インデックス、マテリアル情報などが格納されます。
  • AnimationSet
    アニメーションの定義が入っている領域になります。
    [Animation Name]に、Lightwaveで作ったAnimation名が入っています。
    ※私のエンジンは、ここの名前を使って再生するAnimationを指定出来る形にしています。

    構成は、時間と、関節の位置及び向きが書かれています。
    480;3;-2.288272,2.829617,0.000000;;,
    時間:行列の数;X,Y,Z;(不明);(不明),
      公式見ても特に記載が無かったため、不明としました。

入り口となる『概要』としては、以上です。
次回は、もう少し踏み入った話を書いていきます。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?