見出し画像

Generative NFT コレクションの作り方

NFT市場において、海外ではGenerative NFTという1000枚や10000枚単位でのNFTが中心です。日本においても、OnigirimanさんなどがGenerativeNFTを出して大きな売り上げを建てています。クリエイターさんにとってGenerativeNFTに興味を持つ人は多いのではないでしょうか。

今回、SoudanNFTの新しいGenerativeNFT「Love Addicted Girls with BIG LOVE」をつくりましたが、それにあたりGenerativeNFTを構築するプログラムを作りましたが、今後この領域に進出したい方に向けてプログラムと作り方を無料で公開します。

今後、GenerativeNFTを作りたいと考えている方に、少しでも役に立てばうれしいです。

パーツ構成の検討

まず初めに、ジェネレーティブNFTは、(プログラム自体で画像生成をするフルオンチェーンプロジェクトを除き)パーツ構成に分けて画像データを作り、それをシステムで合成するのが一般的です。ですので、まずはデザイナーと協同しながらパーツのレイヤーを検討していく必要があります。今回の「LAG」コレクションでは、下記のレイヤー構成で構築すると決めました。

これは製作段階でのレイヤー構成を決めるにあたっての資料です。

今回の「LAG」コレクションでは、外部アーティストとのコラボレーションも積極的に進める方針であったため、テイストの違うアーティストをどうやって一つのコレクションに収めるか、様々な議論を行いました。

ここでひとつ大事なのは、レイヤー分けが増えるにあたり、全体の枚数が指数関数的に増えるということです。たとえば、5つのレイヤーで5つずつパーツがあると、5の5乗で3125通りになります。ですので、全てのパターンを画像生成することは難しいですし、その必要もないと考えています。

もし背景ごとにレアやノーマルなど排出率を分けたい場合、プログラム側で排出確率を調整することが必要です。幸いにも、今回はプログラム側に排出率調整機能がついています。

ただ、今回「LAG」コレクションでは、前髪と後ろ髪がそれぞれレイヤーに分かれています。前髪と後ろ髪はそれぞれ同じ色のパーツを適用する必要があります。ですが、通常のGenerativeNFTでは、このような構成は少ないため、後ほどプログラムを改造する必要が出てきました。

パーツ画像の作成

パーツ構成が決まったら、パーツごとにそれぞれ画像を作成していきます。今回、実際のパーツ画像作成においては、デザイナーチームにほぼお任せして、エンジニア・開発の観点からはほとんど口を出していません。

基本的にGenerativeNFTを作るときは拡張子はpngで統一しないと動かないことが多いので、png形式で受け渡ししてもらいます。

出来たパーツ画像は、パーツごとにフォルダ分けして送ってもらいましょう。

実際に生成した後の出来上がりファイルをデザイナーに確認してもらうためにも、早めにこの工程を進めていった方がいいです。

画像生成プログラムの準備

パーツ画像を準備したあとは、実際にプログラムを回してジェネレーティブ画像を生成します。今回、複数のプログラムを検討したところ、プログラムとしての完成度が高く、また拡張が簡単でドキュメントが充実しているこちらのプログラムを利用することにしました。

基本的にはこちらの記事に載っているプログラムなのですが、今回の我々のデータを生成するためには、下記の変更をしなければいけませんでした。

・前髪と後ろ髪がそれぞれ1対1で対応している必要がある。
・MetaDataがopenseaに対応している必要がある
・ThirdWebというシステムへの対応もしたい

なので、元のプログラムをフォークして、新しくプログラムを作成しました。このプログラムはMITライセンスで公開しているので、誰でも利用可能です。

具体的には、下記の修正をしています。

・configにlink機能を追加。パーツ画像が1対1で対応するような仕組みを取り入れる。
・metadata機能を拡充。OpenSea上で、パーツの表示ができるように
・.gitignoreの追加や、不要ファイルの削除など。またドキュメントの追加

プログラムのインストール方法

ここからはプログラムの動かし方になりますので、興味のない方は次の見出しまで飛ばしてください。

こちらのプログラムはPythonというプログラム言語で開発されています。ですので、実際にPythonが動く環境を用意しなければいけません。もし、プログラミング経験が全くないがGenerativeNFTを作りたい場合、Pythonの本を買って勉強することをオススメします。幸いにも、サーバーの設定だけ出来ればあとは複雑な文法は使わずともプログラムを動かすことが可能です。

Pythonが動くサーバーを用意した後は、このプログラムのインストールを行います。まずはgitから本プログラムをサーバーにダウンロードします。

git clone https://github.com/gurujowa/generative-art-nft

そのあと、必要なライブラリをインストールします。

pip install Pillow pandas progressbar2

このコマンドを実行すると、プログラムが依存する3つの重要なPythonパッケージがインストールされます。

Pillow-画像処理ライブラリで、パーツな画像をスタックするのに役立ちます。
Pandas-データ解析ライブラリで、画像のメタデータの生成と保存を支援します。
progressbar2-画像生成の進捗状況やETAを表示するライブラリです。

パーツ画像の設定を追加

今回のLAGコレクションで利用したテストデータが入っていますので、プログラムのテストであればこのままでも動かすことが可能です。もし、ご自身のパーツデータを入れてプログラムを動かしたい場合は、config.pyファイルを変更する必要があります。

まず、必要な画像を assets/ フォルダの中に、パーツごとにフォルダ分けして入れてください。LAGコレクションだと、前髪・後ろ髪・背景・顔・服装の5つのフォルダに分けています。

画像を格納した後は、config.pyファイルを修正します。

CONFIG = [
    {
        'id': 1,
        'name': 'background',
        'directory': 'background',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 2,
        'name': 'backhair',
        'directory': 'backhair',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 3,
        'name': 'body',
        'directory': 'body',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 4,
        'name': 'face',
        'directory': 'face',
        'required': True,
        'rarity_weights': None,
    },
    {
        'id': 5,
        'name': 'fronthair',
        'directory': 'hair',
        'required': True,
        'rarity_weights': None,
        'link': {
            "backhair1.png" : "hair1.png",
            "backhair2.png" : "hair2.png",
            "backhair3.png" : "hair3.png",
            "backhair4.png" : "hair4.png",
        },
    },
]

それぞれ、下記のkeyを持っています。

  1. id: これはレイヤーの並び替えの順序を表しています。このレイヤーの並び順は、画像の重ね合わせの順序通りに記述してください。

  2. name: レイヤー名です。こちらはmetadataに利用されます。

  3. directory: レイヤーのフォルダ名です。

  4. required: こちらがtrueの場合、そのレイヤー画像は必ず表示されます。背景や目など、必ず表示したいものはtrueにしてください。アクセサリなど、必ず表示しなくても良いものはfalseにします。 最初のレイヤーは必ずtrueにしてください。

  5. rarity_weights: これは各レイヤーのレアリティ設定を行います。

  6. link: これは、前髪・後ろ髪などのように、他レイヤーと1対1対応しなければいけないときに使います。例文のように、1対1対応しなければいけない画像に関しては、それぞれの対応関係及び、そのファイル名を記述してください。

レアリティの設定について

こちらのプログラムは、各パーツごとにレアリティの設定をすることが出来ます。 レアリティの設定方法は「none」と「random」と「Python List」の3つあります。

None rarity_weightsの値を「None」に設定すると、各パーツには同じ確率が割り当てられます。したがって、5つのパーツがある場合、それぞれのパーツは全体の約20%に現れます。 requiredがFalseの場合は、そのパーツが全く出ないことも同じようにあります。先ほどのケースでは、requiredプロパティをFalseにした場合、各パーツは全体の約16.6%に現れます。また、16.6%のアバターはそのパーツをもっていないことになります。

random randomは、パーツの出現確率がランダムになります。あまりお勧めの設定ではありません。

Python List レアリティの設計をする場合は、これが一番良いです。 各フォルダのパーツの名前順で検索して、一番先のものから順番に出現確率を設定します。

[100, 5, 5, 15, 5, 5, 15, 15, 5, 1]

この場合、「パーツを持っていない」ことの出現率が100で、二番目の出現率が5となっています。この場合、2番目の出現率は、1番目の「パーツをもっていない状態」の20分の1になり、20倍レアであることになります。

画像の生成

config.pyファイルの設定が完了したら、いよいよGnerativeNFT画像を生成します。ターミナル(またはコマンドプロンプト)を開き、generative-art-nftフォルダに移動します(cdコマンドを使用)。その後、次のコマンドを実行してください。

python nft.py

このコマンドを実行すると、画像生成プログラムが起動します。まず、config.pyファイルが有効であるかどうかをチェックします。次に、可能な組み合わせの総数が表示されます。 次に、作成したいアバターの数を聞いてきます。重複しているアバターを削除しても十分に余るように、作りたいアバターの20%以上を作ることをお勧めします

生成された画像とそれに関連するメタデータは、出力フォルダに格納されます。メタデータファイルはCSVファイルで、ThirdWebなどを使うことにより、OpenSeaで情報を表示することが出来ます。

これで画像生成が出来れば、完成です!openseaにアップすることも出来ますし、独自コントラクトを利用したmintシステムを作ることも出来ます。

GenerativeNFT のプログラム公開及び開発サポート

今回、SoudanNFTではLove Addicted Girl NFTの制作を行ううえで、このプログラムを作りました。今回のプログラムはオープンソースで公開し、誰でも使えるようにします。今後、日本でGenerativeNFTを作りたい人たちが少しでも増えればうれしいです。

このプログラムはMITライセンスで公開されています。誰でも改変し、公開することが可能になっています。

また、SoudanNFTではNFTクリエイターや開発者向けの技術サポートも、私が出来る限り行いたいと思っています。ぜひ、Discordでご連絡ください!一緒に、NFTの楽しい世界を切り開いていきましょう。

もし、このプログラムが気に入った場合、ぜひLove Addicted Girl NFTを買ってください!皆さんで一緒に楽しいNFTの世界に行きましょう。


この記事が気に入ったらサポートをしてみませんか?