Created on | Updated on

TOPノードで簡易SendToRizomUVを作成する パート1

HoudiniのTopノードを作成

SideFX LabsにはRizomUVとの連携ノードがいくつか入っています。

例えば、RizomUV Processorを使用すれば、任意の設定を追加してRizomUVでデータを開き、指定した機能を実行し、Houdiniにその結果を反映することができます。

 

SIDEFX LABS | RIZOMUV BRIDGEを使用する

※現在はRizomUV Bridgeではなく、Rizom UV Processorという名前になっています。

 

ただ、今回はHoudiniからRizom UV に簡易SendTo機能を作成しようと思います。
HoudiniからポリゴンモデルをRizom UV に渡し、Rizom UV では好きな機能をつかって存分にUV展開を実行、最後にHoudiniでその結果を確認するということになります。

 

まずは、Rizom UVでデータを開く処理とそのオプションのコマンドを取得します。

Tools>Show Script Log Windowを開きます。

 

 

Script and Log Windowを開いた状態でFBXをロードすると下記のように表示されました。

 

このコマンドを使用して、Rizom UVでFBXを開くことができます。

Houdiniで、まずは入力ジオメトリをFBXで保存するノードを追加します。

次にTopnetノードを作成します。

Topnetの中に入り、ropfetchを作成します。

これで実行時に自動的にFBXを保存し、それをRizom UVで開くことができます。

Rop Fetchでは先ほどのROP FBXノードを指定します。

次にTOP内でPython Scriptノードを作成します。

Python Processorは必ずFBXが生成された後に実行する必要があります。

そこで、Python ProcessorのGenerate WhenをAll Upstream Items are Cookedに設定してください。

 

ここで、起動するためのluaファイルを作成し、それを参照して開きます。

 

rizomPathとexportFileはHDA化した際にUIで入力できるようにしますが、テストとして今は直接してしました。

import hou
import tempfile, os, subprocess, platform

rizomPath = 'C:/Program Files/Rizom Lab/RizomUV 2023.0/rizomuv.exe'
exportFile = 'C:/Users/yoshida/Downloads/rizomUV/out.fbx'

loadString = 'ZomLoad({File={Path="%s", Normals=true, XYZ=true}, NormalizeUVW=true, __Focus=true})' % (exportFile,)

# コマンドライン引数を組み立てる
tpath = tempfile.gettempdir() + os.sep + "riz.lua"
with open(tpath, "w") as f:
f.write(loadString)
cmd = '"%s" -cfi "%s"' % (rizomPath,tpath,)

# RizomUVを起動し、Luaスクリプトを実行
subprocess.run(cmd,shell=False)

Python ProcessorをCookすると、Rizom UVが開き、FBXが自動でロードされます。
今回はHoudiniのUVを引き継がないようにしています。

 

TOPはタスクを監視しているため、Rizom UVが起動している間はPython Processorが実行されている状態(アイコンがくるくるしている)になっています。

Rizom UVでUVを調整し、そのまま上書き保存します。

RizomUVを終了するとHoudiniでのタスクも完了します。

が、HoudiniでFBXが自動でロードされることはないため、上流にあるTOPノードが完了したら、ファイルをリロードするノードを追加します。

Opnotifyというノードを追加します。

ここで、OP PathにRoload するノードを指定する必要があります。

TOPノードの外にでて下記のようにFileノードを接続し、Mergeでつなぎます。

一つのネットワークとして接続する必要はありますが、元ジオメトリとFileで読み込むノードを2つ表示する必要はありません。

そこで、間にNullを追加し

NullのパラメータでCopy Inputをオフにします。

Mergeを表示すると、Fileでロードしたモデルのみ表示されます。

FileノードではROP FBXで出力したファイルをロードしてくるため、Rop FBXのOutput Fileを参照するようにします。

 

再度TOPに戻り

OpnotifyパラメータでFile1をReloadするように設定します。

少しネットワークを整えておきます。

試しに入力ジオメトリを切り替えて

TOPで作成した結果を一度削除します。

その後、再度Cook Nodeを実行し

FBXが保存された後、RizomUVが自動で開き、保存したFBXがロードされます。

UVを展開し(チェックだけなので、Full AutoのUnfoldを実行すればOK)、Ctrl+Sで保存します。

RizomUVを終了し、Houdiniをみるとタスクが完了し、UVが更新されていることがわかります。

パート2では、これをいつでも使えるようにHDAにしたいと思います。

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ