動くスケッチ・ソースコード

ジェネレーティブアートとは、ランダムを使って、同じスケッチで無数にバリエーションが出せる。 random() を使って、毎回違う色などが出てくるスケッチを簡単に書いてみよう。

let circleColorR, circleColorG, circleColorB;
function setup() {
  createCanvas(400, 400);
  circleColorR = ~~(random()*256);
  circleColorG = ~~(random()*256);
  circleColorB = ~~(random()*256);
  console.log(circleColorR, circleColorG, circleColorB);
}

function draw() {
  background(220);
  fill(circleColorR, circleColorG, circleColorB);
  ellipse(200, 200, 200, 200);
}

このスケッチに登場する豆知識

~~(random()*256)

p5.jsの色には0〜255の整数が使われます。random() の出力は0以上1未満の数値(小数点あり)になるので、まず256をかけたいですね。それから、整数にするには Math.floor() を使ってもいいですけど ~~ も同じ結果になるだけではなくて処理も速いらしいので、ここで使ってみました。

人のソースコードを見て勉強するときにたまに出てくる裏技みたいなものですので、使うかどうかはもちろん自分で決めますが、書いてあれば理解指定ですね。

p5.jsでジェネレーティブNFTを作ろう!PolyBlocksの概要

PolyBlocksという、Polygonというインフラを使ったNFTサービスがあります。そこで、p5.jsで出来たNFTを作ることができます!かっこいいのを作って、人に贈りましょう。

作品をPolyBlocksに登録する前に下準備

PolyBlocksのコードをコピペしましょう

これからのコードを sketch.js の最初に貼り付けましょう。

window.pb = {
  hash: Array(32).fill(0).map(_=>"123456789abcdefghijkmnopqrstuvwxyz"[(Math.random()*32)|0]).join("") 
};

function sfc32(hash) {
  var a = parseInt(hash.substr(0, 8), 36);
  var b = parseInt(hash.substr(8, 8), 36);
  var c = parseInt(hash.substr(16, 8), 36);
  var d = parseInt(hash.substr(24, 8), 36);
  return function() {
      a >>>= 0; b >>>= 0; c >>>= 0; d >>>= 0;
      var t = (a + b) | 0;
      a = b ^ b >>> 9;
      b = c + (c << 3) | 0;
      c = (c << 21 | c >>> 11);
      d = d + 1 | 0;
      t = t + d | 0;
      c = c + t | 0;
      return (t >>> 0) / 4294967296;
  };
}
window.pb.random = new sfc32(pb.hash);
window.pb.randrange = function(min, max) {
  return window.pb.random() * (max - min) + min;
}
window.pb.randint = function(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(window.pb.random() * (max - min + 1) + min);
}

PolyBlocksの関数を使いましょう

乱数は先ほどのコードで用意される関数を使って出したいですね。

function setup() {
  createCanvas(400, 400);
  circleColorR = ~~(pb.random()*256);
  circleColorG = ~~(pb.random()*256);
  circleColorB = ~~(pb.random()*256);
  console.log(circleColorR, circleColorG, circleColorB);
}

random()pb.random() に帰るだけでいいですけど、指定した範囲の中の整数をランダムに出す関数も用意されていて便利です。

function setup() {
  createCanvas(400, 400);
  circleColorR = pb.randint(0, 255);
  circleColorG = pb.randint(0, 255);
  circleColorB = pb.randint(0, 255);
  console.log(circleColorR, circleColorG, circleColorB);
}

最後に

PolyBlocksにアップするかもしれないという作品を作り始める場合、最初にPolyBlocksのコードを貼り付けましょう。

そして、 pb.random() などを使ってバリエーションを出しましょう。