No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdini:Hexagonal Mesh(六角形ポリゴンを作る)

Houdini回。六角形の作り方、いろいろ。

Divide(SOP)のComute Dualを使う方法

もうちょっと詳しく

細かく見てみます。まずグリッド平面に対して、”Compute Dual”設定を有効にしたDivide(SOP)をコネクトすると、こうなります。

六角形は出来たが、斜めっているので、Transform(SOP)のShearを使ってまっすぐにします。

ちょっと縦に長い気がするので、Transform(SOP)でちょっと縦につぶします。
最後に、四角い範囲だけ残せば完成。

このサンプルファイルはこちら

 

球体に対してDivide(SOP)を使うと

”Compute Dual”設定を有効にしたDivide(SOP)を、Polygonタイプの球体に適応すると、六角形と五角形の球体になります。

もうちょっと詳しく

特に説明することもないんだなぁ、コレガ。

このサンプルファイルはこちら

 

旧PolyBevel(SOP)とDivide(SOP)を使う方法

もうちょっと詳しく

PolyBevel(SOP)が新しくなってしまい、この方法は使いづらくなってしまいました。

この手法を使うためには、旧PolyBevel(SOP)を使う必要があります。現在のPolyBevel(SOP)じゃダメ。
旧PolyBevel(SOP)は私の中で、六角型生成用の触媒として重宝してたのですが・・・新しくなっちゃって。
旧PolyBevel(SOP)を作成するのには、Pythonを使うのが良いかと思います。


import soptoolutils
soptoolutils.genericTool(kwargs, 'polybevel')

これをシェルフに登録しておいて、実行すると古いPolyBevel(SOP)が作成できます。
作成したPolyBevel(SOP)の設定を変更して、べベルのかかり具合を最大にすると図のように、グリッドがダイヤ型になります。

これに対して”Compute Dual”設定を有効にしたDivide(SOP)を適応すると六角形になります。

はじめのグリッドのマスが正方形だと、生成される六角形がつぶれているので、ネットワークのいちばん上のGrid(SOP)の設定を変更して、正六角形っぽくなるように調整します。

完成!

このサンプルファイルはこちら

 

ボロノイで六角形に分割する

ボロノイ分割で綺麗な六角形になるようにします。

もうちょっと詳しく

ボロノイ分割で割った場合、六角形それぞれが個別のピースになるので、Exploded View(SOP)で簡単にバラバラになります。

まずPointを一つ用意します。

このPointをまず横にコピーして増やします。次にそれを縦にコピーして増やします。
結果、図のように綺麗に並んだ点群が出来上がります。

点群の中から一行飛ばしでポイントをグループ化。

グループにしたポイントを少し横にずらします。

このポイントを使ってボロノイ分割を行う。

Exploded View(SOP)で、ちょっと離す。

ここでは、コントローラを用意して、縦横のポイント数等を制御してみました。

このサンプルファイルはこちら

 

Circle(SOP)で六角形を作る

Circle(SOP)を使うと六角形を1つ、楽に作れる。

もうちょっと詳しく

Circle(SOP)の設定を、”Primitive Type”をPolygonに、”Divisions”を6に設定すると、正六角形が1つできます。
これをいい感じに並べれば、他の例同様、ハニカム構造が作れます。

このサンプルファイルはこちら

 

Wrangleでがんばる

Wrangleで、ボロノイ分割の基点となるポイントを作成し、それを使って六角形を作る。

もうちょっと詳しく

WrangleノードのRun Overを”Detail(only once)”にして、下記のコードを記述(すみません括弧<>がよく文字化けします)。


for(int j=0; j&lt;12; j++){
  float shift_x =((j+1)% )*0.5;
  float shift_z = j*0.75;
  for(int i=0; i&amp;amp;lt;12; i++) {
    vector pos = set(i+shift_x, 0, shift_z);
    addpoint(0, pos);
  }
}

図のようなポイント群が出来ます。

このポイントを使ってボロノイ分割すると、六角形ができます。

このサンプルファイルはこちら

 

もっとWrangleでがんばる

六角形をwrangleで作る。

もうちょっと詳しく
Run OverをPointにして、下記のコードを記述。
入力に適当なポイントをコネクトすると、そのポイントを中心に六角形が出来る。

int prim = addprim(0, "poly");
float height = (sqrt(3)/2) * 0.5;
float width = 0.5;
for(int i = 0; i &amp;amp;amp;lt; 6; i++) {
  float angle_deg = 60 * i + 30;
  float angle_rad = $PI / 180 * angle_deg;
  vector pos = set(@P.x + width * cos(angle_rad), 0, @P.z + height * sin(angle_rad) );

  int pt = addpoint(0, pos);
  addvertex(0, prim, pt);
}

先に紹介したポイントを生成するWrangleと組み合わせると、こうなる。

このサンプルファイルはこちら

他にもきっとあると思うけど、ひとまず以上!

 

コメント↓で教えてもらった方法

もうちょっと詳しく

Gridに対して、Point from Volume(SOP)。設定のPoint Configuration を Tetrahedralに。

Trianglulate2d(SOP)!

Compute Dual!

なんか、一番スマートな気がします。


参考

https://www.sidefx.com/forum/topic/49509/?page=1#post-223710
https://www.sidefx.com/forum/topic/27012/?page=1#post-124738
https://www.sidefx.com/forum/topic/20733/?page=1#post-97255
https://www.sidefx.com/forum/topic/44449/
http://forums.odforce.net/topic/29436-honeycomb-pattern/
http://forums.odforce.net/topic/27806-using-vex-to-modify-another-geometry-different-geohandle/

関連記事

  1. Dsharp K 2018.06.18 12:25pm


    本でもかなり多くの助けを受けています。常に感謝いたします。関連した内容について、長い時間前に見た資料があったので参考リンクに残します。wrangleはやはり複雑ですね。
    https://medium.com/@jakerice_7202/computing-the-dual-ff2a93077e2e

    • 0
    • 0
  2. らい 2017.12.21 12:13pm


    いつも参考にさせていただいています。

    Divide SOP の Comute Dual を使う方法では、
    Grid
    -> Points from Volume (Point Configuration を Tetrahedral に)
    -> Triangulate 2D
    -> Divide (Compute Dual をオンに)
    の順に接続する方法も個人的には好きです。

    余計な事かもしれませんが一応ご参考までに…。

    • 0
    • 0
    • kitagawa 2017.12.21 12:51pm


      おー、こんな方法もあるんですね。
      やってみたら、綺麗な六角形が簡単につくれました。
      この方法は知らなかったので、勉強になりました。
      ありがとうございますm(_ _)m

      • 0
      • 0

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

どのようなタイプのセミナを好みますか?(複数可)

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2018 (22)
  • 2017 (29)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (55)

スポンサードリンク