今回は上画像のようなお皿をモデリングします。解説はしてませんが、3 D プリントした画像も最後にのせています。モデリング自体はさほど難しくありません、ぜひご参考ください。こちらのチュートリアルは動画化もしてますので、動画のほうが良い方は以下のリンクからどうぞ。
概要
上画像がプログラムの全体像となっております。各ブロックごとに説明していきます。
ベースとなる円を生成
- Circle コンポーネントで半径 20 の円を生成します。
- 生成した円を Move コンポーネントで Z 方向へ複製していきます。ボウルの高さを 75 にしたいので、Range コンポーネントで 0 ~ 75 の範囲で 20Step の list を出力し、その値を用いて Z 方向に円を複製していきます。
- 複製した円を、下から上に向かって徐々に拡大していきます。Scale コンポーネントを使用し、拡大していく倍率は、一番下の円を 1 倍とし、最上部の円を半径 75 になるように拡大しています。
生成した円を回転させる
- 生成した円を回転させますが、完成形の画像のようにボウルの高さ方向の真ん中あたりで、波の振幅が大きくなるようにします。List Length コンポーネントで生成した円の数を取得します。
- Range コンポーネントで 0 ~ 1 の範囲で円の数 Step の List を取得します。
- Graph Mapper コンポーネントで取得した 0 ~ 1 の List を List の最初と最後が 0 で、List の中央ほど 1 に近づくように操作します。
- GraphMapper コンポーネントで変更した List に 0.5π をかけます。これを回転角の List とします。
- Rotate コンポーネントで生成した円を上で取得した角度のリストを用いて回転させます。これで、高さ方向の真ん中あたりの円は 0.5π 回転しており、再上下に近い円ほど回転角が小さくなってます。
縮小した円を生成する
- お皿の溝を作成していきます。ListLength コンポーネントで円の数を取得します。
- これらの円を縮小していきますが、上下は 1.0 倍、高さ方向の中央ほど 0.9 倍に近づくようにしていきます。Range コンポーネントで 0.9 ~ 1.0 範囲で List を生成し、GraphMapper コンポーネントで List の最初と最後が 1.0 で中央に行くにしたがって 0.9 に近づく List に変更していきます。
- Scale コンポーネントで GraphMapper コンポーネントで生成した List を倍率として、円を縮小していきます。
- s 縮小した円を Rotate コンポーネントを使用して、先ほど生成した回転角のリストを使って回転させます。
表面の波の基準となる曲線を生成
- 先ほど生成した回転させた円、縮小してから回転させた円を分割し、高さ方向に曲線で結びます。Divide Curve コンポーネントで円を 40 分割します。
- FlipMatrix コンポーネントで List の行と列を反転させます。
- Interpolate コンポーネントで高さ方向に分割店を結びます。
曲線を結びサーフェイスを生成する
- 生成した曲線間にサーフェイスを張っていきます。RuledSurface コンポーネントを使用していきます。
- 縮小前の円から生成した曲線と縮小した円から生成した曲線を結んだサーフェイス、縮小前の円から生成した曲線と縮小した円のリストを 1 つずらした曲線との間にサーフェイスを生成していきます。
- Merge コンポーネントでサーフェイスのリストをまとめて、BrepJoin で結合します。
生成したサーフェイスを縮小
- 生成したサーフェイスを少し縮小します。この面がボウルの内側になります。
- 最上部の円の中心点を取得し、その点を中心として 0.93 倍してます。
完成
- 生成した縮小前と縮小後のサーフェイスに Cap コンポーネントで蓋をし、閉じた Brep を生成します。
- SolidDifference コンポーネントで、2 つの閉じた Brep の差分を取得し、最後に色付けして完成です。
3D プリントはあまりうまくいかなかったので、もう少し勉強が必要かなと思います。プリンターは Ender3 S3, スライサーは ultiMakerCura を使用してます。以上になります。