数学表現

クリエイティブコーディング世界

どうも

HIGA

Enginner

クリエイティブ

コーディングとは

Section.1

Creative coding is a type of computer programming in which the goal is to create something expressive instead of something functional. It is used to create live visuals and for VJing, as well as creating visual art and design, entertainment, art installations, projections and projection mapping, sound art, advertising, product prototypes, and much more.

クリエイティブコーディングとは、機能的なものではなく表現力豊かなものを作成することを目的とするコンピュータープログラミングの一種です。 ライブビジュアルの作成やVJの作成、ビジュアルアートとデザイン、エンターテイメント、アートインスタレーション、プロジェクションとプロジェクションマッピング、サウンドアート、広告、製品プロトタイプなどの作成に使用されます。

表現するための

プログラミング

たとえば

ジェネラティブアート

データビジュアライゼーション

ポストエフェクト

デモシーン

などがあります

その強みとは

Section.2

1. データとの親和性

2. プロシージャル

3. 特異な表現力

データとの親和性

  • データを取得できればビジュアライズ可能

  • マウス、カメラ、音などリアルタイムに反応

プロシージャル

  • 手続き型のことで数式や処理を組み合わせ操作

  • 数値の調整や処理の組み換えによる変更容易性

特異な表現力

  • 数学的な表現につよい

ひとつづつをみると

クリエイティブコーディングを

選ぶ必要性を感じないかも

「それ他の方法でできるのでは?」

「今どきのツールはプロシージャルな部分も多いよ」

「リアルタイムだとクオリティ低くならない?」

「プログラムなんて大変でしょ」

「自由に描くことは難しいよね?」

「工数が増えるのでは?」

まあ、それはある

だが、ツールも色々あるし

それらの強み合わせて考えると

その良さを感じとれる

クリエイティブコーディングとは、機能的なものではなく表現力豊かなものを作成することを目的とするコンピュータープログラミングの一種です。 ライブビジュアルの作成VJの作成ビジュアルアートデザインエンターテイメントアートインスタレーションプロジェクションプロジェクションマッピングサウンドアート広告製品プロトタイプなどの作成に使用されます。

要は適材適所

クリエイティブコーディングも

それに当てはまるという話

まあ、そんなことより

クリエイティブコーディング

たのしい

だから今日は

俺の話を聞いてくれ!

なにで作るのか

Section.3

1. コードベース

2. ビジュアルベース

コードべース

ビジュアルべース

インストールが億劫な

そんな面倒くさがりの人には

コードベース

ビジュアルベース

Webできるプラットフォーム

いつだって

今すぐにだって始められる

ということで

数学からみる表現

Section.4

と題して

本日の一番伝えたいことを

お話しします

コンピュータを使っている以上

どんな内容であろうと結局は

数学的な計算が行われていることに

かわりはありません

普段それを意識することは少ないが

クリエイティブコーディングでは

描画に関する計算を

直接的におこなうことが基本

つまり、数学を制することは

クリエイティブを制する

それは

直接コードを書くことの少ない

ビジュアルベースのプログラミングでも

数学的な思考は大いに役立つ

とは言っても

数学は難しい思う方もいるかも

私もけっこう苦手

とりあえず、今日のところは

考えるな、感じろ

それでは

数学からみる様々な表現を

数学の時間はいつも寝ていた私と一緒に

いろいろと見ていこう

数学から得られる表現

表現に使われている数学

2つの視点から見てみます

1. 座標系

2. 三角関数

3. ベクトルと行列

数学から得られる表現

1. 座標系

主な座標系は2

直交座標系

極座標系

直交座標系

極座標系

a

原点からのそれぞれの軸における距離で求める

3

2

(x, y)

(r, θ)

つまり a = (3, 2) となる

原点からの距離と角度

求める

b

つまり b = (4, 30°) となる

4

30°

X座標Y座標がわかれば

三平方の定理により距離

アークタンジェントにより角度

わかる

つまり

直交座標系から極座標系

変換できる

直交座標系

極座標系

なぜ座標の話を

始めにしたのかというと

なにかに表示されている

または表示するということは

なんらかの座標系をもとに

考えなくては始まらない

その感覚を感じてもらえると

以降の話も理解しやすいかも

2. 三角関数

sin

cos

重ねると

周期ズレている

のがわかる

この性質を考えて

X軸sin の周期

Y軸cos の周期

を当てはめると

円を描いて動く

オレンジが X 軸で

sin の動き

グリーンが Y 軸で

cos の動き

美しい思いませんか?

周期を変えたり

振幅を増減させたり

することも

簡単にできます

そして、それにより

さまざまな音がだせます

周波数 100 振幅 1

周波数 500 振幅 1

周波数 100 振幅 0.5

周波数 500 振幅 0.5

全く逆振幅の音を用意すると

無音になります

面白い思いませんか?

3. ベクトルと行列

ベクトルとは

向き大きさ

要素をもった量

表し方は始点原点として

(3, 4) と表せる

x = 4

y = 3

つまり

座標同じ

実際プログラムでは

座標をベクトルで表したりする

画像で考えると

ピクセルごとの位置をベクトルとして格納

x = 0.4

y = 0.3

a

(0.3, 0.4)

a のピクセルは

ベクトルとして

表せる

全てのピクセルの位置

ベクトルで表せます

それがなんなんだ?

と、思うかもですが

先に行列について話す

行列とは

数など矩形状配列したもの

1  0  0

0  1  0

0  0  1

ベクトル行列作用できる

  1   -1

0.5  1

4

2

=

2

4

  1   -1

0.5  1

4

2

=

2

4

行列

ベクトル

x = 4

y = 2

x = 2

y = 4

これを画像の全てのピクセルで行うと

矢印の先が指すピクセル変わらない

もしかしたら座標系歪めている

と考えるとわかりやすいかも

座標系歪みによりベクトル変化する

このように行列を使って

画像変換できる

一般的な変換の行列には

公式があります

それを使えば

並行移動行列

拡大縮小行列

回転行列

シアー行列

それほど難しいものではないので

覚えてみるのもよいと思います

空間を自在に操れるって

かっこいいですよね

つぎは

1. ポストエフェクト

2. レイマーチング

表現に使われている数学

1. ポストエフェクト

ポストエフェクトとは

画面に効果を与えること

ビフォー

アフター

いくつかの効果がありますので

ひとつづつ紐解いてみます

ディストーション

これで画像のX軸をずらす

適応後

POINT. 三角関数の和

ホワイトノイズ

この色を足す

適応後

POINT. 乱数

ブロックノイズ

これで画像のX軸をずらす

適応後

POINT. 切り捨て

走査線

この色を引くする

適応後

POINT. 周期の短い三角関数

ポスタリゼーション

RGB ごとに二階調化

適応後

POINT. 二階調化

ビネット効果

この色を引く

適応後

POINT. 三平方の定理

もう一度みてみる

ビフォー

アフター

他にも様々なポストエフェクトがある

  • ノイズ

    • パーリンノイ

    • バリューノイズ

    • シンプレック
      ノイズ

    • セルラーノイズ

    • fBm

  • RGB シフト

  • モーションブラー

  • 被写界深度

  • ブルーム

  • モザイク

  • モノクロ

  • アウトライン

etc... 

さまざまな表現と

組み合わせやすい

無限遊べる

2. レイマーチング

レイマーチングとは

3Dモデルなどのポリゴンを使わず

距離関数という式で

3Dオブジェクトを表示する方法

ゆえに

距離関数を制する者は

レイマーチングを制す

と言われている

モデリングデータ

 距離関数

⬅ スクリーン

レイ(通過)⬇

 ⬆ レイ(衝突)

カメラ(視点)からレイ(光線)を放ち衝突判定

衝突判定距離関数を使う

オブジェクトの形は原点からの距離で決める

原点

レイを段階的に進める

平面的にしたレイの軌道

カメラ

原点

スクリーン

オブジェクトまでの距離を取得し

カメラ

原点

オブジェクトの

原点からの距離

スクリーン

スクリーン通過点

レイとオブジェクトの衝突を判定して

カメラ

原点

衝突点

スクリーン

スクリーン通過点

距離が 0 になるまで繰り返す

このエリアはオブジェクトから離れてるので

距離は0より大きい

このエリアは

オブジェクト内なので

距離は0以下

カメラ

原点

衝突点

スクリーン

スクリーン通過点

現在のレイ位置から

オブジェクトへの距離を求める式が

距離関数

距離関数から生まれるのが

レイマーチング

ボックス距離関数では

絶対値最大値などなど

形により様々な数式が使われる

距離関数をグラフでみると

他にも色々と使われている

  • 光の計算

    • 内積

    • 反射

    • 階乗

    • 指数
       

  • アニメーション

    • 三角関数

    • 回転行列

  • 法線の算出

    • 微分
       

  • その他

    • 単位ベクトル

    • 最小値

etc... 

レイマーチング

数学

実に面白い

Section.5

素敵な作品たち

阿部悠希

Mathmare

・unity での制作

・様々な曲線による弾幕

aadebdeb

POOL

・WebGL

・Boids

ジェネラティブアート

SeiichiSega

SHIBUYA scan

・Houdini

・スキャンされた渋谷の  3Dモデルの座標データ

 soma-arc

Morph

・GLSL

・フラクタル

なめらかサンショウウオ

Web Graphic Experiments

・WebGL

・さまざまなノイズ

tokyomax

VFX Graph + RealSence

・Unity + VFX Graph

・RealSence

・ボリュメトリック

 ビデオ

Simon Thommes

 

My Nodevember 2019

・Blender

・Shader Editor

 Lusion

CineShader

・WebGL

・3D空間での

 シェーダアート

・シェーダの取り込み

・立体にできる

 かねた

Unity HDRP + Raymarching

・Unity

・HDPR

・レイマーチング

・リピテーション

・フラクタル

FMS_Cat

Until

・64KB WebGL Intro

・レイマーチング

・音もシェーダ

iq

Happy Jumping

・GLSL

・レイマーチング

まだまだ紹介したいが

あまりにも時間足りない

のでまたの機会に

これからの活躍

Section.6

現在でもさまざまな分野で活躍している

クリエイティブコーディングですが

一度目線を変えて未来について

考えてみようと思います

CESって

知ってますか?

コンシューマー

エレクトロニクス

ショー

毎年1月にひらかれる

電子機器の見本市

その中で発表されたものに

焦点をあててみます

  • North Focals

  • Vuzix Blade

  • Realmax Qian

  • 0glasses RealX

  • LetinAR

  • Magig Leap

  • nreal light

これらは

AR/MRグラス

スマートグラス

です

どんどん増えてきている

他にも

  • スマートミラー

  • 木目調のディスプレイ

  • フレキシブルディスプレイ

  • 視線認識型ライトフィールディスプレイ

  • シースルーディスプレイ

  • ホログラム

さまざまなディスプレイなどが増えて

プロトタイプ

既に製品化されているものも多い

つまり

あらゆるモノで

あらゆる空間で

表現できるように

なっていく

最後に

もうひとつ

スマートシティって

知ってますか?

MaaS

(モビリティ・アズ・ア・サービス)

終着点

先進的技術による

機能最適化

トヨタが発表した実験都市

「ウーブン・シティ」

が話題になりました

表現の場が

広がりそうです

それもあるが

求められる表現の幅

広がりそう

日常に溶け込む

静かな表現

イベントなどで街全体をつかった

壮大な表現

などなど

ということで

クリエイティブコーディング

未来希望に満ちている

THANKS

数学と表現 〜クリエイティブコーディングの世界〜

By Syuji Higa

数学と表現 〜クリエイティブコーディングの世界〜

  • 387