風呂瀬 信五

現実をコードで彫刻する:p5.js Webカメラアートと知覚の再構築

p5.jsでWebカメラを使うとき、私たちは単に現実の映像をディスプレイに映しているのではありません。目の前の光、動き、色彩をどのように解釈し、コードの論理によって新たな視覚として再構築するのか。その具体的なアプローチに悩み、技術的な実装の先に広がる表現の深層、それが持つ哲学的意味合いまで探求したいと願うのは、自然な探究心です。この記事では、Webカメラという窓を通して「今、ここ」にある現実を捉え、それをアートへと昇華させるための技術的な道筋と、その行為が内包する思索の可能性について、深く掘り下げていきます。

デジタルと現実の交差点:Webカメラという窓が映すもの

私たちの目の前にあるWebカメラは、物理的な世界とデジタルな領域をつなぐ、ささやかな窓です。この窓を通して流れ込んでくるのは、光と影が織りなす情景が、無数のピクセルの集合体へと翻訳されたデータストリームに他なりません。そのまま映し出せば、それは単なる鏡像か、監視の眼差しに過ぎないかもしれません。しかし、私たちクリエイティブコーダーの視点から見れば、この生々しいデータの奔流は、無限の可能性を秘めた表現の素材そのものです。

それは、まるで彫刻家が未加工の石塊に向き合う姿に似ています。石塊が内包する形を見出し、ノミを振るうように、私たちはコードという道具を手に、ピクセルの配列が持つ構造を読み解き、新たな意味と形を与えようと試みるのです。Webカメラが捉える「今、ここ」という、あまりにも刹那的で二度と再現不可能な現実の一断面。それを、論理と計算によって記述されるコードという言語でどのように捉え、変容させ、時に永遠性を与えることができるのか。この根源的な問いこそが、私たちの創造の旅の始まりを告げます。

『今ここ』を捉える技術:p5.js createCapture() の基本とピクセル操作

この思索的な探求を支える技術は、驚くほど身近にあります。p5.jsにおいて、Webカメラからの入力を扱うための第一歩は createCapture() 関数です。この一行が、現実世界への扉を開きます。引数に VIDEO を指定するだけで、p5.jsは接続されたカメラからの映像ストリームをDOM要素として生成し、それを p5.Element オブジェクトとして返します。

しかし、真の創造は、この映像をキャンバス上で直接操作することから始まります。取得したキャプチャオブジェクトは画像データとして扱えるため、image() 関数でキャンバスに描画できます。このとき、元のHTML要素は hide() メソッドで非表示にしておくのが一般的です。

let capture;

function setup() {
  createCanvas(640, 480);
  // Webカメラからの映像をキャプチャ
  capture = createCapture(VIDEO);
  capture.size(640, 480);
  // 元のDOM要素はキャンバスに描画するため隠す
  capture.hide();
}

function draw() {
  background(255);
  // キャプチャした映像をキャンバスに表示
  image(capture, 0, 0, 640, 480);
}

このコードは、カメラ映像をそのまま映すだけですが、重要なのは capture オブジェクトがピクセルデータへのアクセスを許している点です。capture.loadPixels() を実行することで、映像の全ピクセルの色彩情報が capture.pixels という一次元配列に格納されます。この配列には、左上から右下へ、各ピクセルのR, G, B, A (赤, 緑, 青, 透明度) の値が順番に並んでいます。この数値の羅列こそ、私たちがこれから彫刻していくべき素材なのです。

視覚の変容と再構築:現実を解釈し、コードで彫刻するプロセス

ピクセルデータという生の素材を手にすれば、私たちは単なる現実の模倣から脱し、それを能動的に「解釈」し、「再構築」する段階へと進むことができます。単純なモノクロ化やセピア調への変換は、その第一歩に過ぎません。私たちの探求は、視覚情報を一度分解し、独自のルールに基づいてまったく新しい表現を立ち上げるプロセスへと向かいます。

例えば、各ピクセルの輝度(明るさ)を算出し、その値に基づいて抽象的な図形を描画してみましょう。以下のコードは、カメラが捉えた光景を、無数の白い円の集合体へと変容させます。明るい場所ほど大きな円が、暗い場所ほど小さな円が描かれ、結果として点描画のような、あるいはアスキーアートのような独特のテクスチャを持つイメージが生まれます。

let capture;

function setup() {
  createCanvas(640, 480);
  capture = createCapture(VIDEO);
  capture.size(640, 480);
  capture.hide();
  noStroke();
  fill(255);
}

function draw() {
  background(0);
  capture.loadPixels();
  
  const stepSize = 12; // ピクセルをスキャンする間隔
  for (let y = 0; y < capture.height; y += stepSize) {
    for (let x = 0; x < capture.width; x += stepSize) {
      const index = (x + y * capture.width) * 4;
      const r = capture.pixels[index];
      const g = capture.pixels[index + 1];
      const b = capture.pixels[index + 2];
      
      // RGB値から簡易的な輝度を計算
      const brightness = (r + g + b) / 3;
      
      // 輝度を円の直径にマッピング
      const diameter = map(brightness, 0, 255, 0, stepSize * 1.5);
      
      circle(x, y, diameter);
    }
  }
}

このコードが行っているのは、現実の光景を輝度という一次元的な情報に還元し、それを円の大きさという別の視覚言語に「翻訳」する作業です。もはやそこに元の映像のディテールはありません。しかし、光と影の分布、そしてカメラの前に立つ人のシルエットといった本質的な構造は、新たな形で保存されています。これは、現実をコードによって解釈し、彫刻するプロセスの一例に過ぎません。オプティカルフローを用いて動きの軌跡を可視化したり、特定の色の領域を検知してインタラクションのトリガーとしたりと、解釈と再構築の手法は無限に広がっています。

リアルタイムインタラクションの詩学:鑑賞者と作品が織りなす関係性

Webカメラを用いたアートが持つ最も本質的で強力な側面は、それが リアルタイムアート であるという点です。作品はもはや完成された静的なオブジェクトとして存在するのではなく、常に「今、ここ」の環境に応答し、生成され続けます。そして、その環境の最も重要な要素となるのが、作品の前に立つ鑑賞者自身です。

鑑賞者の存在、動き、表情、その場の光の変化。そのすべてが作品を構成する不可欠な要素となり、入力データとしてアルゴリズムに作用します。鑑賞者はもはや受動的な傍観者ではありません。自らの身体が、作品を織りなす糸となるのです。この インタラクション の中に、静的な芸術にはない独特の詩学が生まれます。

鑑賞者が手を動かせば、その軌跡から光の粒子が生まれ、画面を舞う。鑑賞者が微笑めば、その表情の変化をトリガーとして、画面の色調が暖かく変化する。このような作品において、鑑賞者と作品の間には絶え間ないフィードバックのループが生まれます。鑑賞者の行為が作品を変容させ、その変化がまた鑑賞者の次の行為を誘発する。この双方向的な「対話」こそが、作品の核心をなすのです。これは、鑑賞者の参加によって初めて芸術が完成するという、古くて新しい命題を、テクノロジーによって鮮やかに体現する試みと言えるでしょう。

創造性の根源としての即興性:ライブコーディングとWebカメラアートの親和性

リアルタイムで流れ込み、決して同じ状態を繰り返さないWebカメラからの入力を扱うことは、音楽における即興演奏に深く通じます。あらかじめ定められたルール(コード)と、予測不可能な入力(現実世界の出来事)との間で、一回性の芸術が立ち現れるのです。アルゴリズムを設計する行為は、ジャズミュージシャンがアドリブ演奏のためのコード進行やスケールを定めることに似ています。

この即興性は、特にライブコーディングの文脈と非常に高い親和性を持ちます。パフォーマーがその場でコードを書き換え、スクリーンに映し出されるビジュアルをリアルタイムに変化させていく。そのビジュアルの生成源がWebカメラからの入力であれば、パフォーマンスはさらに豊かなものになるでしょう。カメラの前に立つ別のパフォーマーや、観客自身の動きに、コードが即座に応答し、予期せぬ美しさを生み出す。

p5.jsのWeb Editorのような環境は、こうした実験的な試みを力強く後押しします。コードを一行書き換え、実行するたびに、現実世界の解釈が更新され、新たな視覚が生まれる。このプロセスは、ジェネラティブアートが持つ「規則の設計」という側面に、現実世界がもたらす豊穣な偶発性というスパイスを加えます。完成された結果だけでなく、その生成のプロセス自体が、観る者にとっての эстеティックな体験となるのです。

世界と対話し続けるコード:変容する視覚が問いかける存在の詩

最終的に、Webカメラを用いたクリエイティブコーディングは、私たちに何を問いかけるのでしょうか。それは技術的な達成や目新しい表現を超えて、私たちが世界を「見る」という行為そのものへの、根源的な問い直しです。私たちが日常的に認識しているこの「現実」もまた、網膜が捉えた光の信号を、脳という巨大な情報処理系が解釈し、再構築した主観的なモデルに過ぎないのかもしれません。

コードを通して意図的に現実の視覚を変容させる試みは、私たちの知覚がいかに不確かで、構築されたものであるかを鋭く突きつけます。カメラに映る自らの顔が、ピクセルの渦へと分解され、アルゴリズムによってまったく別の論理で再構成される様を眺めるとき、私たちは「私」という存在の輪郭がどこにあるのか、その境界の曖昧さに思いを馳せるかもしれません。

作品は、私たちがコンピュータの前を離れた後も、刻一刻と変化し続ける現実世界と、それを解釈し続けようとするコードとの間で、終わることのない対話を続けます。p5.jsとWebカメラの組み合わせは、単なる便利なツールセットではありません。それは、この流動する世界の中で、私たち自身の存在と知覚の意味を問い直すための、静かで、しかし強力な思索の道具なのです。

関連記事