にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

『みならいディーバ(※生アニメ)』――Vtuber時代を先取りした怪作

この記事はクソじゃないアニメ Advent Calendar 2020の4日目です。まだいっぱい空きがあるので紹介したいアニメがある人は書いてくださいね。

はじめに

あなたは『みならいディーバ(※生アニメ)』を知っていますか?先進的な作品であったにもかかわらずあまり知られていないので、みなさんにぜひ知ってもらいたくてこの記事を書きました。

f:id:nixeneko:20201203213535p:plain
©(※ネタバレ注意)最終回は生でライブやるかも委員会

概要

『みならいディーバ(※生アニメ)』はNOTTVで2014年7月-9月に月曜21:00から生放送されていました。全10話。1話約50分とちょっと長いです。私はNOTTVは契約していなかったのでニコニコ動画で見ました。
制作総指揮はニッポン放送の吉田尚記ひさのりさん、監督は『てさぐれ!部活もの』の石ダテコー太郎さんです。アニメーション制作は、後に『けものフレンズ』を作ることになるヤオヨロズ*1


本作は生アニメという触れ込みで、声優の村川梨衣さんと山本希望のぞみさんがキャラの声を担当するだけでなく、慣性式モーションキャプチャスーツ*2を身に着け3DCGのキャラをリアルタイムで動かして、そのアニメーション映像を生放送する、という試みです。

これだけ聞くと最近のVTuber/バーチャルライバーと似たようなことをしているように感じられるのではないでしょうか。ただ、キズナアイが活動し始めたのが2016年11月からなので、その2年以上前と考えるとかなり時代を先取りしていたように思われます。今でこそVTuber/バーチャルライバーが一般的になっていますが、当時は同様の試みはほとんどありませんでした。

全体の雰囲気としては声優ラジオに映像がついた感じでもあります。アニラジや声優イベントが好きな人、『gdgd妖精s』(ぐだぐだフェアリーズ)、『てさぐれ!部活もの』などのノリが好きな人は気に入ると思います。

ストーリー

ストーリーというようなストーリーはないのですが、設定としては、音声合成ソフト「バーチャルディーバ」シリーズである蒼井ルリと春音ウイは、ほとんど知名度がなくて持ち曲がない。そこで、自分たちで曲をつくってネットにアップして有名になろう!という話です。作曲は難しいので、拾ってきた曲(という設定で作曲はGhost Writerこと井上純一さん)に歌詞をつけることならできるだろう、ということで作詞をすることにしました。


番組の流れとしては、前半で作詞をします。まず用意されたインスト曲を流し、Twitterで歌詞のアイデアを募集して、それを元にルリとウイが歌詞を考えます。後半は、裏で音楽担当の井上さんが歌詞を急いでまとめている間、適当なコーナーが入ります。
後半のコーナーは生放送のリアルタイム性を生かしたもの(別の局のテレビを見てコメントをする)、双方向性を生かしたもの(ライブビューイング会場と通話する、巨大掲示板ニュー速VIPにスレを立てる)、モーションキャプチャを活かしたもの(ジェスチャーゲーム)、その他大喜利的なものなどがありました。
そして番組の最後でできた曲を歌う、という流れです。途中で(たぶん)キャリブレーションや歌の練習等の時間稼ぎのために事前収録された映像が挿入されます。

どこで見られるの?

1話はニコニコ動画で無料で見れるのでここに貼っておきます。


2話以降はニコニコで購入すると見れます。あとはBlu-ray/DVDがあるので買うなりレンタルするなり…

とはいえ、アニメ作品というよりアニラジやアニメイベントみたいな感じの面白さなので、集中して見ているには物足りないものの他のことに気を取られて聞き逃すと話が分からなくなるので、ニコ動でコメントと合わせて見るのがよさそうです。


1話では生放送ということでシステムトラブルに見舞われ、ルリが両手を広げた状態で動かなくなり、はりつけ状態になりました*3Blu-rayには「スタッフインカム罵声コメンタリー」と称して裏方スタッフの通信が収録されているのですが、それを聞くと現場はそれほど罵声飛び交う感じではなく割と和やかな感じで良かったです。生放送ならではのトラブルも楽しむのがこの作品の楽しみ方といえるでしょう。まあそれ以降はトラブルはあったものの、磔になることはなかったんですが……クリスマス生ライブというライブイベントでまた磔になりました。最初と最後で同じトラブルが起こるというのもなんか運命みたいなものを感じます。

作品の魅力は?

作品の先進性はありますが、技術的な面では現在はもっといい技術がでてきたりコモディティ化が進んだので、今見返してもあまり技術的にすごいとは思わないのではという気もします。しかし、新しいことをしようという制作陣の姿勢が伝わってきて、その勢いはすごいものがありました。例えば、クリスマス生ライブでは当日のライブで歌った音声を(1曲)USBに入れて配るという試みがありました*4。さすがに全員には配れないのでUSBの「おみや」つきチケットは倍率高かったみたいですが…。

それよりなにより一番は何といっても演者の二人が魅力的だというのがあります。村川さんは中の人そのまんまって感じでノリツッコミが面白く、話し出すと長くなるので尺泥棒と呼ばれることも。山本さんはちょっとズレたボケをしたり謎のダンスがキレッキレです。どちらも方向性は違えどやべーやつという趣があります。お二人ともめっちゃ動くので観てて飽きません。その代わりキャリブレーションが頻繁に発生しますが…
演者がめちゃくちゃに動くのでたぶん位置ずれが酷いことになっているんですが、そこで動きを抑えるように指示して解決する可能性もあったかもしれません。しかしそれをせず、たぶんキャリブレーションとかを増やすことで対応してキャラを動かせ続けたのが最高ですね。スタッフの攻めの姿勢を感じます。すごい動きをするとシステム担当のスタッフが苦い顔をしてたそうです(まあそりゃそうですね)。

アニメ風のアバターを用いたリアルタイム配信となると、コメントを用いた視聴者とのコミュニケーションを主体にしたものが多いですが、本作は時間制限があるのと曲を作ることを中心に据えていてるので、緊張感が生まれています。
というか、50分枠で作詞して最後に歌うって正気か?って思います。それも毎週…。

生パートのBGMはLiLiのHajimeさんによる生演奏で、会話に応じて曲調やメロディが変わったりするのも見どころ(聴きどころ?)です。自然なので気づかないですが…。

生放送なのでシステムトラブルが結構発生するのですが、演者の二人がそれをネタにし、トラブルも楽しむようなしたたかさがありました。トラブルとかでなんとなく裏側が透けて見えるのが好きです。NOTTVでは水面下(スタジオの様子)の放送があったり、Blu-rayなどではスタッフの通信音声や水面下のダイジェストが収録されていたり、裏方の情報が供給されているので、そういうのが好きな人はBlu-ray見てくださいね。

エンディングテーマ

作中でつけられた歌詞はカオスなのが多いです。
つくられたエンディングテーマはYouTubeに上がっています
その中で特に好きなのを次に挙げておきますね。一つ2分程度で見れるので見てください。本編見ずにこれだけ見ても意味が分からないかもしれませんが……まあ作詞のノリはわかるんではないかと思います。

第5話エンディングテーマ曲『筋肉に願いを』


第9話エンディングテーマ曲『現実逃避ラプソディー』

さいごに

記事を書くにあたって作品を最初から見返しました(時間があまりとれなかったので最後まで見返すことはできませんでした…)が、やっぱり演者のこの二人面白いですね。いきなりコント始めたり…

これアニメか?という向きもあると思いますが、まあ、アニメって言ってるしアニメということで紹介しました。
企画者がラジオ畑の人なので、アニラジみたいな作品ですが、そんな雰囲気が好きな人は楽しめると思います。見てね。

リンク

みならいディーバを紹介してる先駆者が居ました。私より紹介が上手く熱があるので、貼っておきます。
huyukiitoichi.hatenadiary.jp
note.com

*1:ヤオヨロズ、2020年3月で解散していたみたいですね……さっき調べて知りました。

*2:商業アニメで使われるモーションキャプチャは光学式が多いですが、光学式は高品位なモーションがとれるものの、専用のカメラをたくさん設置したスタジオを必要とします。一方で慣性式モーションキャプチャスーツは、得られるモーションの品質は光学式に劣るものの、スタジオを必要としないので、ライブ会場等でも使うことができます(実際にみならいディーバではサイエンスホールとかでライブをしました)。その代わり誤差が蓄積してどんどん位置がずれていくので定期的なキャリブレーションを必要とします。

*3:3Dモデルデータを作る際に両腕を広げた状態で作成するので(Tポーズといいます)、モーションが適用されないとその形になります。

*4:投票で選ばれた曲をライブの最初に歌い、その音源をUSBにコピーし、ライブ終了後に「おみや」つきチケットを持ってた人に配られました。

Windows 10のモンゴル文字キーボード配列図

Windows 10にはモンゴル文字のキーボード配列がなぜか2種類入っていて、「モンゴル語 (モンゴル文字)」と「伝統的なモンゴル文字 (標準)」という名前になっている。これらは配置がやや異なる。
モンゴル語 (モンゴル文字)」の方が古くから存在し、「伝統的なモンゴル文字 (標準)」は後から追加されたようだ。čやoの位置、一部記号等が異なっている。

これを使ってキーボード配列図を作成した。

ラテン文字転写は基本的に塩谷 茂樹・中嶋 善輝『モンゴル語 (世界の言語シリーズ3)』大阪大学出版会(2011)に基づいている。


伝統的なモンゴル文字 (標準)

f:id:nixeneko:20200828231947p:plain

ソースコード

ネオ民謡―ポップにアレンジされた日本民謡を聞く

日本民謡は、多くの現代人にとって、あまり馴染みのないものではないでしょうか。
聞く機会も少ないし、また、現代の音楽になれてしまった私たちからすると、音に厚みが足りない気がするし、聴いていて飽きてしまうこともあります。

しかし、民謡の伴奏を現代的な音楽に変えると、(ちょっとエスニックな)ポップスとして普通に聞けるものになります。ドラムやベースといったリズム隊が入るだけでも驚くほど聞きやすく感じます。
日本には、民謡を現代風のトラックに乗せてアレンジした作品を発表しているアーティストが何組かいますので、この記事で紹介します。このようにアレンジされた民謡をネオ民謡(新しい民謡)と呼んでいる人もいます。歌っているのはガチの民謡歌手だったりするので、みなさん上手です。

Omodaka

寺田創一さんによる民謡テクノユニット。民謡歌手の金沢明子さんがボーカルで参加しています。
チップチューン系のピコピコ音もあり、結構面白い音作りをしています。
ライブが独特で、巫女装束に身を包んだ寺田さんがディスプレイに映った金沢さんとインタラクトするパフォーマンスが面白いです。
Omodaka以前にも同じタッグで1991年に『金沢明子 House Mix 1,2』という民謡のハウスアレンジなども発表されています。

plum song

「梅は咲いたか」という江戸端唄(はうた)です。芸妓たちを歌った歌だけあってPVは性を連想させる形象が多く出てきます。
www.youtube.com
トラックが何か聞いたことがあるという人もいるかもしれませんが、Debargeの“I Like It”です。

kokiriko bushi

富山の民謡「こきりこ節」です。
www.youtube.com


民謡の他には競艇の曲とかがあります。
他にもライブやPVなど、Youtubeに多くの動画が上がっています

NeoBallad

若狭さち(Vocal)さん、上領亘(Drums&Arrangement)さんによるテクノ民謡ユニットです。

会津磐梯山

福島県民謡の「会津磐梯山」です。「小原庄助さんなんで身上(しんしょう)つぶした 朝寝 朝酒 朝湯が大好きで それで身上つぶした ハァもっともだ」という囃子言葉が面白い曲です。
www.youtube.com

大漁唄い込み

宮城県民謡「大漁唄い込み」です。
www.youtube.com

他にもYouTubeに動画が上がっています

朝倉さや

「山形弁の歌姫」だそうで、往年の名曲を山形弁カバーしたりしています。
オーソドックスな民謡もやるし、Future Traxといって、今風のトラックをつけた民謡も歌ったりしているようです。

最上川舟唄 (River Boat Song ft.GOMESS)

山形県民謡「最上川舟唄」のアレンジです。朝倉さんの歌とGOMESSさんのラップが組み合わさって全く新しいものになっています。
www.youtube.com

Mr.Mamurogawa - 真室川音頭(民謡)

山形県民謡の「真室川音頭」のアレンジです。途中オリジナルの歌が入りますね。
www.youtube.com

他にもYouTubeに曲などが上がっています

民謡クルセイダーズ

ラテン音楽+民謡。最近ラジオとかでも聞くようになりました。ラテン音楽を中心に様々なエスニックのビートを組み合わせているらしいです。

炭坑節

福岡県民謡「炭坑節」。盆踊りとかでよく聞く有名な歌ですね。
www.youtube.com

会津磐梯山

福島県民謡の「会津磐梯山」です。人によってアレンジが違うのを聞き比べてみてもいいかもしれません。
www.youtube.com

他にもYouTubeにライブ動画等が上がっています

黒船

ジャズバンドですが、三味線が入っています。ボーカルの里アンナさんは奄美島唄をバックグラウンドとしているようなので、奄美の民謡も多いようです。奄美島唄と三味線の組み合わせが斬新です。民謡のアレンジ、オリジナル曲、ジャズのスタンダードの3つの方向性でやっているとのこと。

豊年節

奄美大島の歌「豊年節」です。
www.youtube.com

行きゅんにゃ加那節

奄美大島の歌「行きゅんにゃ加那節」です。
www.youtube.com

朝崎郁恵

奄美大島唄者朝崎郁恵さん。アルバム『南ぬ風』では、ギターや三味線等で伴奏の付いた奄美島唄が収録されているようです。

千鳥浜 with タナカアツシ&五十嵐典子

奄美民謡の「千鳥浜(ちじゅりゃはま)」。
www.youtube.com

久嶋 美さち(きゅうしま みさち)

宮崎県のネオ民謡歌手だそうです。

五木の子守唄

熊本県民謡「五木の子守唄」です。
www.youtube.com

正調刈干切唄

宮崎県民謡「正調刈干切唄」です。
www.youtube.com

寺尾紗穂『わたしの好きなわらべうた』

シンガーソングライターの寺尾紗穂さん。民謡を中心に歌っているわけではないのですが、2016年にわらべうたのカバーアルバムを出しました。静かな気持ちになるいいアルバムです。

ねんねしなされ

熊本の守子歌「ねんねしなされ」です。
www.youtube.com

七草なつな

茨城の七草の歌「七草なつな」です。
www.youtube.com

まとめ

いかがでしょうか。各アーティスト毎に2曲程度しか挙げなかったので、興味があればそこから調べて聞いてみてください。Spotifyにあったりしますので。
私も調べているうちに知ったアーティストも居るので、音源をぼちぼち集めていきたいと思います。これからこのようなアーティストが増えていくと面白いですね。

蛇足

声優の鈴木愛奈さんが民謡のバックグラウンドがあるようで、民謡アレンジとか出やしないかと少し期待しています。

少部数・A4クリアファイル印刷メモ

クリアファイルが安く少部数(1~10部程度)作りたいので調べてみた。

※情報は2020/08/05現在
※単価は税込

クリアファイルOne

クリアファイル印刷がスマホでカンタン1枚から【クリアファイルONE】
以前より安くなって250円/枚。1枚から印刷できるところでは最安かも。印刷領域が四角形でない。
二次創作・R18が印刷できるかどうかは不明。

素材 半透明
印刷方式 オンデマンド
白印刷 ×
全面印刷 ×
両面印刷
最小ロット 1
1枚単価 @250
5枚単価 @250
10枚単価 @250
50枚単価 @250
納期 5営業日出荷
送料 ネコポス150円
宅急便600~1200円

おたクラブ

クリアファイル(乳白色)

クリアファイル(乳白色) | 同人誌印刷所おたクラブ

素材 不透明
印刷方式 オンデマンド
白印刷 ×
全面印刷 ×
両面印刷 ×
最小ロット 5
1枚単価 -
5枚単価 @280
10枚単価 @260
50枚単価 @250
納期 5営業日着
送料 ヤマト運輸500~1,000円

全面印刷クリアファイル

全面印刷クリアファイル | 同人誌印刷所おたクラブ
おそらく小ロットで自印刷+全面印刷+両面印刷ができる中では最安じゃないかと思う。

素材 透明
印刷方式 デジタルオフセット
白印刷
全面印刷
両面印刷
最小ロット 5
1枚単価 -
5枚単価 @400
10枚単価 @350
50枚単価 @230
納期 7営業日着
送料 ヤマト運輸500~1,000円

中和印刷ネットショップ オリジナルA4クリアファイル

【お客様デザイン】オリジナルA4クリアファイル| 中和印刷ネットショップ
最小ロットが10枚だが、バリアブル可変印刷により一枚一枚のクリアファイルに違った内容を印字出来る。
二次創作はおそらく不可・R18は不可(参考)。

素材 透明
印刷方式 デジタル印刷(参考)
白印刷
全面印刷
両面印刷
最小ロット 10
1枚単価 -
5枚単価 -
10枚単価 @440
50枚単価 @275
納期 10営業日
送料 550円(北海道・沖縄1100円)

pixivFACTORY クリアファイル

オリジナルクリアファイルのデザイン印刷・自作の同人製作 - pixivFACTORY
単価は高めだが1枚から全面+両面印刷ができる。全面白引き(透明なクリアファイル素材にフルカラーデザインを印刷したあと、白インクの印刷をする手法)のため透明部分のあるクリアファイルは作れない。

素材 透明(全面白引きのため透過×)
印刷方式 デジタル印刷(全面白引きあり)
白印刷 ×
全面印刷
両面印刷
最小ロット 1
1枚単価 @920
5枚単価 @820
10枚単価 @780
50枚単価 @750
納期 10営業日
送料 1個270円
2個~ 770円

8mmフィルムの簡易テレシネを行う

8mmフィルムで制作された自主制作アニメ作品を簡易的にデジタル化する機会があったので、再度やるときのためにメモとして試行錯誤の記録を書いておく。

8mmフィルムとは

ビデオが普及するまでは、映像はフィルムで撮られていた。
大学サークル等での自主制作アニメーションにおいては、主に8mmフィルムが使われていたらしい(アニメーションに限らずだと思うが)。

8mmフィルムと呼ばれるものにもいくつかの規格があるが、自主制作アニメーションで使われるのは富士フィルムシングル8であったようだ。これは構造上、多重露光といった特殊な撮影に必要な巻き戻しができるのがシングル8だけだったためである。
他にはコダック社のスーパー8という規格があり、現像後はシングル8と互換性がある(フィルムの厚みが違う程度)。このためスーパー8用の機材が現像後の工程ではシングル8でも使える。このほかにも非互換なレギュラー8という規格もあったが省略。

簡易テレシネとは

テレシネとは、フィルム映像をビデオ信号に変換することを指す。
8mmフィルムは幅が8mmのフィルムで、一秒辺り24コマ(16コマという設定もある)が記録される。そのため、一コマ一コマをスキャンして映像として再構成するというのが一番フィルムの情報を失わずデジタル化することができる訳ではある(ちゃんとした8mmフィルムテレシネサービスではそうしている)のだが、個人でやるのは難しい。
その代わり、フィルムを映写機で映写し、それをカメラでビデオ撮影することによってデジタル化をするというのが簡易テレシネである。直接スキャンするのに比べて画質は悪いにしろ、何が写ってるかは把握できる。

映写

使用した機材は次のもの。

f:id:nixeneko:20200227110018j:plain
ELMO ST-180

  • 映写機: ELMO ST-180
  • ビデオ撮影用カメラ: Pentax K-50 (レンズは50mmの短焦点レンズ)

映写機は内部のベルトが溶けてベトベトになっていたため、次のページを参考にアルコールで清掃し、新しいベルトを装着した。

映写機にフィルムをセットする時に、爪の引っ掛かりが悪かったりして何回やってもオートローディングがうまくいかない場合があった。この場合、ロードするフィルムの先端を、真ん中をちょっと膨らませ気味にきれいに切ってやることでうまくロードできるようになる場合があった。しかしこれもたまたまうまくいっただけで逆効果の可能性もある。
f:id:nixeneko:20200227205651j:plain

フィルム自体を切りたくない場合は、白リーダーフィルムをつなぐ。フィルムをつなぐためにはスプライサーとスプライシングテープが必要。
白リーダーフィルムは次のようにスーパー8用のものをebayで購入したが、日本で通販しているところもある。

また、一度上映中にプーリーのベルトを溶着した部分が切れてしまい、フィルムが進まなくなってしまった時があった。このとき、ハロゲンランプの熱ですぐに画面が溶けだして、フィルムが焦げる独特の匂いが漂った。何かあったときにすぐに電源を切れるようにしておかないと、作品を台無しにしてしまう可能性がある。
www.youtube.com
こんな感じにフィルムが沸騰するのが見える。

撮影

4つ切りサイズ(379×539mm)の白画用紙を買ってきて壁にテープで貼り、スクリーンとした。
映写機はちゃぶ台の上に乗せて壁に投影し、なるべく画面が正方形になるような位置に調整し、それが収まるようにスクリーンを設置した。

映写機をカメラで撮影し、ちらつきがなくなるように24fpsに調整しようとしたが、電源入れたてとしばらく動かして温まってからでは速度が変わるため、そんな神経質にならなくてもいいかもしれない。それよりも、ある程度ビデオカメラの絞りを絞った方が上下を動くバーが見えなくなり効果的かもしれない。

一眼レフカメラは小型の三脚に固定し、動画撮影機能で撮影した。この時、フルHD(1920×1080)の24fps(となってるけど実際は23.97fpsだった)で記録。手ブレ補正は切る。絞りはやや絞り気味にしてシャッター速度が速くなりすぎないようにし、ちらつきを軽減させる。
音声はヘッドフォン出力からパソコンのオーディオインターフェースにつないで録音し、後で映像に音を合わせることにした。
露出は固定せず、絞り優先自動露出にした。露出を固定した方が良い結果が得られる可能性があるが、フィルム毎に露出を調整しないといけないため、全体を通してそこそこ見れる結果になる自動露出とした。

カメラで撮影した先頭でこれから映写する作品タイトルを喋って記録しておいたが、これは編集の際に役に立った。タイトルをカメラで映すのでもいいと思う。

音声

映写機には音声のステレオミニジャック出力があったため、そこからPCに接続し、音声はPCで録音した。

音声が記録された8mmフィルムは音声がフィルムの両脇に2トラックあり、バランスよくミックスした状態で上映しないと音が偏った感じになるっぽい。映写機に2つのトラックの音のバランスを調整するつまみがあり、それを弄って調整する。音のバランスはフィルムごとに調整する必要がありそう。次の動画のように売られていたフィルムには音声バランス調整用の映像がついていたようである。
www.youtube.com
(via 簡易テレシネ – こもれび倶楽部)

映写機の音声には全体に「ブーン」というハムノイズが乗っている。
映写機のボリュームが小さすぎるとノイズに埋もれてしまうし、大きすぎると今度は録音時にクリッピングが発生し音割れが起きる。作品ごとに音量等は異なるので、試行錯誤して探るしかないかもしれない。

ハムノイズはAudacityなどで除去できる。音声はAudacityで正規化を行ってからハムノイズを除去した。

Adobe Premiereでの調整

映像は23.97fps(カメラの映像に合わせる)、サイズは1280×960とした(4:3)。
映像と音を配置、シーケンスを映像に合わせるか聞かれるので合わせない、エフェクトコントロールタブから、モーション→位置・スケールを弄ってだいたい画面サイズに合わせる。
その後、エフェクト→ビデオエフェクト→ディストーション→コーナーピンを映像にドラッグアンドドロップ
エフェクトコントロールでコーナーピンを選択、ピンの場所を弄って投影された画面を変形させ、4:3のフレームにフィットするようにする(今回はPC閲覧用のため、セーフティゾーンを考慮せず、画面ぎりぎりにした)
映写機の電源を入れる際にノイズが発生するので、それを基準にして映像と音声の同期をするとよさそう。

このブログについて

文字・フォント・プログラム・技術・趣味などについて、Twitterでは書きづらい長い内容などをまとめるためのブログです。基本的には自分用のメモとして書いている部分が多いです。

リンク等

note https://note.com/nixeneko 残らなくてもいい記事
Pixiv Fanbox https://nixeneko.fanbox.cc/ 活動まとめと有料の週報(大したこと書いてないので)
Pixiv https://pixiv.me/nixeneko
Tumblr https://nixeneko.tumblr.com/ 絵。Pixivと同じにしたいがサボリ気味
Pleroma @nixeneko@nixeneko.info Mastodonとかやってる人はフォローしてください
Twitter @nixeneko 最近あんまり使ってない
GitHub https://github.com/nixeneko プログラムとか
Bookmeter https://bookmeter.com/users/9166 読書記録。たまに感想
Amazon欲しい物リスト amazon.jp/registry/wishlist/1C43ZFBA4IL6Z

同人誌(無料公開)

https://nixeneko.hatenablog.com/entry/c88_russian_alphabethttps://nixeneko.hatenablog.com/entry/c90_greek_latin_cyrillichttps://nixeneko.hatenablog.com/entry/20170811_dentyuhttps://nixeneko.hatenablog.com/entry/c100_mongol_bichig_unicode

TrueType命令で回転するvariable fontを作る

TrueType命令で遊ぶシリーズ。

  1. 初めてのTrueType命令: Windowsでは見えないフォントをつくる - にせねこメモ
  2. フォントサイズに合わせて回転するフォントを作る(1) - にせねこメモ
  3. PPEM・ポイントサイズを表示するフォント - にせねこメモ
  4. TrueType命令で三角関数(sin, cos)を計算する - にせねこメモ
  5. フォントサイズに合わせて回転するフォントを作る(2) - にせねこメモ
  6. TrueType命令で擬似乱数: 線形合同法 - にせねこメモ
  7. TrueType命令でビット演算 - にせねこメモ
  8. アウトラインがぶれるフォント - にせねこメモ

概要

文字が回転するvariable fontを作った。variable fontの変化軸の値をTrueType命令で読み取り、その値に応じてTrueType命令を使ってグリフを回転させている。テストページはこちら。たぶんMacでは動かない。

実行例

f:id:nixeneko:20200202112434p:plain
実行結果の例

序論

OpenType font formatのversion 1.8からvariable font機能が追加された。2016年9月のことである。これにより、変化軸を設定して、それに沿って変化するフォントを作成できるようになった。基本の形の情報と変化した形の差分情報を持たせていて、レンダリング時に変化軸の値を変化させると、形が補間される。3DCGを知っているのであれば、モーフターゲット等と呼ばれる機能を想像するとよい。例えば、セリフ体とサンセリフ体を設定してそれらを切り替えたりその中間にするだとか、文字の太さ(ウェイト)やエックスハイトを自在に変化させることが(ちゃんと設定すれば)可能になる。

このvariable fontへのソフトウェアの対応が最近進んできたので、これを利用して文字の回転を指定できるフォントを作ってみたい。

フォント作成時に設定した変化軸の値は、レンダリング時にユーザー側で変化させることができるが、この値を新規に追加されたTrueType命令GETVARIATIONを利用して読み出すことができる。
このため、以前作成した、TrueType命令を利用してフォントサイズに応じて回転するフォントを改変することによって、文字が回転するvariable fontを作ることができる。

Variable fontについて

variable fontについての概要をつかむには次の記事がよい。

これを読みながらメモしたツイートのまとめが次である。
twitter.com
TrueTypeベースのvariable fontに必須のものは次の通り。

  • 'STAT'テーブル…フォントスタイルをattribute valuesの集合で表現するもの
  • 'fvar'テーブル…フォント内で使われる軸を定義。named instanceの情報も含む。
  • 'gvar'テーブル…バリエーションの変化差分

編集

TTX/FontTools

フォントの編集には、OpenTypeフォントバイナリと編集に便利なXMLとを相互変換できるユーティリティであるTTX/FontToolsを用いる。これは、pythonとpipが入っている環境で

pip install fonttools

とすれば簡単に導入できる。

使用方法としては、

ttx font.ttf

とするとフォントファイルfont.ttfの内容をXML形式でダンプしたfont.ttxが出力される。反対に

ttx font.ttx

とするとfont.ttxをフォントバイナリに変換する。名前が被る場合は#1などの連番suffixがつく。

尚、今回はTTXのバージョンは4.2.5を利用した。.ttxファイルはTTXのバージョンによって書式が変更されていたりするので、別のバージョンでダンプした.ttxファイルを.ttfに再変換するのは避けた方がよさそうに思う。

Variable fontのサンプル

ここで、variable fontのサンプルがアドビによって提供されているので、覗いてみて、参考にする。

GitHubのページのreleaseからAdobeVFPrototype.ttfをダウンロードしてきて、ttxを使ってXMLファイルにコンバートし、variable fontに必須なテーブルである<STAT>, <fvar>, <gvar>をみて参考にした。もちろん、それ以外にもvariable fontで使うテーブルは含まれている(HVAR, MVAR, avarなど)のだが、今回の目的には使わない。

作成

さて、回転するvariableフォントの作成に入る。

のページで作成したフォント

をダウンロードしてきて、TTXで.ttxファイルに変換する。

ttx Arotate.ttf

すると、Arotate.ttxファイルが出来上がるので、これをテキストエディタで開いて編集していく。


まず、<name>の下に、変化軸やインスタンスの名前に使う文字列データを最低限追加しておく。WindowsMac用に2回同じ値を定義した。

nameIDは、0~255は用途が決まっている(または予約されている)ので、256~32767を使う*1

    <namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Rotation
    </namerecord>
    <namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Regular
    </namerecord>
    <namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True">
      Arotate-Regular
    </namerecord>

    <namerecord nameID="259" platformID="3" platEncID="1" langID="0x409">
      Rotation
    </namerecord>
    <namerecord nameID="260" platformID="3" platEncID="1" langID="0x409">
      Regular
    </namerecord>
    <namerecord nameID="261" platformID="3" platEncID="1" langID="0x409">
      Arotate-Regular
    </namerecord>

そして、variable fontの体をなすための次のコードを<ttFont></ttFont>の下に追加する。

  <STAT>
    <Version value="0x00010001"/>
    <DesignAxisRecordSize value="8"/>
    <!-- DesignAxisCount=1 -->
    <DesignAxisRecord>
      <Axis index="0">
        <AxisTag value="ROTT"/>
        <AxisNameID value="259"/>  <!-- Rotation -->
        <AxisOrdering value="0"/>
      </Axis>
    </DesignAxisRecord>
    <!-- AxisValueCount=1 -->
    <AxisValueArray>
      <AxisValue index="0" Format="2">
        <AxisIndex value="0"/>
        <Flags value="2"/>
        <ValueNameID value="19"/>  <!-- Regular -->
        <NominalValue value="400.0"/>
        <RangeMinValue value="350.0"/>
        <RangeMaxValue value="450.0"/>
      </AxisValue>
    </AxisValueArray>
    <ElidedFallbackNameID value="0"/>  <!-- Regular -->
  </STAT>

  <fvar>
    <!-- Rotate -->
    <Axis>
      <AxisTag>ROTT</AxisTag>
      <Flags>0x0</Flags>
      <MinValue>-180.0</MinValue>
      <DefaultValue>0.0</DefaultValue>
      <MaxValue>180.0</MaxValue>
      <AxisNameID>259</AxisNameID>
    </Axis>

    <!-- Regular -->
    <!-- PostScript: Arotate-Regular -->
    <NamedInstance flags="0x0" postscriptNameID="261" subfamilyNameID="260">
      <coord axis="ROTT" value="0.0"/>
    </NamedInstance>
  </fvar>

  <gvar>
    <version value="1"/>
    <reserved value="0"/>
  </gvar>

STATはフォントスタイルの定義であり、fvarはフォントで使われる変化軸の定義である。それっぽくなるように適当に設定した。

fvarでは変化軸を一つ(ROTT)定義し、あとはそれっぽい値にしている。変化軸はASCII文字4文字からなるタグで指定する。タグはイタリック、幅、ウェイトなどのためにいくつか登録されたものもあるが、自分で定義することもできる。フォント作者が勝手に作ったタグはアルファベット大文字で始まりアルファベット大文字と数字のみからなると決められている*2
また、回転角を指定する軸なので、-180°~180°を指せるように軸の設定をした。

gvarは変化する部分を定義するテーブルだが、ほぼ空っぽである。これでは変化軸に沿って値を変えてもグリフは変形しないはずであるが、変形はTrueType命令に任せることにするのでこうなっている。

次にTrueType命令の改変を行う。
TrueType instructionで変化軸の値の取得するために、GETVARIATION命令が追加された。OpCodeは0x91。
GETVARIATION命令を実行すると、変化軸の数だけ現在のノーマライズされた座標の値(-1.0~1.0ということだろう)がスタックに積まれる(形式は2.14の固定小数点数)。積まれる順番は'fvar'に定義されているものと同順で、'fvar'の最初に定義されているものが最初にpushされる。
新規に追加されたこの命令であるが、もちろん対応していない処理系では扱うことができず、未定義命令としてエラーになってしまう。なので、互換性のため、'fpgm'あるいは'prep'においてIDEF命令によって互換の命令を割り当てる必要がある(未定義命令でないものはIDEFによって上書きされない)。つまり、今回は変化軸が1個なので、GETVARIATION命令と同じ個数pushする次のような命令を追加する必要がある。

      PUSHB[ ] 145             /* OpCode 0x91, GetVariation */
      IDEF[ ]
      PUSHB[ ] 0   /* Number of axes in this font = 1*/
      ENDF[ ]

…と仕様書にはあるのだが、現在Windows 10において、これを書くとGETVARIATIONがうまく動かないみたいなので書かない。代わりにGETINFOでバージョンを取得し、GETVARIATIONに対応した42以上ならばGETVARIATIONを実行、それ以外なら0を返すようにすることにする。

      PUSHB[ ]
      1 
      GETINFO[ ] /* Get version */
      PUSHB[ ]
      42
      GTEQ[ ] /* version >= 42 */
      IF[ ] 
      GETVARIATION[ ] /* returns a 2.14 fixed number corresponding to the axis */
      ELSE[ ]
      PUSHB[ ]
      0
      EIF[ ]

GETVARIATIONによって得られる変化軸の値はF18Dot14で-1.0~1.0に正規化される。今回は入力軸は回転角度で-180~180が-1.0~1.0に正規化されている。
TrueType命令で三角関数(sin, cos)を計算する - にせねこメモで作成した三角関数は入力としてスタックトップからF26Dot6の角度[°]を受け取るので、-1.0~1.0(F18Dot14)→-180.0~180.0(F26Dot6)への変換が必要。つまり、180.0を掛けた後、256.0で割ってやればよい(あるいは、180/256=0.703125を掛ける)。

PUSHB[ ]
45      /* 180/256 */
MUL[ ]

変化軸の値を変更する度に'prep'は呼び出されるはずなので、以前の回転フォントにおいて回転の角度をStorage Areaに書きこんでいた部分を、この命令で置き換える。

これらをまとめると、<prep>は次のようになる。

  <prep>
    <assembly>
      PUSHB[ ]
      1 
      GETINFO[ ] /* Get version */
      PUSHB[ ]
      42
      GTEQ[ ] /* version >= 42 */
      IF[ ] 
      GETVARIATION[ ] /* GetVariation: returns a 2.14 fixed number corresponding to the axis */
      ELSE[ ]
      PUSHB[ ]
      0
      EIF[ ]
      PUSHB[ ]
      45      /* 180/256 */
      MUL[ ]
      PUSHB[ ]	/* 1 value pushed */
      4
      CALL[ ]	/* CallFunction */
      PUSHB[ ]	/* 2 values pushed */
      2 3
      ROLL[ ]	/* RollTopThreeStack */
      WS[ ]	/* WriteStore */
      SWAP[ ]	/* SwapTopStack */
      WS[ ]	/* WriteStore */
    </assembly>
  </prep>

これをTTXで.ttfファイルに変換すると出来上がりである。

サンプル

回転を確認できるようにテストページを作成した:

Windows 10のFirefox, Chrome, Edgeで動作を確認している。MacはTrueType命令を無視するはずなのでたぶん動かない。

ダウンロード

できたフォントのダウンロードはこちら:

*1:Name IDs 256 to 32767, inclusive, are reserved for font-specific names such as those referenced by a font’s layout features. https://docs.microsoft.com/en-us/typography/opentype/spec/name

*2:Foundry-defined tags must begin with an uppercase letter (0x41 to 0x5A), and must use only uppercase letters or digits. https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg