この記事にはプロモーションが含まれています。

【Blender4.4】ジオメトリーノードでプロシージャルなテクスチャを作ろう:ミャクミャク生成

blender

ジオメトリーノードでプロシージャルなテクスチャを作ろうと思いいろいろいじってたらミャクミャクっぽいものが出来ました。せっかくのでシェアしようと思います。

この記事は、BlenderのGeometry nodeを使ってプロシージャルにミャクミャクぽいテクスチャを作ってみようという中級者向けの記事です。

難易度 3.5

今回はミャクミャクの動きもつけます。自分の中の彼のイメージはこういう感じで動いてそうというイメージです。

大阪まで行けないけど、万博を楽しみたいというBlender学習者さんは、この機会にこれを作ってみて、大阪万博感を楽しんで見てはいかがでしょう。わりと学術的でいいんじゃないでしょうか。

スポンサーリンク

全体のノード構成と大体の解説

以下がジオメトリーノードの全体の構成です。大きく三つの部分にわかれています。

部分の説明

Circle…ミャクミャクの球が並んでるわっかの部分。アニメーションや身体・目玉の位置のベースになるところです。

eye_postiion…目玉の位置です。(青・白いところを目玉、赤いところは身体と呼んでいます。)目玉はすべての身体についてるわけではないのでランダムに目玉を置くところをSelectionしています。

Body…ミャクミャクの身体。赤い球のところです。これは単純にUVSphereのインスタンスをおいてScaleで変形させているだけです。

目玉はテクスチャです。マテリアルで目玉の柄をつけています。目玉の位置をどうやって取得するかは、eye_positionの部分の最後についてるGeometry Proximityで、取得しています。

目玉位置としてポイントを置いていて、そのポイントへの距離をStore Named Attributeで取得し、マテリアルで使用し、テクスチャを作っています。

スポンサーリンク

Circleの部分

Curve CircleResample Curveで大体10個くらい円の上にポイントを作っておきます。

このポイントの数は、のちにミャクミャクの身体の赤い球の数になるので、お好みで何個でも増殖してください。

※アニメーションについてはあまり詳しく書きませんが、うねうね動いているのは大体このアニメ用と書かれたSet Positionノードにノイズテクスチャをつなげて、適当に動かしているだけです。

アニメーションの部分についてはお好みで、好きなようにうごかしてみてください。

スポンサーリンク

Bodyの部分

赤い球が並んでる部分ですが、ここもただUVSphereが並んでるだけなので、結構シンプルです。

左図のようにUVSphereインスタンスをさっき作ったサークルのポイント上に配置しているだけです。

ポイントはUVSphereをInstance on Pointsに配置するときに、Rotationでキレイにノーマル方向に回転させることと、インスタンスをあとでRealize Instancesで実体化しておくことです。

Rotation

Align Rotation to Vector を二回使って回転させています。一回だと綺麗に配置できませんでした。Curve TangentNormal方向のベクターを使って揃えるとうまくいきました。

Realize Instances

あとでGeometry Proximityでポイントからの距離を取得するときに、実態化していないとその値がきちんととれないので、忘れずに実態化しておきます。

あとは、形を綺麗にしたい方はSubdivide MeshとかSet shade smoothなどを使って綺麗にしてみてください。(ノードを入れる位置によっては効かないときもあり、よくわかりませんでした…。上の図の位置にいれると効きました。)

スポンサーリンク

eye_positionの部分

eye_positionの部分も、最初に作ったサークル上のポイントにポイントを配置していけばいいんですけど、最初にインスタンスに何も入れずに、後半にInstance to Pointsノードを置くことで、ポイントを置くことができました。(変な感じがするんですけど、Pointsノードをインスタンスに入れたらうまくいかなかったんですよね…もしかしたらただのバグかもしれないですが。)

Set Positionノードがやたら入っているのは、ミャクミャクの目玉の位置が、中心に寄ってるとこと外側に寄ってるところがあったので、Normalベクターを使って位置を調整していたり、 アニメーションさせたり、ちょっとz方向に移動させたりしているだけです。

ポイントは最初のサークルのポイント上にインスタンス配置をするときにSelectionにRandom ValueノードのBooleanを使って、全部の球に目玉をおかないようにすること。あとは目玉の位置調整をしたい場合は、ノーマル方向のベクターがそのままではインスタンスになったときに取得できないので、インスタンス配置する前に、Capture AttributeでNormalの値を取得しておくこと、そしてインスタンスになったときに、インスタンスごとにそのノーマルの値を取得しておくことです。

あとはGeometry Proximityノードを最後につなげて、その距離(Distance)をBody部分のStore Named Attributeノードで取得しておきます。

この距離をeye_posと名付けています。これはジオメトリーノード内で作成したオブジェクトにマテリアルをつけなければならないので、Set Materialノードでmyakumyakuなどと名前つけて、マテリアルをセットしておきます。

マテリアルシェーダーで、eye_posの値を見ると右上のような感じで、ポイントから、黒→白のグラデーションができています。左側の図は、わかりやすいように、どのようにeye_positionのポイントが置かれているか、可視化してみたところです。(最終的にこのポイント自体はレンダリングはしません。テクスチャ用の値を出すために使うだけです。)

この目玉の位置が変わることでミャクミャクの目玉もぎょろぎょろ動きますので、この位置もSet Positionノードなどで好きなように動かしてみてください。

スポンサーリンク

マテリアルをつける

マテリアルシェーダーエディタに移ります。ここでいよいよミャクミャクの身体、目玉の色をつけていきます。

さっきのeye_posの値をAttributeノードで取得し、Color Rampノードで目玉(青)、白目(白)、身体(赤)というように設定していけば、ミャクミャクが完成します!

マテリアル部分のノードはとってもシンプルです。

スポンサーリンク

まとめ

この作品のポイントは、やはりGeometry Proximityノードで、目玉の位置、そしてそこからの距離を取得することです。

ミャクミャクの特徴的な模様は、Geometry Proximity ノードによって「目玉の位置からの距離」をベースに生成された、完全プロシージャルなテクスチャによって表現されています。

どこかのポイントからの距離ってマテリアルシェーダーだけではなかなか表現しにくいと思うんですが、ジオメトリーノードなら結構簡単に取得できるし、他にもかなり複雑な動きや配置ができますよね。これを利用するとテクスチャとしてとても面白いものができるんじゃないかと思います。