!!!独り言日記 !![Shade 3D] 続続続・UV Auto Unwrap + AO Map (2014/10/28) AO Mapの精度アップ。 お狐様のAO Map計算時間は2.5秒ほどで変わらず。 {{ref_image shade3d_okitsune_20141028.jpg}} デフォルトのDiffuseテクスチャ(UV1) + AO Map(UV2) + 汚れ(UV2)、みたいに重ねるとよりそれっぽくなりそうですね。 主にUnityに持っていくことが目的。動くキャラでも、薄くAOをかけておくとその場にいる感が増すかも。 !![Shade 3D] 続続・UV Auto Unwrap + AO Map (2014/10/24) お狐様のAO Map計算時間を2.5秒くらいに短縮&精度アップ。AO Mapのテクスチャは1024x1024 Pixel。 {{ref_image shade_ao_map_03_20141024.jpg}} こんなとこですかねぇ。後は少しフィルタをかけるくらいでいいかな。 なお、UV機能についてはAO計算とは別で、その他UV関連の便利ツールをまとめています。 開発中のは、UVツール(UV Auto Unwrap/UV Reprojection含む)とAO関連ツール(頂点カラーの割り当て/頂点AOの計算/AO Mapの作成)、の2本立てになります。 できれば今年中には公開したいところ。 !![Shade 3D] 続・UV Auto Unwrap + AO Map (2014/10/24) 頂点だけに依存しないようにAO Map。 {{ref_image shade_ao_map_01_20141024.jpg}} {{ref_image shade_ao_map_02_20141024.jpg}} お狐様でAOの計算時間は3秒ほど。まだ品質と速度アップが必要ですが、一度焼き付けてしまえば使いまわしはしやすいかなと。 複数形状での遮蔽も可能にしてますが、Unityなどに持っていく場合は静止物体以外は1形状(+地面)で遮蔽計算させたほうがいいかもしれないですね。 !![Shade 3D] UV Auto Unwrap + AO Map (2014/10/22) まだ開発中のShade 3Dプラグインですが、「UV Auto Unwrap」(面がかぶらないようにUVを自動展開)とAO Map(Ambient Occlusion Map)の検証。 実際は、頂点カラーとして頂点のAOを計算してUVの割り当てられたテクスチャにベイクしているだけ。 ほんとは頂点の間も補間する必要があります(なので、土台などであえて余計な頂点を入れている)。 {{ref_image shade_3d_ao_map_20141022.jpg}} リアルタイムでは、lightmap/頂点カラーとしてのAO/AO Mapは個人的によく使うので、 このあたりは効率化しておきたいところです。 頂点カラーと頂点のAO計算はすでにプラグイン化済み。 !![Substance Painter] PBRとPost Effect (2014/10/19) 大事な機能の説明が抜けてました。 {{ref_image sp_post_effect_20141019.jpg}} Substance Painterのリアルタイム表示部は、PBR(physically based rendering)でフォトリアルな表示です。 これに加えて、「YEBIS2」というスクリーンでのPost EffectでアンチエイリアスやDOF(被写界深度)やトーンマッピングなど、よりフォトリアルな表現に引き上げるエンジンがつまれてます。 YEBIS2はSilicon Studio社のPost Effectエンジンです。日本の会社。 編集画面でありながら、キャプチャすれば完成画像品質です。 昨今のリアルタイムはすごいですね。 !![Substance Painter] 日本語に対応している (2014/10/19) Substance Painterでは、海外ツールとしては珍しく初回バージョンから日本語UI表示/入力に対応してます。 でも、英語のところが残ってたりもしますが。 {{ref_image substance_painter_japanese_20141019.png}} レイヤ名でも日本語指定できますね。 !![Substance Painter] 汚れだけShade 3Dに持ってくる (2014/10/19) Shade 3D上で、拡散反射色用にUV1、UV2はsubstance painterに渡す汚れ用UV。 とした場合、substance painterでペイントしたあとベースのFiil Layerを非表示にしてテクスチャ画像を出力。 {{ref_image sp_shade_00_20141019.png}} テクスチャ自身はアルファ値を持ってます。 結果のテクスチャ画像Base Color/Normal/Roughness/MetallicをShade 3Dにインポート。 形状の表面材質のマッピングレイヤで、 +イメージ-拡散反射(UV1) オリジナルの拡散反射テクスチャ +イメージ-拡散反射(UV2) αブレンド。 Base Colorテクスチャ +イメージ-拡散反射(UV2) 乗算/反転。 Metallicテクスチャ +イメージ-法線(UV2) Normalテクスチャ +イメージ-荒さ(UV2) Roughnessテクスチャ +イメージ-反射(UV2) Metallicテクスチャ とすると、substance painterで用意した汚れを追加でマッピングできますね。 以下、Shade 3Dでのレンダリング画像です。 ↓オリジナル {{ref_image sp_shade_01_20141019.jpg}} ↓汚れだけレンダリング {{ref_image sp_shade_02_20141019.jpg}} ↓オリジナル + 汚れ {{ref_image sp_shade_03_20141019.jpg}} 以上、Substance Painterの機能としては、これだけ書くとだいたい理解できるかなぁと。 !![Substance Painter] 続・Shade 3DでSubstance Painterから出力したテクスチャで似せる (2014/10/19) フレネルは0.86にしたらいいよ、と教えていただきました。後、フレネル指定すると荒さを大きくする必要はない感じ。 {{ref_image sp_shade_03_20141019.png}} 改めまして表面材質の設定。 *「その他」の'''「環境光に拡散反射を乗算する」をOff'''に。 *荒さで光沢的な反射を表現するようにするため「光沢1」を0にして無効に。 *反射を1.0に(Metallicのテクスチャで制御)。 *環境光を0.05に。 *荒さを1.0に (Roughnessのテクスチャで制御)。 *'''フレネルを0.86に'''。 マッピングレイヤとして、 +イメージ-拡散反射 (Base Colorのテクスチャを指定) +イメージ-拡散反射 (Metallicのテクスチャを指定し「乗算」にする。また、「反転」On) +イメージ-法線 (Normalのテクスチャを指定) +イメージ-荒さ (Roughnessのテクスチャを指定) +イメージ-反射 (Metallicのテクスチャを指定) 「荒さ」を使ってるのでパストレーシングでレンダリング(拡散反射カットオフを0にすること)。 結果、substance painterとShade 3Dでほぼ似た感じになりました。 {{ref_image sp_shade_02_2_20141019.jpg}} !![Substance Painter] Shade 3DでSubstance Painterから出力したテクスチャで似せる (2014/10/18) Substance Painterで出力した「Base Color」「Normal」「Roughness」「Metallic」のテクスチャ画像をShade 3Dに読み込んで使用しました。 表面材質の設定を以下のようにしました。 {{ref_image sp_shade_01_20141018.png}} *「その他」の'''「環境光に拡散反射を乗算する」をOff'''に。 *荒さで光沢的な反射を表現するようにするため「光沢1」を0にして無効に。 *反射を1.0に(Metallicのテクスチャで制御)。 *環境光を0.05に。 *荒さを50に(できるだけ大きな値のほうがよい?形状依存かもしれません、自信なし)。 マッピングレイヤとして、 +イメージ-拡散反射 (Base Colorのテクスチャを指定) +イメージ-拡散反射 (Metallicのテクスチャを指定し「乗算」にする。また、「反転」On) +イメージ-法線 (Normalのテクスチャを指定) +イメージ-荒さ (Roughnessのテクスチャを指定) +イメージ-反射 (Metallicのテクスチャを指定) 反射について。Shade 3Dでは黒に近づかないと全反射しないため、2つめの拡散反射としてMetallicのテクスチャを指定して反転させる処理を入れてます。 「荒さ」を使ってるのでパストレーシングでレンダリング。 パストレの設定での注意点。拡散反射カットオフを0にします。 {{ref_image sp_shade_02_20141018.jpg}} まだいろいろ違うか、、、。 !![Substance Painter] テクスチャをエクスポート (2014/10/18) 作業終了後、 メインメニューの「File」-「Export all channels」より、Base Color/Height/Roughness/Metallicの画像を出力します。 オプションでNormalも出力可能。 {{ref_image substance_painter_export_01_20141018.jpg}} これをUnityなりShade 3Dにテクスチャとして読み込んで利用すればよさげです。 追記: substance painterからテクスチャを出力し、 Shade 3Dに持ってきたときのマテリアル再現については調査中。 今のところ、substance painterと同じ表現にならない、、、。 追記2: 表面材質の「その他」の「環境光に拡散反射を乗算する」をOnにしていると正しくならないようでした。 これをOffにする。 !![Substance Painter] Particleで汚れをつける - その2 (2014/10/18) 動画キャプチャが重いので遅く見えますが、それなりに快適に動作してます。 substance Painterでのパーティクルを使ったペイント。 {{h264player http://ft-lab.ne.jp/files/movie/substance_painter_particles.mp4,width=640,height=480}} !![Substance Painter] Particleで汚れをつける - その1 (2014/10/18) ↓盾らしきものにレリーフを入れてそれっぽくしてみました。これはBrushのペイントで。 {{ref_image substance_painter_use_009_20141018.jpg}} なお、3Dプレビュー部だけでなく2Dプレビューでもペイントできます。 ↓ここにパーティクルで汚れを付けると以下のような感じ。 {{ref_image substance_painter_use_010_20141018.jpg}} 動画で表現するとすごさが分かるので、次回アップします。 !![Substance Painter] BrushのSpacing (2014/10/18) 錆びや木目などのテクスチャありきのペイントの場合、Brushを選択してもうまく描画されないということがあります。 これはBrushのSpacingの値が小さいから、というのが原因の場合が多いです。 これは、ペイントでドラッグしたときの描画間隔。ススっと連続して描画すると間延びした感じになりますよね。 このときのススっとを、ズッズッ、といった感じに間隔を空けて描画していくパラメータがSpacingです。 {{ref_image substance_painter_use_007_20141018.jpg}} 錆び、ウロコ、木目、コケ、など、大部分でこのSpacingが効果的に利いてくると思います。 {{ref_image substance_painter_use_008_20141018.jpg}} !![Substance Painter] Brush/Particles/Material/Tool (2014/10/18) それでは、3Dペイントの基礎の基礎、とりあえず塗ってみる、です。 その前に、ペイントするための要素としてBrush/Particles/Material/Toolについて。 塗る際のペンの形としては「Brush」もしくは「Particles」を選びます。Particlesは後で説明するので、ここでは省略(Particlesがsubstance painterの花形の目玉機能です、超強力)。 *「Brush」の種類はスクリーン下のBrushタブより選択。 *その後「Material」で塗るための素材を選択します(MaterialはBase Color/Height/Roughness/Metallicがワンパックになったものです)。 {{ref_image substance_painter_use_004_20141018.jpg}} *適当にいくつか塗ったのは以下のように。 {{ref_image substance_painter_use_005_20141018.jpg}} 「Tool」というのは、BrushもしくはParticlesとMaterialを組み合わせたパッケージと考えてよいかもしれません。 これを選択すると、BrushやMaterialを個別に選択してからペイント、という流れが、Toolを選択してペイント、とショートカットできます。 よく使う塗りについてはTool化しておいてもよいかと思います。 このBrush/Particles/Material/Toolは、それぞれユーザーが新たに追加できますし、始めからプリセットが用意されてます。 !![Substance Painter] Layerを理解する (2014/10/18) substance painterは、PhotoShopのように複数のレイヤを重ね合わせることができます。 {{ref_image substance_painter_use_006_20141018.png}} Fill Layerでベースのテクスチャを指定した場合これを一番下にして(Layersウィンドウ内でドラッグすることで順番変更できます )、「+」のアイコンを選択して上にレイヤを追加、それに描画、を繰り返します。 また、各レイヤの「100」というところをクリックすると、0 - 100まで値を変更できます。これは、重ね合わせの割合です。薄く重ねたい場合はこの値を小さくします。 汚れの濃さをレイヤごとに変えたい場合は重宝します(すご〜くよく使います)。 この値は、Base Color/Height/Roughness/Metallicそれぞれで指定します。 Base Colorだけ0にしても凸凹のHeightは生きてます。これを4つすべてで0にすると 非表示と同じになります。 レイヤの左端の二重丸をクリックすると、表示/非表示の切り替え。 substance painterでは、このレイヤを操ることでさまざまな効果を形状の「塗り」に与えることになります。 あれ、これってPhotoShopみたい、と思った方、ペイントソフトの2D描画が3Dになった、という理解で間違いないかと。 安心して3Dペイントできる(間違えればUNDOすればいいじゃない)、というのはよいですね。 すべての操作は記録されており、UNDO/REDOできます。 また、レイヤの重ね合わせの割合変更やレイヤの表示/非表示など、調整はいつでも可能です。 このようなツールは「非破壊型」と呼ばれますね。 !![Substance Painter] 3D形状の読み込み (2014/10/18) Shade 3Dで以下のような盾っぽい形状を作成(自由曲面からポリゴンメッシュに変換しました)。 {{ref_image substance_painter_use_001_20141018.png}} UVはそれぞれの面でかぶらないようにします。これくらいだと手作業でも可能かと。 これに、表面材質を割り当てておきます。テクスチャについては、substance painterで手動で読み込む必要があるため割り当てなくてもOK。 その後、fbx形式で出力します。 これを、substance painterで読み込み(メインメニューの[File]-[New]。ここでMeshとしてfbxファイルを指定します)。 テクスチャを後から読み込むには、メインメニューの[File]-[Import image]より指定。 読み込んだ直後では、テクスチャは割り当てられていません。 Layersウィンドウで {{ref_image substance_painter_use_003_20141018.png}} 右から2つめのバケツっぽいアイコンを選択すると、「Fill layer」というのが追加されます。 下のFill parametersウィンドウのMaterialで「color」「height」「rough」「metal」というのを指定できます。 colorにテクスチャ画像を指定すると、テクスチャマッピングされます。 !Material :color:色を指定。Diffuse Color相当。 :height:凸凹の表現。normal mapでなくて、高さマップである点に注意してください。高さマップのテクスチャ(bump map)を読み込むことで、凸凹をマッピングできます。 :roughness:粗さの表現。この値が大きいと反射でボケボケになります。0だと全反射です。 :metallic:反射の強さ。これが大きいと鏡のようにクリアになります。0でもかすかに反射します。完全なdiffuse面のみにする場合は、roughness = 1.0、metallic = 0.0にします。 この「color」「height」「roughness」「metallic」ですべてのマテリアルを表現します。それぞれにテクスチャ画像を指定可能。 以下のようになりました。 {{ref_image substance_painter_use_002_20141018.jpg}} さて、ここから3Dペイントで加工していくことになります。 !![Substance Painter] 読み込める3D形式は? (2014/10/18) *fbx *x *obj *3ds *ply *dxf *lwo *stl など。個人的にはfbxでいいかなと。 テクスチャは別途でインポートする必要があります(新規作成時に形状とテクスチャを読み込むダイアログが表示されます)。 Shade 3Dでのフェイスグループに相当するものは、TextureSetsという名称で列挙されます。 TextureSetごとにレイヤ構造を持たせて3Dペイントできます。 UVは1つだけ(fbxで渡す場合は末尾のUVを採用?)。 !!Substance Painter (2014/10/18) Substance PainterはOpenBeta状態からVer.1.0になり、正式に販売されています。 http://store.steampowered.com/app/273390/?l=japanese 3D形状をインポートし、3Dペイントを行うツール。UVはインポートした形状にあらかじめ割り当てられている必要があります。 fbx形式のものを読み込むのがよいと思います。 以下、検証したもの。 形状のモデリングはShade 3Dで行い、UVについてはかぶらないように変換処理してます。 これはプラグインで行ってますが、まだ開発中です。まとまり次第公開予定。 ↓3D形状とテクスチャをインポート。ここからペイントを開始します。 {{ref_image substance_painter_01_20141018.jpg}} ↓オリジナルのもの。 {{ref_image substance_painter_02_20141018.jpg}} ↓汚れをつけました。 {{ref_image substance_painter_03_20141018.jpg}} 汚れは、PhotoShopのように多重のレイヤで管理できます。3Dペイントを行う他に、パーティクルでペイントする面白い機能があります。 これについては、後で動画化したのを出しましょうかね。 ↓ベースのレイヤを非表示にして、汚れだけ表示したもの。 {{ref_image substance_painter_04_20141018.jpg}} ベースの色(Base Color)のほか、凸凹(height)、粗さ(roughness)、反射(metal)、も与えることでフォトリアルにできます。 このツールで出力するのは、テクスチャの画像ファイルになります。 {{ref_image substance_painter_05_20141018.png}} substance painterで汚れをつけて、それらのテクスチャをUnityやShade 3Dなどの別ツールで読み込んで再マッピングする、という流れですね。 substance painterでは、Shade 3Dでのフェイスグループ構造は読み込めますが 1UVのみインポートされます。substance painter自身、複数UVには対応していないようです。 汚れについては、ベースとは別のUVで管理できたほうがいい場合もありそうなので、 それらのワークフローも用意できたほうがよさそうですね。 !まとめ substance painterは、 *3Dペイント *汚れやサビ、コケなど(特に、自然な風化っぽい表現に強い) を手助けしてくれるツールです。 3Dの形状データ(UVを付けておくこと)をfbx形式などでインポートし、編集後、各テクスチャを画像出力できます。 ということで、今回はさわりだけ。 !![DK2] デモ公開 (2014/10/18) Oculus Rift(DK2)のデモアプリは以下に公開しました。Win用です。 「Island」というなんのひねりもないタイトルです。 https://share.oculusvr.com/app/island {{ref_image dk2_00_20141018.jpg}} {{ref_image dk2_01_20141018.jpg}} ※ ゆがみや色収差はDK2の効果です。MHDとしてかぶってるときはそんなに目立たないです。 島をウォークスルーしてスタンプラリーみたいなのをするだけのものです。 Terrainでフォトリアルを表現する検証用と速度テストもかねてます。 こちらの Windows 7/GeForce GTX 550 Ti環境では45 - 75 FPSくらい。 推奨は75 FPSを保つこと(そうしないと方向転換時の遅延で酔いやすい)。 まだ、マシンパワーに助けられないと厳しいかもです。 時間が解決するかなぁとは思いますが、OculusのHMD製品版では解像度がさらに上がる可能性が高いので、速度と質のいたちごっこですね。 ソフトウェア側(Unity)でどれだけはしょれるかは今後の自身の研究次第。 操作はXBOX360コントローラー推奨。Oculus SDKのAPIでは、これ以外は対応していない感じが。PS2互換のを試したのですが操作できなかったです。 キーボードにも対応しているので、コントローラーがない場合はそれで。 DK2を持ってない方でも、モニタ上で左右2つの画面が表示されたものを再生可能かと。 !!DK2のデモ完成 (2014/10/13) DK2のデモアプリが完成したので、Oculus RiftのサイトのShareに申請しておきました。 ウォークスルーするだけのものだと味気ないので、スタンプラリーみたいな仕組みを入れました。 以下みたいなものがある「島」をウォークスルーして探検するアプリです。 その他、いくつか特徴的な建物があります。 {{ref_image unity_dk2_capture_20141013.png}} リアルタイムにフォトリアルを行うテクニックを使ってますので、これらの解説は随時。 ようやく一段落〜〜。さて、途中で止めていたプロジェクトも再開せねば。 !!DK2のデモ作成中 (2014/10/07) ひさびさの更新ですが、最近はこんなことしてました。 HMDのOculus Rift(DK2)のデモアプリはそろそろ完成しそうなので一部キャプチャ。 {{ref_image unity_dk2_01_20141007.jpg}} {{ref_image unity_dk2_02_20141007.jpg}} {{ref_image unity_dk2_03_20141007.jpg}} {{ref_image unity_dk2_04_20141007.jpg}} ゆがみや色収差は、DK2の効果なので実際はもっと見やすいです。 しかし、HMDを頭に装着して実体験しないとなかなか伝わらないですね。 形状のモデリングはShade 3D、実装はUnity。 島の中をウォークスルーするだけのものです。 問題点として、、、、酔う(^_^;; ので、開発の進行は自身の酔いに左右されてます。 島全体を移動はできるのですが、そうすると操作する側も酔ってしまいます。 Terrainとしてのちまちました構築を省くという意味合いも含め、移動範囲は制限したほうがいいですね。 いろいろノウハウも貯まりましたので、完成後、後々ネタも日記に書いていきます。 なお、このウォークスルーするデモアプリを作ってる際のプログラム作業はShader書いたくらいで、それ以外のプログラム作業は無しです。 ひたすらデータ作成とTerrainに見栄えよく形状を配置するのみ。 そう考えると、Unityはかなり便利ですね。プログラムが分からなくてもこれくらいはできる、のデモにもなればと。