UMU

portfolio

作:遠藤 克浩

シミュレーション系

極性粒子シミュレーション(膜の自発的生成)

DPD法(をグラフィック優先で改良したもの)を用いて,粒子同士の極性を持たせた分子(疎水,親水)を水分子に溶かすことで,膜が自発的に生成する様子を観察することができました.このシミュレーションはCPUでの並列化や計算アルゴリズムの改善などを通して,ノートPCで数千粒子を60fpsでシミュレーションすることができました.

ブラックホール

GPGPU(並列計算に特化しているGPUにおいて多目的な計算を行うこと)により,数万粒子がブラックホール(中心の黒い球)から受ける重力によってどのように動くかをシミュレーションしています.

対称性のある系において初期値のランダム性が与える影響についての画像

対称的に発展する系があるとして,その系は最終的に綺麗な対称状態になるだろうか?

画像は,ほんの少しの揺らぎを初期値として,青方向へと赤方向へに状態移動する対称的な方程式を用いた場合に,長い時間がたったときに系の状態がどうなっていたかを表しているものです.

画像の通り,綺麗だが,しかし対称性のない最終状態となっています.

方程式が対称的で美しいものでも,複雑な状態が生まれうることを示しています.

創発的成長をするセルラーオートマトン

単純な仕組みから複雑な形を生み出すことができるセルラーオートマトン.

一般的に知られるセルラーオートマトンは,ライフゲームであると思われるが,仕組みを少し変更することで,一風変わった形を生み出すことができます.

この画像は,初期値が少し違うが同じ法則から生まれた状態達です.

大陸マップ風画像生成アルゴリズム

局所的には連続性のある,ランダムな数値を出力するアルゴリズムを用いて,大陸地図風の画像を生成してみたものです.

ブロック遊び

ブロックをつなげてきりはなす,それだけの遊びです

アローオートマトン

オートマトンは,セルラーオートマトン(ライフゲーム)のように,有限個の状態と有限個の遷移規則で動く単純なシステムですが,この単純なシステムが,パソコンやスマホなどと同様に完全な計算能力を持つ場合があります.このことをチューリング完全と呼び,ライフゲームはチューリング完全です.このアローオートマトンは,今までにない新しい種類のチューリング完全のオートマトンを自作したものです.(チューリング完全であることの証明もしております.)

少し詳しい説明は,このPDFを参照してください.

素因数分解専用量子コンピュータシミュレータ QPRIME

この動画は,素因数分解を行う量子コンピュータのシミュレータ(QPRIME)を作成し,実行した様子を示したものです.

このシミュレータの前身として,汎用プログラマブル量子コンピュータシミュレータ(QSIM)があったのですが,プログラムを行うのに専門的な知識が必要なため,ほとんどの人が理解できないという問題点がありました.

そこで,QSIMのコアとなる部分のみを残し,特定の分野に特化することで見た目の面白さをと分かりやすさを増やしたのがQPRIMEです.

QPRIMEにおいても,説明がないと理解するのは難しいという問題点がありますが,視覚的な楽しさはあると思います.

カオス系表示ソフトウェア Chaos;GraphPrinter

Chaos;GraphPrinterは,単純な発展方程式から複雑な模様を生み出すカオス現象をシミュレートし,描画するソフトウェアです.上の2つの画像は,全く違う模様に見えますが,少しだけ係数を変えた同じ方程式から生まれた模様です.

2D流体シミュレーション

これらの動画は,SMAC法による流体シミュレーションを行った様子です.


反応系シミュレーション

生体内では,多種多様な化合物が相互に作用しあい,驚くほど多様な種類の反応を見ることができます.これらの動画は,生体内で起こっている反応のうち,キリンなどのまだら模様を決定するチューリングパターンに関連するシミュレーションを行ったものです.

GPUを用いたリアルタイム流体シミュレーション(3D)

GPUを用いて,リアルタイムで流体の相互作用の計算と流体表面の抽出を行っています.GPU計算の最適化によって,数万粒子からなる流体の計算と描画を,余裕をもって行うことができます※.

(※2014年時ミドルエンドGPUを用いています)

グラフィックス系

1ポリゴン草原

草原の動画ですが,実はなんと1枚の4角形しかありません(4角形なので正確には2ポリゴンでですね.)

なぜ,草原のようなたくさんのポリゴンが必要なものをたったの2ポリゴンで描画できるかというと,面のある1ピクセルの色を決定するために,プログラム上であたかも草がたくさんあるような計算を行い,その計算結果を表示しているからです.

簡単に言うと,1フレームごとに,トリックアートを書き換えているようなものです.草原の動画を簡略化した画像では緑と赤の格子が見えると思いますが,これはすべてトリックアートです.後ろに見える球にもトリックアートが適用されているのが見えるように,いかなる凹凸面でも描画可能です.

1ポリゴン大陸

1ポリゴン大陸と同じように,1枚の四角形上に大陸をリアルタイムで描画します.自作の高さ関数トレーシングアルゴリズムを用いて,できるだけ遠方も描画することを可能にしました.

(1ポリゴン草原では4角形は草原に平行に配置されていますが,1ポリゴン大陸ではカメラに平行に配置されています.)

また,描画アルゴリズムを最適化することで,より複雑な地形を描画しています.

バーテックスシェーダいじり

バーテックスシェーダ(モデルの頂点情報などから,スクリーンスペースでの頂点座標を計算するプログラム)を改造して,球体(静止している)の頂点位置を変更し,球体を変形させています.

回折・反射シェーダ(CD風シェーダ)

表面微細構造テクスチャをもとに,光源と視点の位置から物理ベースの回折・反射現象をリアルタイムでシミュレーションします.回折とは,波の性質を持つ光が干渉することによって,特定の色の光のみが強められることです.表面微細構造テクスチャを変更することで,様々な回折を発生させることができます(動画).

諭吉ジェネレータ

ベース画像の低周波成分と,諭吉画像の高周波成分を合成することで,自然な諭吉を写真内に合成できます.周波数効果により,遠くから見ると諭吉が見えず,近づくと諭吉が見えるようになるという現象を観察することができます.

モアレアート

モアレとは,被写体の縞模様の周期と,デジタルカメラなどのセンサの配置の周期のずれによって,本来存在しない周期の模様が発生することである.このモアレをアートに応用できないかと考えて生まれた画像である.

このモアレ画像を画像としてみるのでも美しいが,この画像自体が縞模様でできているため,ウェブページを上下させてみると,画面解像度と画像の模様の周期の違いによる模様を見ることができるのではないだろうか.このような動的なアートは逆に美術館では見られないという一風変わった面白さがあると思う.

かっこいいモデル

数学的な形状を使ってカッコいい立体を作れないかと思案して作られたモデル.

インクで床を汚す

インクで白い床を汚す様子です.

Zバッファの可視化

ゲームなどで3Dを描画するのに一般的につかわれるZバッファから,もとの立体を可能な限り復元することで,Zバッファがどのような情報を保持しているかを可視化したものです.

自作レイトレーシングエンジン

光のレンダリング方程式に基づいた,レイトレーシングエンジンを開発しました.リアルタイムゲームなどでは再現できない,高次反射も計算されていることが分かります.

ぷにぷにメタボール

メタボールと呼ばれる,なめらかな形状を持つ立体の描画を行っています.2つ動画は描画方法が異なり,前者の動画は,レイマーチング法という方法で,後者の動画はマーチングキューブ法と呼ばれる方法で描画を行っています.

リアルタイムフラクタル描画

Unity上で3次元のフラクタルをリアルタイムで描画します.

止めると見えない動画

動画を再生している間は見えて,止めると見えなくなる.そんな動画を作ってみました.

(画質が低すぎるとノイズのせいで止めても見える場合があります)

数学系

無理数周期配置によるアート

画像のように,無理数の角度ごとに物を配置していくと,何周かして元の角度に戻ってくるということは起こりえない.この性質を利用して円を配置したところ,ひまわりの花のようなきれいな配置が現れた.

4つの4シリーズ

4つの4を使って作ることができる自然数を求める問題がある.この問題を,コンピュータの力を使って求めたものがこちらである.

大量の数がつくられているが,逆にどうしても作ることができない数も存在する.

また,コンピュータは精度に限度があるため,本当は等しくない式を等しいとしてしまう場合がある.それが上の166の式である.これは整数にはならず,166.0000011...となり,誤差は1億分の6程度である.

リーマンの写像定理に基く正則写像を用いたアート

リーマンの写像定理により,ある閉領域からことなる閉領域へ,座標の直交性を保ったまま写像できることが知られている.これを実際に多角形に適用するアルゴリズムとして,シュワルツクリストッフェル変換が知られている.この画像は,シュワルツクリストッフェル変換の直交性の保ちを利用して,極座標の多角形への写像をプロットしたものである.その性質から,プロットは非常に美しいものとなっている.

この画像は,シュワルツクリストッフェル変換による写像を応用して作られたアートで,美しい模様を描き出すことができている.

ライツ・アウト

この画像を注意深く観察してみてほしい.黒か白のマスのグリッドで構成されている.

実は,このグリッドのすべてのマスに対して,そのマス自身とその前後左右のマスの5つのうち黒いマスの数を数えると,すべて奇数になっているという法則がある!

そんなの,適当に点を打っていけば簡単にできると思うかもしれない.しかしながら,あるサイズのグリッドでは,このような法則を満たす配置のグリッドは1つしかない.

次の画像は,1000×1000のグリッドで法則をみたす「唯一の」配置である.

(唯一解しか持たないことの証明と,それを求める高速なアルゴリズムの開発をしました)

単純な距離関数に基づく複雑な立体生成

畳込切断(fold and cut)とよばれる距離関数設計手法によって,非常に単純な関数をいくつか組み合わせることで,複雑な立体を表現することができます.

これらの画像は,遺伝的アルゴリズムを用いた距離関数設計により生み出された形状のうち,いくつかをピックアップしたものです.

4次元立方体

4次元人が,4次元立方体(4次元胞体)を3次元の網膜で見たとき,どのように見えるかを計算しています.

原理は,我々がグラッフィクスの世界で利用している3次元から2次元への射影行列(View Matrix)を拡張した,4次元から3次元への写像を利用して,4次元のカメラが撮影する3次元の映像を撮影し,それをもとに2次元のディスプレイ上へ表示するという仕組みです.

グッドスタイン数列の減少の実感

こちらでは,グッドスタイン数列を計算し,可視化することで,減少を実感しています.

KCSイメージキャラクター(キャラクター違い)

私の所属しているIT系サークル「KCS」のイメージキャラクターを提案する機会があり.イメージキャラクターとしてこちらのキャラクター(文字)を投稿いたしました.図の数式をプロットすると実際に画像のようになります.

Hybolic Tesselation

Hybolic Tesselationとは,双曲面上に同一図形を敷き詰めることです.動画では,任意の角度(1つは直角)から構成される,双曲三角形を敷き詰める場合を示しています.

双曲面上には,私達が普通生活するユークリッド空間では敷き詰められないような形を敷き詰めることが可能です.

人工知能系

慶應義塾大学KCSにて人工知能の理論の勉強や論文の輪読などををおこなう,KCS-AI班の2016年度代表をしています.

顔特徴検出システム

顔の写っている画像から,目・鼻・口などの部位がどの位置にあるのかを検出するプログラムです.段階的探索手法を用いることによって,一度に特徴を検出するよりも精度よく,かつ学習データを少なくすることができます.学習のメインアルゴリズムにはランダムフォレストを使用しています.

ランダムフォレストによる外れ値に頑強な回帰

ランダムフォレストと呼ばれるアンサンブル学習の一種の手法を用いると,外れ値(大きく他のデータとは離れた点)がたくさんある場合でも,頑強に推定ができます.

この画像はランダムフォレストを実装した画像であり,青がデータ点(外れ値がたくさんあることが分かる),緑が回帰結果です.

TD(λ)学習による迷路探索

強化学習の一種であるTD(λ)学習を用いて,エージェントが迷路探索を行う様子をリアルタイムで可視化したものです.ゴール時に報酬が与えられますが,その報酬がゴールから逆に経路をたどって最適経路情報として伝搬されている様子が確認できます.

GPGPUによる自作ディープラーニングライブラリ NNPropagater

NNPropagaterは,DeepLearningを用いた学習・予測をCPU並列/GPUで行うライブラリです.

流行りのDeepLearningのアルゴリズムを習得するために,1から理論を勉強し,実装したものです.この際,CPUでは計算速度が遅かったため,OpenCLコードに書き直し,GPUやCPUで並列計算可能なように実装しました.

もう少し詳細な記事が,こちらのNNPropagater記事一覧にあります.

その他

世界一長いかもしれない素数判定コード

こちらに,Pythonのメタプログラミングの機能を利用した,素数判定のコードが書いてあるとは思えないような素数判定コードがあります.

メタプログラミングとは,何かしらの規則の仕組みを生成する高位の仕組みによってプログラミングを行う方法で,内部的に新しい仕組みを定義することで,これを悪用することで,外側からみると何を行っているかわからないようなプログラムを作ることができてしまう.

音声分析合成システムWORLDをPYTHONに移植

こちらでは,音声分析合成システムWORLDをPYTHONに移植したことについての記事が書かれています.

その他の情報

https://kcs1959.jp/archives/author/umuに,私の書いた記事があります.

・https://twitter.com/UMU____/media は,私のTwitterです.

  • 画像が多いため,すべての画像の読み込みに時間がかかる可能性があります.

使用した環境など:Unity,Visual Studio,Python

created by UMU