Houdini VEX言語(プログラミング)でモデリングしてみよう！初心者　向け　part1　チュートリアル

# なぜ、プログラミング(VEX言語)をHoudini で使うか？
VEXで書くと結構便利だったり、すでにあるノードよりも速かったり
モデリングだけでなく自分だけのアルゴリズムを作れたりする
>Wranglerの元において我々は平等である



今回は軽めのモデリングから、下図のようなポリラインを作っていきます
順序は

<font color="#FF632C">**1.原点（0,0,0）に点を作る。頂点番号は0**

<font color="#4fcdff">**2.真上に頂点を作る。頂点番号は1**

<font color="Green">**3.頂点番号0　と　頂点番号1 を繋げる**

![introduction.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/143d97fe-f545-b9c8-ff3a-a20889edb43f.png)
![atw.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/c8f578fa-294d-ec9d-53e2-51f828848c4d.png)

geoノードを召喚
まずはWrangle君を出してみましょう
***Runoverを<font color="#C41600">Detail</font color>に変えましょう**

:::note warn
重要
RunoverはDetailでないと作れません

point wrangle でジオメトリを作ることは可能ですが、始めから何も繋いでいない場合
何も作れません。
”無”からは何も産まれないように....
:::


# 1.さっそく書いてみましょう　原点に頂点をつけよう
addpoint() で頂点を作ることができます。
引用：int  addpoint(int geohandle, vector pos)；
int geohandle　はノードに何も繋がられていないなら０でもいい
vector pos は頂点を作りたい(三次元空間)の位置を指定します

```C#:vex
vector p0=set(0,0,0);
//原点を設定
int a=addpoint(0,p0);
//頂点を作る
````
https://www.sidefx.com/ja/docs/houdini/vex/functions/addpoint.html
***
↑　引用元　公式サイトより
![ex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/9098c7f9-d2b0-fbd9-1964-e34cc2aa2c45.png)

# コラム　頂点が小く見えると感じたら....
<details><summary>(ここは無視してもいいよ)</summary>

キーボードの"D"を押して、(Display Option) 表示設定を開き
Gemetory ->Particals->Point Size
で頂点の大きさを変えられます。


![gif_pointsize_houdini_v003.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/7261146c-3861-8eb0-12a1-1eabb2d63d77.gif)

</details>

# 2.真上に頂点を作ろう

```C#:vex
vector p1=set(0,1,0);
//頂点の場所を設定
int b=addpoint(0,p1);
//頂点を作る
````
![ex2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/81c30115-19eb-3567-c52a-72ac6fd9d69b.png)

# 頂点と頂点を繋げる
addprim()で二つ頂点を結びます。
引用:int  addprim(int geohandle, string type, int pt0, int pt1)；
string typeで作りたい種類を選びます
今回は”polyline"を作るので、"polyline"と打ちましょう。
int pt0,int pt1,int pt2.....というのはどの頂点をつなぐのかを欄なので
a,bを入れましょう

https://www.sidefx.com/ja/docs/houdini/vex/functions/addprim.html
***
↑引用元　公式サイトより
```C#:vex
addprim(0,"polyline",a,b);
//繋げる
```
![ex3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/0ef1e4ad-9f79-a669-d6d5-f6a0a8ae69b5.png)

# 完成
ここからはまだ物足りない人たちへ

Normalノード、Resample ノードを繋げ
Resampleノードのcurveuをオンにする
![ex4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/aed046c6-4805-f178-2cea-23feb3005235.png)

最後にpointwrangle を付け加えと書き、右上の[+](Create Spare Parameter)ボタンを押す
```C#:vex
v@P.z+=chramp("ramp",@curveu);
```
![ex5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/5d0251e1-f6ae-d023-fafc-fbaab0daaca8.png)


そうすると　勾配のスライダーができます。
これは f@curveuにそってスライダーの値を加えています。
つまり　
```
v@P(頂点のポジション、位置)の
XYZの v@P. zの位置に
chramp();の値を加算（+）をします。

```

歯車のドロップダウンから様々なプリセットがあるので
どんどんさわっていきましょう

![ex6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/c7674d62-cb0f-3314-279b-7f7a8ced74bc.png)
![ex8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/0c6b7e08-c4b5-1584-45ec-e831024bef44.png)

 最後にrevolveにつければ壺の完成！

![ex9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3555512/0f7a8d66-6c8e-8097-190c-d407b0fc7c91.png)