!!!独り言日記 !![Shade 3D] THETAでのhdrパノラマ画像を使って3DCGと実写合成 (2014/11/29) Shade 3Dに読み込んだhdrを元にレンダリングまで進めます。 これは教えてもらった情報。 THETAの場合は地面に配置したとして、カメラまでの高さは約108mm。 パノラマで背景として使う場合は、高さだけ意識すればよさそうとのこと。特にパースマッチングの必要はなし。 地面(Y=0)より108mm離した位置にカメラを配置し、Y=0の位置を地面として物体を配置しました。 {{ref_image panorama_20_20141129.jpg}} 後は、視点を移動させずに注視点を変えてぐるぐる見渡します。 で、パストレーシングでレンダリング。光源はナシ、背景のIBLのみです。 {{ref_image panorama_21_20141129.jpg}} ばっちり色合いも背景と3Dが収まりました。HDRでのIBLとのあたり具合の確認として、 中央右の石像の球体と3DCGの球体の陰影を見てみましょう。ほぼ同じなのが確認できます。 後々、もうちと背景と3DCGを絡み合わせてみます。視点を中心に向きを変えてもマッチしますよ。 結論として「'''hdrパノラマ画像を提供する場合は、カメラ(レンズ)の地面からの距離も教えてあげよう'''」。3DCGとの合成がはかどります。 !!THETAでhdrパノラマ画像を作る (2014/11/29) RICOH THETA m15で全天球のパノラマ画像を露出を変えて撮影し、合成することでhdrファイルになるか実験。 THETAは、スマホやタブレットアプリより遠隔地で撮影できます。 このアプリの赤丸のところで露出調整。 {{ref_image panorama_11_20141129.png}} 露出を「普通」「暗い」「明るい」の3パターンで撮影し、合成することでhdrを作ることにします。 で、秩父の公園で撮ってきました。 ↓普通の露出 {{ref_image panorama_01_20141129.jpg}} ↓最も暗い露出 {{ref_image panorama_02_20141129.jpg}} ↓もっとも明るい露出 {{ref_image panorama_03_20141129.jpg}} これを、「Luminance HDR」というツールに読み込んで1つのhdrとして出力します。 {{ref_image panorama_10_20141129.jpg}} http://qtpfsgui.sourceforge.net/ これをShade 3Dに読み込んでみました。 背景としてグリグリできるのを確認します。これでとりあえず第一段階です。 {{ref_image panorama_12_20141129.jpg}} 次回、カメラの配置とレンダリングまで進めていきます。 !!AOMapがlightmapの代わりに使えるかどうか (2014/11/20) 先日のキャラクタ(モーション付き、Substance Painterでリアルにしたもの)をUnityに持っていって動かしたら、AO Mapを使うとそれなりに間接照明っぽさはかもし出せますね。 動画載せようかと思ったけど、結構キモさに拍車がかかったのでやめておきます(^_^;; モバイルゲームの敵キャラクタ(雑魚)なんですが、本日記に載せてるSubstance Painterでのテクスチャを塗ったものは使用しない予定です。 「AOMapがlightmapの代わりに使えるかどうか」の検証は、建物などで表現したほうが健全ですね。 !![Substance Painter] 3Dペイント (2014/11/19) きもい形状ですみません。先日の日記で動かしていたキャラクタを、 Substance Painterで3Dペイントしてみました。 {{ref_image substance_painter_20141119.jpg}} Shade 3DからモデルデータとAO Map(テクスチャ)をfbxで出力、Substance Painterに読み込んでます。 ※ 重ならないUV展開とAO Map生成は、開発中のプラグインで処理してます。 AO MapをSubstance Painterで反映させるのはどうすればいいのか試行錯誤したところ、 各レイヤの「Bitmap Mask」に指定してあげればよいのですね。 これでAO Mapで黒いところはマスクされるので、結果として影のところは暗くなります。 注意点として、それぞれのレイヤごとにマスクを与えること。 Layersリストの一番下のレイヤ(Fill Layerにする)を真っ黒にしておくこと。 こうすることで、マスクされている部分はペイントの影響から除外されて最下層のレイヤが見えることになります。 なお、Substance PainterはPBR(physically based rendering)ですので、背景のhdrを変えることでまさにフォトリアルに表現されます。 上記画像のまま3Dペイントできますので、仕上がりの確認もシームレスですね。 !![Shade 3D] 続・動くキャラクタにAO割り当て (2014/11/18) Jump!! {{h264player http://ft-lab.ne.jp/files/shade/nomi_02_20141118.mp4,width=800,height=600}} 地面に影が焼きついてるのは仕様です。 AO焼付けは、レンダリング時には逐次再計算してもよいかもしれませんね。 !![Shade 3D] 動くキャラクタにAO割り当て (2014/11/18) AO Mapで焼付けたままのアニメーションテスト。なお、動きはidle時のものです。 {{h264player http://ft-lab.ne.jp/files/shade/nomi_20141118.mp4,width=800,height=600}} この状態で、そのままUnityに持っていけます(UV1/UV2と2つのテクスチャをを使うので、Shaderの差し替えは必要ですが)。 !!RICOH THETA m15 (2014/11/18) 購入しました。 {{ref_image ricoh_theta_20141118.jpg}} 全天球を撮影できるカメラです。 スペックは、静止画で3584 x 1792 pixel(2x1のパノラマ)。動画で1920 x 1080 pixel、15 fpsの魚眼x2のもので、これをPCで2x1パノラマに展開して1920 x 960 pixel。 3Dで使えるかは後々検証しますが、露出を変えての撮影ができますのでhdrを作ることはできる感じです(なお、THETAの本体やアプリとしてはhdr撮影の機能はないです)。 動画だと解像度的に厳しいですが、背景がボケててもよければ静止画のhdrには使えるかな? !![Shade 3D] 石 (2014/11/09) ↓レイトレーシング(AO Map使用) {{ref_image shade3d_rocks_01_20141109.jpg}} {{ref_image shade3d_rocks_02_20141109.jpg}} !![Shade 3D] AO Map (2014/11/07) まだ検証中だけどとりあえずシーンみたいなものを。 {{ref_image shade_3d_ao_20141107.jpg}} Shade 3D ver.14.1.2、レイトレーシングで6秒(Windows 7/Mem 4GB/Intel Core i5-2500 3.3GHz)。 AO Mapや頂点AO(頂点カラー)はあくまでもフェイクでして、どっちかというとエフェクト的な効果として見るようにしたほうがいいかもしれません。ウソだからレンダリング速度も速いです。なお、これくらいの表現だとUnityではリアルタイムで再現可。 地面と岩はAO Map、木と草は頂点AO(頂点カラー)を適用させてます。 AO Mapは単なるテクスチャで、頂点AOはプラグインで拡張したShaderとして対処してます。 いかにもAO的なところとしては、中央下の地面の草が落ちる影がソフトな点、 木の葉で覆われている部分で影が淡くなっている点、岩の下のほうに薄い陰が出来ている点、など。 リアルタイム用途でUnityに渡す目的で開発してますが、レイトレーシングで応用することもできるという例です。 AO自身は環境光のエフェクト的な効果ですので、パストレだとたぶん無用かと。 このような影/陰を調整する機能の場合は、「環境光」がかなり重要になります。 Shade 3Dでは、デフォルトの無限遠光源に環境光のパラメータがありますがこれを0にして、代わりにツールボックスの光源/カメラのところにある「環境光」をシーンに配置して、これで調整するほうがはかどるかと思います。 こうすると、表面材質ごとにある環境光スライダの存在意義が出てきます。AOを使う形状へのシェーディングは、光源の足し算でなくて引き算(実際は乗算してる)で。 これらについてはまた別途。 !![Shade 3D] 続続・AOとBake (2014/11/05) ↓板ポリゴンにアルファで抜いたテクスチャを貼った場合の検証。 {{ref_image shade_ao_map_test_03_20141105.jpg}} ソフトシャドウじゃありません、AO Mapです。すべて1枚の板。葉は複数を重ねてます。 Shade 3D ver.14.1.2でレイトレーシングで0秒。 レイトレでどれだけ詰めることができるか、も試さないといけないですね。 !![Shade 3D] 続・AOとBake (2014/11/05) たぶん、この手の静止形状はlightmapのほうがいいとは思うけど、あえてAOで。 ↓AO処理を行う前。 {{ref_image shade_ao_map_01_20141105.jpg}} ↓AO処理を行った形状(地面と社の2ポリゴンメッシュに対して、それぞれ1024x1024 pixelのAO Mapを計算して割り当て)。 {{ref_image shade_ao_map_02_20141105.jpg}} ↓適当に配置 {{ref_image shade_ao_map_test_20141105.jpg}} フェイク処理のオンパレードです。 GIレンダラだとこのような処理はいらないとは思いますが、レイトレやリアルタイム系ではまだまだあれば便利ではありそうですね。 !![Shade 3D] AOとBake (2014/11/04) Shade 3D ver.14.1.2での、UVとAOプラグインの実験。 {{ref_image shade_ao_bake_20141104.png}} お狐様は、 +Diffuse(UV1) +Diffuse(UV2)、汚れテクスチャ割り当て(一度外部に出力し、Substance Painterで汚れつけてます) +Diffuse(UV2)、AO Map割り当て 灯篭は、 +Diffuse(UV1) +Diffuse(UV2)、AO Map割り当て と1表面材質で複数をマッピングし、1枚のテクスチャにベイクしてみました。 3つの灯篭は同じマスターサーフェスで使いまわしてます。 ベイクだとテクスチャがどんどん増えて割と手間がかかるか。 まだ推敲の必要あり。 !![テクスチャ素材] テクスチャを追加 (2014/11/04) 「自然寄りテクスチャ素材 (Beta)」にて、いくつかテクスチャを追加しました。 煉瓦 x 1、木の幹 x 1、錆 x 2、葉(複数枚) x 1、です。 http://www.ft-lab.jp/NaturalTex/ SpeedTreeで新しく追加したテクスチャの木の幹と葉を割り当てた例。 {{ref_image speedtree_00_20141104.jpg}} 現在で341枚。 木の葉はたくさん撮ってるんですが、トリミング作業が発生する(意外と手間がかかる)ので登録するのが後ろ後ろになってます。 !![Unity] [DK2] 続・Terrain (2014/11/03) 後々Unity関連の調査情報を記載しているページに移しますが、今は下書き。 リアルタイムにフォトリアルを目指す場合は超えないといけない壁がたくさんありまして、今のところは *Terrainの地面や動く物体は、SkyShopでの背景HDRを考慮したShaderに頼る **Unity5では、このあたりの仕組みやShaderは標準で入ってます。 *木はVertexAO(Vertex Ambient Occlusion/頂点ごとに頂点カラーとしてあらかじめ計算した遮蔽情報を与える)。 **Unityではフォルダ名に「Ambient-Occlusion」が含まれていると、形状インポート時に自動で頂点AOを計算してくれます。ただ、かなり大雑把。 *重要な建物はlightmapで焼付け。 みたいにしてます。lightmapは以下みたいに、別シーンでlightmap計算してからベイクされたテクスチャを改めて割り当ててます。 {{ref_image unity_lightmap_20141103.jpg}} lightmapの欠点として(焼き付けになるのもあり)光源の移動ができないので形状の向きは固定にしないといけない点。 また、さほど重要でない木はVertexAOで十分かもですが、頂点数を増やさないといけなかったりするので、形状によってはAO Mapが妥協案とできるかなと。 ということで、リアルタイムでは *shadow map *Vertex AO *AO Map *lightmap などを、オブジェクトの重要度別に適用させ、組み合わせて使用する必要が出てきます。 というデモ/習作として、以下のOculus Riftのウォークスルーを作ったという経緯があったりします。 https://share.oculusvr.com/app/island HMDは今は開発者向けですが、散歩願望は突き詰めていきたいですね。ということで、HMDの使用目的としてはTerrainにロックオンしてます。 動きの激しいのもいくつか試したけど酔ってしまうのと、DK2をかぶるのに拒否反応(パブロフの犬的な)が出てしまうので避けてしまっている、、、。 PS. お散歩ゲームとして期待していた「Assassin's Creed Unity」は、どうもうちのGPUでは推奨以下なことが判明、残念。GTX 680以上が必要ですと。 !![Unity] [DK2] Terrain (2014/11/03) Terrainはなかなか楽しいのでいじってるというのはあるけど、草や木を扱いだすとあっという間に重くなります。 DK2用にするとさらに重くなる、、、のはまだ根本的に何が原因なのかつかめてません。 2倍の描画があるから、だけでもない気も。視野が広いからカリングされにくいというのもあるのかも。 現状の速度向上案としては、 *影(shadow map)が重いので、Project settings-QualityでShadow Distanceを短くする *影の品質をLow Resolutionにする *Terrainの設定で「Cast Shadows」をOffにする(Terrainの地形自体が落とす影をなくす、木はこれとは別です) *Tree & Detail ObjectsのTree Distanceを短くする(視点から見て、この距離より遠い木は描画されない) *そもそもの木や草が重いので、本数を減らす *地形の大きさにも左右されるようなので、デフォルトの2000 x 2000のサイズ(割と広い)を小さくする *草や木を構成するジオメトリの三角形数を減らす。特に木は面数が少ないほどよさげ。可能であれば1000三角形以下。 などしてるんですが、まだまだ。75FPSは場所によっては出るんですが、平均値だと50FPSがいいとこかな。 試してないけどLODはどうだろう、また確認してみよう。 自分自身、割と修行時間がかかりそうです。そういえば、FF15は自然表現もすごいきれいですね。 !!Legend of Grimrock2 (2014/11/02) 面白い。 {{ref_image regend_of_grimrock2_20141102.jpg}} Steamで購入して夜な夜なはまってます。 ところで、ゲーム内でSteamのフォーラムを見れたり、フォーラム内にいわゆる攻略法が載ってたりもするのですね。 Steamを通してだけど、ゲーム自身にコミュニティーの場が用意されているというのは新鮮だなぁ。