てんちょーの技術日誌

自分がつまづいたこととかメモ

[Houdini] Vellum Brush を読んでみた その2

概要

今回は Vellum Brush を読んでみた第2回です

前回はこちら

shop-0761.hatenablog.com

メモを残した hip ファイルはこちら

drive.google.com

こんなかんじ

環境

OS: Windows 10
Houdini: 19.5.435
Redshift: redshift_v3.0.62 (たぶん)
Geforce Game Ready ドライバー: 526.98

読んでいく

Method パラメータ

enable solver が分岐使っている method パラメータは
Vellum Brush ノードの隠しパラメータとして存在しています
ユーザーのマウス操作によってこのパラメータが Brush だったり、Drag に変化します

実際に確認するには、 State Parameter の Invisible を off にすると表示されます

Shape パラメータ

こんなかんじ

Tips

Gas OpenCL

OpenCL が書ける Wrangle ノードみたいなやつかな...?

www.sidefx.com

Bindings でパラメータを設定し、Kernel タブの下で Generate Kernel をすると
コードが生成されます

例えば、clearMask の場合だとこんなかんじ

#include "interpolate.h" 
float lerpConstant( constant float * in, int size, float pos);

kernel void clearMask( 
                 int mask_length, 
                 global float * mask ,
                 int stopped_length, 
                 global int * stopped ,
                 int maskset_length, 
                 global int * maskset ,
                 float  pinthreshold 
)
{
    int idx = get_global_id(0);
    if (idx >= mask_length)
        return;

}

これに続けて、処理を書けば安全そう

maskset などはポインタになっています
これは Parameter type が Attribute になっていると、
int {variable}__length global {type} * {variable} が生成されるようです

DOP周辺だとGPUを使った高速化のためにコアになるロジック系は
OpenCLで書かれていることが多そうな気がしてきました

OpenCL の関数

kernel で書かれているコードは VEX ではなく、OpenCL なので調べるときに注意です

例えば vloadn など man.opencl.org

man.opencl.org

まとめ

OpenCLは読んだこと無いんですが、意外となんとかなりそう...と思いつつも
Houdini の知らない機能を知るのが目的なので実装の詳細については追ってません...
まあここまで読めていれば、個別のブラシのカスタマイズなどは出来そうです

ユーザーの操作と変数書き換えをbindしてるところはどこなのか...気になる

ちょっと古そう... www.sidefx.com

何かあれば Twitter までお気軽にどうぞ~ twitter.com