Search Unity

Unity ArtEngineでシームレステクスチャを作ろう

  • ArtEngine
  • アーティスト向け

<このページで学べる内容>

AIを活用しシームレステクスチャを気軽に作成できる「Unity ArtEngine」の概要を理解し、スマートフォンやデジタルカメラなどで撮影した写真を元にステップバイステップでシームレステクスチャ(継ぎ目が無い画像)を作成します。  

今回使用している環境を以下に示します。

  • Unity 2020.3.16f1
  • Unity ArtEngine 2021.9.1
  • iPhone 12 Pro(写真撮影用なので機種やOSは問わない)

Unity ArtEngineとは?

沢山の写真を元に3Dモデルやテクスチャを作成するフォトグラメトリィと呼ばれるサンプルベースのモデリング技法があります。Unity ArtEngineはサンプルベースのワークフローにAI技術を取り入れたツールになっています。Unity ArtEngineにおいて、ツールの利用者は細かく指示を出すのではなく、自分がやりたいことを指示するだけでAIがある程度予想して作業してくれる点が他のツールに無い大きな特徴となっています。

Unity ArtEngineに関する詳細な説明やや無料トライアルはこちらからご覧ください。

<期間限定キャンペーン実施中>只今ArtEngineをお試しいただくと、5,000円分のQuoカードをプレゼント!詳細はこちら

Unity ArtEngineでできること

Unity ArtEngineにできることを以下に示します。

補正

  • 高解像度化
  • JPEG圧縮の削除

拡大

  • 継ぎ目削除(シームレステクスチャの作成)
  • 転換

変形

  • カラートランスファー
  • パターンのゆがみ除去
  • PBRマテリアル作成
  • コンテンツアウェアフィル(不要な部分の除去)

これらの概要についてはこちらのページをご覧ください。

https://unity.com/ja/products/unity-artengine

またこちら動画を見るともっと詳しい説明があります。

この記事ではUnity ArtEngineが提供するいくつかの機能を使って、1枚の写真を元にシームレステクスチャを作るまでの手順についてご紹介します。

Unity ArtEngineの利用準備

Unity ArtEngineはWindows10および一般的にVR Readyと呼ばれているNVIDIA社製のGPUが必要です。また大きなテクスチャを扱うには沢山のビデオRAMを搭載したGPUが必要です。現時点ではmacOSでは動作いたしません。

詳しくはドキュメントをご参照ください。

https://unity3d.atlassian.net/wiki/spaces/AR/pages/454426739/System+requirements+and+compatibility

Unity ArtEngineはUnity Storeにて購入します。

https://unity.com/ja/products/unity-artengine

購入後はUnity Technologies <accounts@unity3d.com> から「ArtEngineをご契約くださりありがとうございます」という件名のメールが届きます。基本的にはこのメールの内容に従って、ArtEngineのシートとUnity IDのユーザーに割り当てと、ArtEngineインストーラーのダウンロードと、アクティブ化を行ってください。

無事にアクティブ化が成功すると図のような画面が表示されます。

作例:スマートフォンで撮影した写真からシームレステクスチャを作成

Unity ArtEngineの利用例としては最もシンプルな利用シーンの一つであるシームレステクスチャ(つなぎ目のない画像)の作成方法をご紹介します。

素材の準備

スマートフォンを片手に屋外で地面や壁などを撮影します。できるだけ明るい時間帯が良いのですが、夏は熱中症の危険もありますので無理をしない範囲で撮影してください。また人の家の壁を撮影する時は、トラブルを避けるためにもその家の所有者または利用者に許可を取ることも忘れないでください。

公式のドキュメントでは3DF Zephyr などのフォトグラメトリィツールを使ってAlbedoや Normal mapファイルなど事前に準備しているようですが、ここではできるだけ単純化するために1枚の写真から始めていきます。

ここで使用する素材はこちらです。

写真を見てもらうと分かりますが、地面の撮影をしていますが自分の足が移りこんでいます。また一見すると単純なパターンに見えそうな地面ですが、あちらこちらに傷やシミなどがありますし、左上から右下に向かって電柱の影のような物も映り込んでいます。素材としてはこれぐらいのクオリティでも十分ですので、気軽に撮影してください。

写真をPCに転送

撮影した写真を何らかの方法でPCに転送します。筆者はGoogle Driveを使用しました。他にもiCloudやメールによる転送、iTunesによる写真の同期など様々な方法があります。皆さんが利用しやすい方法でPCに転送してください。

Unity ArtEngineに素材を取り込む

Unity ArtEngineを起動します。起動したら撮影した写真をExplorerから左上の「Library」の「Assets」ウィンドウにドラッグアンドドロップします。

写真から繰り返しパターンを自動検出

Assetsにある写真をNode Graphウィンドウにドラッグ&ドロップします。

次にNode Graphウィンドウにある写真を選択した状態にしてSpaceキーを押します。するとNodesウィンドウが表示されます。このまま検索欄に検索文字列を入力してノードを追加すると、先に選択したノード(この例の場合は写真)と自動的に繋げてくれます。便利な機能なのでしっかり覚えてください。

ここではパターンを自動検出し、さらに余計な部分を削除してくれる「Mutation(Structure)」ノードを使用します。似たような名前の物がいくつかありますが間違えないようにしてください。

参考:Mutation(Structure)ノードで最良の結果を得るためには歪みの無い画像が良いとされています。今回はできるだけ地面に対して水平に撮影しましたが、もし歪みが大きい画像の場合はMutation(Structure)ノードを使う前に「Pattern Unwrap」ノード歪みや傾きを補正すると良いでしょう。

次にMutation(Structure)ノードを選択状態にして、Properties ウィンドウに注目してください。

下の方にある「Pattern Map」をチェックしてください。するとPattern Mapの機能の選択ができる様になります。ここでは「Neural match」をチェックします。Neural matchをチェックすると、Unity ArtEngineは内部でVGGニューラルネットワークに接続してより良いパターンの検索をしようと試みます。しかし、そのためには大量のVRAMを使用するため使用しているGPUによってはVRAM部族になるかも知れません。その場合はチェックを外してください。GRUのVRAMの使用状況は右上のバーで表示されています。

参考:VGGニューラルネットワークとはVGGNetとも記述され、深層学習による画像認識におけるCNN(Convolutional Neural Network: 畳み込み)モデルの一つです。ここではこれ以上触れませんが、興味がある方は下記URLの学術論文を参照の上調べてみてください。

https://arxiv.org/pdf/1409.1556.pdf

Neural matchをチェックしたら「Patch Detection」ボタンをクリックしてください。しばらくすると、Unity ArtEngineは繰り返しパターンを検出します。

では繰り返しパターンになっているか確認しましょう。Mutation(Structure)ノードを選択し、右クリックをしてコンテキストメニューを表示します。その中から「View in 2D Viewport」を選択します。すると2D Viewportウィンドウに繰り返しパターンとなった画像が表示されます。

ですが、まだよくわかりませんよね?そこで、2D viewportウィンドウの右上にある3x3の■が並んだアイコンをクリックしてみましょう。

すると2D Viewportにテクスチャが敷き詰められて表示されます。マウスのホイール操作で拡大縮小できるのと、マウスカーソルを移動させることで元のテクスチャと繰り返しパターンの境目が分かると思います。

画像を均一の色合いにする

繰り返しパターンはできましたが、元画像において少しだけですが暗い部分や明るい部分があり不均一な状態になっています。1枚だけなら良いのですが、繰り返しパターンとなった時に不自然な感じになります。

このような時は「Gradient Removal」ノードを使用します。Mutation(Structure)ノードを選択し、Spaceキーを押して「Gradient Removal」ノードを検索して繋げてください。

次にGradient Removalノードを選択して、右クリックメニューの「View in 2D Viewport」を選択します。これで均一の色合いになったと思います。Gradient RemovalノードのPropertiesにはLevel指定がありますので色々と試してみてください。

汚れている部分を消す

次に画像の中で汚れている部分を消して周りに馴染ませます。準備としてGradient RemovalノードにSeam RemovalノードとMask Paintノードを追加し以下の様の接続してください。Seam Removalノードは入力するテクスチャをシームレステクスチャにします。ですが今回は既にMutation(Structure)ノードにてシームレス画像を作成しているので、ここではMask Paintノードを使うために追加しました。

Mask Paintノードは画像の中から不要な部分を削除することができるノードです。まずはMask Paintノードを選択し、右クリックメニューから「View in 2D viewport」を選択して2D Viewportに画像を表示します。

ここから試行錯誤になりますが、気になるところをペイントして塗りつぶしていきます。ペンと消しゴムはメニューバーの下のツールバーにあります。

ペンの太さや向きなどの調整はTool Optionsウィンドウで行います。ペイント専用ツールと比較すると機能は不足していますが、ここで指定するのは「だいたいこの辺を消しておいて」とアバウトな指定で十分ですので問題ありません。

例として以下のように塗ってみました。

マスクしたイメージ図

消したい部分に対してざっくりと白色で塗ります。Unity ArtEngineはAIを活用しているおかげで、細かく指定しなくても済むので使い勝手が良いです。以下にマスク前後の画像を載せます。きれいにシミが消えていますね。

テクスチャファイルの出力

最後に作成したシームレス画像を出力します。出力は画像ファイルだけ出力する方法と、Unityのマテリアル形式にして出力する方法があります。ここでは単なる画像ファイルとして出力します。

Seam Removalノードに出力用のノードである「Output」ノードを繋げましょう。

Outputノードを選択して、Properties ウィンドウを見てください。この中のOutput Pathに出力先のフォルダパスを指定します。ファイル名についてはデフォルトの命名規則に従って出力します。設定が終わりましたら「Export」ボタンを押します。

そして出来上がったファイルがこちらです。

「Export to Unity」ノードを使用するとUnityで利用できる形式のファイルが生成されます。この場合、Unityプロジェクトにおいてアセットストアにある「ArtEngine Importer」を予めインポートしておく必要があります。興味がある方は試してみてください。

https://assetstore.unity.com/packages/tools/artengine-importer-169870?locale=ja_JP

現在判明している Unity ArtEngine 2021.9.10における不具合(編集者注釈)

今回説明している手順で制作したプロジェクトを保存して Unityエディタを終了またはプロジェクトを閉じた後に、再度プロジェクトを開き直して全ノードを実行すると、 Unity ArtEngineが強制終了する場合があります。

これはUnity ArtEngineの既知の不具合であり、現在修正中です。

サンプル画像について

今回の説明で使用した画像ファイルをGoogle Driveに格納しています。何かの参考になればご利用ください(ライセンスはCC0とします)。

https://drive.google.com/drive/folders/1pAN0E2YfiTaEgPJw5qpggjoSr6c1e0Bj?usp=sharing

おわりに

Unity ArtEngineはまだリリースされて間もないツールです。そして進化速度も非常に早く次々と魅力的な機能が増え続けています。AIを活用している点も注目ポイントだと思います。CLI(Command Line Interface)もあるため、たくさんの画像をまとめて加工すると言う使い方もできます。また今回ご紹介した機能はUnity ArtEngineが持つ機能のごく一部です。まだまだ沢山の機能がありますので、機会があればご紹介したいと思います。

この記事はいかがでしたか?