ウーパの手習い

私的開発メモ用途なのでご容赦ください。2020年現在はSwiftとUnityでARのお勉強中。

SketchUpとUnityのマテリアルのタイリングサイズを揃える

f:id:uuupacom:20180301154929p:plain

SketchUp上でマテリアルを設定したファイルを、sketchup2015形式で保存し、Unity上にインポートして利用する場合のお話です。

SketchUpのマテリアルはやや表現力に乏しいので、Unityにインポートした後に、Unity上で違うマテリアルを割り当てたいことがあります。

Unity上のマテリアル(私の場合SubstanceDesignerで作成したマテリアル)をSketchUpオブジェクトに割り当てると、テクスチャの柄が消えて、単色で表示されているように見えます。これは実際には、テクスチャサイズが極端に引き延ばされた状態になってしまっているのが原因で、試しにテクスチャのタイルサイズを1から0.01ぐらいの小さな値にしてやると、期待通りのテクスチャの柄が表示されます。

f:id:uuupacom:20180301160951p:plain

f:id:uuupacom:20180301164521p:plain

Tilingの値を変更できる箇所が2箇所ありますね。どちらを変更しても同じ結果になりますし、どちらか片方を調整すればいいのですが、どちらを変更するのが主流派なのかは私知りません。



ですが、この調整する数値に一貫性が見当たらないので、意図するテクスチャサイズにするのが難しいことと、とりわけ、SketchUpオブジェクト以外のUnity上で作った(例えばCube)オブジェクト等と、同じマテリアルを共有しようとすると、上図のTiling値を片方に合わせるともう片方の表示がおかしくなってしまい面倒です。

この症状の根本的な原因はSketchUp側にあります。SketchUpには多くのマテリアル用テクスチャが用意されていますが、そのテクスチャのタイリング基準サイズがそれぞれ異なるためです。

f:id:uuupacom:20180301161800p:plain

例えば上のテクスチャは横20.3cm、縦18.4cmごとにタイリングされるようなマテリアルですので、このマテリアルを使っているオブジェクトをUnityにインポートしてマテリアルを入れ替えるとおかしくなるわけです。

解決法としては、SketchUp上のこの値を縦横とも1m(=100cm)に変更してやれば、Unity上のオブジェクトとのマテリアルサイズが同じになるようです。この時、SketchUpマテリアルは単色塗りではなく、必ずテクスチャイメージを使用するようにしましょう。※単色塗りのマテリアルのタイルサイズは制御できないと思います。
私の場合、下図のように、適当なテクスチャイメージを持つマテリアルをタイルサイズ1mで設定して、Unityでマテリアルを貼りかえるようにしています。

f:id:uuupacom:20180301163011p:plain

そうすることでUnity上の別オブジェクトとのマテリアルサイズを同じサイズ感にすることができました。

f:id:uuupacom:20180301154929p:plain

トップ画像は、床はSketchUpファイルを読み込んだオブジェクトで、立方体はUnityのCubeオブジェクトです。マテリアルのサイズ感を一致できています。

追記:以下のことに気づいたので、本記事としては、Unity上で貼りなおしたいテクスチャサイズを事前に把握しておき、そのサイズをSketchUpのマテリアルに設定しましょう、ということになります。さらに言えば、SketchUpの時点で、Unityで使うテクスチャ画像を貼り付け、サイズを数値で調整しておけば、そもそもこんな苦労しないですね。

f:id:uuupacom:20180301164915p:plain

Cubeを複製して、サイズ変更してみるとテクスチャサイズも変わってしまいました。そういう仕様なのですね。そう考えると本記事はそれほど役に立たないかもしれません。失礼いたしました。