Maya 2026のGenerative Texture APIについて

## 環境

* Windows
* Autodesk Maya 2026

## Generative Texture API

Maya 2026からLookDevXに生成AIのサービスをインテグレートしやすくするための仕組みとしてGenerative Texture APIが提供されました。
注意点は、このAPI自体は生成AIではなく、あくまで統合用のAPIという点です。

## 導入手順

Windowsでは下記のファイルに概要や利用方法についての記載があります。

```C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\python\generative\README.md```

そちらを参考に導入手順について記載します。


### 関連ライブラリのダウンロード

Qtの設定でQtのバイナリディレクトリが必要になるため、[Autodeskのウェブサイト](https://aps.autodesk.com/developer/overview/maya) から [Maya 2026 の DevKit](https://autodesk-adn-transfer.s3.us-west-2.amazonaws.com/ADN+Extranet/M%26E/Maya/devkit+2026/Autodesk_Maya_2026_DEVKIT_Windows.zip) を入手します。
zipを解凍すると ```Autodesk_Maya_2026_DEVKIT_Windows\devkitBase``` 内にQt.zip があるので、解凍して任意の場所に配置します。

### examplesディレクトリのコピー

プラグイン例を編集して試せるように、以下のパスのディレクトリをコピーして任意の場所に配置します。

```
C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\examples
```

### 環境変数の設定

```PYTHONPATH``` と ```PY_GENERATIVE_TEXTURES_PLUGINS_PATH``` を設定します。

```PYTHONPATH``` には ```C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\python\generative``` を追加、```PY_GENERATIVE_TEXTURES_PLUGINS_PATH``` には ```examplesディレクトリのフルパス``` をセットします。

```:環境変数の設定例
set PYTHONPATH=C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\python\generative
set PY_GENERATIVE_TEXTURES_PLUGINS_PATH=<配置先のパス>\examples\python\reference_plugins\plugins
```

### QtとLookdevXの設定

```C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\python\generative\config.py```の ```QT_SHARED_LIB_DIR``` と ```LOOKDEVX_GENERATIVE_TEXTURES_API_DIR``` の値を適切なパスに書き換えます。

:::note warn
元のファイルが復元できるよう、書き換え前に必ずコピーしてバックアップを取ってください。
:::

```QT_SHARED_LIB_DIR``` はQtのバイナリディレクトリ (Qt/bin) を指定、```LOOKDEVX_GENERATIVE_TEXTURES_API_DIR``` は ```C:/Program Files/Autodesk/LookdevX/Maya/2026/1.7.0/plug-ins/lookdevx/bin``` を指定します。

```python:設定例
QT_SHARED_LIB_DIR = "<配置先のパス>/Qt/bin"
LOOKDEVX_GENERATIVE_TEXTURES_API_DIR = "C:/Program Files/Autodesk/LookdevX/Maya/2026/1.7.0/plug-ins/lookdevx/bin"
```

### 設定状況の確認

Maya2026を起動してLookdevXのプラグインをロードし、ScriptEditorで DLLディレクトリの追加状況と ```LocalPlugin```、```ServicePlugin``` のロード状況を確認してください。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/ec548310-07ae-4578-af9d-49fc257bdf93.jpeg">

## Example Pluginsの試し方

LookDevXのUI版のLocal PluginとService Pluginの試し方について記載します。
(その他の例も同梱されておりますが、説明は割愛します)

### Local Plugin

Local Pluginはプラグインのみでテクスチャ生成可能なシンプルな例です。

LookdevX Graph Editorから利用可能で、ノードとして使用できます。
```Experimental > GenTex Local Plugin``` からマテリアル内でノードを作成し、generateボタンを押すと画像が生成されます。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/2b6e10ef-961b-41d5-90cb-2b03c8a4de7d.jpeg">


ただし、こちらのサンプルプラグインは、プロンプトから画像を生成しておらず```examples\python\reference_plugins\plugins\samples``` 内のファイルをランダムで表示するだけの処理となっています。

### Service Plugin

Service Pluginは外部サービスを利用してテクスチャを生成するサンプルです。

サンプルプラグインの確認用に FastAPIを用いた外部サービスの例が ```examples\service``` に同梱されているので、事前に導入します。

下記以下の導入例のコードについては、Pythonは ```Maya2026のmayapy``` を使用、Pythonの関連ライブラリは ```examples\service\python``` にインストールするものとして記載していますので、その点ご注意ください。

#### 外部サービスのサンプルの導入と起動方法

```examples\service\requirements.txt``` を利用して必要なPythonライブラリを導入します。

```bat:ライブラリのインストール例
cd /d <配置先のパス>\examples\service
"C:\Program Files\Autodesk\Maya2026\bin\mayapy.exe" -m pip install -r requirements.txt -t python
```

ライブラリを導入したら、FastAPIサーバを起動します。

```bat:FastAPIサーバの起動例
cd /d <配置先のパス>\examples\service
set PYTHONPATH=%CD%\python
python\bin\uvicorn.exe main:app
```

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/070cb1ec-c9ed-499d-9686-8b56a92d7462.jpeg">


```http://127.0.0.1:8000/docs``` にアクセスできれば成功です。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/b8676b15-47d5-4654-a469-9f991f601846.jpeg">


#### Service Pluginの使用方法

こちらの例もLocal Pluginと同様LookdevX Graph Editorを使用して ```Experimental > GenTex Service Plugin``` からノードを作成し、generateボタンを押すと画像が生成されます。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/181dc294-d965-46d4-ae95-d8770461cb35.jpeg">

こちらのプラグイン例も、プロンプトから画像を生成しておらず、ランダムな単色画像上にオプション情報を表示するだけのものとなっています。

## Service Pluginの画像生成処理を生成AIに置き換える簡単な例

プラグイン例の導入だけでは味気ないので、Service Pluginの生成処理を生成AIに置き換えるシンプルな例を記載します。なお、置き換え例では、試しやすさを重視しており、実践的な実装例を示したものではない点にご注意ください。

置き換え例では、StableDiffusionを使用するため、[Diffusers](https://huggingface.co/docs/diffusers/index) を導入します。インストール方法の詳細は [Installation](https://huggingface.co/docs/diffusers/installation) から確認できます。

環境に合わせて関連ライブラリをインストールします。

```bat:Diffusers (CPU) のインストール例
cd /d <配置先のパス>\examples\service
"C:\Program Files\Autodesk\Maya2026\bin\mayapy.exe" -m pip install torch torchvision torchaudio -t python
"C:\Program Files\Autodesk\Maya2026\bin\mayapy.exe" -m pip install diffusers transformers accelerate -t python
```

```bat:Diffusers (CUDA利用可能環境) のインストール例
cd /d <配置先のパス>\examples\service
"C:\Program Files\Autodesk\Maya2026\bin\mayapy.exe" -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -t python
"C:\Program Files\Autodesk\Maya2026\bin\mayapy.exe" -m pip install diffusers transformers accelerate -t python
```

Service Plugin では、```examples\service\main.py``` の ```generate_random_image``` 関数が画像生成を行っています。生成処理を簡単に置き換えて試すために、この関数を直接調整します。

下記にStable Diffusion 1.5のモデルを利用してプロンプトから画像生成するコード例を記載します。

```python
from diffusers import StableDiffusionPipeline


def generate_random_image(request: GenerateRequest) -> Image.Image:
    model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    dtype = torch.float16 if torch.cuda.is_available() else torch.float32
    pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=dtype)
    pipe.to(device)

    # わかりやすさを重視してプロンプト以外のオプションは割愛しています
    output = pipe(prompt=request.prompt)
    return output.images[0]
```

元の ```generate_random_image``` 関数は、引数はありませんが、調整して ```request: GenerateRequest``` を引数として受け取れるようにしたため、呼び出し元である ```generate_image``` 関数も調整する必要があります。
```image = generate_random_image()``` の箇所を ```image = generate_random_image(request)``` と書き換えてください。

```python
def generate_image(request: GenerateRequest) -> str:
    # image = generate_random_image()
    image = generate_random_image(request)
    ...
```

書き換え後、FastAPIサーバを起動し、```GenTex Service Plugin``` ノードのgenerateボタンを押すとStableDiffusionで画像が生成されるようになります。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/8ad7fae0-5dbe-4218-8525-3f5cd2d9e56c.jpeg">

<br />

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3965005/26508b08-5d91-4daa-9c50-f25eed24ba9a.jpeg">


繰り返しとなりますが、上記の置き換え例は、試しやすさを重視しており、実践的な実装例を示したものではない点にご注意ください。詳しくは ```C:\Program Files\Autodesk\LookdevX\Maya\2026\1.7.0\plug-ins\lookdevx\python\generative\README.md``` の ```Creating Your Own Plugin``` の項目に説明がありますので、そちらをご覧ください。


## 参考
* [Maya 2026 Generative Texture API](https://help.autodesk.com/view/MAYAUL/2026/JPN/?guid=895D0D38-9166-4C0B-8310-8A7163C200D9)
* [PyTorch](https://pytorch.org/)
* [Diffusers](https://huggingface.co/docs/diffusers/index)