Mandelbulbは、ますます人気がある3次元フラクタルです。 3Dアート そしてvfx。この記事では、すばやくマンデルブを作る方法を歩きます Houdini. 、SDF(符号付き距離フィールドボリューム)を使用する。
各ボクセルにおいて、SDFは表面上の最も近い点までの距離を記憶する。 Houdiniはこれらの距離を解釈し、派生サーフェスを3Dジオメトリとして視覚化することができます。ほとんどのフラクタル式は「距離推定関数」の形をとるため、この関数はフラクタルの暗黙的表面上の最も近い点までの距離を返します。これは、各ボクセルのフラクタル関数の結果を直接置くことができることを意味します。
まず、空のボリューム(ボリュームSOP)を距離値で埋める - 名前 'サーフェス'を付けます。テストするための優れたフラクタルはマンデルブルブです。品質に対するスピードオフを取引するためにボリュームの解像度を変更することができます。良い開始点は、均一サンプリングをサイズでサイズ0.01で設定することができます。 Houdiniでボリュームを視覚化するデフォルトモードは霧のボリュームですが、表示モードをISOSURFICAFに変更することで(プロパティタブ内)に表示モードを変更するように変更できます。
それからそれはボクセルを距離値で埋めることの問題です。ボリュームwrangle SOPでこのvexコードを使用して、VoxelごとにMandelbulbの式を実行します。
ベクトルP = v @ p; float dr = 1。 Float R = 0.0。 float power = chf( "Power"); for(int i = 0; I< chi( "繰り返し"); i ++){ R =長さ(p); (R> 1.5)の場合 //極座標に変換します フロートTheta = ACOS(P.Z / R)。 Float Phi = Atan(P.Y、P.X)。 DR = POW(R、POWER-1.0)*電源* DR + 1.0。 //点をスケールして回転させます float zr = pow(r、電力)。 Theta * =電力。 PHI * =電力。 // Dectesian座標に戻ります P = Zr *セット(SiN(θ)* CoS(PHI)、SiN(PHI)* SIN(θ)、COS(θ)。 P + = v @ p。 } f @ Surface = 0.5 * log(r)* r / dr;
Houdiniを使用すると、個々のノードのユーザーインターフェイスに独自のカスタムスペアパラメータを追加できます。私たちのvexコードにはパラメータ参照が含まれています( chf() 関数)、UI内のパラメータを使用して式の側面を制御するために。これらのパラメータはデフォルトでは存在しませんが、コードウィンドウの右側にある[スペアパラメータの作成]ボタンを押すと作成できます。
この場合、繰り返しパラメータはMandelbulbの詳細レベルを制御します - 5または6で始まります。電源はマンデルブの形状を制御します - 典型的な形状は電源8.0の周囲で現れます。
サーフェスをポリゴンに変換するには、ボリュームのSOPを変換してボリュームの除去に従います。符号付き距離フィールドとして解釈されるため、逆モードを使用し、詳細フラクタルシェイプをポリゴン形式でメッシュします。効果的に、反転モードは、ポリゴンの表面の法線と巻き方向を反転させます。
その後、他のメッシュと同じようにレンダリングすることができますが、それが詳細なので、それが簡単にUVラップすることはできませんでした - それは簡単にそれを表すための手続き的な技術を使うことを検討します。たとえば、曲率に基づくシェーディング。
この記事はもともと発行されました 3D世界 CGアーティストのための世界で最も売れている雑誌。購入 発行237 または 申し込む 。
続きを読む: