n
URL は https://www.kkaneko.jp/a/cg.html
授業名: コンピュータグラフィックス特論
担当者: 金子邦彦
トピックス:マーカーレスのモーションキャプチャ,3次元コンピュータグラフィックス,種々のシミュレーション,人体アニメーション,コンピュータビジョンとコンピュータグラフィックス
(この資料のうち、後半の「Blenderに Wavefront OBJ形式ファイルをインポート 」は無視してください)
Blender の画面構成,立体の新規作成,カメラの調整とレンダリング,マテリアル
【動画で実演している内容】
3Dビュー
オブジェクトモードでの種々の操作(移動、コピーペースト、追加、回転、拡大・縮小)
色を設定する場合:オブジェクトの選択、右のプロパティを使用、マテリアルで設定。 マテリアルが無い場合には、新規、マテリアル.
レンダリング
モードの切り替え
【サイト内の参考ページ】
【ここで行うこと】
Blender のシーンの中に,さまざまな種類の立体を配置する.
Blender の操作法としては,立体の追加,移動,回転,拡大・縮小の操作を学ぶ. 基礎としては,グローバル座標系とローカル座標系を知る.
資料: https://www.kkaneko.jp/db/cg/layout.html
【まとめ】
立体には,さまざまな基本的な立体(球,円柱,平面など)がある. 立体は,移動,回転,拡大縮小できる. シーンは,複数の立体を含むことができる. 座標系には,グローバル座標系とローカル座標系がある.グローバル座標系は,シーン全体のもの.ローカル座標系は,オブジェクト個々のもので,オブジェクトが傾くとローカル座標系も傾く
【ここで行うこと】
Blender のシーンの中に,さまざまな種類の立体を配置し,カメラ視野を調整しながら,レンダリングを行う.
Blender の操作法としては,レンダリング,作業視野とカメラ視野の切り替え,カメラの調整,マテリアル 基礎としては,作業視野とカメラ視野を知る.
資料: https://www.kkaneko.jp/db/cg/blender.html
【まとめ】
視野には,カメラ視野と作業視野がある. レンダリングは,カメラ視野で行われる. 立体には,マテリアルを設定することができる.
【ここで行うこと】
Blender の剛体シミュレーションの機能を使い, 落下や衝突のシミュレーションを行う. オブジェクトをいろいろと配置して,落下や衝突のシミュレーションを行ってみる.
資料: https://www.kkaneko.jp/db/cg/rigid.html
【まとめ】
Blender にはアニメーションのプレビュー,アニメーションのレンダリングの機能がある.アニメーションのプレビューは,スペースキーで開始,一時中断できる.
Blender での剛体シミュレーションでは,剛体は, アクティブとパッシブの2種類がある. アクティブは普通の剛体である. パッシブは移動しないように設定された剛体である.
【ここで行うこと】
パーティクルアニメーションは,「パーティクル」と呼ばれるたくさんの粒を使うシミュレーション
波,煙,炎,流れの表現などに利用できる.
Blender を一度終了し、もう一度起動してから行ってください(いままで作ったデータは全て消したい)
【まとめ】
Blender で,数や寿命や出力速度の設定を行った. 他のオブジェクトで跳ね返る,通り抜けるといったシミュレーションも行った.
【ここで行うこと】
Blender で2つの立体のブーリアン演算を行う.ブーリアン演算により,立体に穴をあけたり,2つの立体の交差部分を得ることができる.
資料: Blender で,ブーリアン演算により,立体を加工
【まとめ】
Blender での立体のブーリアン演算は,差分や交差などである.
ブーリアン演算の差分によって,立体に穴をあけることができる.
【ここで行うこと】
Blender でのメッシュの作成,メッシュの編集,クロス・シミュレーションの実行
資料: Blender で,クロス・シミュレーション(Cloth Simulation)を行う
【まとめ】
布を,多数のポリゴンから構成されるメッシュで表現できる.
メッシュとは,1つあるいは複数のポリゴンの集まりである.
【ここで行うこと】
ポリゴンのフラットシェーディングとスムースシェーディングの違いを見る. オブジェクトの色,透明度,粗さなどのマテリアルを設定する.
資料: Blender のマテリアル,スムースシェード (smooth shade)
ここで作成した Blender のデータは,次で使用する.Blender を閉じずに次に進むこと.
【まとめ】
【ここで行うこと】
Blender で PBR マテリアルのインストールを行い,使ってみる. さまざまな種類の材質を設定してみる.
前準備: Blender で,PBR マテリアルのインストールを行うこと.
資料: Blender の PBR Materials アセット
【まとめ】
【ここで行うこと】
Blender のシェーダーの機能により, テクスチャ座標,バンプマッピングなどを試してみる.
資料: Blender のシェーダー・エディタ(Shader Editor)
【まとめ】
【ここで行うこと】
Blender の 4種類のライト(ポイント,サン,スポット,エリア)を見る. Blender で Eevee と Cycle のレンダーエンジンを見る. Blender でライトの追加や移動を行う.
使用する Blender ファイル:02e.blend を使用する.
資料: Blender のライト
参考資料(さらに,いろいろな機能を使いたい人のため): Blender で,レンダリングを行う
【まとめ】
【ここで行うこと】
Blender で画像ファイルを用いた画像テキスチャを行う. 画像テクスチャのテクスチャ座標系を見る.
資料: 画像テクスチャ
【まとめ】
【ここで行うこと】
画像ファイルの中の必要な部分だけを,画像テクスチャとして用いたいときに便利なテクスチャ・ペインティングを行う.
資料: Blender で,テクスチャ・ペインティング (Texture Painting) を行う
使用する画像: door.png
【まとめ】
人体のポーズについてのアニメーション
【ここで行うこと】
Windows パソコンで,MakeHuman のインストールを行う. MakeHuman は人体の造形等の機能を持つソフトウェアである. MakeHuman のデータを,Blender で取り込んで,Blender で人体画像のレンダリングを行う.
資料: MakeHuman 1.2 のインストールと機能,Blender 2.93.4 との連携(人体アニメーション)(Windows 上)
【まとめ】
【ここで行うこと】
MakeHuman のデータを,Blender で取り込む. そして,Blender の逆力学(IK)の機能を用いて,人体を動かす.
資料: 逆力学(MakeHuman 1.2, Blender 2.93.4 を使用)(Windows 上)
【まとめ】
【ここで行うこと】
資料:
【まとめ】
OpenCVを用いた種々の処理
Windows パソコンで, コマンドプロンプトを管理者として実行する.次のコマンドを実行する.
python -m pip install -U opencv-python opencv-contrib-python matplotlib numpy
トピックス:カラー画像から濃淡画像への変換,イメージヒストグラム,ヒストグラム平坦化,濃淡画像のノイズを加える、ノイズを除去する,OTSU の方法による2値化,輪郭抽出
説明資料: Python + OpenCV 4 で濃淡画像を使う(イメージヒストグラム,ヒストグラム平坦化,ノイズ除去,2値化,輪郭抽出)
OpenCV で点や線の描画(OpenCV,Python を使用)
説明資料: OpenCV で点や線の描画(OpenCV,Python を使用)
説明資料:マウスイベント
説明資料: ゲームエンジン[PDF], [パワーポイント]
説明資料: Unreal Engine 4.27 のインストール [PDF], [パワーポイント]
Unreal Engine のアクター,レベルブループリント,イベント,物理シミュレーション
説明資料: Dlib の機能概要 [PDF], [パワーポイント]
内容
顔検出は,写真やビデオの中の顔を検出すること.顔とそれ以外のオブジェクトを区別することも行う. 顔検出の結果は,バウンディングボックスで得られるのが普通である.
顔検証は, 顔と顔とを比べてマッチするか(同一人物であるか)を調べること.
顔識別では,ある顔と,データベースの中の多数の顔についての情報を用いて,顔が誰であるのかの個人の特定を行う. このとき,データベースの中の多数の顔とのマッチングが行われる.
顔認識 (face recognition)は, 写真やビデオについて顔検出を行い,さらに, その結果として得られた顔について (複数の顔が得られた場合にはそれぞれについて), 顔識別(データベースの中の多数の顔についての情報を用いての,個人の特定)を行うという一連の処理全体である.
顔ランドマークは,顔について,目,眉,鼻,口,あごのラインなどのアノテーションを行ったもの
顔の 68 ランドマーク は,顔ランドマーク (facial landmark)の一種であり,68 組の数値で構成されている.68 組のそれぞれは,(x, y) 座標値である.
さまざまな大きさや向きの顔を,一定の向きや大きさにそろえることなどをいう.
顔のコード化では,顔を数値(複数の数値)に置き換える. このとき,同一人物の顔は,近い値の数値に, 違う人物の顔は,離れた値の数値になるようにコード化を行う.
Dlib は,数多くの機能を持つソフトウェア. Python, C++ のプログラムから使うためのインタフェースを持つ. Dlib の機能: 機械学習,数値計算,グラフィカルモデル推論,画像処理,スレッド,通信,GUI,データ圧縮・一貫性,テスト,さまざまなユーティリティ
Dlib には,顔情報処理に関して,次の機能がある.
ディープニューラルネットワークの学習済みモデルも配布されている
face_recognition は,顔情報処理の機能を持つソフトウェア. 次の機能がある.
次のページを,各自 WEB ブラウザで開き,上から,説明を読みながら,コードセルを上から順に実行することができる. https://colab.research.google.com/drive/1S55yEFiQpdIRdjWbdH0zzEYD5VAfklHd?usp=sharing
自分で画像ファイルをアップロードし,画像ファイル名を「5」のプログラムに書き, 最初から実行しなおすことにより, 自分で新しい画像を試すことができる.
Google Colaboratory に,自分の手持ちの画像をアップロードするなどで試してみたいと思った人のために, Google Colaboratory へのファイルのアップロードの実演を,次の動画で行っている.
(右側のメニューの「ファイル」をクリック.そして,手元のファイルをドラッグ&ドロップ).
https://www.youtube.com/watch?v=rBBwNB3iS8w
取り組む上での注意点
Windows パソコンで, コマンドプロンプトを管理者として実行する.次のコマンドを実行する.
python -m pip install --pre --extra-index-url https://archive.panda3d.org/ panda3d
プログラム実行により,画面が開く.
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) app = HelloWorld() app.run()
Panda3d には,マウス操作の機能がある.
このことを確認するために,次のプログラムを動かす.
プログラム実行の後,マウスを動かしてみる.
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) app = HelloWorld() app.run()
プログラム実行の後,マウスを動かしてみる.
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) self.cube = self.loader.loadModel("models/misc/rgbCube") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(0, 20, 0) app = HelloWorld() app.run()
プログラム実行の後,「aキー」を押す.
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) self.cube = self.loader.loadModel("models/misc/rgbCube") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(0, 20, 0) self.accept( "a", self.a_key ) def a_key(self): self.cube.setScale(2) app = HelloWorld() app.run()
プログラム実行の後,マウスの右ボタン,左ボタンを押す.
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) self.cube = self.loader.loadModel("models/misc/rgbCube") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(0, 20, 0) self.accept( "mouse1", self.mouse1 ) self.accept( "mouse3", self.mouse3 ) def mouse1(self): self.cube.setScale(2) def mouse3(self): self.cube.setScale(0.5) app = HelloWorld() app.run()
プログラム実行の後,4つの矢印キーでオブジェクトが動くことを確認する
結果を確認したら,右上の「x」をクリックして終了.
from direct.showbase.ShowBase import ShowBase from direct.showbase.Loader import Loader class HelloWorld(ShowBase): def __init__(self): ShowBase.__init__(self) self.scene = self.loader.loadModel("models/environment") self.scene.reparentTo(self.render) self.scene.setScale(1, 1, 1) self.scene.setPos(0, 0, 0) self.cube = self.loader.loadModel("models/misc/rgbCube") self.cube.reparentTo(self.render) self.cube.setScale(1, 1, 1) self.cube.setPos(0, 20, 0) self.accept( "arrow_up", self.up_key ) self.accept( "arrow_down", self.down_key ) self.accept( "arrow_right", self.right_key ) self.accept( "arrow_left", self.left_key ) def up_key(self): self.cube.setZ( self.cube.getZ() + 1 ) def down_key(self): self.cube.setZ( self.cube.getZ() - 1 ) def right_key(self): self.cube.setX( self.cube.getX() + 1 ) def left_key(self): self.cube.setX( self.cube.getX() - 1 ) app = HelloWorld() app.run()
強化学習 ML-Agents ツールキットを動かしてみる
説明資料: 人工知能の概要 [PDF], [パワーポイント],
次の資料の「Python の隔離された環境の作成」から開始してください。その前は、すでに、終わっています
パソコン実習資料: Windows で Unity ML-Agents + Python 環境を作る(Chocolatey, Anaconda を利用)(Chocolatey, Anaconda を利用)
説明ビデオ: ビデオ(音声つき)が YouTube にもある.8分34秒.ML-Agents ツールキットに付属の事前学習済みモデルを Unity で動かしてみる(ミニ実演)
説明ビデオ: ビデオ(音声つき)が YouTube にもある.7分56秒.ML-Agents ツールキットで学習を行ってみる(ミニ実演)
説明資料: 虹彩について
頭部の姿勢推定
頭部の姿勢推定
瞳孔の検出
赤いマークは目の下の中央、緑のマークが瞳孔
眼球の運動(eye motion)
http://gazecapture.csail.mit.edu/download.php
Python 基礎のまとめと体現学習
ページ29まで
複数種類の人体が登場する人体画像を制作しなさい.種々のオブジェクト(床面等も配置しなさい).
OpenPose のセットアップ
Windows で OpenPose 最新版をソースコードからビルドして、使ってみる(Build Tools for Visual Studio を利用)
【ここで行うこと】
資料: