GLSL/WebGL

【GLSL】『レイマーチング』入門(3) 距離関数を使ってみる・回転・合成・量産

プログラミングでかっこいい映像がつくれるということで始めた『レイマーチング(Ray Marching』という手法。

前回の記事。

お手本の映像はこちら。

今回は、『立方体(りっぽうたい)』の『距離関数』を使ったり、回転したり、合成させたりしてみました。

アオキ
『立方体』は、四角形の3D版ですかね。
Sponsored link

『レイマーチング』入門 距離関数 立方体をつくる

『レイマーチング(Ray Marching)』という手法では、

『距離関数』がとても重要な役割になっていて、

描画したい図形によって『距離関数』を変える必要がでてきます。

今回登場したのはこんな『立方体』。

『距離関数』はこちら。

『距離関数』を立体的に見せるための『法線ベクトル』はこちら。

アオキ
sphere_normal を box_normal に変えただけですね。

『レイ(Ray)』の判定を、sphere_d からbox_d に変更すれば『立方体』が表示されます。

カメラがより過ぎてた感があるので 少しカメラを後ろに下げておきます。

『レイマーチング』入門 距離関数 回転させてみる

『立方体』を正面から見ただけでは3D感がでないので、

回転させてみることにします。

物体を回転させるにはいくつかの方法があるのですが、

今回の動画では『回転行列』を使っていました。

『回転行列』を使うと、
決まった法則でかけ算することで、
座標を回転させることができます。

Wikipedia 回転行列

X軸の回転行列はこちら。

コードにするとこう。

『mat3』という型が、3×3の行列を表すようです。

『回転行列』の

  • 左上、中上、右上
  • 左中、中中、右中
  • 左下、中下、右下 

という順番で書いています。

Y軸の回転行列はこちら。

コードはこう。

実際に使う時はマウス位置のX、Yと連動させています。

『レイ(Ray)』の位置も回転させています。

アオキ
これで、マウスの動きに合わせて『立方体』をぐるぐる動かすことができます。

Sponsored link

『レイマーチング』入門 距離関数 合成してみる

『距離関数』は単独で使うのはもちろん、

2つの『距離関数』を合成させることもできます。

作成済みの2つの『距離関数』を合成してみます。

  • 『球』の『距離関数』
  • 『立方体』の『距離関数』

min関数 やmax 関数を使うことで合成できるようですが、
うまく雰囲気が掴めてないのでやりながら覚えていく方がいいかなと思います。

立体的に見せるための『法線ベクトル』も作成します。

アオキ
名前が object_normal になっただけですね。

『レイ(Ray)』の判定なども box_d から object_d に変更します。

こんな感じで表示されればOKです。

アオキ
おぅ、みごとにまざっとりますな・・
アオキ
ちなみに、『球』の距離関数の値を2.0 -> 1.5 あたりに変更すると、合成具合を調整できます。

他にもたくさんの『距離関数』があるようです。

『距離関数』の海外サイト

うまく組み合わせたり加工することで、いろんな画像がつくれるようで。

GLSLレイマーチング研究_距離関数について勉強してみた

アオキ
ここはつど調整しながら作っていく感じでしょうな。

『レイマーチング』入門 距離関数 スムースに合成してみる

『距離関数』2つの合成をよりスムーズにするための方法もあるようです。

アオキ
ここはわからん・・

どうやら『exp』 はネイピア数で、『log』が対数だそうですが、

アオキ
だとしてもなにがなんだか・・

なので、素直にコピペしておきます。

こちらの記事により詳細が書かれています。

オブジェクト同士を補間して結合する

合成用の距離関数に、作成した『smin関数』を設定します。

こんな感じに表示されればOKです。

アオキ
確かにさっきよりスムーズに合成されてますな。
Sponsored link

『レイマーチング』入門 距離関数 量産してみる

『レイマーチング(Ray Marching)』では、複数の画像を同時に見せるのも簡単なようで、

『mod』関数を使うと実現できます。

mod関数は数学では『合同式』というそうです。

GLSLの数学的な関数で感じたこと

これだけでこんな映像が表現されます。

アオキ
な、なんかこうどわーっと・・(語彙力

カメラの動きを調整することで、
前に進むような映像もつくることができます。

完成版のコードはこちら。

ここに貼り付けると動くと思います。

GLSLSandbox

※そこそこ負荷が高いので古いパソコンだと動かないかも、です。

アオキ
結構な行数になったけど、一つずつ抑えて覚えていけばなんとかなる、かな・・

『レイマーチング』入門 まとめ

先人のありがたい動画のおかげで、『レイマーチング(Ray Marching)』のたくさんの知識をまとめてえることができました。

もちろんまだまだわからないことがたくさんありはしますが、

『守破離』の精神で、まずはコピーしつつ解読してネタを増やしていきたいなと思います。

アオキ
GLSL(シェーディング)を自在に操れるようになればまさに魔法使いな気分になれそうですな。
created by Rinker
¥2,160 (2019/07/17 11:39:36時点 Amazon調べ-詳細)

『GLSL(シェーディング)』関係ではこんな記事も読まれています。

1. 【GLSL】プログラミングでかっこいい映像をつくりたい! 〜『TouchDesigner』を見据えて

2. 【GLSL】プログラミングでかっこいい映像をつくるには『レイマーチング』なるものを覚えればいいらしい

3. 【GLSL】『レイマーチング』入門その1 距離関数とレイとカメラの設定

4. 【GLSL】『レイマーチング』入門(2) 立体的に見せる方法〜光の反射は『内積』で〜

5. 【GLSL】『レイマーチング』入門(3) 距離関数を使ってみる・回転・合成・量産

6. 【TouchDesinger】で『GLSL』を使う方法まとめ【画像あり】

6. 【GLSL】波のつくり方簡易まとめ。波もプログラミングでつくれます【コピペスタイル】

 

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


関連記事

  1. GLSL/WebGL

    【TouchDesigner】で『GLSL』を使う方法を動画で学んでみる その1と2

    前回の記事で『TouchDesigner』と『GLSL』を連携させる方…

  2. GLSL/WebGL

    【TouchDesigner】『GLSL MAT』の使い方 3次元でぐりぐり動かしてみる

    『プログラミング』を使ってかっこよく、インタラクティブな映像をつくり…

  3. GLSL/WebGL

    【GLSL】『レイマーチング』入門(2) 立体的に見せる方法〜光の反射は『内積』で〜

    プログラミングでかっこいい映像をつくる方法の一つに、『レイマーチン…

  4. GLSL/WebGL

    【GLSL】『レイマーチング』入門その1 距離関数とレイとカメラの設定

    かっこいい『3Dプログラミング』をつくりたいとググって見つけた『レイ…

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

    三角関数の使い方〜わかりやすさ重視でまとめてみた【動画あり】

    前回の記事で、プログラミングを使って数学がわかるという『コー…

  6. 数学

    プログラミングで回転させたいなら『ラジアン』を知っておくといいかもよ【初心者向け】

    プログラミングを使って、デザインをしたりアートを作ったりすることを…

Sponsored link

最近の記事

  1. 検索システム

    【検索システム】をつくってみた【実際にログインしてさわれます】
  2. Laravel

    【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【…
  3. 数学

    【微分】わかりやすくプログラミング目線で整理してみる【初心者向け】
  4. リベラルアーツ

    『ニュータイプの時代』〜リベラルアーツとテクノロジーの融合〜
  5. IoT

    【Arduino】ラジコンをつくってみた 〜今ドキのプログラミングの覚え方
PAGE TOP