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