お知らせ
- レポートについて
-
初回(5/8(金)5,6限)からMicrosoft Teamsを用いて授業を行います.Teamsへの登録についてこのテーマを選択した皆さんにメールを送っています.
もし本テーマに割り当てられたのにメールを受け取っていないという人は担当教員の藤澤まで連絡してください.
オンラインでの講義受講については学情のこちらのページを参考にしてください. -
本実験テーマはC/C++のコンパイルができるPC環境があることを前提としています(可能ならばVisual Studio環境が整えられること).
実験テーマ選択する場合にご注意ください.
- 2020年度はenPiT準拠テーマではなく,通常テーマとして実施します.注意してテーマ選択してください.
テーマ概要
- テーマ名:物理エンジンを使ったアプリケーション開発
- 科目番号:GC41103 情報メディア実験A
- 開講時限:春学期ABC 水曜日3,4時限, 金曜日5,6時限 (詳細な日程は情報メディア実験のページを参照)
- 教室:
7C202, 7A202MS Teamsを用いたリモートでの説明/開発補助を予定 - 概要:
最近のゲームやアプリケーションでは剛体同士の衝突などを物理法則に従って計算する物理シミュレーションがよく使われています. 本実験テーマではオープンソースの物理シミュレーションエンジンを利用したアプリケーションを作成することで, 物理シミュレーションの基礎と物理エンジンを使ったプログラミングを学びます.
実験では最初に物理シミュレーションおよび物理エンジンの基礎について練習問題を解くことで学び, その後物理エンジンを使った簡単なシステム/アプリケーションの開発を行ってもらいます.昨年度は春学期enPiT準拠テーマとして実施しましたが,2020年度はCOVID-19の影響で通常テーマとして実施することになりました. このテーマを選択してもenPiT合宿に合流することはありません.テーマ選択する際は注意してください.
担当教員
- 氏名: 藤澤 誠 (ふじさわ まこと)
- 所属: 図書館情報メディア系(情報メディア創成学類,図書館情報メディア研究科担当)
- 電子メール: fujis[at]slis.tsukuba.ac.jp
- ホームページ: http://slis.tsukuba.ac.jp/~fujis/
- オフィスアワー : 随時(メールでアポを取って下さい)
説明ページ
C++の教材
本実験で用いるBullet PhysicsライブラリはC++で書かれたオープンソースライブラリである. 実験で用いるサンプルプログラムではC++のクラスなどは使わないようにしているので, C言語(とOpenGL)が分かっていれば理解できるでしょう. しかし,Bulletを深く理解するためにはC++(特にクラスについて)が分かっている必要がある. C++の参考資料(PDF)を以下に置くので,必要に応じて参照すること.
また,Visual Studioなどほとんどの開発環境で標準的に使えるSTLという便利なライブラリがある. これを使うと便利なので,簡単な解説資料を以下においたので,是非使ってみてほしい
なお,これらの資料は私が学生の時に研究室の輪講用に作成したものを少しだけ修正したものである (なので日本語がおかしかったり,間違っていたらごめんなさい).
ガイダンス資料
物理エンジンについて
内容 | 資料 | |
---|---|---|
1.物理シミュレーションとは? | 物理シミュレーションの基礎的な理論(物理エンジンを使うために必要となる理論的な基礎)について学ぶ. |
説明スライド(PDF) 説明ページ サンプルプログラム (MD5:646c5ef0aef5478e9050672f1dea28c7) |
2.物理エンジンとは? | オープンソースの物理エンジン"Bullet Physics Library"(以下Bullet)について学び, Bulletライブラリのビルド,Bulletを使った単純な剛体シミュレーションプログラムを作成する. |
説明スライド(PDF) 説明ページ |
3.多数の剛体間の衝突判定,衝突応答 | 物理エンジンの重要な機能である衝突判定,衝突応答について, 多数の剛体が存在する場合でも高速に処理するための方法を学ぶ. |
説明スライド(PDF) 説明ページ1(衝突検出) 説明ページ2(衝突応答) サンプルプログラム2 (MD5:1c287ac06650f7161fdeea1153be6189) |
4.剛体間リンク | 剛体同士の位置,姿勢関係に拘束条件を加えることでジョイント構造を持たせることができる. この剛体間リンクの理論とBulletで設定できるジョイントの種類について学ぶ. |
説明スライド(PDF) 説明ページ 補足:視点の追従 |
5.3Dモデル読み込みと弾性体 | Bulletでは剛体だけでなく,ゴムや布ような変形する物体(弾性体)も扱うことができる. そのためのバックグラウンドになっている技術を学ぶとともに, 三角形メッシュによる形状の読み込みについても学び, 弾性体を使ったプログラムを作成する. |
説明スライド(PDF) 説明ページ1(3Dモデル読み込み) 説明ページ2(弾性体) 3Dモデルファイル入出力ライブラリ (MD5:9546ac4b0b495bbce16c8a86d36c8652) 補足:Blenderによるポリゴン数削減 |
補足など | - |
レポートについて 補足:複合形状 補足:文字列描画 |
ソースコードに関する注意事項
ファイルのMD5によるチェック
実習室のPCではダウンロードしたファイルが不完全であることがある (この場合,解凍時にエラーが出るか,ビルドしようとするとファイルが足りないといわれる). サンプルファイルの下にMD5チェックサムを載せておいた. WindowsだとNirSoftのHashMyFilesというフリーソフトで ファイルのMD5を確認できるので不安な人はこれでダウンロードしたファイルのMD5を調べ,上記の値と一致するかをチェックすること.
dllファイルが見つかりません
Visual Studioでビルドしたプログラムを実行しようとすると「*.dllファイルが見つかりません」といわれ実行できない場合, プロジェクトファイル(*.vcxproj)があるフォルダにDebugもしくはReleaseという名前のフォルダがあるので, その中に,bin/*.dllファイルをコピーする. (サンプルプログラム2以降ではビルド後に自動でコピーされるようにしてある.)
シャドウマッピングについて
サンプルプログラム2ではシャドウマッピングという技術を用いて物体の影をつけている.
これはデプスマップテクスチャというテクスチャを用いて影領域を判別しているのだが,
このテクスチャの解像度が低いと影の輪郭にシャギー(エリアシング)が発生する.
サンプルプログラム2に同封したシャドウマッピングのコード(rx_shadow_gl.h)は実習室のPC(GPUがIntel HD Graphics 4000)上で動作するように作ったので,
この解像度がウィンドウ解像度以下に制限される(一部,GL拡張やGLSLなどが使えないため).
自分のPCなどで実行する際にシャドウマップにより高解像度を設定しても大丈夫なものを以下におく.
右クリックでリンク先を保存でダウンロードし,shared/incに置いて,utils.h内でrx_shadow_gl.hの代わりにインクルードすればよい (rx_shaders.hは上書き).
参考書,参考Webページ
- 藤澤誠著 : CGにおける物理シミュレーションの基礎,マイナビ
- 原田隆宏,松生裕史著,西川善司監修 : ゲーム制作者のための物理シミュレーション 剛体編, インプレスジャパン
- Christer Ericson著,中村達也訳 : ゲームプログラミングのためのリアルタイム衝突判定(Real-Time Collision Detection),ボーンデジタル
- 金谷一朗著 : 3D-CGプログラマーのためのクォータニオン入門,工学社
- Bullet Physics Library : http://bulletphysics.org/wordpress/