Blenderで3DのNFTコレクションを作成する方法

Blenderで3DのNFTコレクションを作成する方法

NFTは、コレクターがデジタルアートの世界へ参入することを可能にし、アーティストにとっては自分の作品の認知度を高める窓口になるとして急速に人気になりました。3D NFTがアートシーンで注目を集める中で、コレクターにユニークな作品を紹介する手段として、3D作品を単純な一つの画像だけでなく、より幅広く多様なNFTコレクションに発展させる方法を知ることは重要です。その上で、このガイドでは基本的なBlenderのシーンを、数百または数千ものダイナミックなアートコレクションに生成する方法について説明します。

最初のステップ

3D NFTコレクションを自動作成をする前に、あなたが求めるコレクションの変動性を分析することが重要です。 つまり、ランダムなコレクションがいいのか、それとも最終的なレンダリングを細かく設定できるようにするのかを決めることが必要です。ランダムにしたい場合、ジオメトリノードまたはシェーダーを使用するだけで大丈夫ですが、複雑な変更を必要とする場合は、短いPythonスクリプト、またはBlend_My_NFTsなどの特殊なアドオンを使用したほうが良い場合があります。

Blenderで3DNFTコレクションを作成する方法

この記事では、この森のレンダリングを例にして、3D NFTコレクションを作成する方法と、blendファイルからたくさんのユニークなNFTコレクションを作成する方法について説明します。 これには、ジオメトリノード、ドライバー、およびBlenderのPythonAPIを使用してレンダリングを準備します。 まず、森を構築するさまざまなバリエーションのオブジェクトとコレクションのセット、シーンのさまざまなマテリアルを準備し、次に、シーンのキーフレームに基づいてこれらを編集し、フレームをblenderのレンダーファームに簡単に送信できるようにします。
(※弊社のBlenderレンダーファームではBlenderのレンダリングを33%オフでご利用いただけます。また、こちらから新規登録していただくと、50$のレンダリングクレジットを取得できます。)

内容を整理する

ノードツリーとスクリプトを使用して3DNFTコレクションを作成するために、編集する必要のあるプロパティを簡単に見つけられるように、整理しておくことが重要です。 NFTコレクションのベースとなる8つのさまざまな種類の木のコレクションと、カメラや床のオブジェクトなど、他の要素をホストする「シーン」コレクションを含むようにシーンを編成しました。

Blenderで3DNFTコレクションを作成する方法-内容を整理する
Blenderで3DNFTコレクションを作成する方法-内容を整理する

また、さまざまなテクスチャマップのバリエーションから簡単に選択できるように、ツリーマテリアルを設定しました。 各テクスチャバリエーションの名前が番号に変わっているので注意してください。 これは後で重要になってきます。これにより、範囲内のランダムな数を選択するだけで、使用しているテクスチャを簡単にランダム化できるのです。 最後に、後でオブジェクトのプロパティを参照するときのために、名前に一貫性をつけて整理しやすいようにしてください。

ジオメトリノードを使用したオブジェクトの生成と変更

まず、ジオメトリノードを使用して森の木、草、岩を自動的に変更する方法を見てみましょう。 サーフェス上のジオメトリノードは非常に単純です。 デフォルトのノードツリーは、オブジェクトのジオメトリを取得し、グループ出力ノードを介して直接送り返します。 ジオメトリを変更または完全に置き換えるために間に配置するもので、ビューポートとレンダリングに表示される内容全てをコントロールできます。

たとえば、オブジェクトは編集モードでは頂点をゼロにすることができますが、ノードを介してジオメトリを追加すると、無限に複雑なメッシュになります。 これにより、ジオメトリノードはBlenderのメッシュモディファイヤと少し異なります。

この例では、1層目のメッシュから始めて、その上に木、岩、草を配置し、作成したものをランダム化する簡単な方法を紹介します。 基盤の設定は非常に簡単です。基盤のジオメトリを入力として受け取り、その面にポイントを分散して、ツリーコレクションの1つからオブジェクトをインスタンス化できます。 その後いくつかのランダム値のノードを追加し、単一のシード番号を変更することで簡単にランダム化できるシードを設定できます。

この設定は、すべてのさまざまなレンダリングを生成する方法の基本となります。 次に、設定を変更して、ノードツリーがフォレストの作成に使用するコレクションを変更できるようにします。

ジオメトリノードを使用したオブジェクトの生成と変更

残念ながらジオメトリノードには、ワンクリックでコレクションをランダムに選択する方法がありません。 しかしいくつかのノードを使用して、探しているランダム性を模倣するセットアップを作成することができます。 一連のスイッチ+減算ノードを追加すると、後でスクリプトを介して、ランダムな数で簡単に設定できる単一の整数値に基づいて、使用するコレクションを設定できます。

各スイッチノードはブール入力を使用して、数値が1を上回っているか下回っているかを確認し、入力値から1を減算して、1を超える数値がなくなるまで再試行します。たとえば、整数を2に設定した場合、ブール値が3番目のスイッチで「false」を返し、3番目のコレクションで「ループ」を終了する前に2回減算する必要があります。 コレクションを設定するために必要なのは、0〜7の数値を選択することだけです。

Blenderで3DNFTコレクションを作成する方法

ここからは基本的に、必要な要素に対してこの設定を繰り返していくことができます。 今回は、いくつかの岩や草を追加しました。

Pythonとドライバーを使用して変更を自動化する

シーンに変更を加えるための適切な基盤ができたので、変更を自動化するために、いくつかの基本的なPythonスクリプトを使用する必要があります。 それ以外の場合は、画像をレンダリングするたびに、ジオメトリシード値とマテリアルを手動で変更する必要があります。

小さいものから始めて、ドライバーを使用してフレームに基づいてシードを変更することにより、ジオメトリノードのシード値を変更できます。 ジオメトリ値はすでにランダムであるため、複雑なスクリプトを避け、その時点のフレームをシードとして使用できます。 これには、シードノードの値を#frameに変更します。 ハッシュタグは、関数を使用していることを意味し、フレーム関数はシーンの現在のフレームを呼び出します。

Pythonとドライバーを使用して変更を自動化する

シーンの他のランダムな要素については、Pythonをもう少し深く掘り下げる必要があります。 レンダリングするすべてのフレームで変更する必要があることはわかっていますが、シード値とは異なり、マテリアルセットアップで特定の範囲のランダムな数を返し、実際に特定のノードをリンクする必要があります。 これは、Blenderのテキストエディターで短いPythonスクリプトを設定することで実行できます。このスクリプトは、データブロックを参照することで、シーンの特定の要素を変更できます。

以下で、必要な要素を変更するために実行するスクリプトの基本を紹介します。 独自のオブジェクトを作成するには、独自のシーンのオブジェクトのデータブロックを使用して、同じ原則に従います。 フィールドにカーソルを合わせてCTRL-SHIFT-Cを押すだけで、任意のプロパティのデータパスをコピーできます。 #の後にテキストが続く行は、スクリプトの各行をわかりやすくしています。

# Imports the Python libraries we need
import bpy
import random

# Call our tree material and geometry node tree
material = bpy.data.materials["trees"]
geometry = bpy.data.node_groups["Trees"]

# Set our texture seed and tree collection seed to random integers within a range
tex_seed = random.randint(1,4)
msh_seed = random.randint(1,7)

# Set our tree collection seed in the geometry node tree
geometry.nodes["msh_seed"].integer = msh_seed

# Set our texture to be tex_seed, corresponding to the node of the same name.
texture = material.node_tree.nodes[str(tex_seed)].outputs[0]

# Set the input the texture should connect to
input = material.node_tree.nodes["tex_input"].inputs[0]

# Link the texture to the input
material.node_tree.links.new(texture, input)

次に、スクリプトによる変更をフレーム変更関数に追加するハンドラーを使用して、フレームが変更されるたびにこの関数を実行するように設定し、スクリプトを毎回強制的に実行させます。 まず、これまでの結果を関数にネストし、スクリプトの最後にその関数を追加します。 これで、[実行]をクリックして、フレームを変更できます。 機能しない場合は、[ウィンドウ]> [システムコンソールの切り替え]でシステムコンソールのエラーを確認できます。

最後のステップで、テキストエディタの[テキスト]> [登録]で登録することにより、Blenderファイルを開くたびに実行するようにスクリプトを設定できます。 これは、設定したスクリプトを使用しながら、特別な構成なしでプロジェクトファイルをレンダーファームにアップロードできるということです。

import bpy
import random

def my_handler(input1,input2):
        material = bpy.data.materials["trees"]
        tex_seed = random.randint(1,4)
        msh_seed = random.randint(1,7)
    
        bpy.data.node_groups["Trees"].nodes["msh_seed"].integer = msh_seed
    
        texture = material.node_tree.nodes[str(tex_seed)].outputs[0]
        input = material.node_tree.nodes["tex_input"].inputs[0]
    
        material.node_tree.links.new(texture, input)

bpy.app.handlers.frame_change_post.append(my_handler)

ここからは基本的に、さまざまなメッシュ、ジオメトリノード、およびマテリアルを使用して無限のバリエーションを追加できます。 最後のシーンでは、明るい色と他の要素の一層目にランダム化を追加し、さらに変動性を作成しました。そして結果は、膨大な数のレンダリングになりました。

Blenderで3DNFTコレクションを作成する方法

このセットアップの仕組みについてさらに詳しく知りたい場合は、このシーンのプロジェクトファイルをダウンロードして、ファイルを分析し、自分のレンダリングに活用してください。

NFTコレクションの作成に関するその他の情報は、NFT専門アーティストであるVictor Duarteのインタビューをご覧ください。また、シーン作成のスクリプトについて詳しく知りたい場合は、BlenderStudioのアーティスト向けスクリプティングコースからご確認いただくことをお勧めします。

>Blenderレンダリングはこちらから 

>ガレージファームのTOPへ

関連記事

live chat