TVMLZは”Z”、つまり、アルファベットの最後で、この後は無し、ってことで。
NHKでの開発コードはtvmlxで、ま、それに似てるんだけどTVMLZってことでよろしく。
You may also like
TVML SDKの会員制限を外したので、誰でもDLできて使えます。ダウンロードページの一番下からどうぞ。 使用上の注意もそこに書いてますんで、そういう感じにてよろしくお願いします。 ソースコードもそのまま入れてるんで、いかようにでもご自由にどうぞ。 tvmlzっていう別プロジェクトもあるんですが、そっちも2年ぐらい止まってるかなあ。とはいえ、そっちは現用で使ってて、vizclassっていうアプリ(ビデオレクチャーを作るツール)はそれで作ってるし、vizclassは今でも英語の講義作成用に使ってるんで、まだ現用なんですよね。 ほんとはtvmlzもフリー公開したいんですが、未完成なんでまだ公開できる状態じゃないのね。完成はいつになるか分かりません・・・ よろしく!
TVMLのエンジンをUnity5で新規にスクラッチで作り始めた。ほとんど、いや、完全に趣味である。 始めたきっかけだが、学校の授業でClean codeっていう「いかにきれいなコードを書くか」という、自分におよそふさわしくないテーマで講義をしているのだが、そこで使うちょっとした課題を作ったのが始まりだった。昔作ったキャラを引っ張り出してきて、Unity5の上に登場させ、ごく基本的なアニメーションをC#で書いて仕込んだ。このコードを学生に渡し、コードをきれいにしなさい、とやったわけだ。A4でほんの一枚以下のC#のコードだ。 キャラが動いて声を発するのが面白くて、ちょこっといじってこんなのを作った。 このコードはひと月ほど放置されていたのだが、ちょっとヒマができた時になんとなく取り出し、以前に買っておいた、Unity5で動くTTS(音声合成)と自動リップシンクソフトをやはり引っ張り出し、つないで、セリフをしゃべらせてみた。 コードに打ち込んだセリフをこいつが初めてしゃべったとき、思わず微笑んでしまった。すぐに、およそ20年近く前、同じようなCGキャラが初めて合成音でしゃべったときのことがフラッシュバックした。あれが最初の感動だったな、と思い、しばらく感慨にふけった。 と、まあ、そういうわけで、ヒマができたときだけ、非常にノロノロと、このコードをあれこれいじり始め、いろいろ考えてはみたのだが、結局、このままTVMLエンジンをゼロから作ってみるか、と思うようになった。そして、今に至る。 当面、ビジョンは無い。途中で放置する可能性も大である。というわけだが、自分はなぐさみで文を書くのも趣味なのでこのようなブログとともに開発してみようかな、と思っているのである。
TVMLスクリプトが一応再生できるようになった。もちろん仕様の一部だけど、こんなのが走るようになった。TVMLスクリプトはコレ コマンドにして10個ぐらいをサポート。TVMLの仕様自体は7、80個ぐらいあったと思う。ただ、今回、従来のTVML仕様にこだわる気はなく、作りながらTVMLの方も変えていってしまう予定。今のところ、少ししか変えてないが、一か所、従来と大きな違いがある。 それは、CharacterデータをTVMLスクリプト内で読み込むのを止めたこと。従来は、たとえば character: openmodel (model=POONI, filename=”Characters/pooni/pooni”) みたいにfilenameに外部データファイル名を指定して、それをオープンして、それを使っていた。上述の「Characters/pooni/pooni」は、実際にはUnityのプロジェクト内のResourcesフォルダ内に配置したキャラクタデータだったんだよね(あるいはどこぞに配置したAssetBundle)。今回、このやり方は止めて、キャラクタとセット(実際はカメラも照明も全部)をUnityEditor上で最初からScene上に配置しておき、これをもとにTVMLスクリプトを動かすようにした。 UnityEditor上では最初からこうなっている。 キャラクタ、セットはプレハブをドラグアンドドロップして、Editor上で配置を行う。照明やカメラも配置調整して絵作りをしてしまう。その後、このシーンに対してTVMLスクリプトを再生して、こいつらに演技させるのである。そのため、今回TVMLに「assign」というコマンドを追加した。こういう風に書く。 character: assign (name=A, gameobject=”pooni”) pooniという名前のゲームオブジェクトに、TVML内の「A」というキャラクタ名をアサインし、以後、これを使う。 character: talk (name=A, text=”こにゃにゃちわ”) という風になる。ということは、UnityEditor上でシーンさえ作っておけば、以下の正味2行のTVMLを書けば、キャラクタを動かすことができる。 character: assign […]
一応、こんな風にしゃべっている。TVMLは何はともあれしゃべるのが基本なんで、最初はこれでしょう。 このキャラはPooniと言う。TVMLオリジナルキャラはBobだが、その子供にKidというキャラがいて、その現代版がPooni。デザインは家のカミさん。黄色いうんち色のおむつをしているのでPooniと言う名前なのである。あと知っている人は知っているが、このボブマリキャラはポリゴンが見えているところに特徴があるのだが、このPooniはそれが無くてスムーズ。Unity5になってデフォルトのシェーダーがPhong shadingになり、プラスチックの質感とかきれいに出るんで、ポリゴン頭はやめー! スムーズ路線に切り替えた。そのうちスムーズBobも出すことにしよう。 そういや、この前スウェーデンの授業でなんかのついでにこのPooniと、BoinというキャラとFoggというキャラの寸劇を見せたら学生の一人が超笑い転げていたが、そんなに面白いか、これが。 開発ブログなんでテクニカルノートを書こう。 音声合成はRTVoice(会社:crosstales)という売り物でUnity Asset Storeで見つけて買った。たしか二千円ぐらい。このRTVoiceは別に自分でTTSエンジンを持っているわけではなく、使っているマシンにプリインストールされているTTSエンジンをサーチして、それをUnityから使えるようにしている。オレの今のマシンはWindows10で、Windows10には英語のTTSが最初からあり、それで言語設定を日本語にするとどうやら日本語TTSが一つ入るようで、現在はその「日本女性」の声でしゃべっている。 それからリップシンクは、今回、やはりAsset storeで買ったSALSA(会社:Crazy Minnow Studio)というソフトを使っている。これも二千円ぐらい。Unity上で鳴っている音をリアルタイム処理して、3段階のリップシンクデータを自動的に出力する、という簡単なもの。受け取った僕のコード側では、この不連続な3つのデータにローパスフィルタにかけ、スムージングし、滑らかなリップシンクデータに変換して使っている。 このSALSAだが、アナウンスによるともうすぐ、Unity上キャラに表情をリアルタイムで自由に与えられるパッケージも出すそうで、それが出たらそれを組み込んで表情を変えていろいろやってみたい。もちろん、このバカキャラのままやるつもりだが。 あ、あと、見ての通りセリフの字幕も付けている。フォントはゴシックだと味気ないので、cinecaption227というシネマ調のフォントをどっかから落としてきて、それを使った。 というわけで、第一報でした。