[MaterialX] OpenPBR : MaterialX Graph Editorでのimage_color3、tiledimage_color3の色空間

  • by

確認環境 : MaterialX 1.39.1

MaterialX Graph Editorでimage_color3、tiledimage_color3の色空間(Colorspace)のUIパラメータがないことに気づきました。
MaterialX Graph Editorでは以下のようにノードを指定しました。

右上がオリジナルのテクスチャです(色空間はsRGB)。
左上のプレビューでは色が少し白寄りになっています。これは、テクスチャ画像をsRGBのままOpenPBRのbase_colorに渡しているのが原因と思われます。
USDやMaterialXのマテリアルでは、「色」はすべてリニアに統一する必要があります。

色空間については「[Omniverse] マテリアルの割り当て その8 (MDLでテクスチャを使用)」の「リニアワークフローとは?」をご参照くださいませ。

対処方法

いったんmtlx形式でファイル出力し、mtlxファイルをVS Codeなどで追加修正するのが早そうです。
"OpenPBR_tex_colorspace.mtlx"というファイル名で保存しました。
これをVS Codeで開きます。 

以下の内容になりました。

<?xml version="1.0"?>
<materialx version="1.39" colorspace="lin_rec709">
  <surfacematerial name="surfacematerial" type="material" xpos="8.550725" ypos="-0.232759">
    <input name="surfaceshader" type="surfaceshader" nodename="open_pbr_surface_surfaceshader" />
  </surfacematerial>
  <open_pbr_surface name="open_pbr_surface_surfaceshader" type="surfaceshader" xpos="6.594203" ypos="-1.508621">
    <input name="base_color" type="color3" nodename="tiledimage_color3" />
  </open_pbr_surface>
  <tiledimage name="tiledimage_color3" type="color3" xpos="4.913043" ypos="-1.172414">
    <input name="file" type="filename" value="..\wood_BaseColor.png" fileprefix="" />
  </tiledimage>
</materialx>

マテリアルの最終出力でcolorspaceは"lin_rec709"となっています。

<materialx version="1.39" colorspace="lin_rec709">

これはリニア(Linear)の明示となります。

"tiledimage"タグでは、inputタグでファイル名を指定しています。
しかし、ここにcolorspaceの指定はありません。

MaterialXサンプルのmtlxファイル(chess_set)を見ます。
これはOpenPBRではなくStandardSurfaceですが、テクスチャ指定部はOpenPBRでも同じ仕様を使います。

https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/resources/Materials/Examples/StandardSurface/standard_surface_chess_set.mtlx

<image name="diffuse2" type="color3">
    <input name="file" type="filename" value="chess_set/bishop_black_base_color.jpg" colorspace="srgb_texture" />
</image>

「色」についてはcolorspace="srgb_texture"をつけるのがよさそうです。

VS Codeで以下のように置き換えました。

<tiledimage name="tiledimage_color3" type="color3" xpos="4.913043" ypos="-1.172414">
    <input name="file" type="filename" value="..\wood_BaseColor.png" fileprefix="" colorspace="srgb_texture" />
</tiledimage>

これをMaterialX Graph Editorで再読み込みします。

これで正しい色合いになりました。

なお、テクスチャイメージでこのsRGBの色空間を指定する必要があるのは「色」(color3)のみです。
これはbase_colorやemission_color(発光)などの色を表す要素のみが対象になります。

Metallic Map, Roughness Map, Normal Mapなどではfloatやvector3を出力するため未指定でOKです(色ではない)。
これらはそのままリニアで扱われます。