ZBrushで作成したモデルをBlenderでレンダリングする

# 概要
簡易的にZBrushで作成したモデルをBlenderでレンダリングするTipsです。

# 対象
ZBrush内蔵のレンダリング機能はちょっとアレだけど、KeyShotなんて買えないのでBlenderで何とかしたいよと考えている方向けです。

# Zbrush
## モデルをエクスポート
出力したいサブツールのみを表示して、Zプラグイン＞FBXエクスポートインポート
オプションを表示のみに変更し、エクスポートを実行します。
![スクリーンショット 2024-03-29 175612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/2f955fc4-d719-c3d0-34fd-2b40dec0bfac.png)

# Blender
## モデルをインポート
メインメニュー＞ファイル＞インポート＞FBX（.fbx）を実行します。
![スクリーンショット 2024-03-29 175957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/5952c76c-fd0b-18e1-ed85-5a812bece550.png)

[モデルをエクスポート](#モデルをエクスポート)で出力したFBXファイルを選択しインポートします。
インポート設定でScaleを100に設定します。

![スクリーンショット 2024-03-29 180439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/59feb770-b69d-fd4e-73e6-2c5ff0b5c92d.png)

もしくはエクスポート時にZbrushのエクスポートのスケールを100にします。
![スクリーンショット 2024-03-29 181300.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/22ad0d9d-e625-4802-0ffe-4d4ca369b762.png)


※データフォーマットの関係でスケールが異なるためです。

## VertexColorを適用
読み込んだ直後の状態ではZBrushで設定した色がモデルに設定されていません。

ZBrushで設定した色を適用するためにはすべてのメッシュオブジェクトのマテリアルのBaseColorにColorAttributeを割り当てるのですが、サブツールが多いととても面倒です。
![スクリーンショット 2024-03-29 181639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/0980523a-c91f-e441-497e-44358c1639a6.png)
![スクリーンショット 2024-03-29 181654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/d791000d-136c-7ac2-ebc5-7fa47c2317f2.png)

手間を省くためスクリプトで実行します。
```python:vertexcolor.py
import bpy

def attachvertexcolor(obj):
    if obj is None or obj.type != "MESH":
        return
    name = obj.data.name
    mesh = obj.data   
    nodes = mesh.materials[name].node_tree.nodes
    links = mesh.materials[name].node_tree.links

    colorattribute = nodes.new(type='ShaderNodeVertexColor')
    shader=nodes.get('Principled BSDF')
    links.new(colorattribute.outputs['Color'], shader.inputs['Base Color'])

def main():
    if len(bpy.data.collections) > 0:
        print('COLLECTIONS')
        for col in bpy.data.collections:
            if len(col.objects) > 0:
                for obj in col.objects:
                    attachvertexcolor(obj)
    else:
        print('NO_COLLECTIONS')

if __name__ == "__main__":
    main()
```

メインメニュー＞スクリプトを選択し、スクリプトビューを表示します。
上記スクリプトを張り付けて実行します。

![スクリーンショット 2024-03-29 182239.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/f3bd1064-ec45-7b6c-b554-721ffdee2cc9.png)
![スクリーンショット 2024-03-29 182325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/0dba004a-2842-a2e9-f90e-4b139d7817b3.png)
![スクリーンショット 2024-03-29 182349.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/ce1671d6-5775-d78f-b7de-ade85a6ae876.png)

![スクリーンショット 2024-03-29 182438.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/84385197-0f35-1dd8-bb65-bd1e264f3dee.png)

シェーディングモードにするとモデルに色がついています。

![スクリーンショット 2024-03-29 182727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/29015f8a-1f50-0edf-d030-49bfb4142840.png)

## ライティング
お好みでライティングを設定します。

## レンダリング
RenderEngineはデフォルトではEeveeになっていますが、
Eeveeはリアルタイムレンダで処理は高速ですが、Cyclesにするとより繊細なレンダリングが可能です。


![スクリーンショット 2024-03-29 183106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/4acdf74e-5d06-db36-ce85-07762adb03aa.png)

GPUを搭載している場合、DeviceをGPUにするとよいでしょう。
![スクリーンショット 2024-03-29 183408.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/327bd49a-2612-c282-0358-671c02e368a7.png)

お好みのレンダリング設定をし、レンダリングして下さい。
![スクリーンショット 2024-03-29 183125.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953463/b08c17d1-caad-a27c-ef45-d6d7d19af476.png)