[尾下研究室][講義情報] | [English] |
2024年度(第1クォーター)の授業は、原則、Moodleを使った非同期の遠隔授業の形態で実施します。
履修希望者は、LiveCampus から本科目に履修登録した上で、Moodle の本科目のコース を参照してください。
本ページでは、講義資料、プログラミング演習資料、レポート課題資料などを公開します。
講義動画の公開、演習問題の実施、レポート課題提出の受付は、Moodleの本科目のコースで行います。
本授業では、コンピュータアニメーションの応用技術を学習する。
コンピュータアニメーションを利用するソフトウェアを開発する上で役に立つような最新技術を、実際のプログラミング演習を交えながら習得することを目標とする。
講義資料は、各回の講義の前日までに更新する。
回数 | 講義日 | 講義内容 | 講義資料 | 演習資料 |
1 | 2024/4/11 | コンピュータアニメーションの基礎 | 講義スライド | ソース |
2 | 2024/4/15 | 視点操作 | 講義スライド | デモ・ソース |
3 | 2024/4/18 | 幾何形状データの読み込み | 講義スライド | デモ・ソース |
4 | 2024/4/22 | キーフレームアニメーション(1):位置補間 | 講義スライド | デモ・ソース |
5 | 2024/4/25 | キーフレームアニメーション(2):向き補間 | 講義スライド | デモ・ソース |
6 | 2024/4/30 | 物理シミュレーション | 講義スライド | デモ |
7 | 2024/5/2 | 衝突判定・ピッキング | 講義スライド | デモ・ソース |
8 | 2024/5/8 | キャラクタアニメーション(1):人体・動作データの表現と作成 | 講義スライド | |
9 | 2024/5/9 | キャラクタアニメーション(2):サンプルプログラム、動作再生 | 講義スライド |
デモ・ソース |
10 | 2024/5/13 | キャラクタアニメーション(3):順運動学、人体形状変形 | 講義スライド |
デモ・ソース |
11 | 2024/5/16 | キャラクタアニメーション(4):姿勢補間、キーフレーム動作再生、動作補間 | 講義スライド |
デモ・ソース |
12 | 2024/5/20 | キャラクタアニメーション(5):動作接続・遷移、動作変形 | 講義スライド |
デモ・ソース |
13 | 2024/5/23 | キャラクタアニメーション(6):逆運動学 | 講義スライド | |
14 | 2024/5/27 | キャラクタアニメーション(7):動作制御・生成 | 講義スライド | |
15 | 2024/6/3 | レンダリング関連技術 | 講義スライド | デモ・ソース |
レポート課題の資料は、各レポート課題を説明する講義の前日までに更新する。
レポートは、授業用Moodle の本科目のコースから提出すること。
- レポート作成方法
本ページで公開しているLaTexテンプレートを使用してレポートを作成することを推奨する。
本テンプレートでは、プログラムリストを含めるために listings, jlisting パッケージを使用しており、環境によってはこれらのパッケージをインストールする必要がある。 上記のリンク先から自分でダウンロードしてインストールを行うか、本ページに置いている jlisting.sty をダウンロード(右クリックしてファイルに保存を実行)して、LaTeXソースファイルと同じディレクトリに配置しても良い。
LaTeX の利用方法については、下記の資料を参照する。
- 第1回 視点操作
第2回の授業のサンプルプログラム(view_sample.cpp)に、以下の処理を追加したプログラムを提出せよ。
- Scrollモード(媒介変数)
- Walkthroughモード(直接更新)
- Scrollモード(直接更新)
- Walkthroughモード(媒介変数)
レポート課題 テンプレート [LaTex] [PDF]
- 第2回 キーフレームアニメーション
第4・5回の授業のサンプルプログラム(keyframe_sample.cpp)に、以下の処理を追加したプログラムを提出せよ。
- Hermite曲線による位置補間
- Bezier曲線による位置補間
- B-Spline曲線による位置補間
- 四元数と球面線形補間による向き補間
レポート課題 テンプレート [LaTex] [PDF]
- 第3回 ピッキング
第7回の授業のサンプルプログラム(picking_sample.cpp)に、以下の処理を追加したプログラムを提出せよ。
- スクリーン座標系でのピッキング
- ワールド座標系でのピッキング(三角面と半直線の交差判定)
レポート課題 テンプレート [LaTex] [PDF]
- 第4回 キャラクタアニメーション(1)
第9〜12回の授業のサンプルプログラムに、以下の処理(第9〜11回の授業で説明)を追加したプログラムを提出せよ。
- 順運動学計算
- 姿勢補間
- キーフレーム動作再生
- 動作補間
レポート課題 テンプレート [LaTex] [PDF]
- 第5回 キャラクタアニメーション(2)
第9〜12回の授業のサンプルプログラムに、以下の処理(第12〜13回の授業で説明)を追加したプログラムを提出せよ。
- 動作変形
- 動作接続・遷移
- 逆運動学計算(CCD法)
レポート課題 テンプレート [LaTex] [PDF]
演習資料は、各回の授業の前日までに更新する。
- プログラミング演習環境
全てのサンプルプログラムは、C/C++ + OpenGL + GLUT(freeglut)を使用している。
また、一部のサンプルプログラムは、行列・ベクトル等の表現に vecmatch C++ を使用している。
Windows 10 環境で Microsoft Visual Studio 2022 を使って作成・テストを行っており、ソースファイルに加えてVisual Studio のプロジェクトファイルも公開している。
- Visual Studio による C/C++ 開発環境の設定方法 [PDF]
本資料を参考に、各自が演習に使用する端末に、開発環境の設定を行うこと。
- 開発環境・ライブラリ
- Microsoft Visual Studio Community 2022
- freeglut
コンパイル済みのライブラリ freeglut-3.2.1-bin.zip をインストールする。
自分でコンパイルを行う場合は、和歌山大学 床井先生の OpenGL入門のページ を参考にすると良い。- vecmatch C++
- 第1回 OpenGLプログラミングの基礎
- サンプルプログラム [opengl_sample.cpp] [印刷用PDF]
- OpenGLプログラミング演習資料
学部の旧開講科目「コンピュータグラフィックスS」の演習資料。
上記のサンプルプログラムを元に、OpenGLブログラング習得のための一連の演習を行える資料が公開されている。
- 第2回 視点操作
- デモプログラム(Windows用) [view_demo.zip]
3種類の視点操作×2種類の実現方法のデモプログラム。
- mキーでカメラモードを切り替える。
カメラモードは、視点操作方法1(Dolly Mode)→ 視点操作方法2(Scroll Mode) → 視点操作方法3(Walkthrough Mode) の順番で切り替わる。
- マウスの右ボタン・左ボタンドラッグで、各視点操作モードに応じて視点を変更する。
- サンプルプログラム [view_sample.zip]
上のデモプログラムの一部を実装したサンプルプログラム。
Visual Studio 2022 のプロジェクトを含む。
視点操作方法1は、サンプルプログラムで実装されている。
視点操作方法2・3 は、サンプルプログラムでは空欄となっているので、各自作成して、レポート課題として提出すること。
- 演習資料 視点操作 [PDF]
サンプルプログラムとレポート課題の解説。
- 第3回 幾何形状データの読み込み
- デモプログラム(Windows用) [obj_viewer_demo.zip]
幾何形状データ(obj形式ファイル)の読み込みと描画のデモプログラム。
- Lキーで Obj 形式の幾何形状ファイルを開く。
- マウスの右ドラッグで視点を変更する。
- サンプルプログラム [obj_viewer_sample.zip]
上のデモプログラムを実装したサンプルプログラム。
Visual Studio 2022 のプロジェクトを含む。
- 演習資料 幾何形状データの読み込み [PDF]
サンプルプログラムの解説。
- 第4・5回 キーフレームアニメーション
- デモプログラム(Windows用) [keyframe_demo.zip]
キーフレームアニメーションのデモプログラム。
- スペースキーで、アニメーションモードとレイアウトモードの切り替え。
- pキーで位置の補間方法を、線形補間 → Hermite補間 → Bezier補間 → B-Spline補間、の順に変更。
- oキーで向きの補間方法を、オイラー角補間 → 四元数補間、の順に変更。
- fキーで表示モードを、通常表示 → 軌道表示 → 全フレーム表示、の順に変更。
- レイアウトモード中は、オブジェクトの中心をクリックし、操作軸上でドラッグすることでオブジェクトを移動・回転できる。
オブジェクトをクリックする度に、移動・回転モードが、ワールド座標系での移動→ローカル座標系での回転→ローカル座標系での移動→ワールド座標系での回転、の順に切り替わる。- aキーでオブジェクト追加、dキーでオブジェクト削除。
- サンプルプログラム [keyframe_sample.zip]
上のデモプログラムの一部を実装したサンプルプログラム。
Visual Studio 2022 のプロジェクトを含む。コンパイルには vecmath C++ が必要。
位置の線形補間と向きのオイラー角の線形補間のみを実装したもの。
他の補間関数は、サンプルプログラムでは空欄となっているので、各自作成して、レポート課題として提出すること。
- 演習資料 キーフレームアニメーション [PDF]
サンプルプログラムとレポート課題の解説。
- 第6回 物理シミュレーション / 第7回 衝突判定
- ライブラリ・デモプログラム
Open Dynamics Engine (ODE)。 フリーの物理シミュレーションライブラリ。
- 公式サイト・ダウンロード http://www.ode.org
- 日本語での解説サイト http://demura.net/ode
- 第7回 ピッキング
- デモプログラム(Windows用) [picking_demo.zip]
ピッキングのデモプログラム。
- マウス左クリックで、オブジェクトを選択(ピッキング)。
- pキーで、選択の判定方法をスクリーン座標とワールド座標のどちらで行うかを切り替え。
- dキーで、視線ベクトルの表示・非表示を切り替え。ワールド座標系での判定時のみ、最後にピッキングを行ったときの視線ベクトルを表示。
- サンプルプログラム [picking_sample.zip]
上のデモプログラムの一部を実装したサンプルプログラム。
Visual Studio 2022 のプロジェクトを含む。コンパイルには vecmath C++ が必要。
ピッキング処理を実装したもの。一部の処理は、サンプルプログラムでは空欄となっているので、各自作成して、レポート課題として提出すること。
- 演習資料 ピッキング [PDF]
サンプルプログラムとレポート課題の解説。
- 第9回 キャラクタアニメーション (BVH動作データの読み込み・再生)
- デモプログラム(Windows用) [bvh_player.exe]
BVH動作データの読み込み・再生を行うデモプログラム。
- L キーでBVHファイルを読み込み。(テストには別途BVHファイルが必要。)
- サンプルプログラム [bvh_player_sample.zip]
上のデモプログラムの全ソースファイル。
BVHクラス(BVH動作データの管理・読み込み処理・描画処理) + サンプルアプリケーション + Visual Studio 2022 用プロジェクトファイル。
- 演習資料
キャラクタアニメーションの演習資料 の1.2節の説明を参照。
- 第9〜12回 キャラクタアニメーション (人体モデルの表現・基本処理)
- デモプログラム(Windows用) [human_demo.zip]
人体モデルの表現・基本処理のデモプログラム。
複数の基本処理を含むデモプログラム。
以下の複数のアプリケーションの中から、マウス中ボタン(または CTRL + 右ボタン)で実行するアプリケーションを選択、または Mキーで順番に切り替えることができる。
- 動作再生
Sキーで再生/停止、停止中にNキーで次のフレーム、Pキーで前のフレーム。Wキーで再生速度の変更。
Lキーで、再生するBVH動作の選択・変更。
- キーフレーム動作再生
BVH動作をキーフレーム動作に変換したものを再生。元のBVH動作とキーフレームを並べて描画。
- 順運動学計算
動作再生中の順運動学計算の結果(体節の位置・向き、関節の位置)を描画。
- 姿勢補間
2つのサンプル姿勢を補間。左ボタンを左右にドラッグすることで、姿勢補間の重みを操作。
姿勢補間の重みに応じてキャラクタの色を変化。
Dキーで、腰の水平位置の固定の有無を切替。
- 動作補間
2つのサンプル動作を補間。左ボタンを左右にドラッグすることで、動作補間の重みを操作。
動作補間の重みに応じてキャラクタの色を変化。
- 動作接続・遷移
左クリックにより、別の動作に動作接続・遷移。入力がなければ、同じ動作を繰り返し(同じ動作に接続・遷移)。
再生中の動作や、動作遷移中の重みの変化に応じて、キャラクタの色を変化。
Dキーで、動作接続のみを適用するか、動作接続・遷移を適用するかを切替。
- 動作変形
動作中のキー姿勢を変形することで、動作全体を変形。
スペースキーで、変形動作の再生モードと、キー姿勢の変形モードを切替。
キー姿勢の変形モードでは、任意の関節をドラッグすることで、姿勢を変形。(詳細は逆運動学計算(CCD法)の操作方法の説明を参照。)
タイムライン上でクリックすることで、動作変形を適用する範囲の開始・終了時間を設定。
変形動作の再生中に、Dキーで、変形前の動作(白)と変形後の動作(緑)の描画の切替。
- 逆運動学計算(CCD法)
逆運動学計算(CCD法)による対話的な姿勢の変形。
関節点を左ドラッグすることで、末端関節(緑)の位置を移動。関節点は、視線に垂直な平面上で上下左右に移動する。
関節点をSHIFTキー+左クリックで支点関節(赤)に設定。
Vキーで、関節点の描画の有無を切替。
以下は、サンプルプログラムやレポート課題には含まれない、応用アプリケーションのアプリケーション。
- 逆運動学計算(ヤコビ行列を使った解法)
逆運動学計算(ヤコビ行列を使った解法)による対話的な姿勢の変形。
Eキーで、末端関節の操作方法を切替。CCD法と同じ2次元平面での移動のみを行うか、操作軸を使った3次元空間での移動・回転を行うかの切替を行う。
後者のモードでは、関節点を左クリックすることで、末端関節(緑)に設定。各操作軸上でドラッグすることで、末端関節の位置を移動・回転。
関節点をSHIFTキー+左クリックで支点関節(赤)に設定。
- 逆運動学計算(粒子法)
逆運動学計算(粒子法)による対話的な姿勢の変形。
関節点を左ドラッグすることで、末端関節(緑)の位置を移動。関節点は、視線に垂直な平面上で上下左右に移動する。
Vキーで、関節点の描画の有無を切替。
- 逆運動学計算(解析的解法)
逆運動学計算(解析的解法)による対話的な姿勢の変形。
Eキーで、末端関節の操作方法を切替。CCD法と同じ2次元平面での移動のみを行うか、操作軸を使った3次元空間での移動・回転を行うかの切替を行う。
後者のモードでは、関節点を左クリックすることで、末端関節(緑)に設定。各操作軸上でドラッグすることで、末端関節の位置を移動・回転。
Xキーで、旋回角度の計算方法を切替。
- 逆運動学計算(統計モデル)
逆運動学計算(統計モデル)による対話的な姿勢の生成。
任意の関節点を左ドラッグすることで、目標位置を満たす姿勢を生成。
右上に表示されている潜在空間上の点を選択することで、その点に対応する姿勢を生成。
- 複数動作補間
3つのサンプル動作を補間。
左ボタンを上下左右にドラッグすることで、2次元の特徴パラメタを操作し、回帰モデルにより3つの動作の補間の重みを計算。
- 動作解析
動作データを読み込んで解析し、キー時刻や右足・左足が地面に着くタイミングを検出して、タイムライン上に可視化する。
また、検出したキー姿勢からキーフレーム動作(青)を生成して、元の動作(白)と並べて再生する。
Lキーで、BVH動作の選択・変更。Fキーで、両足と地面の接触状態を描画の有無を切替。Kキーで、キーフレーム動作の表示の有無を切替。
- 軌道に沿った歩行動作
制御点によって定義される軌道に沿った歩行動作を生成。
制御点を選択してドラッグすることで、画面上で制御点を移動。
Aキーで、制御点を追加。Dキーで、制御点を削除。
- 動作合成
時間軸上に配置された複数の動作を合成して一つの動作を生成する。
前後の動作の間に動作遷移を適用することで、前後の動作間をつなぐ。
数字キーで、新しい動作を追加する。
Dキーで、選択中の動作を削除する。
Zキーで、選択中の動作の時刻を自動的に設定する。
Xキーで、選択中の動作の位置・向きを初期化する。
画面上の操作軸を操作することで、動作の開始位置・向きを変更する。
- 動作状態機械
あらかじめ定義された動作状態機械と動作データを読み込み、動作状態機械にもとづいてキャラクタの動作を制御。
上or右キーで前方ステップ、左or下キーで後方ステップ、Zキーでパンチ、Xキーでキック、Cキーでガードの動作を実行。 シフトキーを押しながら各動作に対応するキーを押すことで、現在の動作の終了まで待たずに、即座に次の動作を開始。
Vキーで、次の動作の開始姿勢や開始位置などの表示情報の切替。
- 群衆シミュレーション
エージェントモデルによる群衆シミュレーション。
キーボードの 1〜3 キーでシーン設定(エージェントの自動生成方法)を変更。
任意のエージェントを選択することで、選択したエージェントの情報(目標位置(青)、力(黄))を可視化する。
V・Cキーにより、全エージェントの目標位置や力の可視化の有無の切替。
- 人体形状変形モデル
人体形状変形モデルを読み込んで、姿勢に応じて形状を変形。姿勢は、逆運動学計算(CCD法)により変更可能。
Fキーで、形状モデルの描画の有無を切替。Nキーで、法線ベクトルの可視化の有無を切替。
- サンプルプログラム [human_sample.zip]
上のデモプログラムの一部を実装したサンプルプログラム。
Visual Studio 2022 のプロジェクトを含む。コンパイルには vecmath C++ が必要。
人体モデルの表現・基本処理やアプリケーションのフレームワークを実装したもの。
各デモの実際の処理は、一部空欄になっているので、各自で実装すること。
- 演習資料 キャラクタアニメーション [PDF]
サンプルプログラムとレポート課題の解説。
- 第15回 影の描画
- デモプログラム(Windows用) [shadow_demo.zip]
3種類の影の描画方法のデモプログラム。
- mキーで影の描画方法の切り替え。影なし → テクスチャによる影 → ポリゴン投影による影 → シャドウボリュームによる影、の順に切り替わる。
- oキーで表示オブジェクトの切り替え。車と四角すいの2つのオブジェクトをトグルで表示切り替え。
- dキーで確認用の表示情報の切り替え。
- テクスチャによる影の表示中
通常描画 → 不透明描画、の順に切り替え。- ポリゴン投影による影の表示中
通常描画(半透明・ステンシルバッファ使用) → 不透明描画 → ステンシルバッファ未使用、の順に切り替え。- シャドウボリュームによる影の表示中
通常描画 → 光源からみたオブジェクトの境界線の描画 → シャドウボリュームの前面描画(赤) → シャドウボリュームの後面描画(青) → シャドウボリュームの前面・後面描画、の順に切り替え。
- sキーでアニメーションの停止・再開。
- マウスの左ボタンドラッグで、光源の向きを変更する。
- マウスの右ボタンドラッグ・中央ボタンドラッグで、視点を変更する。
- サンプルプログラム [shadow_sample.zip]
上のデモプログラムの一部を実装したサンプルプログラム。 Visual Studio 2019 のプロジェクトを含む。
幾何形状データの読み込み・描画処理は、サンプルプログラムで実装されている。
影の描画処理の一部は、サンプルプログラムでは空欄となっているので、各自作成すること。