0013-04-27

[][]Unityで実写合成テスト(1) Unityで実写合成テスト(1) - Nao_uの日記 を含むブックマーク はてなブックマーク - Unityで実写合成テスト(1) - Nao_uの日記 Unityで実写合成テスト(1) - Nao_uの日記 のブックマークコメント


再生が重い方はYoutube版をどうぞ。

今回のテーマは「実在感」と「60fpsでフルスクリーン再生にも耐える高解像度」。

4年前に作ったPTAMの合成動画の反省を踏まえて、いま実写合成をやったらどのくらいのものが作れるかを試してみたくて、今回はフルスクリーン再生に耐えられる画質とフレームレートの両立を目指して作ってみた。

4年前は「平行光+半球ライト+適当なキューブマップ+SSAO」だけだったのが、今回は「大量の平行光源+写真ベースのディフューズ・スペキュラーの環境マップによるIBL+疑似スキンシェーダー+3段重ねのSSAO+FXAA」と4年分くらい進んだ要素の追加はあるものの、標準解像度で見る分には印象にそこまでの差はないので、高解像度にすることで増える手間ってほんとに大きいな、と思った。

一応1080pの60fps動画になってはいるものの、MacBookで見るとCPUパワー不足でかなりコマ落ちしてた。30fpsのモーションブラー付き版も試そうとしたけどさらに時間がかかりそうだったので、60fpsが実現できた時点で保留に。

60fpsって、30fpsとくらべると時間当たりの情報量が2倍になってる価値ってすごく大きいと思ってるんだけど、最近のゲームでは軽視されがちなのがとても残念。そもそも動きが速いと60fpsですら足りてないと感じる事も。

今回はWebカメラの映像に、Unityを使ってレンダリングしたモデルをリアルタイム合成している。背景は全く動いていないけれど、一応静止画ではない。

影は同じ場所に自分が立ってみてだいたい同じ感じに見えるように調整。主光源は画面手前左上からの蛍光灯の光で、大量の影付き平行光源を置いたうえで、範囲を変えたSSAOを3段重ねている。

もっと平行光の数を増やしてもまだ描画負荷は耐えられるけど、調整しづらいので適当な数で抑えた。さらに何倍か増やすとGPUより先にCPUがネックになりそう。

床と机の上には透明な板を置いて影を投影していて、机の脚には黒いモデルを置いているので、足から右奥に出ている影は合成したライトの影になっている。

今回はカメラを動かしてはいないけど、原理的にはARに対応すればちゃんと動いてくれる、はず。

肌はSSSSSを試してみようかと思ったけど映る面積が小さすぎて手間に見合わなそうだったので、フレネル的にエッジからの距離で赤→黄色に遷移するような形ですこしだけ肌っぽく見えるように調整してみた。手のひらなどは自然な赤みがでてそれっぽくなったけど、元々色白なのでもう少し強調した調整にしてみてもいいかも。

シェーダーの質感は特に変わったことはやってなくて、ディフューズとスペキュラーのIBLをベースにフレネルで合成してるだけ。実際試してみた感じでは今回程度の表現であれば、見た目の印象への影響はIBLの環境やライティングの調整が一番重要で、多少凝ったことをやっても環境マップの影響が大きすぎて間違い探し程度の違いしか出せなさそう。

逆に、目に関してはちょっとした違いがかなり印象に大きく影響を与える感じが。人間の感覚って不思議。眼球にもともとスペキュラーが絵として書かれてしまってるので扱いが難しい。今後の検討課題。

周囲の環境は、6方向を露出固定で撮った写真をCubeMapGenで加工した環境マップを使用。

壁とか床は適当に撮ったつながってない写真でも意外とそれっぽくつながって見えるので面白い。

ディフューズ環境マップは120度ぼかしたもの(180度だとぼやけすぎな印象?)を使っていて、スペキュラー環境マップ側は95%以上明るい部分だけをシェーダー内で適当な係数をかけて加算することで疑似HDR化している。平行光がここに上乗せされるので、ディフューズはLDRな値でもそんなに問題ないはず。

初音ミク イラスト&アート展」~等身大フィギュア(iXima初音ミク)~

これ以上ない「完全に実写」なはずの画像であっても不思議とCG合成っぽくしか見えない時点で、存在感を感じさせるためにはどういう方向性に持っていくのがいいんだろう?というのは今でも迷ってる。

背景が実写だと撮る時間帯や天気によって光源環境がかなり変わってしまうのと、馴染ませようとしすぎるとそれはそれで見栄えのしない絵になる傾向もあったので、完全に追随するのは諦めた。4年前もそうだったけど、動画圧縮の過程でディティールが落ちる分、普通にディスプレイで見るよりもすこし派手目に環境マップが乗るほうがそれっぽく見える気がしてるのでわりと嘘が多めな感じ。

もしリアルタイムで周囲の環境に馴染ませようと思ったら、以前試してたみたいにリアルタイムでグレーボールやミラーボールを撮影して乗せる方法がベターかも。


レンダリング関連の課題

  • シェーダーの都合で光源のスペキュラーが乗ってない
  • スペキュラーが遮蔽されるはずの場所にも乗っている
    • →スクリーンスペースの遮蔽チェックとローカルリフレクション
  • 周囲の環境を正しく写真ベースのHDRで取得できるように(ColorChecker Passportも試す)
  • 現状は大量の平行光源でごまかしているAO・ソフトシャドウをもっとシンプルなやり方にして、影のノイズを軽減
  • SSAOを後乗せで暗くするのではなく、アンビエントの遮蔽とスペキュラー軽減にも使用できるように描画パスを修正
  • SSSもやってみたい(けどたぶんほとんど違いが出ない気がする)
  • 目の表現。いい感じに反射やハイライトが入る必要がある?絵として描かれた部分との整合性が課題
  • 表情がないのはちょっと怖いのでなんとかしたい

この辺やり始めるといつまでたっても終わらないので、今回はこの辺で切り上げて次回以降の課題に。