Houdini 20.0 基本

高度なビューポートシェーディング

On this page

Houdiniの3Dビューポートではインタラクティブにたくさんの照明効果をオフラインレンダラーで生成することが可能です。さらに、ルックアップテーブル(LUT)を使ったカラー補正とガンマ補正を適応することが可能です。

ビューポートでのライティング

Houdiniのライトタイプの多くはOpenGLシェーダでモデル化しています。これらのライトシェーダは、インタラクティブにライティングを調整できるように、最終レンダリング結果に十分近い結果を生成します。デフォルトでは、ほとんどのライトがポイント、スポットライト、エリアライト、環境ライトとしてレンダリングされます。3DビューアのディスプレイオプションEffects タブ、または右側のツールバーにある High Quality Light Shading は、これらのライト用により複雑なシェーダを有効にするために使います。

エリアライトと環境ライトには光源のマルチサンプリングが必要です。3DビューアのディスプレイオプションLight Sampling パラメータは、レンダリングの品質を制御します。(デフォルトは8サンプル)。サンプリング値を大きくすれば品質は良くなりますが、レンダリングが遅くなります。

High Quality Light Shading は、OpenGLのライト数の制限(通常は8か16)を回避してビューポートに無限大のライトの数を有効にします。ライトの数が増えるほどパフォーマンスに影響が出てきます。 ビューポートディスプレイオプションの(Lightsタブにある) Max Light Count ディスプレイオプションでライトの数を制限することで、何百ものライトによるパフォーマンスを維持することができます。それら上位のライトは明るさで選択されます。

ランプベースのライト減衰は、 High Quality Light Shading モードでも利用可能で、円錐ライトのソフトエッジのフォールオフと投影ライトテクスチャもそのまま利用できます。

最後に、スクリーン空間のアンビエントオクルージョンは、 High Quality Light Shading がオンの時のみ利用可能です。これは、エッジと効果を暗くしてアンビエントオクルージョンを模倣しますが、オブジェクト間の距離が離れるほどオクルージョンができなくなります。オクルージョンのシャドウの距離を決める時に長さの単位が関係しています。

シャドウは、すべてのライトタイプでサポートされています。シャドウは3DビューアのディスプレイオプションEffects タブ、または右側のツールバーの Shadows トグルボタンをクリックすることで有効にすることができます。ポイントライトは硬いシャドウを落とすのに対し、環境ライトとエリアライトはより柔らかいシャドウを落とします。

シャドウ品質は、ライトすべてに対して基本的なハードエッジシャドウを Shadows アイコンをクリック、または3DビューアのディスプレイオプションShadow Quality オプションを使って、より滑らかで柔らかいエリアシャドウに変更することができます。エリアシャドウはポイントライトに影響を与えません。ポイントライトは常にポイントシャドウを使います。ライトのシャドウマップはキャッシュ化され、ライトの投影エリアが変わる時、シャドウを生成するジオメトリが変わる時のみ再生成されます。

Tip

より高品質なシャドウオプションは、シーン内のライトやジオメトリの調整をする時のインタラクティブ性に影響があります。そのため、モデリングやライトの配置をするときにシーンがカクカクになるのであれば、シャドウ品質を下げるか無効にすることを推奨します。

Note

High Quality Lightingは、パースペクティブビューでのみ動作します。 Normal Quality Lightingは、正投影(Top,Left,Front)がアクティブになっている時に使われます。 また、Flat Shadingは非対応で、Smooth Shadingは常に使用されます。

マテリアル

ビューポートで使われるデフォルトシェーダは基本的なライティング、複数テクスチャ、ライトベースのテクスチャをサポートしています。Mantra Surface Materialには、これらのプロパティが既に組み込まれていますが、他のシェーダでも Edit Rendering Parameters インターフェースを使えば、これらのプロパティを追加することができます。ビューポートレンダリングパラメータはSHOP/OGLサブフォルダで見つけることができます。

バンプ・法線マップはサーフェスに詳細を加えることができます。ディフューズ、スペキュラー、反射マップは、カラーのサンプリングに使います。不透明度マップは、複数のディフューズテクスチャを使う時に簡単に透明度を設定することができます。(他にも最初のディフューズレイヤーでは不透明度を指定することができます)。

シェーダの処理に関しては、最終的な法線は、頂点法線による補間または法線マップから計算されます。さらにバンプマップはその法線を乱します。

法線とビュー方向は、スペキュラー反射の計算で使います。スペキュラーマップはスペキュラーハイライトに一定のマテリアルのスペキュラーカラーを乗算して色をつけるのに使います。光沢係数はアルファチャンネルにコード化され、 Specular Map パラメータセットを使った光沢範囲にマッピングすることができます。さらに反射マップを使えば、スペキュラーカラーが反射ベクトルを使って反射マップを検索した値で乗算されます。

ディフューズカラーは、頂点カラーの補間(あれば)の合成であり、ディフューズマップ(あれば)で乗算、一定マテリアルディフューズカラーで乗算されます。

不透明度は頂点アルファの補間(あれば)、一定マテリアルアルファで乗算、不透明度マップ(あれば)で乗算、最後に最初のディフューズレイヤーのアルファチャンネル(ディフューズテクスチャにアルファチャンネルがあれば)で乗算することで決まります。

さらにカスタム効果を得たいのであれば、MaterialX VOPsまたはシェーダPrimsを使用することで、ビューポート用マテリアルを生成することができます。 ほとんどのMaterialXノードがサポートされています(詳細は、以下のMaterialXセクションを参照してください)。

カスタムGLSLシェーダをビューポートで使う場合に、すべてのケースで適切に機能するためには、いくつかガイドラインに従う必要があります。OpenGLシェーダの書き方を参照してください。 とはいえ、MaterialXシェーダネットワークにはもっとアクセス可能なシェーディングソリューションが備わっているので、カスタムシェーダには可能な限りMaterialXシェーダネットワークを使用することを推奨します。

MaterialX

マテリアルは、MaterialX VOPs(オブジェクト用とSOPs用)またはMaterialXシェーダPrims(LOPs用)で定義することができます。 ネットワーク全体がMaterialXノードで構成されている必要があるので、例えば、“Add”の代わりに“Mtlx Add”を使用しなければなりません。 マテリアルは、サーフェス(ポリゴンメッシュ、NURBS、サブディビジョンサーフェス)とカーブ(ポリゴンカーブ、Bezierカーブ、NURBSカーブ)に対して定義することができます。 カーブはリボンで表示され、その線幅はwidthアトリビュートから取得されます。

出力ノードは以下のどれかを使用することができます:

  • Mtlx Standard Surface

  • Mtlx Surface

  • Mtlx USD Preview Surface

  • Mtlx Unlit Surface

  • Mtlx Displacement

出力ノードが上記のどれでもない場合、その出力ノードの1番目の入力が発光カラーとして使用され、視覚化用途のライトシェーディングは行なわれません。

BSDFノードとEDFノードには基本的なビューポート表示機能しかありません。 BSDFsは、パラメータを合成してレイヤー化され、ビューポートのシェーディングエンジンに適用されます。 EDFsは、単に均一カラーとして発光カラーにマッピングされます。 これらは、テクスチャとカラーの基本的なプレビューを表示しますが、必ずしもオフラインレンダラーがシェーディングするものを正確にプレビューできるわけではありません。

一部のMaterialXノードはGLに対応していません:

  • Curve Adjust

  • Blur

  • HeightToNormal

  • Ambient Occlusion(代わりにビューポート設定が使用されます)

  • すべてのライトノード

  • EDFノードとVDFノード

  • Subsurface BSDFノードとGeneralized Schlick BSDFノード

透明オブジェクト

Houdiniは Transparency ディスプレイオプションがオンの時、不透明オブジェクトすべてを描画した後に透明パスで別々に透明オブジェクトを描画します。オブジェクトが以下の情報を持つときに透明であるとみなされます:

  • ポイントまたは頂点のカラーとアルファ

  • アルファ値が1.0または0.0以外の値が適用されたマテリアル

  • アルファ値が1.0または0.0以外の値のディフューズRGBAテクスチャを参照したマテリアル

  • 不透明度マップを適用したマテリアル

  • ogl_alphaを一様に定義したカスタムGLSLシェーダのマテリアル

  • スプライト

  • ボリューム

上記の基準に合うオブジェクトの箇所のみが透明であるとみなされるので、ジオメトリモデル内のプリミティブのいくつかが条件を満たしていなければ、不透明パスで描画されます。

Transparency オプションがオフなら、代わりに切り抜きが使われます。最終アルファ値が0.0のピクセルは描画されません。それ以外のピクセルは不透明として描画されます。

Material ShaderTransparency ディスプレイオプションを有効にする時は、 TransparencyMedium Quality または High Quality に設定します。これらのオプションのどれかが有効でないなら、 Low Quality を使います。これらのモードは透明サーフェスの品質、特に重複した透明サーフェスを大きく改良します。とはいえ、High Quality Lightingはパフォーマンスの問題で透明オブジェクトに適用されません。透明サーフェスにエリアまたは環境照明の効果を見たいのであれば、 Transparency を無効にしてください。

Medium Quality の透明度は、数に制限のあるレイヤーをピクセル単位レベルで並べて描画します。シャドウは透明オブジェクトには投影されません。そして法線品質のライティングが実行されます。

High Quality の透明度は、多くのレイヤーを描画することが可能で、たくさん重複する透明オブジェクトでより結果が得られます。シャドウは透明オブジェクトにも投影することができます。

スプライト

パーティクルシステムは、そこにSprite POPが存在すれば、スプライトとしてレンダリングすることが可能です。スプライトは常に透明オブジェクトとして描画されます。スプライトとは常にカメラの方向を向いたパーティクルの中心に配置した小さなテクスチャのことです。スプライトは、 Medium Quality または High Quality の透明モードの時に、ボリューム以外のすべての透明オブジェクトの後に描画されます。

ボリューム

ボリュームは、パフォーマンスを犠牲にしてボリュームの見た目を良くする色々な品質レベルでレンダリングすることができます。ボリュームはシャドウを落としたり、受け取ったりしません。またアンビエントオクルージョンがボリュームに影響を与えることもしません。ボリュームは透明なしでレンダリングして、ボリュームの実外形を生成することができます。

ボリュームはデフォルトでは128×128×128の8ビット3Dテクスチャの使用に制限されています。より大きなデータセットを使うには、この制限をディスプレイオプションの Optimization ▸ Textures で調整することができます。

ボリュームはbeauty renderの最終パスで描画されます。

ポストエフェクト

レンダリングとライティングの後にいくつかのエフェクト(例えば、均一フォグ、ボリュームフォグ、被写界深度)を適用することができます。 これらのエフェクトはすべて同時に適用されます。

  • OpenGL ROPを使用する時に役立ちます。

  • わずかな均一フォグでも、大規模シーンで特にワイヤーフレームの時に深度の手掛かりに役立ちます。

均一フォグ

これは、単純な深度ベースのフォグシェーダを用意します。 フォグのカラーと密度を調整することで、様々な種類の大気(霧、煙霧、埃)のルックをモデル化することができます。 カメラ近くでフォグが発生しないように、または、極端に遠い場所でベタ塗りのフォグが形成されないように、深度値の範囲を制限することもできます。 さらに、特定の距離を超えたオブジェクトが何もフォグを受けないようにする深度クリップがあります。 これは、背景画像と背景プレートにフォグがかからないようにするのに役立ちます。

均一フォグは高さで制御することもできるので、曇り空や地面に沈下した煙を作成することができます。 最終的に、シーン内の一番明るいディスタンスライトを太陽として使用することで、そのフォグに単純な照明を加えることができます。 ディスプレイオプションの Fog タブ内の Uniform Fog ディスプレイオプションを参照してください。 どのライティングモードでも均一フォグを利用することができます。

ボリュームフォグ

ボリュームフォグは、ライトがフォグを照らして、そのフォグからブルームと光線を生成することができるもっと高度な大気エフェクトです。 これには High Quality Lighting モードである必要があり、 そのルックはシャドウの恩恵を大きく受けます。 このフォグの Quality パラメータは、照明に使用されるボリュームのサイズを決定し、この大気エフェクトの全体的なパフォーマンスが決まります( Low Volumetric が高速で、 High Volumetric は遅いですが非常に高品質です)。

ボリュームフォグのパラメータは、 Uniform Fog の多くのパラメータと同じです。 大きな違いは、 Depth Range パラメータでは、ザラザラな見た目のフォグにならないように、フォグを照らすライト周辺の境界をきちんと決めなければならないことです。 狭い深度の範囲で前景にボリューム照明を使用し、その残りの範囲を埋めるために背景に Uniform Fog を使用すると良いでしょう。

ライトにOpenGL Fog Lightプロパティを使用することで、ライト毎に照明を変えることができます。 少ない数のライトだけでフォグを照明したいのであれば、 Light Intensity を0に設定してから、それらのライトに Light Intensity プロパティを追加してください。

ブルーム

ブルームは、シーン内の明るい箇所周辺にかすかな大気感またはレンズ効果を模倣する単純なエフェクトです。 Bloom Threshold を超えた強度のピクセル周辺にかすかなハロー(後光)が生成されます。 このハロー(後光)のサイズは、そのピクセル強度に基づいており、 Bloom Scale によってさらにスケールさせることができます。 このブルームの明るさもそのピクセル強度に基づいており、 Bloom Intensity によってさらに調整することができます。 このエフェクトには、OpenGL 4.4が必要です。

被写界深度

Depth of Field(被写界深度)は、非ゼロのfStopのカメラ視点の時の焦点領域の外側にあるオブジェクトに対してブラー効果を生成します。 これは、ディスプレイオプションの( Scene タブ下の) Camera Depth of Field で有効にすることができます。 ハードウェアがGL4.4に対応していれば、さらにBokehスプライトを追加することができます。 これは、非常に明るいスポットにBokehブルームを生成します。 このBokeh形状には、円形または画像(ファイルまたはCOP)から指定することができます。 Bokeh Boost は、そのブルームの数と明るさを増やします。

Note

被写界深度のブラーは2D画像に対して処理されるので、背景と前景のブラーのかかり方には実用的な限界があります。 Bokehスプライトを追加することで、そのブラーを大きく見せることができます。

パフォーマンスとグラフィックメモリの管理

Houdiniでは、たくさんの外観の異なるビューポートレンダリング、ライト、シャドウ、マテリアルの高品質表示が可能です。しかし、これらの機能すべてを同時に最大品質設定にすることは得策ではありません。もちろん、ハイエンドのグラフィックハードウェアに対しても同じです。これらの機能のほとんどは、例えばライトの影響度を評価したり、より詳細にボリュームを閲覧するときのような特定の状況下で画像品質が良くなるように設計されています。すべてを高品質にすると、ビューポートのインタラクティブ性が弱くなり、変更がある度に描画が遅くなります。

ビューポートの動きが遅い、またはこれらのオプションがアクティブになっているときに、インタラクティブなフレームレートに戻す簡単な方法がいくつかあります:

  1. High Quality LightingMax Light Count を下げます。

  2. High Quality LightingMax Light Samples を下げます。

  3. Volumetric Fog をオフにします。

  4. High Quality Lighting をオフにします。

  5. Volume QualityLow に下げます。

  6. TransparencyLow Quality または Cutout に下げます。

  7. Transparency をオフにします。

  8. Shadow QualityPoint に下げます。

  9. Depth of Field をオフにします。

  10. Scene AntiaiasingNone に下げます。

  11. テクスチャ を無効にします。

  12. HDR Rendering をオフにします。

Note

次の章では、パフォーマンスとメモリ使用量に関する詳細に入っていきます。

ビューポートパフォーマンス

ビューポートのパフォーマンスは、あなたが表示している物(モデル)とあなたが表示している方法(ディスプレイオプション)の2つに影響を受けます。3DビューアディスプレイオプションEffects タブの Material Shaders をオフにすれば、高度なビューポートエフェクトのほとんどが無効になるので、モデルが重い原因なのか調べるのに良い方法です。

モデルが制限要因であれば、色々な事を試してください:

  1. いくつかのオブジェクトのディスプレイフラグをオフにします。

  2. Subdivide SOPを使っていれば、Subdivideなしのジオメトリを表示します。Subdivide SOPレンダーフラグをオフにして、その前のSOPのディスプレイフラグをオンにします。

  3. 3DビューアディスプレイオプションOptimization タブの Culling のオプションをオンにします。例えば、 Remove Backfaces (バックフェースカリング)と Cull by drawing 'x' primitives out of every 'x' (ポリゴンの削減)。

  4. Optimization タブの Interactivity オプションの Interactive Mode をオンにします。これは、ジオメトリをより低解像度のバージョンに置き換えます。(環境設定に基づいて、境界ボックス、ワイヤーフレーム、隠線、フラットシェーディングのいずれか)。

ディスプレイオプションが制限要因であれば、表示するジオメトリの品質を下げます。これは、グラフィックハードウェアでより少ないシェーダ、より速い生成をするのに一般的な方法です。次のオプションのすべてが3DビューアディスプレイオプションEffects タブにあります。

  1. High Quality Light Shading は、最もパフォーマンスの品質向上に影響があります。これを無効にすれば、より高いパフォーマンスが向上します。特に、シーンにライトがたくさんあって、エリアライト、ジオメトリライト、環境ライト、ポータルライトのような複雑なライトが使われている場合には、最高のパフォーマンスを上げることができます。デフォルトでは無効になっています。

  2. ボリュームをたくさん表示していれば、 Volume Quality を下げることでインタラクティブ性が改善されます。 Transparency をオフにすれば、さらに品質が悪くなります。

  3. 透明オブジェクトがある状況で、透明をたくさんのパスでレンダリングするほど、レンダリングが遅くなります。ボリューム、スプライト、1より小さいアルファを持つマテリアル、RGBAテクスチャマテリアルすべてが、透明パスでレンダリングされます。最初に Transparency Quality を下げてから、必要に応じて、それを無効にします。

  4. シャドウは、特にシーンにライトがたくさんあるときや、エリアライトやポータルライトを使っていて、 Shadow QualityArea 以上に設定しているとシステムが遅くなる可能性があります。まずはシャドウ品質を下げてください。ライトオブジェクトEnable Light in Viewport パラメータを無効にすれば、ビューポート内のレンダリングのライトを無効にすることもできます。

  5. Hidden Line Ghost または Wireframe のようにシェーディングをしないモードを使ってください。

ビューポートメモリ管理

グラフィックハードウェアにはオンボードメモリの制限のあるプール(VRAM)があります。この制限を越えると、ジオメトリ、テクスチャ、フレームバッファがシステムメモリのインとアウトをスワップしてしまいます。これは、徐々にフレームレートが訂正されていくフレームレートスタッタという現象が現れます。

VRAMをHoudiniで使う方法がいくつかあります:

  1. ジオメトリ - モデルとパーティクルシステム。

  2. テクスチャ - マテリアルとシャドウマップの2Dテクスチャ。環境ライトとエリアライトさらに無指向性ライトシャドウで使う環境マップのキューブテクスチャ。ボリュームの3Dテクスチャ。

  3. フレームバッファ - スクリーンに情報を表示するために使用するテクスチャとウィンドウ。

ジオメトリの使用量はビューポートパフォーマンスで上記で説明したような方法で減らすことができます。

テクスチャの使用量は、Mipmapや Effects タブのパラメータを無効、または Optimization ▸ Textures の設定を変更することで減らすことができます。テクスチャの最大サイズまたはそのデフォルトのビット深度を減らすと、マテリアルテクスチャの全体のメモリ使用量を減らすことができます。最後に、マテリアルテクスチャは Multi Texturing を無効にすることで減らすことができ、また Effects タブの Display Textures を完全に無効にすることで減らすことができます。

シャドウで使われるテクスチャは、シャドウをオフにしたり、またはたくさんのエリアライトが Effects タブで使われていれば、シャドウの QualityPoint に下げることで、再利用することができます。

フレームバッファ使用量は、 Scene Antialiasing を下げたり、 HDR Rendering を無効にすることで減らすことができます。 Scene Antialiasing は、アンチエイリアス係数(2x, 4x, 8x)でフレームバッファサイズを増やし、VRAM使用量の大元となります。 HDR Rendering はフレームバッファサイズを50%増やします。

フレームバッファメモリはHoudiniのウィンドウサイズが大きくなると増えます。ほとんどの30インチモニタの2560×1536の解像度のような高解像度ディスプレイは低解像度ディスプレイよりもVRAMを消費します。複数モニタを使うと、同様にフレームバッファを2倍、3倍と消費します。

基本

はじめよう

次のステップ

カスタマイズ

導師レベル