Presentation is loading. Please wait.

Presentation is loading. Please wait.

「TVML技術と自動番組制作」 メディアサイエンス専攻大学院特別講義 林正樹 (Masaki Hayashi)

Similar presentations


Presentation on theme: "「TVML技術と自動番組制作」 メディアサイエンス専攻大学院特別講義 林正樹 (Masaki Hayashi)"— Presentation transcript:

1 「TVML技術と自動番組制作」 メディアサイエンス専攻大学院特別講義 林正樹 (Masaki Hayashi)
Tokyo University of Technology June, July, 2019 メディアサイエンス専攻大学院特別講義 「TVML技術と自動番組制作」 林正樹 (Masaki Hayashi) Department of Game Design Uppsala University, Campus Gotland

2 Course Home page

3 Masaki HAYASHI(林正樹), PhD.
Self introduction Masaki HAYASHI(林正樹), PhD. Associate Professor (Docent) Department of Game Design, Faculty of Arts, Uppsala University, Campus Gotland NHK Science and Technology Research Laboratories (20 years) Game and IT companies Uppsala University (100%) Astrodesign, Inc. (20%) Engineering Researcher on Content

4 TVML ワークショップ 4

5 チュートリアル TVML Playerを起動して、実際にTVMLを入力して、再生して試す、チュートリアルです
コースHPのhayashimasaki.net/TUTの「TVML Player Version 1.5 for Windows Download」をクリックしてzipファイルをダウンロードし、解凍して好きなところに置きます(例:デスクトップ) TVMLPlayer1.5フォルダのTVMLPlayer.exeをダブルクリックしてTVML Playerを起動します。

6 TVMLの概要

7 TVMLとは? TVMLの台本:例 character: openmodel( model=modelA,
filename=Characters/maiko/maiko) character: casting( name=A, model=modelA ) character: setvoice(name=A, voicetype=VoiceSommelier:Voice07) character: visible( name=A, switch=on ) TV program Making Language の略 テレビ番組を1本のテキストに記述できるテキストベースの言語 TVMLプレイヤーで即座に再生することが出来る ワープロなどでTVMLで台本を書くだけで、自分だけのテレビ番組を作れる TVMLプレイヤーには、番組作りに必要な要素が備わっている

8 TVMLプレイヤー 再生スクリーン 853 x 480 = YouTubeのサイズ 再生スクリーンサイズは固定(16:9) 全画面表示もない
再生スクリーンサイズは固定(16:9) 全画面表示もない (ただし、TVMLエンジン自体は可変サイズなのでTVML SDKを使ってコーディングすれば可能) 再生スクリーン 853 x 480 = YouTubeのサイズ 音量 再生 停止 早送り(TVML1行ごとにスキップ。巻戻しは無い) ファイル選択(TVML台本を指定する)

9 台本の編集と再生 TVML台本は通常のテキストエディターで編集する。
台本ファイルはUTF8なので、多言語エディターがよい(例:notepad++) TVMLScripts以下にサンプルスクリプトがある 台本を保存したら再生ボタンを押す。再選択する必要はない。

10 TVMLの例 camera: closeup ( target=Bob )
CGキャラクタBobにカメラをクローズアップし「こんにちは」と言わせる camera: closeup ( target=Bob ) character: talk ( name=Bob, text = ”こんにちは” ) ・TVML はイベント駆動 ・上から順に実行 ・プログラミング言語ではない

11 TVMLのイベント書式 character: talk ( name = Bob, text = "Hello" ) イベントタイプ
コマンド パラメータ character camera set prop light movie super drawing sound cgenv コマンド実行に必要な情報を記述 ・イベントの無いコマンドのみの「ダイレクトコマンド」がいくつかある 例: wait ( time=3.0 ) setcaption ( border=on )

12 TVML言語仕様 http://tvmllab.com/tvmlspec TVML言語仕様Version 3.1 英語版
12

13 TVMLの諸規則 camera: move( name = CamA, x=5.0, vangle=60.0 ) パラメータは順不同
パラメータを省略するとデフォルト値が採用される 必須パラメータは必ず指定する コメントアウトは、// または /* */ が使える 改行で区切られた一行がひとつのイベントに対応する(途中で改行を入れてはいけない)

14 TVMLの座標系 左手系です y y z x x 同じ x y z y z z こう考えた方が分かりやすい zが手前向き、xが左 x

15 TVMLの回転系 左回り(反時計回り)です y 正の方向 x z

16 チュートリアル

17 カメラ 以下を入力してください camera:position(name=CamA, x=0.0, y=1.0, z=2.0, ry=180) camera:switch(name=CamA) x z キャラは基本z軸の方を向いている カメラを180度回転させてキャラを捉えている 上面図

18 キャラクタ 以下を入力してください character: openmodel( model=MAIKO
, filename="Characters/maiko/maiko") character: casting( name=A, model=MAIKO ) character: setvoice(name=A , voicetype=VoiceSommelier:Voice08) character:position(name=A, x=0, y=0, z=0, scale=1)

19 照明 以下を入力してください light:ambient(name=LA, r=1.0, g=1.0, b=1.0)
light:point(name=LP, x=0, y=1, z=1) light:flat(name=LF, vx=-1, vy=-1, vz=-1) light:spot(name=LS, x=0.2, y=1, z=0.2 ,vx=-1, vy=-1, vz=-1)

20 セット 以下を入力してください set:openmodel( name=Set
   , filename="Setprops/spaceship/spaceship")

21 waitコマンド 以下を入力してください wait(time=2.0)
camera:position(name=CamA, x=0.0, y=1.0, z=5.0, ry=180) camera:position(name=CamA, x=0.0, y=1.0, z=2.0, ry=180)

22 課題1 カメラを連続的に動かしてみよう 複数カメラを設置して切り替えよう

23 しゃべり 以下を入力してください character: talk( name=A, text="マイコです" ) 字幕指定
, caption="maikoです")

24 声を変える 以下を入力してください character: setvoice(name=A
, voicetype="AquesTalk2:aq_rb2") 英語 character: setvoice(name=A, voicetype="FLite:Voice01" , pitch=0.85, volume=1.2) character: talk( name=A, text="any english text" )

25 課題2 長いセリフをしゃべらせてみよう 複数キャラを出して会話をさせてみよう

26 プロップ 以下を入力してください prop: openmodel(name=sofa
, filename=Setprops/sofa/sofa) prop: position( name=sofa, x=1.3, y=1.0, z=0, scale=1)

27 課題3 プロップのソファーをマイコが座りそうな位 置へ移動する マイコをうまいこと座らせるには?

28 キャラクタを動かす: 立つ、座る 以下を入力してください character: sit( name=A) wait(time=1.0)
キャラクタを動かす: 立つ、座る 以下を入力してください character: sit( name=A) wait(time=1.0) character: stand( name=A)

29 コマンド同時実行 以下を入力してください charactet: bow(name=A) charactet: bow(name=B)
同時におじぎ charactet: bow(name=A, wait=no)

30 コマンド同時実行 以下を入力してください character:bow( name=A, wait=no)
character:talk( name=A, text="こんにちは" )

31 待機コマンド (waitアンダーバーコマンド)
character: talk( name=A, text=“それじゃあまた次回ね、バイバーーーイ", wait=no) wait( time=1.6 ) character: action(name=A, action=handwave) character: wait_talk ( name=A )

32 キャラクタを動かす: 対象物を見る 以下を入力してください character: look(name=A, target=camera )
キャラクタを動かす: 対象物を見る 以下を入力してください character: look(name=A, target=camera ) character: look(name=B, target=camera ) character: look(name=A, target=B ) character: look(name=B, target=A )

33 キャラクタを動かす: 歩き 以下を入力してください character: walk( name=A, x=1.0, z=1.0) 歩数指定
キャラクタを動かす: 歩き 以下を入力してください character: walk( name=A, x=1.0, z=1.0) 歩数指定 character: walk( name=A, step=10)

34 キャラクタを動かす: アクションを再生する
キャラクタを動かす: アクションを再生する 以下を入力してください character: action(name=A, action=brilliant) character: action(name=A, action=jump) character: action(name=A, action=next) character: action(name=A, action=swing) character: action(name=A, action=hop) character: action(name=A, action=shock) character: action(name=A, action=bye) 注: maikoとstewardのみです

35 TV演出に必要なその他の機能

36 プロップ(イメージプレート) 以下を入力してください prop: openimageplate(name=Pic
, filename="./datafiles/dogset.png", hsize=1.024, vsize=0.682) prop: position( name=Pic, x=-1.0, y=1.0, z=-1.0, scale=1.5)

37 ムービー 以下を入力してください movie:open(name=MOVIEDATA_0, filename=./datafiles/dali.ogv) prop:openmovieplate(name=MOVIEPLATE_0 , moviename=MOVIEDATA_0, hsize=2.0, vsize=1.5 ) prop:position(name=MOVIEPLATE_0, x=0, y=1.5, z=-1.0, scale=1 ) movie:play(name=MOVIEDATA_0, wait=no) prop:visible(name=MOVIEPLATE_0, switch=on) wait(time=20) prop:visible( name= MOVIEPLATE_0, switch=off )

38 ドローイング 以下を入力してください drawing: openbase ( name=BASE, x=20%, y=20%, layer=99, color= ) drawing: settext ( name=TEXT1, parent=BASE , text="<font r='1.0' g='1.0' b='1.0' size='30%'> <border r='1.0' g='0.0' b='0.0' width='2'>アートですね</border></font>" , x=0%, y=0%, refmode=center, height=50%, width=50% , overtext=clip, basecolor=transparent ) drawing: setimage(name=PICT1, parent=BASE, filename="./demo/book.jpg" , refmode=center, width=50%,height=50%, x=0%, y=0%, aspect=fit) drawing: display ( name=BASE, switch=on ) wait ( time=5.0) drawing: display ( name=BASE, switch=off )

39 音を鳴らす 以下を入力してください sound:open( name=bgm, filename=./datafiles/musicsample.wav) sound:play( name=bgm)

40 音声ミキサー(レベル変え) 以下を入力してください
sound:open( name=bgm, filename=./datafiles/musicsample.wav) sound:level( name=bgm, level=0.02) sound: play( name=bgm) wait(time=5.0) sound: level( name=bgm, level=0.2) sound: level( name=bgm, level=1.0)

41 音声ミキサー(フェード) 以下を入力してください
sound:open( name=bgm, filename=./datafiles/musicsample.wav) sound: play( name=bgm) wait(time=8.0) sound: fade( name=bgm, level=0.0 )

42 キャラクタを動かす: ターン 以下を入力してください character:turn( name=A, d=-90)

43 キャラクタを動かす: 指定方向を見る 以下を入力してください character: gaze( name=A, rx=-30, ry=70)

44 キャラクタを動かす: ジャンプ 以下を入力してください
キャラクタを動かす: ジャンプ 以下を入力してください character: jump( name=A, x=0.0, z=0.0, d=0.0)

45 キャラクタを動かす: 震える 以下を入力してください character: shake( name=A, switch=on)
キャラクタを動かす: 震える 以下を入力してください character: shake( name=A, switch=on) wait(time=3.0) character: shake( name=A, switch=off)

46 キャラクタを動かす: 口を開ける 以下を入力してください character:openmouth( name=A, switch=on)
キャラクタを動かす: 口を開ける 以下を入力してください character:openmouth( name=A, switch=on) wait(time=1.0) character:openmouth( name=A, switch=off)

47 キャラクタを動かす: 表情を変える 以下を入力してください character: expression( name=A, type=sad)
キャラクタを動かす: 表情を変える 以下を入力してください character: expression( name=A, type=sad) wait(time=1.0) character: expression( name=A, type=happy) character: expression( name=A, type=neutral)

48 キャラクタを動かす: ポーズ 以下を入力してください character:definepose( name=A, pose=banzai
キャラクタを動かす: ポーズ 以下を入力してください character:definepose( name=A, pose=banzai , joint=RightUpperArm, rx=-130, ry=20) , joint=LeftUpperArm, rx=-130, ry=-20) , joint=Chest, rx=-30) character:definepose( name=A, pose=upper , joint=Jaw, rx=30) character:pose( name=A, pose=banzai) wait(time=1.0) character:pose( name=A, pose=default)

49 キャラクタを動かす: 移動させる 以下を入力してください
キャラクタを動かす: 移動させる 以下を入力してください character: move(name=A, x=1.0, y=1.0, z=0.0, ry=45)

50 その他

51 ファイルの場所指定 画像ファイル、音声ファイル、ムービーファイルのパス指定は次の3種。
絶対バスでの指定 (例: C:\sozai\abc.jpg) TVMLスクリプトの場所からの相対パス (例: ./datafiles/news.wav) URL指定(例: 

52 ファイルフォーマット ■サウンドファイル TVMLコマンド: sound:open() 使えるフォーマット: wav, ogg
■画像ファイル TVMLコマンド: prop:imageplate(), drawing:setimage() 使えるフォーマット: jpg, png ■ムービーファイル TVMLコマンド: movie:open() 使えるフォーマット: ogv 注意: ・ムービーはprop:openmovieplate()でしか使えない ・movie:play()はskipscriptの中では効かない(バグ) ■直接ファイル指定できないデータ(次ページで後述) キャラクタ、セット、プロップ、モーションキャプチャーデータ 実はキャラクタ、セット、プロップのCGモデルデータは、Unityのassetbundle形式であれば外部ファイルとして参照できる。ただし、assetbundleの作成はUnityプロジェクトのTVML SDKが必要である。assetbundle使用の例は、TVMLScripts/assetbundletest/ assetbundletest.txtを参照のこと。

53 キャラクタ、セット、プロップデータ これらCGデータは外部ファイルとして参照できない。TVML Playerにあらかじめリソースとして含まれているものが利用できるだけである。以下にVer1.5にバンドルされているものをあげる。 キャラクタ: character:openmodel(filename="data_path") Characters/Bob/Bob Characters/bucchu/bucchu Characters/Justin/Justin Characters/maiko/maiko Characters/mamimi/mamimi Characters/marigo/marigo Characters/Mary/Mary Characters/Mia/Mia Characters/Mia_old/Mia_old Characters/news_caster/news_caster Characters/pooni/pooni Characters/pooni1/pooni1 Characters/pooni2/pooni2 Characters/pooni3/pooni3 Characters/pooni4/pooni4 Characters/pooni5/pooni5 Characters/pris/pris Characters/steward/steward Characters/yuruneko_black/yuruneko_black Characters/yuruneko_mike/yuruneko_mike Characters/yuruneko_white/yuruneko_white セット: set:openmodel(filename="data_path") Setprops/hall/hall Setprops/newnormal/newnormal Setprops/news_set/news_set Setprops/RankingSet_cyber/cyberspace Setprops/spaceship/spaceship プロップ: prop:openmodel(filename="data_path") Setprops/sofa/sofa Setprops/table/table Setprops/table/chabudai Setprops/book/book Setprops/leaf/leaf Setprops/RankingSet_cyber/block_cyber Setprops/RankingSet_cyber/videoboard_cyber Setprops/RankingSet_cyber/videoframe_cyber Setprops/RankingSet_cyber/messageframe_cyber Setprops/rankingframe_16x9/videoboard_cyber_16x9 Setprops/rankingframe_16x9/videoboard_simple_16x9 Setprops/rankingframe_16x9/videoframe_cyber_16x9 キャラクタリストはパワポの最後の付録を参照のこと。

54 TUT追加キャラクタ TUTで制作した以下のキャラクタ5体が使える
character: openmodel(model=A, filename="Characters/General_F/General_F") character: openmodel(model=B, filename="Characters/General_M/General_M") character: openmodel(model=C,filename="Characters/ForHighschool_F/ForHighschool_F") character: openmodel(model=D,filename="Characters/ForHighschool_M/ForHighschool_M") character: openmodel(model=E, filename="Characters/Koukaton/Koukaton")

55 声質 日本語: character: setvoice(name=A, voicetype="VoiceSommelier:Voice06") // 日立製"ボイスソムリエ"、落ち着いた大人の女性 character: setvoice(name=A, voicetype="VoiceSommelier:Voice07") //日立製"ボイスソムリエ"、女性、ふつう character: setvoice(name=A, voicetype="VoiceSommelier:Voice08") //日立製"ボイスソムリエ"、若い女性 character: setvoice(name=A, voicetype="VoiceSommelier:Voice09") //日立製"ボイスソムリエ"、男性、朗読調 character: setvoice(name=A, voicetype="VoiceSommelier:Voice10") //日立製"ボイスソムリエ"、若い男性 character: setvoice(name=A, voicetype="OpenJTalk:Voice01 ") // フリーソフト"Open JTalk"、男性 character: setvoice(name=A, voicetype="AquesTalk2:aq_f1c") // Aquestalk2、若い女 character: setvoice(name=A, voicetype="AquesTalk2:aq_f3a") // Aquestalk2、 女性 character: setvoice(name=A, voicetype="AquesTalk2:aq_huskey") // Aquestalk2、 ささやき女性 character: setvoice(name=A, voicetype="AquesTalk2:aq_m4b") // Aquestalk2、 男性 character: setvoice(name=A, voicetype="AquesTalk2:aq_mf1") // Aquestalk2、 若い男 character: setvoice(name=A, voicetype="AquesTalk2:aq_rb2") // Aquestalk2、 子供男 character: setvoice(name=A, voicetype="AquesTalk2:aq_rb3") // Aquestalk2、 ロボット character: setvoice(name=A, voicetype="AquesTalk2:aq_rm") // Aquestalk2、 別女性 character: setvoice(name=A, voicetype="AquesTalk2:aq_robo") // Aquestalk2、 子供ロボット character: setvoice(name=A, voicetype="AquesTalk2:aq_yukkuri") // Aquestalk2、 男の子ゆっくり character: setvoice(name=A, voicetype="AquesTalk2:ar_f4") // Aquestalk2、 女の子 character: setvoice(name=A, voicetype="AquesTalk2:ar_m5") // Aquestalk2、 若い別男 character: setvoice(name=A, voicetype="AquesTalk2:ar_mf2") // Aquestalk2、 男の子 character: setvoice(name=A, voicetype="AquesTalk2:ar_rm3") // Aquestalk2、 別女性 英語: character: setvoice(name=A, voicetype=" FLite:Voice01") //フリーソフト"Flite (festival-lite)"、女性

56 モーションキャプチャーデータ character:openmocap(filename="data_path")でBVHフォーマットのモーションキャプチャーデータが利用できるが、現時点で外部ファイルとして参照できず、TVML Playerにあらかじめリソースとして含まれている以下のものだけ利用できる。 BVHs/A13 BVHs/A24 BVHs/I05 BVHs/I07 BVHs/I08 BVHs/I09 BVHs/I12 BVHs/I13 BVHs/I14 BVHs/I17 BVHs/I21 BVHs/I25 BVHs/I26 BVHs/I29 BVHs/I34 BVHs/I35 BVHs/natoku_001 BVHs/ojigi_001 BVHs/Sasu_002 BVHs/Sasu_004 BVHs/sit_bow_nao BVHs/sit_byebye_nao BVHs/sit_default_nao BVHs/sit_talk00_nao BVHs/sit_talk01_nao BVHs/sit_talk02_nao BVHs/sit_talk03_cam_nao BVHs/talk_002 BVHs/talk_004

57 キャラクタリスト(付録)

58 キャラクタリスト(付録)

59 キャラクタリスト(付録)


Download ppt "「TVML技術と自動番組制作」 メディアサイエンス専攻大学院特別講義 林正樹 (Masaki Hayashi)"

Similar presentations


Ads by Google