本記事は、Processingで利用できるレンラダー“joons-renderer”の紹介です。フォトリアリスティックな光の表現の設定などProcessing作品の表現の幅を広げてください。

“joons-renderer”とは。

“joons-renderer”は、2012年にJoon Hyub Leeがリリースしたレンダラーです。Processing上でSunflowのレイトレーシングを適応します。このライブラリーを使用することで3Dで制作したグラフィックをリアルに表現する事ができます。※Sunflowは、実写的なオープンソースのレンダラー。

Index

joon’s Renderer library のダウンロードとインストール

Processing IEDからダウンロードとインストールが行えます。

エディタ右上のボタンより、Contribution Manager を開き の Libraries より「 joon’s Renderer」を検索、インストールを行います。joons.JoonsRenderer をインポート、利用できるようになります。

その他にも、手動で下記 joons-rendererのGithubよりLibraryをダウンロードのちzip解凍してフォルダをそのまま、Processingのlibrariesにコピーペーストしても利用できます。
» https://github.com/joonhyublee/joons-renderer/wiki/Download

joon’s Renderer libraryの使い方

基本的な使い方のイメージは、void draw()内で、レンダリングする物体をbeginRecord()とendRecord()で囲み、void keyPressed()などを利用してrender()を設置しキーを押すことでレンダリングすることになります。デフォルトにてpngでスケッチフォルダに出力されます。

また、あらかじめ void setup()内で、イメージサイズやサンプリング、被写界深度などの出力イメージをセティングすることができます。

サンプル出力とサンプルコード

下記、出力画像・サンプルコードは、joons-rendererのGithubからの抜粋です。

setup()にて、各種イメージの設定を行い、draw()にてbeginRecord()とendRecord()間に、diffuseやlight、glass、mirrorといった色を設定します。

最後にvoid keyPressed()でレンダリングを行います。


import joons.JoonsRenderer;

JoonsRenderer jr;
ArrayList boxes = new ArrayList ();

//Camera Setting.
float eyeX = 0;
float eyeY = 120;
float eyeZ = 80;
float centerX = 0;
float centerY = 0;
float centerZ = 10;
float upX = 0;
float upY = 0;
float upZ = -1;
float fov = PI / 4; 
float aspect = 4/3f;  
float zNear = 5;
float zFar = 10000;

void setup() {
  size(800, 600, P3D);
  jr = new JoonsRenderer(this);
  jr.setSampler("bucket");
  jr.setSizeMultiplier(1);
  jr.setAA(0, 2, 4); //setAA(minAA, maxAA, AASamples), increase AASamples to increase blur fidelity.
  jr.setCaustics(20);
  jr.setDOF(130, 3); //setDOF(focusDepth, lensRadius), bigger the lens radius, the blurrier the unfocused objects.

  for (int i = 0; i < 200; i++) {
    boxes.add(random(150)-75);
    boxes.add(random(150)-75);
    boxes.add(random(150)-20);
  }
}

void draw() {
  jr.beginRecord(); //Make sure to include things you want rendered.

  jr.background(0);
  camera(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
  perspective(fov, aspect, zNear, zFar);

  //Floor.
  jr.fill("diffuse", 100, 100, 100);
  int w = 10000;
  beginShape(QUADS);
  vertex(w, -w, 0);
  vertex(-w, -w, 0);
  vertex(-w, w, 0);
  vertex(w, w, 0);
  endShape();

  //Lighting.
  jr.fill("light", 30, 30, 30, 64);
  int z = 50;
  beginShape(QUADS);
  vertex(-z, -z, 150);
  vertex(-z, z, 150);
  vertex(z, z, 150);
  vertex(z, -z, 150);
  endShape();

  //Random Boxes.
  jr.fill("diffuse", 255, 255, 255);
  for (int i = 0; i < boxes.size()/3; i++) {
    translate(boxes.get(i*3), boxes.get(i*3+1), boxes.get(i*3+2));
    box(2);
    translate(-boxes.get(i*3), -boxes.get(i*3+1), -boxes.get(i*3+2));
  }

  translate(-10, 0, 20);
  jr.fill("glass");
  sphere(15);
  translate(20, 0, 0);
  jr.fill("mirror");
  sphere(15);

  endShape();

  jr.endRecord(); //Make sure to end record.
  jr.displayRendered(true); //Display rendered image if render is completed, and the argument is true.
}

void keyPressed() {
  if (key == 'r' || key == 'R') jr.render(); //Press 'r' key to start rendering.
}

参考/https://github.com/joonhyublee/joons-renderer/wiki
※細かなReferenceについては上記のjoons-rendererのGithubにてご確認してください。

サンプル|barbe_generative_diary / Sound visualization

台湾台北市にある華山1914文創園区にてフィールドレコーディングを行いました。録音した鳥のさえずりのサウンドデータをベースにjoon's Renderer libraryを利用し視覚化実験を行いました。
Sound visualization // bird’s nest // recording
Field recording // Huashan 1914, Taipei, Taiwan @huashan1914_creative_park
Recorder:zoom F3
Microphones:BasicUco / LOM audio

Recommended Book for Processing

多くあるジェネラティブアートの書籍の中から、チュートリアル本として分かりやすいProcessingをベースとした入門書3冊を紹介しています。
» [Generative art のすすめ、ビギナーのためのProcessing 入門書3冊

Recommends on Amazon

ジェネラティブアート関連書籍やツール類のまとめとてして、barbe_generative_diary ページ(Amazonインフルエンサープログラム)にて随時紹介しています。気になるものを是非チェックしてください。