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

コンピュータグラフィックス 画像情報教育振興協会 3-5 ポリゴン曲面の表現 ~ 3章終わりまで

E2dd989b2ba0f83d8a981b9cb3197bf1?s=47 mocobt
June 15, 2020

コンピュータグラフィックス 画像情報教育振興協会 3-5 ポリゴン曲面の表現 ~ 3章終わりまで

内輪輪読会で使った資料の改変版

書籍: コンピュータグラフィックス[改訂新版] (画像情報教育振興協会出版)
Link: https://www.cgarts.or.jp/book/cg_engineer/

E2dd989b2ba0f83d8a981b9cb3197bf1?s=128

mocobt

June 15, 2020
Tweet

Transcript

  1. コンピュータグラフィックス 画像情報教育振興協会 3-5 ポリゴン曲面の表現 ~ 3章終わりまで @mocobt

  2. About this material • この資料について: 内輪輪読会で使った資料の改変版 • 目的: CG全般の基礎知識への理解を深める •

    主な対象: 初心者 (B1~) • 書籍: CG-ARTS出版「コンピュータグラフィックス」 https://www.cgarts.or.jp/book/cg_engineer/index.html • 連絡先: mocobt@gmail.com or Twitter @mocobt
  3. Agenda 3-5 ポリゴン曲面の表現 3-6 ボリュームを用いた形状表現 3-7 そのほかの形状表現法 3-8 補足説明

  4. Agenda 3-5 ポリゴン曲面の表現 3-6 ボリュームを用いた形状表現 3-7 そのほかの形状表現法 3-8 補足説明

  5. 3-5-1 ポリゴン曲面 ポリゴン曲面(polygonal surfaces): 多数のポリゴンで表現された曲面 Parametric form Polygonal surface 球(sphere)の表現例

  6. 3-5-1 ポリゴン曲面 ポリゴン曲面(polygonal surfaces): 多数のポリゴンで表現された曲面 Parametric form Polygonal surface 球(sphere)の表現例

    Note • 任意の多角形を使用可能 • 三角形を使うことが多い (同一平面上に頂点が必ず存在) • 多角形の集合で表された形状を メッシュ(mesh)と呼ぶ
  7. How to load meshes Python https://github.com/mikedh/trimesh Note • obj以外も簡単に読める •

    APIがわかりにくい • デフォルトだと同一頂点を勝手にマージする ので頂点数がおかしくなる C++ https://github.com/tinyobjloader/tinyobjloader tinyobjloader Note • 読めるのはobjだけ • APIがわかりにくい • Single headerなので導入が楽 コード略 (↑のlinkにexampleあるから見て)
  8. 3-5-2 細分割曲面 細分割曲面(subdivision surface): メッシュを繰り返し分割して滑らかな曲面を得る手法 Note • 分割後のポリゴンをscreen spaceへ投影したとき の大きさが1pixel以下であれば打ち止め

    • 実際は曲面への収束が急なので、 shadingでごまかすことも多い (左(c)と(d)の違いは微妙→shadingでごまかす) • 四角形だと綺麗に分割できる (対角中点を結ぶだけ)
  9. Subdivision Surface http://graphics.pixar.com/opensubdiv/docs/intro.html OpenSubdiv (Pixar) Documentationが充実してる(理論知りたいならこれ) 正直触ったことがないのでワカラナイ 大体のツールには実装済 maya Blender

  10. 3-5-3 詳細度制御 詳細度(LOD: Level Of Detail)制御: 見た目に影響が出ない程度にポリゴン数を削減する手法 カメラから近い → そのまま

    or Subdiv (LOD高) カメラから遠い → Simplification (LOD低)
  11. UE5: Micro Polygon Unreal Engine 5だとpixel毎にpolygon定義しても許されるっぽい... LODなんていらなかったんや! https://www.unrealengine.com/ja/blog/a-first-look-at-unreal-engine-5?lang=ja

  12. 3-5-4 平滑化処理 平滑化(smoothing): ポリゴン曲面に含まれるノイズを除去する手法 • 基本的な実装方針は画像処理で用いられるフィルタと同じ

  13. Smoothingおもしろそう!と思った人向け Alec Jacobson • http://www.cs.toronto.edu/~jacobson/ • Tront大のGeometry達人 • libigl (https://github.com/libigl/libigl)開発者

    • SIGGRAPH&SIGGRAPH Asiaに毎年1~2本出してる Alec Jacobson先生の講義を見ると良いかも? (ただし解説不足感が否めない) https://github.com/alecjacobson/geometry-processing-csc2520 Geometry以外でもRenderingやAnimationの講義資料も公開してい るっぽい。 ここにAlec Jacobson先生の顔写真
  14. 3-5-5 パラメータ化 パラメータ化(parameterization): ポリゴン曲面に対し、パラメータ座標系からの写像を定義すること e.g. texture mapping: texture(uv) coordinateからの写像を定義 u

    v mapping
  15. 3-5-6 セグメンテーション Segmentation: 全体のポリゴンを部分曲面領域に分割すること 曲率でSegmentation

  16. えーあいのちからで mesh 畳み込み/最適化 Point cloud, mesh, etcを畳み込みたい/最適化したい人向け https://github.com/rusty1s/pytorch_geometric https://github.com/facebookresearch/pytorch3d https://github.com/NVIDIAGameWorks/kaolin/

    https://github.com/dmlc/dgl/ DGL Developer DMLC (xgboostつくったoss community) rusty1s (最強のポスドク ) Pros Cons • 開発が大手 • そこそこactive • Differentiable Render (DR)も実装 • 開発が大手 • DRも実装 • 実装が遅い • Documentationが永 遠に更新されない • DRメインでPoint CNNやGCNの開発は 遅い • 開発が実質一人な ので不安定 • GCN特化で開発早い • かなり書きやすい • 形状系のdata loaderが 実装済で試しやすい • GCN特化型 • 正直よくわからん • 形状処理はあまり重視 されていない (一般的なGCN用途)
  17. 3-5-7 電子透かし 電子透かし(digital watermarking): 変換を施すと消えるデータを埋め込み、改ざんの有無を検出する技術 ポリゴン曲面に対する透かしの埋め込み • 幾何(頂点座標)への埋め込み ◦ 頂点座標をわずかに変更する手法

    ◦ メッシュを周波数領域に押し込んで係数をいじっ た後に、逆変換する手法 • 位相(頂点、稜線などの接続関係 )への埋め込み ◦ 接続関係自体を変更する手法 (面や稜線をある規則で取り出すと、文字パターンが現れるようにする)
  18. 3-5-8 形状検索 形状検索: 入力とDB内の曲面との類似度を評価し、似ている形状を検索する技術 ここらへんは面白くないので端折ります

  19. Agenda 3-5 ポリゴン曲面の表現 3-6 ボリュームを用いた形状表現 3-7 そのほかの形状表現法 3-8 補足説明

  20. 3-6-1 ボクセル Voxel: 3次元の小立方体。組み合わせて形状を表現可能。 Pros: データ構造と集合演算が容易 Cons: データ量が膨大、剛体運動のコスト大、表示が少しめんどい マーチングキューブによる可視化 (左:

    naiveにvoxel表示, 右: 適用後。この後やる ) ボリュームレンダリングによる可視化 (7章でやる)
  21. 3-6-2 八分木 四分木(quadtree): 2次元平面を4領域に再帰的に分割するデータ構造 八分木(octree): quadtreeの3次元拡張で、3次元平面を8領域に分割 naive quadtree Note: なぜこのデータ構造が必要なのか?

    • 全画素(voxel)をnaiveに保存するとデータ量が多い ◦ 値がある部分だけノードに保存すると縮小可能 • アルゴリズムの簡略化にも寄与 (LOD制御が楽) Octreeがあれば、点群からきれいなメッシュも作れる! (Poisson Mesh Reconstruction)
  22. 3-6-3 メタボール Metaball: 濃度分布を持つ球の集合による形状表現手法 よくある「水っぽい」表現も作れる 濃度分布の例 (等値面を結ぶ)

  23. Metaballを使ったGUI (古典) Bubble Clusters: Metaballを用いたDesktop iconの操作[Watanabe et al. UIST 2007]

    (五十嵐健夫研 ) https://github.com/esperanc/bubbleCluster •がアイコン 赤枠が等値面
  24. 3-6-4 陰関数表現 陰関数表現(Implicit representation): 曲面を以下のような関数で表現 説明なし(多分、線形項) 放射基底関数 (RBF: Radial Basis

    Function) 重み 内側 外側 • 符号だけで内外判定が可能 • SfMやMVS, Kinect Fusionで得られるメッシュもコレ (有限空間をグリッド上に区切って値を持たせる) • 最近はf自体を学習する手法が人気 (CVPR/ICCV)
  25. Note • かぶりを除去すると2^8=256通りから15通りに帰着可能 • この15通り自体をLUTとして記録しておくと効率的 • ただ、この15通りだけだと、穴が開くときがあるので注意 3-6-5 等値面抽出 Marching

    cubes: Voxelの頂点上の値に応じてメッシュを貼る手法 •:スカラ値大, ◦: スカラ値小
  26. Agenda 3-5 ポリゴン曲面の表現 3-6 ボリュームを用いた形状表現 3-7 そのほかの形状表現法 3-8 補足説明

  27. 3-7-1 パーティクル Particle: 火の粉や水滴、雲を多数の粒子で表現 Particleで表現しているからといって、何らかの物理モデルに従っているとは限らないので注意 Unity

  28. 3-7-2 ポイントベースドモデリング Point-based modeling: 位相(隣接関係)削減のために点だけで表現 Surfel: 接平面方向に大きさを持った点 2000年代初頭はこの類の研究が滅茶苦茶多かった Surfel 専用ハードを作る研究もあった

    [Weyrich et al. TOG 2007]
  29. 3-7-3 フラクタル Fractal: 自己相似性を持つ図形。実装が楽なのによくバズる。 自己相似性 (self-similarity): 全体と部分の形状が相似関係にあること Sierpinski gasket Mandelbrot

    set Julia set
  30. おわり