今回も前回に引続き、ofxFaceTracker2を使用したフェイストラッキングを使用して様々なプログラミングを行っていきます。
前回使用した、顔のランドマークを検出する方法で眼や鼻など顔のパーツの位置を特定することが可能となりました。この座標の情報を元に顔にパーツを合成することも簡単です。しかしこの方法の欠点は、2次元の座標をもとに合成するため顔の向きを変化させたときに不自然になってしまう点です。この欠点を補うため、今回は顔の位置と傾きの情報を検出し、その3D空間での情報を元に3Dオブジェクトを合成して立体的な表現に挑戦します。
映像資料
スライド資料
サンプルプログラム
アンケート
本日の授業に出席した方は以下のアンケートに回答してください。
アンケート
この講義「データ構造とアルゴリズムでは」変数と定数、反復、乱数、論理式と条件文、アニメーションとベクトル、配列の操作、関数、そしてオブジェクト指向プログラミングと様々なトピックスを扱ってきました。最終課題はこれらの内容を総動員して、Patatap (https://patatap.com/) のようなインタラクティブなオーディオビジュアル作品をp5.jsで制作します。
Patatapはとてもシンプルなインタラクションで構成された作品です。キーボードを操作すると、それぞれのキーにシンプルなアニメーションが割り振られていて、同時にサンプリングされたサウンドが鳴るようになっています。仕組みはとても単純なのですが、キーボードをリズムにあわせてタイピングすることで音と映像が同期して、まるでVJのパフォーマンスをしているような気分を味わえます。キーボードの組み合わせは無限にあるので、いつまでも飽きることがありません。
今回は、最終課題に向け、p5.jsをつかってPatatapを制作するための方法について解説していきます。
映像資料
スライド資料
最終課題提出
最終課題「Patatapを作る」
最終課題制作のオンデマンドの教材を参考にしながら「Patatap」のようにキーボードからのタイピングで音と映像が同期する作品を制作してください。
- 投稿したOpenProcessingのURLを提出
- 投稿の際に sfc21final のタグをつけてください!
- 締切 : 2022年1月12日 (水)
- 最終課題講評会で発表する方もこちらに回答してください
最終課題提出フォーム
最終課題講評会での発表希望調査
この授業の最終課題の講評会を2022年1月14日と21日の2回に分けて開催します。講評会での発表をした方は一律10点 (100点満点中) 加算します。発表を希望する方は以下に学籍番号と氏名を記入してください。
締切 : 2022年1月12日 (水)
最終課題発表希望登録フォーム
今後のスケジュール
- 12月24日 : 最終課題制作に向けて (レクチャー)
(冬休み)
- 1月14日 : 最終課題講評会 (1)
- 1月21日 : 最終課題講評会 (2)
サンプルプログラム
今回も前回に引き続いてTouchDesignerとGLSLを組合せて高度な表現に挑戦します。前回はフラグメントシェーダー (ピクセルシェーダー) を用いてテクスチャー (TOP) を生成する2次元的な表現に留まっていました。今回はさらにGLSLを応用して3次元の形態(SOP)にGLSLを適用していきます。まず始めにGLSL TOPを用いてバンプマッピング (Bump mapping) をPhongマテリアル(Phong MAT)に適用しレンダリングの際に3Dの形状を変形するという手法を行います。さらに、続いて、GLSL MATを使用して頂点シェーダー (vertex shader) を用いて座標の情報をもとにマテリアルを動的に生成する手法に挑戦します。
スライド資料
サンプルプログラム
アンケート
本日の授業に参加した方は以下のアンケートに答えてください。
今回も前回に引続き、ofxFaceTracker2を使用したフェイストラッキングを使用して様々なプログラミングを行っていきます。
前回使用した、顔のランドマークを検出する方法で眼や鼻など顔のパーツの位置を特定することが可能となりました。この座標の情報を元に顔にパーツを合成することも簡単です。しかしこの方法の欠点は、2次元の座標をもとに合成するため顔の向きを変化させたときに不自然になってしまう点です。この欠点を補うため、今回は顔の位置と傾きの情報を検出し、その3D空間での情報を元に3Dオブジェクトを合成して立体的な表現に挑戦します。
スライド資料
サンプルプログラム
サンプルのビルドには以下の学習データが必要です。下記からダウンロードしてそれぞれのサンプルプロジェクトの bin/data/ フォルダ内に格納してください。
アンケート
本日の授業に出席した方は以下のアンケートに回答してください。
ライブラリー (Library) とは、 汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたもので、多くのプログラミング言語で活用されています。p5.js自体もJavaScriptのライブラリーの1つです。p5.jsではさらにライブラリーを活用することで、p5.js単体では実現が難しい様々な機能を追加していくことが可能です。p5.jsのWebサイトでは様々なライブラリーが紹介されていて、すぐに利用することが可能です。
今回は、p5.js Libraryの中から音を扱かうための p5.Soundライブラリーを使用してp5.jsによるサウンドプログラミングに挑戦します。今回の内容の発展が今期の「デザインとプログラミング」の最終課題となります。しっかりと理解して活用できるようになりましょう。
映像資料
スライド資料
本日の課題
p5.soundを用いて、音を使用した表現をしてください。
- 再生の状態による変化
- 再生スピード変化
- フィルター
- 音量の視覚化 …など
- 投稿したURLをアンケートから提出
- 投稿の際に sfc211217 のタグをつけてください!
- 締切: 2021年12月22日(水)まで!
アンケート
- 今回も、前回の提出作品の人気投票を行います!
- 前回のタグ sfc211210 でOpenProcessingで検索 (検索方法をSketches that are tagged にする必用あり)
- 一番良いと思った作品に1票投票 (自信があれば自分の作品でも可)
サンプルプログラム
音の再生と背景色の変化
マウスのx座標で再生スピードを変更
ローパスフィルター
音量を視覚化
今回は、openFrameoworksのAddonの紹介の3つめとして、ofxFaceTracker2を取り上げます。
SnapCameraやFaceAppといった、カメラに映した顔を加工するアプリケーションが流行しています。実際に試してみると、その精度に驚かされます。このアプリの背後には、コンピュータビジョン (CV) と機械学習による顔のパーツを立体的にトラッキングする技術、Face Tracking が活用されています。
今回は、openFrameworksでFace Trackingを行うためのAddon、ofxFaceTracker2を実際にプログラミングしながらその基本を紹介していきます。
スライド資料
映像資料
サンプルファイル
本日の予定
- 前回課題の発表
- 一人5〜10分程度?
- 課題の内容
- 作品のプランを考える
- 作品タイトル
- どのように展示をするか (簡単な説明で)
- (可能であれば) デモプログラムを作成
- 作品のプログラムのスケッチ(まだラフなものでOK)
- 余裕があれば、どんどん完成度を高めて
- Tech Rider (テクニカルライダー) について
次回までの課題
Tech Riderを書いてみる!
- サンプルを参考にTech Riderを書いてみる
- 以下の項目を入れること
- タイトル (Title)
- 作者名 (Author)
- プロジェクトの説明 (Project Description)
- 設置概要 (Physical Installation)
- 機材リスト (Equipment)
- システム構成図 (System diagrams)
Tech Riderは次週までの課題とします
今回は、openFrameoworksのAddonの紹介の3つめとして、ofxFaceTracker2を取り上げます。
SnapCameraやFaceAppといった、カメラに映した顔を加工するアプリケーションが流行しています。実際に試してみると、その精度に驚かされます。このアプリの背後には、コンピュータビジョン (CV) と機械学習による顔のパーツを立体的にトラッキングする技術、Face Tracking が活用されています。
今回は、openFrameworksでFace Trackingを行うためのAddon、ofxFaceTracker2を実際にプログラミングしながらその基本を紹介していきます。
スライド資料
サンプルフィアル
今回も前回に引き続き、p5.jsによるオブジェクト指向プログラミング (OOP) について学んでいきます。
今回は、オブジェクトを生成する際に実行される初期化のための関数であるコンストラクター (constructor) に注目します。ここまでやってきたようにコンストラクターはオブジェクトが初期化 (インスタンス化) される際に自動的に実行されます。つまりクラスの初期化関数として機能しています。インスタンス化は以下のように行ってきました。
let object = new ClassName();
クラス名の後に () があるところに注目してください。クラス側で設定することによってインスタンス化の際にコンストラクターの引数としてパラメータを受け取ることが可能です。つまり以下のようになります。
let object = new ClassName(arg1, arg2, arg3...);
こうすることで、クラスからオブジェクトを生成する際に引数の値によって様々なバリエーションのオブジェクトを生成することが可能となります。1つの工場 (= クラス) から、様々なバリエーションの車 (= オブジェクト) を生成するイメージです。
実際にp5.jsのコードを動かしながら、インスタンス化とコンストラクターについて理解していきましょう。
映像資料
スライド資料
投稿作品とランキング
投稿作品
人気ランキングTOP5
本日の課題
1つのクラスから複数のオブジェクトを生成して表現してください。
- クラスのコンストラクタの引数からパラメータを読み込み
- 様々なバリエーションのオブジェクトが生成されるように
- 本日作成した「Blob」クラスの例を参考にしてみてください!
- 投稿したURLをアンケートから提出
- 投稿の際に sfc211210 のタグをつけてください!
- 締切: 2021年12月8日(水)まで!
- 今回も、前回の提出作品の人気投票を行います!
- 前回のタグ sfc211203 でOpenProcessingで検索 (検索方法をSketches that are tagged にする必用あり)
- 一番良いと思った作品に1票投票 (自信があれば自分の作品でも可)
アンケート
今回の授業に参加した方は、以下のアンケートに回答してください。
アンケート
サンプルコード
今回は物理シミュレーションを行うことができる、ofxBox2DというAddonをとりあげます。
ofxBox2Dは、Box2DというC++で書かれた2Dの物理演算エンジンをopenFrameworksのAddon化したものです。Box2Dは質量、力、速度、摩擦といった古典物理学(ニュートン力学)の演算を高速に行う、物理法則の演算のためのライブラリーで、もともとはC++で書かれていますが、現在では、Java、C#、Python、JavaScriptなど様々な言語に移植されています。ofxBox2Dを使うことで簡単な物理法則を援用したアニメーションだけでなく、2次元のゲームやインタラクティブなコンテンツなどに応用可能です。今回は、ofxBox2Dの導入から、形を定義して物理世界に追加する方法、大量の物体を追加するための工夫などを紹介していきます。
映像資料
スライド資料
サンプルファイル
アンケート
授業に参加した方は、本日のアンケートに回答してください。
アンケート