Houdiniで橋のモデリングを行いUnityのHDRPでセットアップして表示してみる(Part 3)
はじめに
この記事はシリーズのPart 3です。 目次はこちらです。
橋の開始端部分のモデリング
Boxノードを作成し、次のように配置します。
Transformノードを作成し、次のように接続します。
作成したtransform48ノードのパラメータを次用に変更します。
Transformノードを作成し、次のように接続します。
作成したtransform49ノードのパラメータを次のように変更します。
Translateのxはch("../parameters/sizex") / 2 - 0.15
です。
Translateのzは-(ch(../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2
です。
Scaleのxは0.3
です。
Scaleのyはch("../parameters/balustradeheight") - 0.25
です。
Scaleのzはch("../parameters/startsize")
です。
Mirrorノードを作成し、次のように接続します。
Deleteノードを作成し、次のように接続します。
作成したdelete7ノードのパラメータを次のように設定します。
Normalノードを作成し、次のように接続します。
nullノードを作成し、startpart0lod2lod1lod0と名付け、次のように接続します。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel5ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor11ノードのパラメータを次のように設定します。
VDB from Polygonsノードを作成し、次のように接続します。
作成したvdbfrompolygons1のノードのパラメータを次のように設定します。
VDB Smooth SDFノードを作成し、次のように接続します。
Convertノードを作成し、次のように接続します。
Remeshノードを作成し、次のように接続します。
作成したremesh1ノードのパラメータを次のように設定します。
Peakノードを作成し、次のように接続します。
作成したpeak1ノードのパラメータを次のように設定します。
Moutainノードを作成し、次のように接続します。
mountain1ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor12ノードのパラメータを次のように設定します。
Booleanノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
作成したnormal34ノードのパラメータを次のように設定します。
nullノードを作成し、startpart0hiと名付け、次のように接続します。
start_part0のノードを選択し、Shift+Oでネットワークボックスに囲います。
Boxノードを作成し、次のように配置します。
作成したbox9ノードのパラメータを次のように設定します。
Sizeのxはch("../parameters/sizex") - 0.6
です。
Sizeのyは0.35
です。
Sizeのzはch("../parameters/startsize")
です。
Centerのyはch("sizey") / 2 + 0.25
です。
Centerのzは-ch("../parameters/startsize") / 2
です。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel6ノードのパラメータを次のように設定します。
Fuseノードを作成し、次のように接続します。
Transformノードを作成し、次のように接続します。
作成したtransform50ノードのパラメータを次のように設定します。
Translateのzは-(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2
です。
Normalノードを作成し、次のように接続します。
nullノードを作成し、startpart1lod2と名付け、次のように接続します。
Boxノードを作成し、次のように配置します。
作成したbox10ノードのパラメータを次のように設定します。
Sizeのyは0.35
です。
Sizeのzはch("../parameters/startsize")
です。
Centerのyはch("sizey") / 2
です。
Centerのzは-ch("../parameters/startsize") / 2
です。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel7ノードのパラメータを次のように設定します。
Fuseノードを作成し、次のように接続します。
Point Wrangleノードを作成し、次のように接続します。
作成したpointwrangle5ノードのVEXに次のように記述します。
float x = ch("../parameters/sizex") - 0.6;
int count = floor(x / 1.2);
float width = x / count;
v@P.x *= width;
横幅1.2を基準として橋の横幅に詰め込めるように横幅のスケーリングしています。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel8ノードのパラメータを次のように設定します。
Normalノードを作成し、次のように接続します。
作成したnormal36ノードのパラメータを次のように設定します。
Attribute Wrangleノードを作成し、次のように接続します。
作成したattribwrangle1ノードのパラメータを次のように設定し、VEXに次のように記述します。
float x = ch("../parameters/sizex") - 0.6;
float y = 0.25;
float z = -(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2;
int count = floor(x / 1.2);
float width = x / count;
for (int i = 0; i < count; i++) {
vector pos;
pos.x = width * i - x / 2;
pos.y = y;
pos.z = z;
addpoint(geoself(), pos);
}
1ピースの横幅と並べるピース数をもとにピースを並べるためのポイントを追加しています。
Copy to Pointsノードを作成し、次のように接続します。
nullノードを作成し、startpart1lod1_lod0と名付け、次のように接続します。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel9ノードのパラメータを次のように設定します。
VDB from Polygonsノードを作成し、次のように接続します。
作成したvdbfrompolygons2ノードのパラメータを次のように設定します。
Attribute Wrangleノードを作成し、次のように配置します。
作成したattribwrangle2ノードのパラメータを次のように設定し、VEXに次のように記述します。
float height = 0.35;
float baselength = ch("../parameters/startsize");
float x = ch("../parameters/sizex") - 0.6;
int count = floor(x / 1.2);
float width = x / count;
vector pos0, pos1;
pos0.y = height;
pos1.z = -baselength;
vector dir = normalize(pos1 - pos0);
pos0.x = 0;
pos0.y = height;
pos0.z = 0;
pos1.x = width;
pos1.y = height;
pos1.z = 0;
int pt0, pt1;
int prim;
while(pos0.y > 0.08) {
pos0 += dir * 0.15;
pos1 += dir * 0.15;
pt0 = addpoint(geoself(), pos0);
pt1 = addpoint(geoself(), pos1);
prim = addprim(geoself(), "polyline", pt0, pt1);
setprimgroup(geoself(), "g", prim, 1);
}
次の図のようにライン状のprimitiveを配置しています。
PolyWireノードを作成し、次のように接続します。
作成したpolyeire1ノードのパラメータを次のように設定します。
VDB From Polygonsノードを作成し、次のように接続します。
作成したvdbfrompolygons3ノードのパラメータを次のように設定します。
VDB Combineノードを作成し、次のように接続します。
作成したvdbcombine1ノードのパラメータを次のように設定します。
VDB Smooth SDFノードを作成し、次のように接続します。
作成したvdbsmoothsdf2ノードのパラメータを次のように設定します。
Convertノードを作成し、次のように接続します。
Booleanノードを作成し、次のように接続します。
作成したboolean7ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor13ノードのパラメータを次のように設定します。
Copy To Pointsノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
nullノードを作成し、startpart1hiと名付け、次のように接続します。
start_part1のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge25ノードのパラメータを次のように設定します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge26ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
nullノードを作成し、start_lod2と名付け、次のように接続します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge27ノードのパラメータを次のように設定します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge28yノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
nullノードを作成し、start_lod1と名付け、次のように接続します。
start_lod1のノードをコピーし、ペースとします。
startlod3となっているnullノードの名前をstartlod0にリネームします。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge31ノードのパラメータを次のように設定します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge32ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
nullノードを作成し、start_hiと名付け、次のように接続します。
最後のObject Merge群をすべて選択し、Shift+Oでネットワークボックスに囲います。
start部分のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。 Cキーで色を選んでネットワークボックスに色を付けます。
橋の終端部分のモデリング
前後反転して、ch("../parameters/startsize")
をch("../parameters/endsize")
に変更したものを作っていきます。
startのネットワークボックスをコピーし、隣にペーストします。
ペーストしたpart0のboxの下のtransformの値を編集します。
さらにその下のtransformの値を編集します。
Translateのzを-をとって(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2
です。
Scaleのzはch("../parameters/endsize")
です。
Deleteノードも編集します。
下につながっているnullノードの名前を変更します。
boxのノードのパラメータも変更します。
Sizeのzがch("../parameters/endsize")
で、Centerのzがch("../parameters/endsize") / 2
です。
polybevelのノードのパラメータも変更します。
transformのノードのパラメータも変更します。
(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2
です。
つながっているnullノードの名前を変更します。
box13のノードのパラメータも変更します。
Sizeのzがch("../parameters/endsize")
で、Centerのzがch("../parameters/endsize") / 2
です。
次のpolybevelのノードのパラメータも変更します。
attribwrangleのノードのVEXを変更します。
float x = ch("../parameters/sizex") - 0.6;
float y = 0.25;
-float z = -(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2;
+float z = (ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2;
int count = floor(x / 1.2);
float width = x / count;
for (int i = 0; i < count; i++) {
vector pos;
pos.x = width * i - x / 2;
pos.y = y;
pos.z = z;
addpoint(geoself(), pos);
}
nullノードの名前を変更します。
attribwrangleのノードのVEXを変更します。
float height = 0.35;
-float baselength = ch("../parameters/startsize");
+float baselength = ch("../parameters/endsize");
float x = ch("../parameters/sizex") - 0.6;
int count = floor(x / 1.2);
float width = x / count;
vector pos0, pos1;
pos0.y = height;
-pos1.z = -baselength;
+pos1.z = baselength;
vector dir = normalize(pos1 - pos0);
pos0.x = 0;
pos0.y = height;
pos0.z = 0;
pos1.x = width;
pos1.y = height;
pos1.z = 0;
int pt0, pt1;
int prim;
while(pos0.y > 0.08) {
pos0 += dir * 0.15;
pos1 += dir * 0.15;
pt0 = addpoint(geoself(), pos0);
pt1 = addpoint(geoself(), pos1);
prim = addprim(geoself(), "polyline", pt0, pt1);
setprimgroup(geoself(), "g", prim, 1);
}
nullノードの名前を変更します。
nullノードの名前を変更します。
橋の側面の小物1の作成
次に側面の小物1を作っていきます。
Gridノードを作成し、次のように配置します。
作成したgrid6ノードのパラメータを次のように設定します。
Sizeのxがch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize") - 3.6
で、yが0.8
です。
Rect Multi Splitノードを作成し、次のように接続します。
作成したrectmultisplit5ノードのパラメータを次のように設定します。
Deleteノードを作成し、次のように接続します。
作成したdelete9ノードのパラメータを次のように設定します。
Transformノードを作成し、次のように接続します。
作成したtransform54ノードのパラメータを次のように設定します。
Translateのxはch("../parameters/sizex") / 2
です。
PolyExtrudeノードを作成し、次のように接続します。
作成したpolyextrude18ノードのパラメータを次のように設定します。
Transformノードを作成し、次のように接続します。
作成したtransform55ノードのパラメータを次のように設定します。
Normalノードを作成し、次のように接続します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops1part0lod1_lod0と名付け、次のように接続します。
nullノードを作成し、sideprops1part1rectanglesと名付け、次のように接続します。
Colorノードを作成し、次のように接続します。
作成したcolor17ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor18ノードのパラメータを次のように設定します。
nullノードを作成し、sideprops1part0hiと名付け、次のように接続します。
sideprops1_part0のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge41ノードのパラメータを次のように設定します。
For-Each Primitiveノードを作成し、次のように接続します。
Transformノードを作成し、次のように接続します。
作成したtransform56ノードのパラメータを次のように設定します。
Pivot Translateのzはcentroid("../foreach_begin4", D_Z)
です。
PolyExtrudeノードを作成し、次のように接続します。
作成したpolyextrude19ノードのパラメータを次のように設定します。
Transformノードを作成し、次のように接続します。
作成したtransform57ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
nullノードを作成し、sideprops1part1lod1と名付け、次のように接続します。
sideprops1part1lod1のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge42ノードのパラメータを次のように設定します。
For-Each Primitiveノードを作成し、次のように接続します。
Transformノードを作成し、次のように接続します。
作成したtransform58ノードのパラメータを次のように設定します。
Pivot Translateのzはcentroid("../foreach_begin5", D_Z)
です。
PolyExtrudeノードを作成し、次のように接続します。
作成したpolyextrude20ノードのパラメータを次のように設定します。
Transformノードを作成し、次のように接続します。
作成したtransform59ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel15ノードのパラメータを次のように設定します。
Deleteノードを作成し、次のように接続します。
作成したdelete10ノードのパラメータを次のように設定します。
For-Each Primitiveノードを作成し、次のように接続します。
Transformノードを作成し、次のように接続します。
作成したtransform60ノードのパラメータを次のように設定します。
Pivot Translateのxはcentroid("../foreach_begin6", D_X)
で、yはcentroid("../foreach_begin6", D_Y)
で、zはcentroid("../foreach_begin6", D_Z)
です。
Bolt 000ノードを作成し、次のように接続します。
作成したbolt_003ノードのパラメータを次のように設定します。
Copy to Pointsノードを作成し、次のように接続します。
Mergeノードを作成し、次のように接続します。
Normalノードを作成し、接続します。
nullノードを作成し、sideprops1part1lod0と名付け、次のように接続します。
sideprops1part1lod0のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。
sideprops1part1lod0のネットワークボックスをコピーし、ペーストします。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel17ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor19ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor20ノードのパラメータを次のように設定します。
bolt_004のパラメータを次のように変更します。
normal46ノードのパラメータを変更します。
nullノードにsideprops1part1hiと名付け、次のように接続します。
sideprops1_part1のノードをすべて選択し、Shift+Oでネットワークボックスに囲います。
nullノードを作成し、sideprops1_lod2と名付け、次のように配置します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge44ノードのパラメータを次のように設定します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge45ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
nullノードを作成し、sideprops1_lod1と名付け、次のように接続します。
Object Mergeノードを作成し、次のように配置します。
sideprops1_lod1のObject Merge以下をコピーしペーストします。
object_merge47ノードのパラメータを次のように設定します。
nullノードにsideprops1_lod0と名付けます。
sideprops1_lod0のObject Merge以下をコピーしペーストします。
object_merge48ノードのパラメータを次のように設定します。
object_merge49ノードのパラメータを次のように設定します。
nullノードにsideprops1_hiと名付けます。
最後の各lodのnullノードとObject Mergeノードを選択してShift+Oでネットワークボックスに囲います。
sideprops1のノード全体をShift+Oでネットワークボックスに囲います。 Cキーでネットワークボックスに色を付けます。
橋の側面の小物2の作成
次に側面の小物2を作っていきます。
Boxノードを作成し、次のように配置します。
作成したbox14ノードのパラメータを次のように設定します。
Lineノードを作成し、次のように配置します。
作成したline10ノードのパラメータを次のように設定します。
Originのxはch("../parameters/sizex") / 2 - 0.1
で、yは0.2
で、zは-ch("dist") / 2
です。
Lengthはch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize") + 0.2
です。
Copy to Pointsノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops2part0lod2lod1lod0と名付け、次のように接続します。
PolyBevelノードを作成し、次のように接続します。
作成したpolybevel18ノードのパラメータを次のように設定します。
Normalノードを作成し、次のように接続します。
作成したnormal48ノードのパラメータを次のように設定します。
Colorノードを作成し、次のように接続します。
作成したcolor21ノードのパラメータを次のように設定します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops2part0hiと名付け、次のように接続します。
sideprops2_part0のノードをShift+Oでネットワークボックスに囲います。
Bolt 000ノードを作成し、次のように配置します。
作成したbolt_005ノードのパラメータを次のように設定します。
Gridノードを作成し、次のように配置します。
作成したgrid7ノードのパラメータを次のように設定します。
Lineノードを作成し、次のように配置します。
作成したline11ノードのパラメータを次のように設定します。
Originのxはch("../parameters/sizex") / 2 - 0.1
で、yは0.2
で、zは-ch("dist") / 2
です。
Lengthはch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize") + 0.2
です。
Copy to Pointsノードを作成し、次のように接続します。
Copy to Pointsノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops2part1lod1と名付け、次のように接続します。
Bolt 000ノードを作成し、次のように配置します。
作成したbolt_006ノードのパラメータを次のように設定します。
Copy to Pointsノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops2part1lod0と名付け、次のように接続します。
Bolt 000ノードを作成し、次のように配置します。
作成したbolt_007ノードのパラメータを次のように設定します。
Copy to Pointsノードを作成し、次のように接続します。
Normalノードを作成し、次のように接続します。
Colorノードを作成し、次のように接続します。
作成したcolor22ノードのパラメータを次のように設定します。
Mirrorノードを作成し、次のように接続します。
nullノードを作成し、sideprops2part1hiと名付け、次のように接続します。
sideprops2_part1のノードをShift+Oでネットワークボックスに囲います。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge50ノードのパラメータを次のように設定します。
nullノードを作成し、sideprops2_lod2と名付け、次のように接続します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge51ノードのパラメータを次のように設定します。
Object Mergeノードを作成し、次のように配置します。
作成したobject_merge52ノードのパラメータを次のように設定します。
Mergeノードを作成し、次のように接続します。
nullノードを作成し、sideprops2_lod1と名付け、次のように接続します。
sideprops2_lod1のノードをコピーし、ペーストします。
object_merge54ノードのパラメータを次のように設定します。
nullノードをsideprops2_lod0と名付けます。
sideprops2_lod0のノードをコピーし、ペーストします。
object_merge55ノードのパラメータを次のように設定します。
object_merge56ノードのパラメータを次のように設定します。
nullノードをsideprops2_hiと名付けます。
最後の各LODのObject MergeとMergeノード、nullノードを選択してShift+Oでネットワークボックスに囲います。
sideprops2のノード全体を選択し、Shift+Oでネットワークボックスに囲います。 Cキーでネットワークボックスに色を付けます。
開始側の支柱のモデリング
startの支柱を作っていきます。
Boxノードを作成し、次のように配置します。
作成したbox15ノードのパラメータを次のように設定します。
Transformノードを作成し、次のように接続します。
作成したtransform64ノードのパラメータを次のように設定します。
Translateのyが0.25
で、zが-(ch("../parameters/sizez") - ch("../parameters/startsize") - ch("../parameters/endsize")) / 2
です。
Scaleのxがch("../parameters/sizex") - 0.3
で、yがch("../parameters/sizey") - ch("../parameters/balustradeheight") + 0.25
で、zがch("../parameters/startsize")
です。
Normalノードを作成し、次のように接続します。
Deleteノードを作成し、次のように接続します。
作成したdelete12ノードのパラメータを次のように設定します。
nullノードを作成し、startprop_lod2と名付け、次のように接続します。
Rect Multi Splitノードを作成し、次のように接続します。
作成したrectmultisplit6ノードのパラメータを次のように設定します。
PolyExtrudeノードを作成し、次のように接続します。
作成したpolyextrude22ノードのパラメータを次のように設定します。