Making Tera

たまに書く不定期ブログ

Unity5のCustomShaderの互換性

昨日の記事に引き続き、まずはPBRの部分を無視してShader機能の互換性について調査。

アップデート時の注意点をまとめてみた。

・ライトの光の強度が2倍になったよ

・サーフェイスシェーダのインタポレーターと命令数の増加でSM2.0だと命令数リミットにより動作しない可能性があるよ→問題が出たらSM3.0にしてみたら?

・ノンユニフォームメッシュはCPUの段階で事前スケールされなくなったことにより NormalやTangentベクトルのNormalizeの必要性がでたよ(サーフェイスシェーダーの場合は生成してくれる)

・フォグの描画タイミングを変更 #pragmaにnofogと表記することで明示的にフォグのサポート状況を管理できるようになったよ

・サーフェイスシェーダーのAlphaチャンネルにデフォルトで1.0が出力されるようになったよ

・パフォーマンス改善のためForward描画中にマテリアルインデックス順に描画していた仕様を変更→ソートは行わないためインデックスに依存した仕様だった場合は注意ね

・見たこともないいくつかの固定関数シェーダーの廃止(使ったら警告がでる)

プログラマブルシェーダーと固定関数シェーダーの併用ができなくなったよ

・シェーダーコンパイラが変更され少し速くなったよ

・変数「unity_Scale」は廃止するから 今後はWorldスペースに変換してスケール行列を適用してね

・Forwardで描写された影のEffectPass(ShadowCollectorパス)の処理は移動したので古いパスは削除して問題ないよ

結構深いことをしていないとクリティカルな問題は生じなそうな変更点ですね。

UnityからGPUに渡す部分をシンプルにしたい思惑が見て取れます。

Unity5のCustomShader

Unity5でPBRが導入されてカスタムシェーダの書き方に関する最新の記事を探していたんですが

Unity5の公開当初はまったくといっていいほど情報がありませんでした。

情報が出るのを待っていたんですが、仕事が忙しくなってしまいなかなかチェックができていませんでした。

ようやく時間がとれるようになってきたのでネットサーフィンしてみると以前全く見つからなかった情報がチラホラと。

http://docs.unity3d.com/Manual/UpgradeGuide5-Shaders.html

http://www.alanzucconi.com/2015/06/24/physically-based-rendering-and-lighting-models-in-unity3d/

相変わらず日本語資料は皆無です。

PBRのシェーディングの概要は理解しているつもりなのですが、計算部分まで学習してしまうか悩ましいところです。

(覗いてもいないのでどのくらいのハードルなのか分からないし怖い・・・。)

まだ資料は読んでないのですが、Terrain専用のカスタムシェーダーの作成を目標に動き出すことにしました。

(以前、サークルのレベルデザイナー担当の方が、Terrainの思索段階で何度もテクスチャペイントを使って雰囲気を出しては作り直して~という作業を行っていたのを見て、TerrainShaderを書いてみたいと思っていました。)

UnityのTerrainはシェーダの構造が特殊でマテリアルのものを移植できないみたいなので、そのあたりも資料を集めねば。

After Effects CC を英語版で起動する方法

After Effects CC を英語版で起動する方法」を忘れないためのメモ

ae_force_english.txtという空のファイルを作成

マイドキュメント(ライブラリ>ドキュメント)フォルダに上記のファイルを移動

これだけでAEが英語版のUIで起動する

戻したい場合はファイルを消すだけの簡単なお仕事です

キャプチャソフト

デスクトップを録画したかったのでソフトを調査

キャプチャソフトがAdobeCCに組み込まれていれば最高だったんだけど見つからなかった

結論から言うと

Bandicam+可逆圧縮コーデック

が一番綺麗にキャプチャできて今回の目的に合っていた

エンコーダーAdobe Media EncoderCCがいい感じだった

(AfterEffectsをインストールすると勝手にインストールされるっぽい)

以下各ソフトの個人的感想(2014.12.14)

ShadowPlay

ハードを利用したNVIDIAのシステム

現状最強だと思われる

β版のため解像度が変更できないのとマウスが強制的に録画されてしまうため今回は見送り

Quadroシリーズのグラボでは動作しなかった)

Bandicam

UIが馴染みやすく使いやすかった

外部のコーデックも扱える

使用メモリを低く抑えられるためゲームキャプチャに向いている

今回はできるだけ画質を上げたかったので内臓コーデックでは満足できなかった

MovaviScreenCapture

古いバージョンはファイルサイズのわりにすごく綺麗なのに

Windows8でも使えるバージョンにすると画質が劣化した

録画前に勝手にAeroをオフにする仕様も微妙(設定で切れるけど重いらしい)

Dxtory

画質はとても綺麗(動画サイズはかなり大きくなる)

DirectXOpenGLを利用している部分しかキャプチャできないので断念

Fraps

Dxtory同様DirectXOpenGLを利用している部分しかキャプチャできないっぽい

アマレココ

内臓しているAMVコーデックはサイズが小さいのに画質は綺麗と素晴らしい

ただキャプチャソフトのUIが使いにくかった

コーデックのみ別売りしているのでそちらだけ利用するのもあり

※後述するけどAEに読み込めない

ここからコーデックのお話

高画質な動画を作成するにためには 編集の際に元の動画をいかに高画質に保つかが重量

といっても非圧縮だと数秒でギガ単位のサイズになるため現実的じゃない

そこで可逆圧縮AVIという選択肢がでてくる

可逆圧縮コーデックは配布などには向かないためオリジナルソースに用いるものだと考えていい)

アマレココに付属しているAMV4や有名どころのHuffyuvはAfterEffectsCCにはうまく読み込めなかった

そこでLagarith Lossless Codecを試したところ 読み込みに成功!

速度 と 圧縮率 共に満足いくものだったので採用することに

特徴としては

・CPU負担が少し高いらしい(体感できず)

・オプションでマルチコアに対応可能

インストーラーを使うと32bitと64bit両方インストールされる(らしい)

・扱える色空間が多い

・NULLフレーム対応

・ライセンスはGPLエンコードせずに配布することは無いと思うので気にしなくていいかも)

調査中に可逆圧縮コーデックを比較しているサイトを見つけたのでペタリ

SubstanceDesigner4.6

今回のアップデートでThicknessMapが書き出せるようになったので試してみた。

 

以前、Thicknessマップの作成方法を

「Normalを反転させてAOをベイクしてね」

と公式で回答していたような気がする。

 

見比べてみる。

 

普通のAO

f:id:makingT:20160207023725p:plain

 

法線を反転させるチェックを入れてベイクしたAO

f:id:makingT:20160207023757p:plain

 

今回実装されたThickness

f:id:makingT:20160207023814p:plain

 

全然ちがうやんけぇ~!

いつのまにかUIも日本語になってより扱いやすくなっている印象。

ラインセンスの認証方法はPinterと同様の形になったっぽい。