数学

【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』が対数だそうですが、

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

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

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

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

2019/8/24 追記
『対数』と『ネイピア数』記事書きました。


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

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

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

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

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

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

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

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

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

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

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

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

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

GLSLSandbox

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

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

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

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

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

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

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

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

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

2. 【WebGL】入門 わかりやすく【図解】してみた

3. 【OpenGL】と【DirectX】のバージョンをまとめてみた【シェーダーメイン】【初心者向け】

4. 【GLSL(シェーディング)】でよく使う関数とユーザー関数のまとめ※随時更新

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

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

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

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

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

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

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

 

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

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

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

CAPTCHA


最近の記事

  1. バックエンド

    【厳選8冊】ホームページを作れるようになるためのおすすめ本【初心者向け】
  2. CG関連

    【WebGL】入門 わかりやすく【図解】してみた
  3. 音楽

    コードの転回形の練習方法をまとめてみた【大人のピアノ】
  4. CG関連

    【P5.js】遊ぶようにプログラムできるクリエイティブコーディング〜はじめのいっ…
  5. CG関連

    【3Dプログラム】初心者にオススメな方法はこれ(9)【P5.js】
PAGE TOP