必要に応じて画像を変えて確認してみてください。速度と引き換えに自由度はほぼありません。projection方向はX・Y・Zに限定されています。なんだ、平面のGridぐらいにしか使えないのか・・・。思われるかもしれませんが、このノードはちょっとした特徴があります。先ほどのQuickShadeのノード内をもう一度見てください。そこには何故かswitchノードがあります。入力にUVのAttributeが存在しない場合は、平面にUVを貼るけれども、UVを持っている(has***attrib)場合はそのまま利用すると書いてあります。よってこれから紹介するUV展開を行ったあとにQuickShadeを繋げることで簡単にuvgrid_grey.picマテリアルを適用したモデルを確認することができます。Shadeは、平面しか使えませんでした。3Dソフトは普通は立体物を扱います。Unwrapを利用します。簡単なUVであれば自動でUVを合理的に平坦化、重複なしのグループに分離してくれます。ここで重要なのはPlanesです。今回はBoxを展開させようとしたので、Planesを6としています。6方向からPlane状にProjectionして、いい感じにUVをカットしてくれます。Planes=アイランド数ではありません。形状に応じて切り分けを行ってくれます。LayoutはカットしたUVをUV座標上にどのように展開したいかSpacingは各アイランド間のマージンです。RotateはPlanesをあてがう軸を指定します。Unwrapでは、立方体のような単純なジオメトリならきれいに出力されます。球状のものを展開しようとした場合は、別のノードでUV展開をした方がよさそうです。Textureノードです。平面はもちろん、球状や筒状のものをUV展開しようとした場合は、このノードを利用します。指定した軸方向に直接投影します。指定した軸方向で球状に閉じます。指定した軸方向で円柱状に閉じます。メッシュで構築されたジオメトリ用。U座標は、Row(横の列)の方向に、V座標はColumn(縦の列)の方向に沿います。各フェースにテクスチャのコピーを各フェース法線方向にマッピングして、テクスチャを適切な向きにします。マップは各ポリゴンにフィットするようにスケールされず、さらに各ポリゴンの形状で歪みません。ソースにテクスチャUV座標があれば、そのUV座標が保持されますが、スケールとオフセットがされません。Transformも参照してください。ポリゴンカーブとNURBS/Bezierのカーブ/サーフェスのみ。各カーブ/サーフェスの基底をUV方向で均一にサンプリングして、その値をテクスチャ座標としてサーフェスのポイント/頂点に割り当てます。ポリゴンカーブとNURBS/Bezierのカーブ/サーフェスのみ。各制御頂点の座標、GrevilleポイントをテクスチャUVとして使用します。ポリゴンカーブとNURBS/Bezierのカーブ/サーフェスのみ。各カーブ/サーフェスの基底をサーフェスの円弧長に基づいてサンプリングし、その値をテクスチャ座標としてサーフェスのポイント/頂点に割り当てます。オブジェクトのワールド空間とカメラの投影空間が正確に一致するようにテクスチャ座標を割り当てます。Typeを選択するだけでした。歪んだ形状に展開したい場合は、状況に応じて選択した形状を回転させたくなることがあります。Projectをお勧めします。Projectでは何種類かのProjection手法が準備されているので、形状に応じて最適な手法を選択します。Flattenは、このノードだけで正しく展開することはできません。下準備をした後、後処理が必要となります。Flattenは名前の通り、UVを展開させます。展開するためにはエッジに切れ目を入れなければなりません。UVをカットする手法は2種類存在します。エッジを直接指定するか、エッジグループで指定するかです。するとBoxが展開されました。Editを使用します。これはプロシージャルが破綻するので注意が必要です。Fuse合わせて、UVの結合も必要に応じて行います。方向が斜めになってしまいました。Transformです。Overwraptubeの場合などは、重なってしまう場合があります。ビューポートオプションから、どの部分が重なっているのか確認することができます。Flattenに非常に似ていますが、こちらはストレッチがかかります。正確に言えば、テクスチャ領域の端側に引っ張ることでUVを緩めます。これ一つで望ましい形状にするのは難しいでしょう以下ヘルプ参照UVPeltは、革職人が皮はぎ(Pelt)を作る動作と非常に似ています。サーフェスのトポロジーが円盤に近くなるようにジオメトリにカットを加えます。このサーフェスの境界は、フレームに繋がって、伸ばされます。閉じたフェースをPeltのフレームとして使うことができます。フレームを指定しなかった場合は、円が使われます。カットをした後にPeltするジオメトリの箇所を指定するには、ヒントポリゴンを使います。ヒントポリゴンを含んだセクションの一番長い境界がフレームに繋げられるエッジになります。AutoUVAutoUVは、非常に楽にUV展開を行ってくれます。チュートリアル動画はこちらもともと、AutoUVは、GameDevelopmentToolsetの機能としてリリースされていました。Houdini18では、SideFXLabに統合されています。SideFXLabのインストールは、今年のアドベントカレンダーにも登場しましたね。UVを呼び出すだけです。Path」と「cluster」の2種類のメソッドが用意されていました。現在のAutoUVは4種類のメソッドが用意されています。デフォルト手法もバージョンに応じて変わっています。H16時のデフォルト手法です。シームを作成するため、サーフェスの曲率に応じて最短距離を割り出すアルゴリズムを使用しています。メッシュを四辺形で分割してUVアイランドを作成します。アイランドをよりうまくまとめています。H16.5時のデフォルト手法です。H17時からのデフォルト手法です。Viewで表示することができます。機能を利用できるノードが提供されています。注意点として、2019/12現在、RizomUVはSideFXLabのプロダクションビルドには含まれていません。Only」のチェックを外す必要があります。アップデートすると、ノードが現れます。このRizomUVですが、Houdiniインストール直後そのままで使用できるわけではありません。RizomUVも別途購入する必要があります(←重要!)RizomUVの購入とインストールまずは、RizomUVソフトウェアが必要です。LabのWebサイトから30日間の評価版を購入するか、インディーライセンス、もしくはプロライセンスを購入します。インディーライセンスだと、1か月単位(14.9ユーロ:約1800円)、もしくは永久ライセンス(149ユーロ:約18000円)となります。僕はうかうかしていたら、評価期間が切れてしまっていたので、1か月のライセンスを購入します。決算方法はクレジットカードの他paypalなども選択できます。IDの入力を行います。IDとは、rizom-labが発行するPC固有のIDです。IDはソフトの立ち上げ時、ライセンスアクティベーション画面に表示されています。このあたりでRizomUVの実行ファイルをダウンロードしてインストールしましょう。この長いコードをマイアカウント画面でコピペして貼り付けます。成功するとライセンスファイルをダウンロードできるようになります。ライセンスアクティベーション画面のFOLDERから、ライセンスファイルが置かれているディレクトリパスを指定します。アクティベーションに成功すると、RUNのボタンが押せるようになります。ソフトが立ち上がりましたね。RizomUVでUV展開では、Houdiniの画面に戻ります。一連のノードでUV展開をするチュートリアルは以下のサイトにあります。https://www.sidefx.com/ja/tutorials/sidefx-labs-rizomuv-bridge/動画と同じ豚だと、新鮮味がないので、今回はSideFXLabで突如として現れたtestgeometry_luizを利用します。※unwrapする前にattributeを削除しておきます。Rizomuv_unwrapを作成し、ディスプレイフラグを立てると、処理が開始されます。※処理には多少の時間がかかります。よってAutoCookは切っておいたほうが無難です※この時点でライセンスが上手くアクティベーションされていない場合は、アクティベーションがあるかどうかを聞かれます。unwrapが完了したら、UVを確認してみます。このUV展開に特化したソフトは、高いだけあって凄まじいクオリティです。いうか人のモデルって、ひとつのアイランドにできるんだ・・・しかし、1つのアイランドでは、どこがシームなのかがわかりにくいです。そこで、もうひとつのSideFXLabのノードが登場します。Visualize」です。これはUV可視化専用のノードです。Shade」の上位版です。Seemsのチェックボックスをオンにしてみます。すごい!んだけど、そこ切る!?って感じです。※そもそもアイランドがひとつというのが無理がある。Controlを有効にしたり、Bruchを有効にしたり、様々なパラメータで試行錯誤を行います。良い感じにシームが切れたとしても、アイランド内のUVの偏りが生じることがあります。いった場合は、Rizomuv_optimeseを行うことで、UVあたりの面積を均一化させることができます。Rizomuv_optimeseは必要に応じてiterationを上げて調整します。TextureUV展開できたので、UVテクスチャ用のべイクを出力します。MaterialsBoneSOPに慣れ切った体のユーザにとってHoudiniのボーンは、なかなか手を出し辛い分野かと思います。Houdiniの群衆はバージョンを追うごとに良い感じになっているし、ちょっと気にはなるんだよね・・・。いう方もいるのではないでしょうか。時間が無い場合は、どうしても新しい分野を開拓するのは難しくなります。いつまでもmixamoに逃げてしまうと、進歩することができません。よって今回はボーンについて正面から学んでいきます。ボーンチェーンまずは、Boneの種類について確認します。fromCurveなどあります。BoneとBonesの違いは、その名の通り1つだけ作るか、連続してボーンを作るかの違いです。ビューポート上でbonesを呼び出してみてください。続けてクリックすることで、ボーンチェーンにボーンが追加されます。Drawingで確定させます。ボーンチェーンって何?という方はネットワークビューを見てみてください。名前の通りボーンがチェーン状態になっています!このひとかたまりをボーンチェーンと呼びます。各ボーンチェーンは、チェーンのルートとボーンでできています。ここで、初めてHoudiniでボーンを扱う人はギョッとなるかと思います。Houdiniは、ジオメトリレベルではなく、オブジェクトレベルでボーンを扱います。※ルートはただのnullノードです※まず最初に1つのボーンだけ作成して、後からCtrl+左クリックでボーン分割も可能です。※マウスホイールを回転させるとボーンのdivisionを変更できます。ジョイントベースでなくボーンベースそして、Houdiniのボーンを学ぼうとする際にさらに混乱するのが、ジョイントの概念です。他の3Dソフトでは、スケルトンの焦点を「ジョイント」とする「ジョイントベース」ですが、Houdiniは「ジョイントベース」ではなく「ボーンベース」です。Maxなど、ほとんどの3Dソフトのボーンは、ジョイントベースです。Houdiniはジョイントを基本としません。※疑似的に作ることは可能ですが非常にコストがかかりますいやいや、ジョイント無しでどうやってスケルトンの設定するの???と、最初から初学者の精神を折りに来てくれます。Maxのボーンジョイントベースは、ボーンの制御をボーン自身ではなくジョイントが制御します。対して、ボーンベースはボーン自身が制御情報を持ちます。ジョイント(下図では右側のnullノード)が持つ情報は、各ボーンの支点となる座標です。そのジョイントからボーンは次の子ボーンへの方向にLookAtして、nullノード間の距離まで進みます。距離の算出方法は、vlength(vtorigin("../null0","../null1"))です。※この例は、あくまでHoudini上でジョイントベースを再現した場合です。各ソフトによってジョイントの処理は異なります。対して、ボーンノードは各ボーンが保持する「方向」と「長さ」の情報をそのまま使います。親ノードを基準として、そのノードが持つ方向と長さの終端を子のボーンの開始点として利用します。いうか独特過ぎるよ!!最初はそう思いましたが、比較してみると、確かに左のほうがシンプルに見えます。Houdiniの設計思想上、以下の点を重視した結果、ボーンベースの方がジョイントベースよりも都合がよいと判断されたのではないでしょうか。ジョイントジョイントベースシステムには柔軟性とジョイントを自由に動かせられるコントロールがあります。不適切なジョイントオリエンテーションは、しばしば予期しない問題を起こし、後処理が必要になってきます。一方で、ボーンには方向があります。ボーンが向かっている方向が-Z軸で、高さがある方向がY軸、平坦な横方向がX軸です。階層はボーンチェーン全体を解釈することができます。一緒にリグを伸縮することが容易になります。paramtersジョイントベースの再現時の例ではLookAtにCHOPを使用しました。一応CHOPを使わない方法もあります。ひとつは、ほかのジョイントベースのソフトでFBX出力を行った後に、Houdiniにインポートすると、CHOPなしのジョイントベースが生成されます。対して1からCHOPなしのジョイントベースを作るためには、少し工夫が必要です。Vector」が無いからです。※補足:Houdini16でのコンストレイントのCHOP移行により無くなりました。Interfaceでパラメータを見ても、対象の項目がありません。無いかというと、項目が隠れているからです。paramtersを押すと、普段隠れているパラメータが姿を現します。隠れているパラメータをクリックします。ここからvisible状態に持っていくためにはinvisibleのチェックを外す必要があります。確定すると、隠れていたパラメータを出現させることができます。宝探しかよ!?invisible状態のパラメータは、SideFXが余分だと判断したり、下位互換のために残したパラメータ、推奨しないパラメータなどです。理由は様々ですが、積極的に使うか?というと、少々疑問の残るところです。豆知識として覚えておく程度でよいかと思います。parameterだけではありません。Pre-TransformPre-Transformもまた、隠れたパラメータです。直訳すると「事前のトランスフォーム」ですが、その名の通り、Transformをする前にTransformします。ボーンチェーンで使われています。※注意:boneノードだけでなくほかのnullノード、transformなどにも利用されます。ボーンチェーン以外にも活用されています。boneとbonesの違いまず、boneとbonesの2つを作成します。この2つのボーンの違いはどこにあるでしょうか?まず単体のボーンと、ボーンチェーン(nullノード:ルート)の存在があります。ルートが必要かというと、ボーンチェーンを構成するためには「方向」「長さ」のほかに「ノードツリーの従属関係:親から継承されたTranslateの座標」が必要だからです。従属関係ノードツリーの従属関係がある子供の原点は親の座標に追従します。親のTranslateの位置が(2,2,0)だった場合、子供の原点は親の(2,2,0)となります。Parentingオプションによって挙動は異なります従属関係がある状態で子供のボーンが自身のTranslateを使用してしまうと、親と子の接点が途切れてしまいます。例:子のボーンがY方向にTranslateを使用してしまった場合つまり、ボーンで従属関係のある状態でTranslateは絶対にしてはなりません。※以上の理由から、しばしばTranslateの値はLockされています。トランスフォームが許されるのは、最上位の親。!ではルートのトランスフォームの値を見てみましょう。あれ?Translateが(0,0,0)なのに、なぜかビューポート上では(0.6,0,0)に点があるように見えます。ノードのどのタブを見ても0.6という値はありません。いうと、この0.6という値はPre-Transformに格納されているからです。このPre-transformを見る方法は2種類あります。ノードの中クリックを押して見る方法です。下図の中にPre-transformという項目がありますが、このトランスフォーム値を事前に適用した状態が(0,0,0)となります。Pre-Transform」を選択することで、現在のPre-TransformパラメータをTransformパラメータに移すことで値を見る方法です。この方法は、値を編集することもできます。Transformを選択して、Transformのtranslate、rotate値をすべて0、scaleを1にします。従属関係やPre-transformについての詳しいステータスは、インディゾーンHoudini情報日本語ブログに記載されています。ルートのnullノードと同じように、boneノードもPre-transformがRotateに仕込まれています。0が欲しい!なぜ、このような回りくどい方法をとってtransformの値を0にするかというと、後からアニメーションを付けやすくするためです。体のTポーズに戻したい場合、いちいち腕のrotateを90度など入れるとなると、初期化の手続きが面倒になります。基本の位置、基本の回転は原則として(0,0,0)にする必要があります。IK他のDCCツールを使ったことのある経験者であれば、次に「なるほど。IK(インバースキネマティクス)はどうするの?」と思うでしょう。ボーンのキネマティクス選択は、boneノードを呼び出した後メニュー上に現れます。Kinematicsとなっているため、キネマティクスがありません。Kinematicsを選択して、先ほどと同じようにボーンを追加してみます。すると、謎のnullノードとCHOPノードが現れます!!なんとHoudiniのキネマティクス設定はCHOPで処理されます!!チェーンゴールとCHOPノードチェーンゴールは、ただのnullノードです。このチェーンゴールを移動させることで、ボーンはこのゴールに追従します。※例としてgoalのnullノードのTransformにsin($F*10)のアニメーションを付与しています。この追従を制御しているのがCHOPネットワーク内のInverseKinノードです。Affectorを指定します。これを1文で表すと、「Rootのbone5からEndのbone8までに対して、Goalの影響を与える」ということになります。Kinematicsの種類は7種類あります。それぞれの動きを見た方がイメージが湧きやすいかもしれません。元々のパラメータ値を使います。コンストレイント付きIKでは、拘束パラメータによってボーンの角度制限が考慮されます(例:X角度範囲、Y角度範囲、Z角度範囲など)。そのほかは通常のIKと同じです。ボーンの角度制限が考慮されます。そのほかは通常のFKと同じです。カーブにボーンが追従します。命名規則ボーン作成時に、prefixの単語を指定することが可能です。デフォルトは「chain」となっているので、今後作成されるボーンの名前は、chain_bone1、chain_bone2...となります。ここで時間切れとなってしまいました。upLoginユーザーは見つかりませんでした。