2020-09-17

dds read write

2021-03-27: 18.5.527より、IMG_DDS は Windows 版 Houdini 本体に標準で含まれるようになりました。
ここでは 8/16/32 ビットDDS 読み書きに対応した .dll (IMG_DLL) について説明する。なお、これは DirectX のライブラリを用いて書かれているので、Windows 以外では動作しない。


H18.5.527 からの対応 (2021-03-27)


18.5.527 以降の Windows 版の Houdini では、 IMG_DDS は Houdini 本体に標準で含まれるようになり、追加ファイル操作や環境変数の指定をすることなく、.dds の入出力が標準できるようになった。

これにより、テクスチャの読み込みや COP での画像ファイルの読み込みであらゆる種類の DDS が扱えるようになった。出力は、

  • RMB からの Save Image... (.dds を選択、オプション(一番上の画像)でフォーマットを選択)
  • ROP ノードからの出力 (詳細は下記参照)
の両方が行える。

    なんらかの理由で IMG_DLL ではなく OpenImageIO (OIIO) 経由の DDS ファイル入力を行いたい場合は、

    HOUDINI_OIIO_DDS = 1
    とする。Windows ではこの環境変数がデフォルトで 0 になっていて、その他の OS では 1 になっている。Linux および Mac でこの変数を 0 にすると、DDS が読めなくなるだけ。

H18.5.527 以前での対応

Houdini 18.5.527 以前では IMG_DSS.dll は、 $HFS/houdini/dso/ 内に存在し、このままでは機能しない。よって、使い方の一つとして、

  1. $HFS/houdini/dso/IMG_DDS.DLL を自分の ~/houdini18.5/dso/fb にコピー。
  2. 下にある zip ファイルの中の FBfromats を ~/houdini18.5 にコピー。
  3. houdini.env
    HOUDINI_OIIO_DDS = 0
    および出力フォーマット指定として
    HOUDINI_DDS_DEFAULT_FORMAT = DXGI_FORMAT_R16G16B16A16_FLOAT
    などと追加する。
つまりディレクトリ構造は以下のようになる。
houdini18.5/
   - FBformats 
   + dso/
       + fb/
          - IMG_DDS.dll
   - houdini.env
勿論、これは $HSITE 以下に配置しても良い。


Houdini 18 での対応


使用したビルド: スクリプト及びシーンファイルへのリンクは一番下にあり。なお、現状バイナリダウンロードは Windows のみの対応。

1. 3つの DSS 読み込み機能

Houdini 18 以降、Houdini 内には3種類の DDS 読み込み機能があることになる。

  1. SideFX Lab DDS File
      約1年前に Python で書かれたツール。8ビットのDDS の読み込みにのみ対応していて、書き出しは不可。詳細はこちら
  2. OIIO DDS
      OIIO (Open Image IO) を元に書かれ、18.0.533 で追加された機能。これも8ビットのみの対応だが SideFX Lab DDS File よりは速く、また全 OS の Houdini で対応。
  3. IMG DDS
      DirectX のライブラリと Houdini SDK 経由で書かれたプラグイン (DLL)。SideFX Labs DDS File と異なり、Houdini での画像ファイルの読み書きする場所すべてで使える。後述するように 8ビット、16ビット、32ビットの読み書きが可能。しかも下記リンクでソースコードも公開。これをフルに活用するには上記の OIIO DDS をアンロード/無効にする必要がある。それが環境変数で行えるようになったのが 18.0.583 から。Windows のみ。

2. IMG DDS のインストール

  1. 下記のリンクから h18_IMG_DDS_readwrite_win_v2.zip をダウンロード。
  2. 解凍すると以下のようなディレクトリ構造になっている。
    houdini18.0/
       - FBformats 
       + dso/
           + fb/
              - IMG_DDS.dll
    これを マイドキュメントまたは HSITE 以下に、階層構造と FBFormats 含め houdini18.0/ に移す。この状態で Houdini 起動すれば、この DLL がロードされる。

3. 衝突の回避

  1. Houdini を起動し、COPs ネットワークに行き、File ノードを作成、その上で RMB-> Save Image... を実行。すると、ファイルフォーマットのリストに DDS がふたつあるのがわかる。
  2. DDS (Labs) を選択すると
    • ファイル名の拡張子の前にピリオドが二つ付く
    • Format 以下のオプションが表示されない。
  3. そこで環境変数 HOUDINI_OIIO_DDS を 0 に設定し、OIIO DDS がロードされないようにする。
      システムの環境変数設定でも houdini.env でもどちらでも設定可能。その後、同じ操作をすれば DDS (Labs) のみが表示されるようになる。
  4. DDS (Labs) を選択した時に DDS のオプションが表示される。

    この出力時のフォーマット選択機能は OIIO DDS には無いが、DDS (Labs) を使うことで、各種フォーマットで書きだすことが可能。

4. .dds の読み込み

.dds を File COP ノードなどで読み込んだ際に色味がおかしい場合は、十中八九、File ノードにある Linearize Non-Linear Image トグルをオフにするとなおる(はず)。

5. ROP からの出力

ROP Output ドライバでは、保存フォーマットを .dds とファイル名への拡張子で指定した場合に書き出すビット形式を指定することができない。この出力ビット形式を指定したい場合は、HOUDINI_DDS_DEFAULT_FORMAT 環境変数で行う (10/5: HOU_DDS_DEFAULT_FORMAT より変更)。 この場合、 有効な引数は以下のいずれか。

DXGI_FORMAT_BC1_UNORM
DXGI_FORMAT_BC2_UNORM
DXGI_FORMAT_BC3_UNORM
DXGI_FORMAT_BC4_UNORM
DXGI_FORMAT_BC5_UNORM
DXGI_FORMAT_R8G8B8A8_UNORM
DXGI_FORMAT_R16G16B16A16_FLOAT
DXGI_FORMAT_R32G32B32A32_FLOAT 

例えば、
HOUDINI_DDS_DEFAULT_FORMAT = DXGI_FORMAT_R16G16B16A16_FLOAT
など。

ダウンロード


最終更新: 2021-03-28

0 件のコメント:

コメントを投稿