2011-09-07

自己流スフィアマップ作ってみた:補項

これはなに?

この動画の補項です。

自分で作ってみたスフィアマップについて、作り方・意図・調整などを解説する動画になってます。
このエントリは、上記動画を見た方を対象に書いています。尺などの都合から言及できなかったことや、不足であったり誤解を招くおそれがある部分について補完する目的のものです。

まずお詫び

エンドクレジットに以下の抜けがありました。すいませんでした。

フォント
GD-高速道路ゴシックJA
 ぱんかれ様

http://www.hogera.com/pcb/
タイトルに使用しました。ちょっとクセのある面白いフォントです。
高速道路の文字を再現しようという目的で作られたフォントなので、標識に使われないような文字は含まれません。なので本文用などには向かないですね。

エフェクト
WorkingFloor2
 針金P

http://harigane.at.webry.info/201010/article_1.html
ご存じ、「仕事する床」。
使いやすく面白い優良エフェクトですね。今回は、モデルのカメラから見えない部分を表示するために使用しています。

ポリゴンの詳細さとスフィアマップ

テスト表示に使用した3つのモデルのうち、ハイポリ代表の「四角」とローポリ代表の「三角」では、ポリゴン数に30倍ほどの差があります。
スフィアマップの表示(とMMD標準の陰影なども)は、モデルのポリゴン構造に大きく依存します。
そのため、動画で気付いた方もおられるでしょうが、三角の表示は四角と比べるとなめらかさに欠け、ちょっと不自然です。

ポリゴンの細かさによるスフィアマップの見え方の違いを実感して欲しいため、テストモデルにハイポリとローポリの両方を用意したんですが、テンポや尺の問題から動画では言及しませんでした。

表面下散乱

SubSurface Scattering、略してSSS、と言った方が馴染みがある方が多いかもしれないですね。自分も日本語表記は今回初めて使いました。
人間の皮膚だけでなく、結構いろんなもので起こる現象です。トマトや牛乳、大理石なんかも実はこの現象であんな風に見えてます。 どういう色が出やすいかはそれぞれ違いますが。

さて、動画で使った表面下散乱なスフィアマップですが、これも作るのは簡単です。
普通のスフィアマップを、こんなトーンカーブで調整しただけ。具体的に言うと、赤色をちょっと強くしただけですね。二次絵師さんが人物を描くときに、肌に対して赤で焼き付けしたりしますが、それを参考にしてます。
調整の注意点としては、順光と逆光のレイヤーに対して、必ずそれぞれ別々に調整してください。順光と逆光では明度のピークも最大値も異なるはずですので、それぞれ適したトーンカーブは異なります。同じカーブで調整してしまうと結構ダメな事になってしまうので気をつけてください。
ちなみに画像のカーブは調整途中のもので、このまま使うとちょっとアレです。最終的なものは撮り忘れました。

この操作は、TCSで使用した肌スフィアマップにも行っていますが、効果のほどは未知数です。TCSで使用したスフィアマップは配布中ですので興味のある方はどうぞ。

配布中のスフィアマップについて

で使ったスフィアマップを配布しているのですが、色々と未完成です。
手探り状態の頃(今も割と)に作ったものなので、あからさまに駄目な部分があります。ベスト部分はテカりすぎな上、下方からの逆光に対して肌と同じく調整すべきでした。が、肌は肌で、床が白い石で出来ているため、反射光を考慮すべきでした。瞳に至っては完全に失敗で無い方がマシです。まあそういう感じのものなので、使う場合は注意してください。

スフィアマップを作るのは誰?

動画中、シーンなどの違いによってスフィアマップは複数用意すると効果的だ、というような事を述べていますが、これはモデル作者さんが複数のスフィアマップを作成し添付するべきという意図のものでは全くありません。

演出意図という言葉を繰り返し使っている事からわかるはずですが、シーンや表現に合わせたスフィアマップを用意するのはあくまで表現者、つまり動画や静画の作者であるべきでしょう。いくつもの状況にあわせたスフィアマップをモデル作者さんが用意するのは現実的でありませんし、使われるとも限りません。
モデルに添付するものは汎用的なものだけに限って良いと思います。ですがもちろん作者さんが、特殊な状況向けのものも用意したいのであれば別です。

おまけについて

当初はもっと穏当なはずだったんですが、小悪魔モデルのボディラインがあんまり良くできていて、ううむこれは、といじくりまわしてる間にああいう事になってしまいました。不快でしたらすみません。

あのおまけは実のところ、間違い探しの様な要素があります。

解説本編の最後で、「控えめな方がよい」と言っておきながらあんなにテカテカしてるのもそうですし、コメントでも指摘してもらいましたが(ありがとうございます)、砂浜のシーンなのに下方からの照り返しを考慮していません。「暗いシーン」もかなり光りすぎてて不自然です。それらの辺りに違和感を感じて欲しくてああいう作りになっています。人間は自分で気付いた事を重要視し、忘れにくいように出来ていますから。

あのおまけを見ておかしいなと思ったり違和感を感じたりしたら、スフィアマップ(に限りませんが)を自分で作るとき、その辺りを考慮して調整してください。

そういうわけなので、あのおまけで使ったスフィアマップはあまり実用には適しません。なので配布予定はありませんのであしからず。
というか簡単なのでぜひ自分で作ってみてください、という動画を作ったつもりです。

おかりしたものについて

今回の動画でも色々とおかりしています。ありがとうございます。これら無償公開されたもの無しではもはや全く何も出来ません。

以降は、スフィアマップ とはほぼ無関係な内容となるので、興味のある方だけどうぞ。

BGM

【鏡音リン】 HighEndCity 【VOCALOID】【オリジナル】
 emon(Tes.) 様
http://www.nicovideo.jp/watch/sm13546522
本編のBGMに使用させていただきました。
軽快でお洒落な曲ですね。配布してくださっているオケを中心に使用しています。
この動画がなんとなく格好良かったりお洒落に見えたりしたとしたら、このBGMのおかげに違いありません。


【東方自作アレンジ】魔法少女達の百年祭~宵々々山【全曲マラソン】
 shinnsenyasai 様
http://www.nicovideo.jp/watch/nm8753324
おまけのBGMに使用させていただきました。
魔法少女達の百年祭は紅魔郷のExステージの道中曲ですので小悪魔とは直接の関係はありませんが、それほど無関係でもない……と思います。
おまけがあんな内容ですので、上品で速いテンポのBGMに乗せて聞いたことのないような用語と説明でたたみ掛けて、無理矢理真面目な動画っぽく見えるようにしています。


【東方自作アレンジ】 東の国の眠らない夜 何かのED風味 【東方文花帖】
 こむぎ 様
http://www.nicovideo.jp/watch/sm15234235
ED風味、ということでエンドクレジットに使用させていただきました。
東の国の眠らない夜は東方文花帖のステージ曲ですので今度こそ本当に何の関連もありませんが、ED風味な曲と言うことでチョイス。こむぎさんの曲が好きで何かに使いたいと思っていたので、完全に趣味です。


モデル・アクセサリ

バトーキン島
 バトーキン 様
http://www.nicovideo.jp/watch/sm11122007
南の島をイメージしておまけに使用させていただきました。
この動画では基本的に、MMDの出力に対しては色調補正などを行っていないんですが、このバトーキン島のみ、モデルと別出力にしてグロー等で補正しています。


小悪魔(こあ&ここぁ)
 アールビット 様

http://www.nicovideo.jp/watch/sm14912923
言うまでもなくおまけとエンドクレジットのモデルとして使用させていただきました。
東方キャラですが、紅魔郷では台詞がなく名前が未設定で、儚月抄本編では(散々大図書館のシーンがあるにもかかわらず)登場すらしないという扱いで、公式色はかなり薄い。
そのせいかどうかはわかりませんが、クセが無くとても使いやすいモデルです。
今回は水着でしたが、通常モデルの長いスカート姿が個人的にナイスです 。
性格はこぁが真面目、ここぁが無邪気で小悪魔というイメージ。


紅魔館の部屋セット
 アールビット 様

http://www.nicovideo.jp/watch/sm13490326
おまけとエンドクレジットの背景アクセサリとして使用させていただきました。
色々と使いやすい優秀なセットで、たくさんの動画で使用されています。
今回は何の工夫もなく使ってますが、特に違和感もないのがすごい。


フォント

VL P ゴシック
 鈴木大輔 様

http://vlgothic.dicey.org/
本編テキストに使用させていただきました。
クセが無く読みやすい作りで、まさにテキスト向けなフリーフォントです。
かなりの文字数を誇り、足りない文字がないという印象。


モトヤアポロ1
 株式会社モトヤ 様
http://www.motoyafont.jp/
エンドクレジットに使用させていただきました。
フォントの製造販売を行っている企業ですが、いくつかのフォントをフリーとして配布してくれています。あたりまえですがクォリティがすばらしい。
和文フォントの制作にはかなりのコストがかかりますが、それをフリーで公開しているというのはもうありがたいとしか。


ツール

GIMP 2.6.11
GNU Image Manipulation Program
 by Spencer Kimball, Peter Mattis and GIMP Development Team

http://www.gimp.org/
スフィアマップの作成に使用させていただきました。
「ソフトとか買わなくてもなんでも出来るようにしようぜ」という目的のGNUプロジェクトにおけるグラフィック編集担当。ありがたいことです。
ある意味この動画の主役なので、エンドクレジットには略称GIMPの他に正式名のGNU Image Manipulation Programも載せたわけですが、GNUをGINUとまさかのtypo。馬鹿じゃないの。ほんとすいません。


Javie 0.5.9
 らくさん 様
http://www.nicovideo.jp/watch/sm12949516
動画制作に使わせていただきました。
ニコニコ発の動画加工・編集ソフトで、GPUを使用するために非常に軽い。
エフェクトの種類に限りがあるなど、あまり凝ったことをするには向かない感じですが、プラグインの仕様も公開されていてこれからという印象。
この動画ぐらいのものを作るならとてもオススメです。とにかく軽い。


PMDエディタ ver 0.1.2.3
 極北P

スフィアマップをモデルに適用するのに使用しています。
無くてはならないものその2


MMD ver 7.39
 樋口M

説明不要ですね。この動画の全ての中心。
無くてはならないものその1


2011-05-31

MMDの書き出しとエンコードの話

前置き:どうして突然こんな話を?

ニコニコ動画にMMD動画を投稿し、MikuMikuDanceコミュニティに登録したところ、次のようなコメントを頂きました。
どうしたらこんなにきれいに出力できるの?
別に特別なことをしているわけでは無いんですが、コミュニティに参加したのは他ならぬ自分。出来れば質問には答えたい。
ですが方法がありません。投稿者コメントやマイリストは字数制限が厳しくてとても書けない。コミュニティの掲示板にももちろん書けない(新入りの初心者がいきなりエンコードについて偉そうに解説を始めたらまさしく噴飯ものでしょう)。そこでこういう場を設けてお答えすることにしました。
質問してくれた方がここにたどり着く確率はかなり低いでしょうが、そこは諦めることにします。

詳しい方ならすでにお判りでしょうが、このエントリは初心者向けの内容です。

まとめ

やたら長いエントリになってしまったので結論を先に書きます。
出来るだけキレイにエンコードするには、
  • ビットレートを可能な限り大きくする
  • Avi出力で直接H.264エンコードではなく、複数パスエンコードを行う
  • 中間Aviではロスレスコーデックを使用する
  • 色空間の変換を避ける
  • x264のエンコードオプションを詰める
という事が重要です。
当たり前の事しか書けなくてすみません 。

二つめの「Avi出力で直接H.264エンコードではなく、複数パスエンコードを行う 」についてですが、MMDからのAvi出力で直接H.264エンコードし、ニコニコ動画にUPすることも可能です。ですが当然1passエンコードなので画質では不利になります。画質を上げるためには1度ロスレスのコーデックで出力して、つんでれんこなどで複数パスのエンコードを行うことが必須です。

ということで以降の項目は興味のある方、ヒマで死にそうな方、全くわからないけどふいんきを味わっておくかという方などにしかお勧めできません。

私の手順

投稿した動画で実際に行った手順です。
  1. MMDでAvi書き出し (codec: Ut Video Codec RGB)
  2. モーションブラーをかけて中間Avi出力 (codec: Ut Video Codec YUV420)
  3. H.264で複数パスエンコード
  4. ニコニコ動画に投稿
はい。普通です。
Ut Video Codecはロスレス圧縮するフリーの動画コーデックで、Huffyuvなどと比較しても新しい分いろいろと有利なようです。MMDユーザの間ではわりとメジャーな存在みたいです。詳しくはぐぐって下さい(以降の項目についても同様。すいません)。

ここまでで、書いてあることがまるで意味不明、という方は、すいませんが私の手には負えません。まずはニコニコ動画まとめwikiなどで基礎知識を得ると良いと思います。

注意したこと

作業において注意したことは、何より劣化を避けることでした。
具体的には色空間の変換を出来るだけ避けました。
MMD出力ではRGBのまま保存し、YV12(YUV420と同じだと考えて良いようです)に変換してモーションブラーフィルタをかけYUV420のまま保存、以降変換無しでH.264でエンコードしています。

色空間には普通あまり馴染みがないと思います。なんだそりゃって方はRGB・YUVみたいな単語はとりあえず聞き流してください。いちおう最後の項で説明しています。

1. MMDでAvi書き出し (codec: Ut Video Codec RGB)

MMDでの作業が完了したらAvi書き出しをします。
MMD出力はRGB32ですが今回はアルファ情報を使わないので、Ut Video Codecを使ってRGB24で保存しました。

ファイルがまだ残っていたので確認したところ、全部で27GBほどでした。今回はシーン毎に分けて出力したので関係ありませんが、Avi2.0では最大で約32GBのファイルまでしか扱えません。大きすぎるファイルを無理に出力しても開けないので、ロスレスで保存する際は注意が必要です。

2. モーションブラーをかけて中間Avi出力 (codec: Ut Video Codec YUV420)

そぼろさんがナイスなMMEモーションブラーを配布してくださっているので、この手順は必要なくなりそうです。
 (この項が念仏か何かにしか見えない方はとりあえず無視してください)
AviSynth + MVToolsでモーションブラーをかけました。
MVToolsはYV12を扱えるので、
【Avi読み込み - YV12に変換(Rec601) - MVToolsでモーションブラー】
な処理をAviSynthスクリプトで記述し、VirtualDubで中間Avi出力しました。余分な色空間の変換を避けるためにモードはFast recompressを使用し、Ut Video Codec YUV420でエンコードしました。
今回、色空間の変換はこの1度だけのはずです。

なお上記のAviSynthスクリプトは、ググればわりとそのままズバリなものが見つかります。

3. H.264で複数パスエンコード

2.で作った中間ファイルをエンコードしてmp4ファイルにしました。
忘れてましたが文字入れと各シーンのAviファイルの連結もここでやってます。
手順としては、【全シーンを連結して文字入れ】を記述したAviSynthスクリプト(なんだこの書き方) をエンコーダに渡すだけなのでこのステップで処理しているという自覚はあんまりありません。AviSynthスクリプトはあたかもAviファイルそのものであるかのように扱えてしまうのです。

エンコードは普通はつんでれんこで良いと思います。私もそうしたかったのですが中間ファイルの連結にAviSynthを使う都合上、つんでれんこではエンコードできませんでした。
仕方がないのでx264cliとMP4Boxを使いました。
H.264の色空間は通常YV12なので、ここでも色空間の変換は発生しません。

ビットレートは重要な要素です。通常高ければ高いほどキレイになり、逆に低すぎるとどうやってもキレイにはなりません。動画の長さから逆算し、出来るだけ大きく使いたいところです。HD版ではかなりリミットに近い99.7MBにできました。
一般アカウントではビットレート・最大ファイルサイズの両方に制限が掛かるため、どうしても不利です(詳しくは例によってニコニコ動画まとめwiki参照)

エンコードオプションはニコニコ動画まとめwikiのこのページを大いに参考にしました。とても素晴らしいページでお勧めです。
HD版ではかなり重いオプションを使ったのでHighプロファイルのlevel4.0になりました。
SD版では再生負荷を出来るだけ下げたかったのでHighプロファイルのままCABACをオフにしました。levelは3.1でした。コメントによるとそこそこ軽いようで上手くいったみたいです。

なお、通常エンコードのパス数は2passか、それで目標ビットレートに達しない場合にさらに+1回つまり3passで良いと思います。それ以降は画質は向上しないというのが通説のようです。
なのですが今回、HD版のエンコードではかなり重いエンコード設定を指定したのでとても待ちきれず、バッチファイルで自動化して寝ている間にエンコードさせました。
このバッチファイル、止めるまで延々Nth passエンコードを繰り返すというシロモノで、朝起きたときには19回目をやっていました。つまりHD版では19passのエンコードを行ったわけで、ひょっとするとそれにより綺麗になっていた……のかもしれません。(同じぐらいの確率で3passと変わらないか、逆に悪くなっているおそれもあります)
ちなみにSD版は同じようなバッチファイルを使い、用事を済ませる間エンコードさせてたら、5passほどやってました。

あとはニコニコ動画にUPしただけです。結論についてはすでに述べた「まとめ」の項をご覧下さい。

補足説明:色空間

ニコニコ動画に関する限りでは、色空間=動画のフォーマットだと理解してだいたい問題ありません。詳しい解説はWikipediaなどにお任せするとして、ざっと説明すると
  • RGB32(RGBA) - 1ピクセルにつき32bit使って記憶する。アルファ情報有り
  • RGB24(RGB) - 1ピクセルにつき24bit使って記憶する
  • YUV422(YUY2) - 1ピクセルにつき16bit使って記憶する 
  • YV12(YUV420) - 1ピクセルにつき12bit使って記憶する
という違いがあります。

それぞれ異なった方法で色情報を符号化しており、相互変換では劣化が発生します。 この劣化はあまり問題にならない程度に小さいのですが、それでも劣化であることは確かです。動画CodecやAviUtl・VirtualDubなどでは、必要な場合自動的に色空間を変換するため、知らない間に劣化が発生している場合があります。色空間と各ソフトを良く理解して正しい手順で作業すれば劣化を避けられます。

MMDの出力はRGB32なので、本当にロスレスで保存したい場合にはRGB32を使う必要があります。(アルファが要らない場合はRGB24)
Ut Video Codecはそれぞれ各色空間に対応したものが用意されているので、正しく選択することが重要です。(まちがえると色空間の変換が発生し、劣化します)

H.264は通常YV12を扱うので、MMD動画をニコニコ動画にUPする場合は、YV12への変換が1度は必要になります。

 YV12とYUV420は、普通は同じものと考えて良いようで、YV12とYUV420間の変換では劣化は発生しません。詳しい人にこんなことを言うと「違うわバカヤロー」と怒られそうですが、MMDとニコニコ動画で遊ぶ限りではYV12=YUV420と思って良さそうです。

以上、簡単に述べましたが、私も必要に駆られて調べただけなので不十分な内容になっていると思います。動画の色空間についてはネット上にたくさんの日本語の情報があるのでググれば簡単に調べられます。TVのアナログ放送をPCで録画する際の情報が多いようで、色空間とその変換については多くの人が苦労されているようですね。