こんばんは、makoto@virtualDiyerです。
前回の2.絶対座標系編で、絶対座標系でテクスチャを貼ることに成功しました。
続いて、コンクリートのタイリングについてお話しします。
寸法、ピーコン位置をmm単位で指定することで、様々な種類のコンクリートを表現しようとしたときのお話です。
1.㎜単位での寸法指定を実装した理由
1.1.建築では㎜単位でモデルの制作が必要
まずはどうしてそんな機能が必要か、という話です。
まず前提として、建築分野でモデル制作をするときには、㎜単位でモデリングやテクスチャを張ることが普通です。
普段UE4などを触っていらっしゃるゲーム分野の方は「?」マークが浮かぶことでしょうが、そういうもんです。
そして、UE4での㎜単位でのテクスチャあわせが必要なのにはまだ理由があります。
簡単に言えば、
- メッシュなどの修正が繰り返されるため、テクスチャの微調整が何度も必要
- コンクリート種類(目地間隔などの違い)ごとにテクスチャが必要。
この2つです。これらについて、これから説明していきます。
1.2.繰り返しの修正が頻発
まず一点目、
- メッシュなどの修正が繰り返されるため、テクスチャの微調整が何度も必要
についてです。
もしもメッシュの変更がない場合には、(そんなことあるわけないでしょうが。)
普通にメッシュごとにコンクリートのテクスチャを作ればいいだけです。
そういうつもりで1つずつ作っていたわけで、
住吉の長屋の制作中にコンクリートのテクスチャを貼る時の私のワークフローは
テクスチャ作成(Photoshopなど)
→Modlabでノーマルマップなど作成
→UE4で確認
という順番でした。
※Modlab便利なんで皆さんもよければ使ってみてください。ノーマルマップがきれいに作れてクオリティが上がると思いますよ。
これでうまくいけばいいものの、そんなうまい話はなく、ポンコツな私にミスはつきものでして、
- メッシュやテクスチャの寸法が違う
- 裏表でタイリングの間隔が違う
などなど修正が繰り返されました。
そのたびにテクスチャがずれていないか確認をして、ずれていた場合には調整しなおして、、、。
修正の度にたくさんのソフトを行き来して作業をしており、非常に時間を費やしていました。。
1.3.使用テクスチャが膨大に
二点目の理由として挙げた
- コンクリート種類(目地間隔などの違い)ごとにテクスチャが必要。
というのは、コンクリートには目地の寸法違いや、ピーコン跡の位置の違いなどがあり、
それぞれについてコンクリートのテクスチャを作る必要があった、ということです。
VR長屋の場合、必要なコンクリートの寸法を例示すると、
- 1800*900コンクリート
- 1200*900コンクリート
- 900*600コンクリート
- etc…
上記それぞれに対して、テクスチャとマテリアルを作りました。
このため、コンクリートそれぞれに4k(または2k)テクスチャとノーマルマップがあるというとんでも状態に陥り、
最終的には
- テクスチャ:12枚(ノーマル含む)
- マテリアル:9個(マテリアルインスタンス除く)
このように膨大な量が存在していました。(途中で使わなくなったマテリアルも5~6個くらいあったと思います。)
これだけ色々作っているのだから、作業時間もばかになりません。
複数のマテリアルに対し変更をかけなくてはいけない状況も発生し、非常に大変な作業でした。
実際、Nafでの展示企画の直前に行っていた修正は、
コンクリートのテクスチャ調整とかで1週間近くかけていたような気がします。。。
※ちなみに、VRコンテンツを制作する場合、現在は極力軽いデータを制作する必要があります。
詳しくは割愛しますが、こういった観点からもテクスチャが多いのは望ましくありません。
そんなわけで、
もうこんなことはしたくない!!
というわけで、解決法を模索したわけですね。
2.マテリアルに実装した機能
2.1.マテリアルの機能説明
上述のような問題に対して、以下の主な二つの機能を「UE4上のマテリアルインスタンスで変更可能な形で」実装しました。
- タイリングの間隔をmm単位で指定できるように。
- ピーコン跡の位置をmm単位で指定できるように。
上記の機能に加えて、ピーコン跡の個数を4,6,8のいずれかで、垂直方向or平行方向で並べられるようにしました。
実際のものがこちら。
コンクリートマテリアルの
「ピーコン跡の位置をmm単位で変更できる」
これが一番苦労した機能でした!
(遡ったら動画でお見せしていないことに気づいた、、、。)#まいにちUE4 pic.twitter.com/l32feGiXxO— まこと@まいにちクリエイター (@DIYer27991090) 2019年6月30日
コンクリートのマテリアル、ピーコンを4つ、6つ、8つと、垂直水平をチェックボックスで切り替えられるようになりました。
周りの進度が早くて最近ビビっております。。#まいにちUE4 #UE4study pic.twitter.com/yLCe9Ryzu6— まこと@まいにちクリエイター (@DIYer27991090) 2019年4月8日
2.2.実装方法
実装した方法を簡単に説明したいと思います。
基本的には力業でやったと思っているのですが、
まずは
- ピーコン跡のないコンクリートテクスチャを用意。
この上に目地とピーコンを重ねていくようにしました。
この後は
- 目地のみのテクスチャを準備する。
- テクスチャ一枚当たりの大きさを絶対座標系で張る時に指定する。
このような方法で目地間隔を設定した後、
- ピーコン跡のみのテクスチャを用意する。
- 目地間隔に対しての、目地からの各ピーコン跡までの距離の割合を計算する。
- その割合に応じてピーコンのテクスチャを移動させる。
こうすることで、
コンクリートの拡大縮小をせずに、目地間隔とピーコン跡の位置を独立に変更する
ことができるようになりました。
目地間隔については、2.絶対座標系編で紹介した方法で実装しています。
ピーコンの配置は、こちらの画像で組んだような比較的単純に作りました。
入力の4つは、下図で示す数値をそれぞれ表しています。
混同しやすいのですが、InputTextureSizeは、使用しているコンクリートテクスチャのUE4内での寸法を示しています。
例えば、1800*1800㎜の範囲を2048*2048pixelのテクスチャで作成しておくイメージです。
絶対座標でテクスチャを貼っているため、このような考え方をする必要がありました。
ちなみに。
この機能を実装したあたりで今回のコンクリートの基本的な要素はできていて、全体では以下ツイートのようなノード構成になっていました。
先ほど紹介したのは、この一部に使われているマテリアルファンクションになります。
先日のコンクリートのマテリアル、関数名とかnodeとかきれいにしたった。
ノーマルがきれいに反映されていないとか、ピーコンの影が濃すぎ、薄すぎとかいろいろ微調整も一緒に。#まいにちUE4 pic.twitter.com/3oDRnoNt0Y— まこと@まいにちクリエイター (@DIYer27991090) 2019年5月5日
上下左右でテクスチャ張り替えたりしちゃったもんでこんなことになってしまったんですよね(笑)
今回は以上です。
次回以降は細かい修正の話にると思いますが、どうぞよろしくお願いします。