Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TokyoDemoFest2012 Raymarching Tutorial

TokyoDemoFest2012 Raymarching Tutorial

TokyoDemoFest2012 Raymarching Tutorial.

Avatar for yasai-gyabo(kumaashi)

yasai-gyabo(kumaashi)

January 13, 2012

More Decks by yasai-gyabo(kumaashi)

Other Decks in Technology

Transcript

  1. ▪目次 ・有名な4k  introの紹介   ・Raymarchingとは   ・大まかな手順   ・distance  funcOon

      ・実装   ・テクニック   ・参考文献     ※   前知識としてHLSL(GLSL)少し知っていると良いかもです。    
  2. ▪Volume  Renderingをする際の一手法 [Raymarching]   視点座標をレイの方向に少しずつ進めて、   描画する形(shape)を見つける   →形が分かるまでひたすら再計算を行う  

    (再計算の回数上限はあります)     [Raytracing]   レイの方程式を解いて描画する形を   見つける   →方程式が解ければ一発で形が分かる   解けないと形が分からない   (事前に解き方が分かっている必要がある)  
  3. ▪手順(7/7)                  

      この座標を使って、Color,  法線情報などを計算して   1Pixel描画して終わり。   手順をひたすら繰り返してスクリーン全体を   描画する。      
  4. ▪手順(まとめ) 1)  画面に描画する形状を決める関数を作る   ※distance  funcOonと言って3次元での形状の表面までの距離を返します(後述)   2)  視点座標Pを決める  

    3)  1)で決めた視点位置Pを関数で計算する(dを得る)   4)  3)得た距離分視点位置を進める   5)  3),  4)を十分に繰り返すと1)で定義した形状の表面に近い位置まで移動できる (☆レイが衝突している位置が分かる)   この座標を使って、Color,  法線情報などを計算して   1Pixel描画して終わり       ※ひたすら繰り返してスクリーン全体を描画する  
  5. ▪distance  funcOon(球 :  sphere)   x2 +y2 +z2 –  r2

      =  0   ↓HLSLで表記すると…   length(p)  –  r     pは視点位置、rは半径です  
  6. ▪distance  funcOon(箱 :  box) HLSLで表記すると…   length(max(p  -­‐  l,  0))

        pは視点位置、lは直径/2です。     ▲   上の式で描画すると   箱の表面がごま塩になります。   ※形状の境界判定がシビア…     以下のようにちょっとだけバイアス   引いて衝突している箇所を浮かせて   やります。     length(max(p  –  l,  0))  –  bias;   ※参考文献より  
  7. 参考1 hgp://www.iquilezles.org/www/material/nvscene2008/nvscene2008.htm Rendering  Worlds  With  Two  Triangles hgp://www.pouet.net/topic.php?which=7920&page=1&x=15&y=12 Raymarching  Beginners'

     Thread hgp://www.pouet.net/topic.php?which=8177&page=1&x=17&y=16 Raymarching  Tutorial     hgp://www.iquilezles.org/www/arOcles/dismuncOons/dismuncOons.htm   modeling  with  distance  func9ons