【CG】マテリアルスキャンに挑戦。布を8方向から撮影し【Substance Designer】に取り込む

Pocket
email this

たいしたものではありませんがこれまでもコンクリート、地面、木材やパノラマ背景など、自分で撮ってきていたのでやらずにはいられないということで早速トライ。
素材をいろんな方向から光を当てて撮影し、それらを画像解析して高低差のテクスチャマップを作成する『マテリアルスキャン』をやってみました。
ただしソフトSubstance Designerを使う必要があります。

自分でノーマルマップ作成スマホアプリでも作ろうかなあとか思っていたところだったので作らずに済みました。

ふと思ったのですが、今までランダム風フローリングなどのUE4エディタでめっちゃ複雑なノードを作っては紹介してきましたが、あれってSubstanceでやることですよね。「いやあんなにマテリアルエディタにノード接続したらシェーダーの負荷が大きすぎやしないか」とは思っていましたけども。

ということでやってみましょう。

やってみよう

手順自体はボーンデジタル様のサイトの手順を参考にしました。なんか記事のタイトルが中国からのスパムメールみたいな語呂なのでですが大丈夫です、安心して閲覧できます。
 あなたのスマートフォンはマテリアルスキャナーです – ボーンデジタル

今回は布でトライ。多少なんちゃって要素がありますので(例えばカラーチャートのくだりなど。)、プロの方から見たら50点かそれ以下の作業内容だと思います。「遊びでこのくらい出ればいいんじゃないの。」という程度で楽しんでもらえれば良いと考えています。

マテリアルスキャナー(の代わり)

ボーンデジタル様のサイトようにダンボールなどの工作はしないで実施しました。
理由は、私の家のリビングテーブルがガラストップで中部にリモコンとか雑誌を置けるデザインなのですが、ふと「ていうかこのテーブルを撮影台にすればいいんじゃないか?」と思ったからです。
ということで、こんな感じでセッティングして撮影を進めていくことにしました。

撮影機材

・カメラ – SONY α7-II, Nikon 50mm
今回はいつもの相棒に単焦点レンズを。やっぱりこのレンズが私の手持ちレンズの中では群を抜いてきれいに出るので。

・三脚 – Velbon Sherpa 535
かなり古いからもう廃番かも。
 

・撮影用のLEDライト – YONGNUO YN160
安物ですが数年前にとりあえすほしいから買ったものがここで登場。結構悪くないと思います。

・カラーチャート
これが一番のなんちゃって要素です。まさかの印刷物で代用。
このあたりはプロの方からすればムムムッ!となると思いますが、でも結果から言いますと無いよりは全然マシでした。
 

・目印となる印刷物
ボーンデジタル様のサイトに公開されていたものを印刷しました。Photoshopで原寸大に調整して印刷。中央の四角が10cmです。


Image from ボーンデジタル

撮影前にやること

布を置くとき、
・できる限り平面的に。
・模様が水平・垂直になるように。
やっぱり適当に置くと布が凸凹っとなってしまったり、模様が一部分だけ伸びてしまって歪んだりする箇所が出てきますので頑張って調整。

・目印を布の上に置く。
・三脚とカメラを設置。
できる限り真下を見るようにします。調整は目印の印刷物と、ファインダーの方眼を見ながらとにかく丁寧に合わせます。
カメラのビューに三分割などのガイドライン表示ができると思いますが、四分割対角+方眼にするのがおすすめ。とにかく中央に縦横の線が出ている設定です。

カメラ内の設定も済ませておきます。
・フォーカスを完璧に合わせます。
・ISOはもちろん低く。最高でも200。
・測光を中央重点測光にするのが良いと思います。
・色空間をAdobeRGBに。

以上のセッティングを行った全体感はこんな感じです。

撮影

いよいよ撮影。部屋を可能な限り暗くします。

カラーチャート用の撮影

まずはカラーチャート用の写真を1枚撮りました。
布の上から紙のカラーチャートを載せます。
次にLEDライトを浴びせた状態で撮影します。前部から、高さ10度くらいの位置から照らしました。

撮れたものはこんな感じ。
私のなんちゃってカラーチャートは印刷物なのでテカりやすいです。テカって白飛びしたら撮り直してください。

8方向から撮影

このやり方がGREATかはわかりませんが、最初の1枚目のときに、LEDライトを50~80cmくらいの距離・高さ30度くらいの位置から照射してみてカメラで0.0EVと表示される位置から撮っていました。
これを明るさの基準としました。
カメラの設定はこれ以降は変更せず2枚目の斜め左前を撮るときは、同じようなLEDライトの距離・高さから照射してみて、一番明るくなるポイントを探します。
例えばカメラが+0.3EVと表示していたら、それはLEDライトが近すぎることを示している。と解釈しました。
したがってLEDライトの距離を離して0.0EVになる位置を探します。安定して0.0EVと表示されたらシャッターを切ります。

これを8方向からやります。

独りでやると疲れますでしょう!? 頑張るのです。

それにしてもこの方法、どうなんでしょうね? いい加減な撮影基準に聞こえるのですが、実際このやり方だと品質面は色んな意味で安定していたと思います。現像作業もかなり楽でしたし。

透過マップの撮影

この画像が有ると無いで布の質感がけっこう違ったので重要だと思います。
LEDライトを下から照射して撮影。最初に言いましたようにガラステーブルですから棚の部分にLEDライトを置けばOK。
 

※本当はトレーシングペーパーとかをガラスと布の間に挟むみますが忘れていました・・・。クッキングシートとか代用品になるかも。

アルベドマップの撮影

部屋の照明をつけます。ただし素材に直接光が当たらないようにします。とりあえず『シーリングライトの光が被写体に直接当たらない』状況を作って撮影。
私はシーリングライトとカメラの間に私自身が入って影を作りました(笑) つまり壁ドンならぬ『テーブルドン』みたいなポーズで、アメフトのクオーターバックの構えみたいなポーズで撮りました。これ他人がいたらマジでダサいのでやってはいけません。結果的にこの方法で皮革製品の撮影をしてもハイライトの箇所が出なかったので、まあ、まあ、最悪な手段ではないと思います。

・撮影環境が変わってしまいましたから、もう1回カラーチャートを置いて1枚撮影。
・次にクオーターバックのポーズで1枚撮影。布であればどうにかなりましたが、皮革などのときは必ずハイライトが出ていないことをチェックします。

・・・とまあ、色々ありましたが画像が撮れました、計10枚です。慣れてくると1素材につき5分くらいでできます。

現像

Lightroomに取り込みます。
通常は印刷物の★や●などの目印を参考に位置合わせをするようですが、私の方法だとそもそもカメラと被写体が固定されていたので必要な箇所にトリミングして現像するだけで済みました。

まずカラーグレーディングをしなければ。
カラーチャートの写真を用意して、右上のホワイトバランスのスポイトを選択。
左下の2番目のグレーに着目します。
・このグレーを選択してホワイトバランスが調整されます。
・さらに輝度が70%になるように露出も調整します。

こんな紙切れのなんちゃってでもないよりまし。ちなみに以下がビフォーアフターです。

カラーチャートの写真の設定を1方向目の写真に適用します。
・[前の設定]ボタンを押します。
・続けてトリミングもしましょう。
・もし写真が傾いていたら回転して修正しておくのもあり。
 

この現像設定を2~8方向目とアルベド用の写真にしたいので、同期しましょう。
8枚の写真を選択して[同期]を押します。全部同期でOK。
これで一気に同じ設定で現像が可能。慣れてくるとLightroomの一連の作業が2分くらいでできます。

書き出しの設定は16bit TIFF形式のAdobeRGB(1998)でやりました。

Substance Designerに取り込む

やっとここまできましたね。画像を取り込んでみましょう。
まずは10つの画像をプロジェクトにリンクします。

次に[Multi Crop]ノードを配置して[Input]を8個に増やします。8つのBitmapを全部Inputに接続する。
Outputも8個ありますからそのまま[Multi to Normal]ノードを配置して接続します。
この時点でノーマルマップが出来上がります。 ・・・①

次にベースカラーBitmapの処理。ベースカラーBitmap→Multi Crop→Color Eqlizerの順に接続。 ・・・②
これって特に何もしなくて良かったり?(Substance知識不足。)

Height出力自体ですが、その布によると思います。
今回の布はNormal≒Heightと判断しましたのでNormalから[Normal to Height]ノードに接続し、[Level]でレンジを引き伸ばしました。 ・・・③
もしかしたら 透過マップの1-xとノーマル の掛け合わせみたいな考え方のほうが良かったかも。透過している箇所は最も高さが低いという解釈をすれば。

①②③これら3つのOutputを[Smart Auto Tile]ノードに接続。これのOutputが基本素材みたいな扱いになるようで、クロップもこのノードでのみ行いました。

[Smart Auto Tileのoutput | Color]
そのままBasecolor出力に接続。
[Smart Auto Tileのoutput | Normal]
そのままNormal出力に接続。
[Smart Auto Tileのoutput | Height]
そのままHeight出力に接続。

[Opacity]
透過はOpacity出力が初期状態で無いので作りました。
右クリックメニュー→[出力]で配置。プルダウンから[Opacity]を選択します。[name]にも「opacity」と入力しておきましょう。

[透過]Bitmap→[Color to mask]に接続。このとき白にすると撮影時に光っている箇所(=透過箇所)が白色で浮き出てきます。
さらに[Blend]ノードと均一の値ノード×2を接続して、透過マスクを調整します。Opacityに接続すればOK。
最初Opacityなんて無くても変わらないんじゃないの? とナメてましたが、マテリアルの品質が結構変わるので驚き。

[Roughness]
均一で0.7にしました。0.8でも良いかも。

これでノード接続は完了。以下が全体図です。
オリジナル解像度はこちら。3,791×1,944px
http://christinayan01.main.jp/architecture/wp-content/uploads/2019/10/scan_nodemap-all.jpg

できるだけSubstance上での作業時間を減らしました。だってそれを減らすために撮影しているのだから。(という認識であっている?)

Substance初心者ですがUE4と操作感がだいたい同じなので、勘とちょっとの操作方法をググることでここまでこれました。

完成

たぶん布とかラフネス値がだいたい決まっているもの(光沢のある特殊な化学繊維等は除く。)であれば撮影とマテリアル作成の仕組み化はできそうな気がします、超大量の種類の布マテリアルを造らねばならないときはスキャンすればかなり早く出来そう。

これと同じものをマテリアルデザイナーに依頼してなんだーかんだー何日後に納品ですーお見積りはおいくらですーってやりとりするのであれば、この品質でもいいから15分で造るほうが圧倒的に費用対効果は高いと思う。そもそもこんなに近寄らないですしね。

おまけでやってみたワニ革のマテリアル。正直こいつは失敗・・・革はもっと撮影環境がよくないと無理だった。アルベドの撮影でどうしてもハイライトが出てしまう。

今回撮影したテクスチャは公開しています。使ってみてください。

ダウンロード (Downloads)

課題

・LEDライトが出力不足かも。当て方の雑さもあるのでしょうけど。
 革製品で試したら左上と右下の箇所で思いっきりノーマルの生成処理が間違われてしまいました。高低差ががっちゃがちゃ。
・この撮影設備であればレンズは焦点距離70~90mmのものにしたほうがいいかも。余白がもったいない。

余談

この作業ですが、私のPCでもとんでもなく重いのですがこんなもんなのでしょうか? みんな私の倍のスペックでやっているのです? それともでっかいBitmapを10枚も取り込んでいる事自体が問題なのでしょうか? とにかく重かった。
10枚取り込んだ時点でもうRAM切れでスワップ走りまくり。でも5分くらいすると安定しましたけど。VRAMも1.5GBくらいまで減った。
 CPU: Core-i5第7世代
 RAM: 16GB
 VGA: GeForce GTX1060(VRAM: 3GB)
 ストレージ: SSD

一般的に言う「CAD向けPC」のスペックでないと4096pxのテクスチャ作成はおそらく不可です。やるとしても画像の解像度を1,024~2,048pxまで落とすしかないかと思われます。

参考サイト

【CG】マテリアルスキャンに挑戦。布を8方向から撮影し【Substance Designer】に取り込む” への2件のフィードバック

コメントを残す