サブディビジョンサーフェスの
すべてがわかる
グラフィックスエンジニア向け理論編
 ※ テクニカルな内容中心です。
 ※ スライドはセッション後にダウンロードできます(撮影不要)
手島 孝人(Pixar Animation Studios, takahito@pixar.com)
松岡 徹 (DeNA, toru.matsuoka@gmail.com)
ポリゴンメッシュの法線とは何だろう
どう計算する?
・面法線の平均
・Newell’s method
・Max’s method
2
Filippo Tampieri, Newell's Method for Computing the Plane Equation of a Polygon,
Graphics Gems III, Academic Press, 1992
Nelson Max, Weights for Computing Vertex Normals from Facet Normals,
Journal of Graphics Tools, Volume 4, Issue 2, 1999
頂点に法線を与える目的=
  滑らかな面を表現したい
知覚する曲面=表現したいモノ
線形補間された法線 頂点法線
3
表現したいものは曲面
ポリゴン起点のワークフロー
 ローポリ→[サブディビジョン]→ハイポリ→→→理想形状?
曲面起点のワークフロー
 理想形状→[サブディビジョン]→曲面表現→[近似]→ポリゴン
ハイポリ化にはキリがない
メモリがいくらあっても足りない
?
任意の精度で出力可能
コンパクトな高次表現 4
Demo
5
このセッションの内容
● サブディビジョンサーフェスの理論
○ リミット解析と特異頂点
● ハードウェアテセレーション
○ Tノード処理、終端キャッピング
○ 動的特徴適応型サブディビジョン
○ セミシャープクリースの効率的描画法
● C2
連続性の応用
○ 解析的ディスプレースメントマッピング
○ リアルタイムコリジョン変形
● レイトレーシング
○ ベジェクリッピングによる直接レイトレ
● 結論:曲面は素敵
6
Catmull−Clak サブディビジョンサーフェス
とは?
● 双3次一様Bスプラインサーフェスの拡張表現
● あらゆるメッシュトポロジに対応* 
● 割れ目がない (C0
=連続)
● 折れ目がない (C1
=接線が連続)
● 仕上げが美しい(C2
=曲率が連続)
*基本的には2次元多様体
7
双3次一様Bスプラインサーフェス
8
双3次一様Bスプラインは便利
● 自動的にC2
連続、制御点の数がベジェより少ない
● 凸包性・変動減少性があり、
結果が予測しやすく交差判定が単純
● ローカルサポート(局所的に編集ができる)
● 直線が厳密に表現できる(曲線区間との接続もC2
連続)
● 計算がシンプルで座標のみ
ノット・ウェイトなど追加データ不要
● 3次ベジェとの変換も容易
9
双3次一様Bスプラインで困ること
● トポロジに大きな制約がある
グリッド、円柱、トーラス型しか作れない
● 二次曲面(円柱や球)が厳密に作れない
ただしゲーム・映画ではあまり問題にならない
10
制御点の
形状
4角形 6角形 8角形 12角形
真円との誤差 2.8% 0.4% 0.1% 0.02%
むしろ割りすぎないように注意!サブディビジョンでは
周辺の特異頂点の価数が上がる=シワになりやすい
ほとんどの場合は6角形で十分、4角形でもいい
グリッドメッシュ以外も曲面で扱いたい
= サブディビジョンサーフェスの出番
※4角形スキームの場合(Catmull-Clark)
正則頂点=エッジが4つ
グリッドメッシュにはこれしかない
特異頂点=エッジが4つ以外
自由なトポロジには必要
11
正則頂点 vs 特異頂点(extraordinary vertex)
C2
連続の必要性
● C1
は反射に問題
● 二次微分にはリアルタイム向けの広い用途がある
○ 解析ディスプレイスメント
○ 曲率ベースSSS、AO
○ スペキュラーエイリアスの低減
12
C1
パッチ C2
パッチ
Catmull-Clark サブディビジョン
    簡単な規則
正則部(n=4)ではBスプラインのノット挿入と等価
→正則部はそれ以上分割する必要はない
13
v0
e1
0
e2
0
en
0
e3
0
v1
e1
1
e2
1
f1
1
e3
1
f2
1
fn
1
正則部のサブディビジョンは不要
14
レベル 1
レベル 2
同じ曲面
リミット解析(正則部)
正則部はごく普通なBスプライン
→収束計算なしにBスプライン基底のテンソル積で
 リミットサーフェス、接線、法線が厳密に求められる
15
P(u, v)
V0
V1
V2
V3
特異点部(extraordinary vertex) の
リミットは?
まず再帰的に求める方法を考える
16
ローカルサブディビジョン行列
一回のサブディジョン操作
  =サブディビジョン行列の乗算
Sは特異点の価数依存の正方行列
特異点以外の新たな点は常に正則になる
行列の要素(重み)を「ステンシル」「マスク」とも呼ぶ
アフィン不変(各頂点の重みの総和は1)
17
Pn
Pn+1
S
ローカルサブディビジョン行列 S
3価の場合
18
P={ v, ei
, fi
} P’={ v’, ei
’, fi
’ }
S3v
e0
e1
e2
f0
f1
f2
v’
e0
’ e1
’
e2
’
f0
’
f1
’
f2
’
Catmull-Clark 規則を
表現する係数行列
サブディビジョン行列のn乗と極限
サブディビジョン行列のn乗により
レベルn頂点群をレベル0頂点群で表現できる
n→∞でリミットサーフェス。極限が欲しいので対角化
サブディビジョンのアフィン不変性より、収束条件は少なくとも
「λ1
=1 かつそれ以外の固有値は1未満」 を満たすはず
19
リミット解析(特異頂点)
ブロック巡回行列なので離散フーリエ変換(DFT)
で対角化可能
● Catmull-Clark ローカルサブディビジョン行列の固有値
 (大きい方から3つが重要)
● λ1 の固有ベクトル
20
n = 頂点価数
リミット解析(特異頂点)
n価の特異点のリミット座標と法線
21
・OpenSubdiv を使ってください(Sdc Scheme)
・トポロジにしか依存しないので事前計算が有効
特異頂点での曲率は?
● 純正 Catmull-Clark では無限になりうる
● ローカルサブディビジョン行列の固有値でわかる
● 規則を追加すれば対応可能だが、実用上は3価・5価は問題ない
○ 高価数頂点を避ける
○ 特異頂点部分はなるべく平らに(5角形・6角形を使用)
22
λ1
λ2
λ3
λ4
λ5
λ6
λ4
/ (λ2
*λ3
)
3価 1 0.41 0.41 0.17 0.15 0.15 0.99 < 1 : わずかに平坦
4価 1 0.50 0.50 0.25 0.25 0.25 ... 1.00 : C2
連続
5価 1 0.55 0.55 0.34 0.34 0.32 ... 1.12 > 1 : 発散
6価 1 0.58 0.58 0.41 0.41 0.38 ... 1.22 > 1 : 発散
デモ
23
基本理論おわり:ここまでのまとめ
● サブディビジョン規則を有限回適用だと
○ 何度やってもリミット面にならない
○ 法線計算は大量のポリゴン相手の古典的な近似手法になる
○ C2
連続にもならない
● リミット解析を使うと
○ 正則部は Bスプラインで一網打尽 分割は不要
○ 特異頂点は DFT で直接計算   繰り返し演算は不要
■ その周辺は Stam method も利用可能
○ 法線(一次微分)も曲率(二次微分)も求まる
24
ハードウェアアクセラレーション
● もっと簡単にリミットサーフェスを描画できないか
● ハードウェアテセレータを使いたい
グレゴリーパッチ近似 , ACC 特徴適応分割(OpenSubdiv)
手法 グレゴリーパッチで
コントロールメッシュの面ごとに近似
Bスプラインパッチの階層集合に分解
利点 パッチ数が少ない
Tノードが出来ない
ほぼ C2
連続
終端キャップ(特異頂点周辺)以外は厳密解
クリースや階層エディットに対応
欠点 20点グレゴリーパッチは C1
連続
特異頂点を含むパッチは近似解
3角形と4角形(+5角形)に限られる
クリース対応がきびしい
ACCに比べパッチ数が多い
Tノードのテセレーションに注意が必要
25
グレゴリーパッチ
● 千代倉先生が1983年に開発・CADで実用化
● 20制御点、隣接パッチとの C1
連続を自由に構成可能
● u,v の有理形式のため四隅のゼロ除算、微分演算に注意
● Bスプラインに比べるとパッチごとの制御点は増える
● 使い方によっては非常に便利
● ACC(Approximate Catmull-Clark)のメイン手法
26
グレゴリーACC(近似Catmull-Clark)
リミット評価の接線を元にグレゴリーパッチを構築する
27
Charles Loop et al., Approximating Subdivision Surfaces with Gregory Patches for Hardware Tessellation
SIGGRAPH Asia Conference Proceedings 2009
Bスプラインだけで描画できないか
→特徴適応分割
特異点周辺のみ必要なだけ分割する
T ノードは別途対応する
メリット:
● C2
が確保できる
● 制御点の数も比較的抑えられる
● クリース、階層エディットに対応できる
28
Matthias Niessner et al., Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces
ACM Transactions on Graphics, Vol. 31 No. 1 Article 6 January 2012
特徴適応分割での T ノードの対処
OpenSubdiv 3.0 では tess coord のリマッピングで
接合を実現  → 1 DrawCall 描画が可能に
29
終端キャップはどうする?
リミット評価で求めた座標と法線を使ってフタをする。
いくつか手法があるが、一長一短
30
?
方法 利点 欠点
4角形 高速、省メモリ 別 DrawCall
パッチ内は線形
充分な分割が必要
グレゴリーパッチ パッチ内で近似テセレーション可能
特異点からの辺上で C1
別 DrawCall
負荷高い
制御点が増える
Bスプラインパッチ パッチ内で近似テセレーション可能
単一DrawCall で全メッシュ描画できる
特異点からの辺上で C0
制御点が増える
DFAS(動的特徴適応分割)
● 終端キャップをテセレーションしたくない
  近似になってしまうし、連続性が落ちる
● 常時レベル10までのパッチを描画したくない
 LODで両立させる
31
Schäfer, H., et al. Dynamic feature-adaptive subdivision.
Proceedings of the 19th Symposium on Interactive 3D Graphics and Games. ACM, 2015.
DFAS(動的特徴分割適応サブディビジョン)
特異点ごとにツリー構造を作り、必要なパッチだけを描画する
32
排他描画
排他描画 OpenSubdiv では対応予定(未実装)
セミシャープクリース
「ゲーリー爺さんのチェス」にて純正 Catmull-Clark に追加
クリース=境界規則の拡張
33
サブディビジョン過程でシャープ規則を s(シャープネス)回適用、
その後スムーズ規則を適用する
セミシャープクリース
34
シャープネス=2
レベル 0
レベル 1
シャープネス=1
シャープネス=0
レベル 2
通常はシャープネスレベルに到達するまで、
たとえ正則であってもサブディビジョンが必要
ただし、
Bスプラインパッチ中に同一シャープネスの
クリースエッジが一つだけ直線的にある場合
クリースエッジ
レベル 3
明示的にサブディビジョンせずに
リミット評価する方法がある
バウンダリ条件(無限シャープネス)
35
P0 P1
P2
P3
もしP2
のシャープネスが無限大だったら
P3
のかわりに P1
’ を使って Bスプライン
を構成すると、P2
で終わる補間になる
P1
’
P2
に対して
反転
(P3
は無視)
セミシャープクリースの多項式構造
36
P0
P1
P2
P3
t=0
t=1
シャープネス=2 の場合、t = ¾ が境界
P0
P1
P2
P3t=0
t=1
2つのセグメントをつなぎ合わせる
(非整数シャープネスの場合は3つ)
シャープ区間はバウンダリ条件と同じ(赤)
遷移区間はシャープネス回乗算したサブディビジョン
行列を掛ける。
パラメータ範囲を合わせるために外挿部分が出来る
(青)が、必要なパラメータ区間では正しい
t= ¾
P1
’
セミシャープクリースの効率的評価法
37
無限シャープ行列
セミシャープ分割
+リパラメータ行列
パラメータの区間に応じて
2つの行列を使い分ける
セミシャープクリースの効率的評価
● パッチごとにシャープネスの値を追加
● モデルによっては非常によく効き、パッチ数が激減
● 2つまたは3つの単純ベジェパッチに分割することも可能
● OpenSubdiv で対応済
● Vertex シャープネス(コーナー)・階層エディットは
対応できないので、やはり必要なまで適応分割を行う
38
Matthias Niessner, et al. Efficient Evaluation of Semi-Smooth Creases in Catmull-Clark Subdivision Surfaces
Eurographics Proceedings, Cagliari, 2012
C2
連続性、二次微分の活用
● 解析的ディスプレイスメント
● 第一基本量、第二基本量、曲率
● リアルタイムコリジョン変形
● シェーディングへの応用など…
39
Matthias Niessner, Charles Loop, Analytic Displacement Mapping using Hardware Tessellation
ACM Transactions on Graphics, Vol. 32 No. 3 Article 26 June 2013
Schäfer, Henry, et al. "Real-Time Deformation of Subdivision Surfaces from Object Collisions."
Eurographics/ACM SIGGRAPH Symposium on High Performance Graphics. The Eurographics Association,
2014.
曲面上のディスプレイスメントと微分
40
正規化サーフェス法線の微分はちょっと難しい
サーフェス面 正規化法線 ディスプレイスメント
ディスプレイス面
ディスプレイス法線
サーフェス接線
ディスプレイスメントの微分
第一基本量・第二基本量
41
第二基本量
第一基本量
いずれもパッチから容易に求まる
シェイプ作用素、曲率
A:シェイプ作用素
(Shape Operator)
Aの固有値:主曲率
K:ガウス曲率
H:平均曲率
42
すべて容易に求まる
※ガウス曲率はE, F, G だけでも求まる
法線の微分
非正規化法線の微分
(ワインガルテンの定理)
43
正規化法線の微分
残りはこれ
ディスプレイスメントの微分
● パッチの(u, v)で少なくとも C1
な
シグナルが必要
● Ptex 構造で双二次Bスプラインの
スカラーフィールドを作る
● ついでにミップマップもする
44
サンプル点の 3x3 近傍を取って
2次Bスプライン補間し、値と微分を得る
ピンクの縁は隣接フェイスのテクセル
のコピー
サンプルは OpenSubdiv に一応ある
(実装例:最適ではない)
ディスプレイスメントの微分
45
ようやくディスプレイスメントの接線が計算できた
vも同様にし、外積で法線を得る
シェーダで実装可能
※そこまでしなくても・・・という方には
スクリーンスペースのディスプレイスメント微分でも一応法線計算は可能
Morten S. Mikkelsen, Bump Mapping Unparametrized Surfaces on the GPU
https://dl.dropboxusercontent.com/u/55891920/papers/mm_sfgrad_bump.pdf
ディスプレイス法線
46
リアルタイムコリジョン変形
この構造はランタイムに更新することもできる
大きな利点:
 変形(ディスプレイスメント更新)した後の
 法線の再計算が不要
47
48
レイトレース法
49
● 反射・屈折などの表現
● GI(グローバルイルミネーション)
Sports Car Model Created By “Yasutoshi "Mirage" Mori”
https://github.com/MirageYM/3DModels
レイトレースによるサブディビジョンサー
フェスのレンダリング
● 主流は事前テセレーション
● ラスタライズとの違い
○ 2次レイのためにテセレーション結果を残さなければなら
ない
○ メモリ消費が問題
● Embree では効率的なキャッシュを導入
○ インタラクティブレイトレが実現
50
Carsten Benthin et al., Efficient Ray Tracing of Subdivision Surfaces using Tessellation Caching
Proceedings of the 7th High-Performance Graphics Conference 2015
サブディビジョンサーフェスの
インタラクティブレイトレ
51
事前テセレーションは必須なのか?
● 2次レイに必要な分割精度は予測しにくい
○ 鏡に映った曲面
● ポリゴンを保持するため大幅なメモリ消費
● キャッシュ機構の導入による複雑化
○ 複数精度のキャッシュ保持
○ メモリ<ー>ファイルによるスループットの低下
52
直接レンダリング
● サブディビジョンサーフェス(Catmull-Clark)はBスプライン
パッチに変換可能
● Bスプラインパッチの交差判定
○ ニュートン法
○ ベジェクリッピング法
● 任意精度で交差点を評価
○ レイディファレンシャルで精度取得
● 特徴適応分割したBスプラインパッチ取得
53
ベジェクリッピング法
● オリジナルは西田先生開発(1990年)
● 凸包性を使うため、4~5回のループでロバストに交点が求
まる
● メモリ消費を少なく抑え、リミットサーフェスを評価
● クラックを避けるためには、IEEE754 浮動小数点演算の挙
動に注意が必要
(特徴適応分割での Watertight 評価と同等)
54
Takahito Tejima and Toru Matsuoka, Direct Ray Tracing of Full-Featured Subdivision Surfaces with Bezier Clipping.
Journal of Computer Graphics Techniques (JCGT), vol. 4, no. 1, 69-83, 2015
● 特徴適応分割に対応したBスプラインパッチ取得
● セミクリースなどを少ないパッチで描画
● 少ないメモリ消費
55
特徴適応分割した
Bスプラインパッチ
デモ
56
サブディビジョンサーフェスまとめ
● Catmull-Clark サーフェスは3次Bスプラインの拡張
● Bスプライン関連のテクニックがほとんど使える
多くの技術は日本のCAD業界で80~90年代に開発済
● リミットサーフェスを描画したい。
○ 有限回分割した4角形を描画するのでは不十分
● 法線や二次微分は解析的に正しく求まる
● 微分幾何に親しもう
○ 物体の形状を決めているのは、曲率
57
サブディビジョンサーフェスの真価
● 曲面を描画するための表現方法
● ディスプレイスメントでディティールを作れる
● C2
連続な二次微分を解析的に求められ、
様々な応用が可能
● 解像度フリー
○ ハイエンド・ローエンドで共通データ
○ レンダリングと3Dプリントで共通データ
● 事前テセレーションに比べメモリ効率がよく、
レイトレにも向いている
● さようならポリゴン、今までありがとう
58
学習教材
Pixar in a box : カーン・アカデミー
ピクサー映画を素材に、サブディビジョンをわかりやすく解
説してます。英語ですが英語の勉強にも!
https://www.khanacademy.org/partner-
content/pixar/modeling-character/modeling-
subdivision/a/start-here-character
59
ありがとうございました
スライドはこちらから http://takahito-tejima.github.io
WebGL 版、SVG版 OpenSubdiv ビューワ もあります
(ちょっと重いけど) お試しください
 emscripten 利用、PC/Mac/mobile
ご質問等は takahito@pixar.com まで
ご感想、つぶやき、ひとりごとは @gishicho, @ototoi まで
60
付録 Appendix
61
スプラインサーフェス
スプライン=区分多項式補間
サブディビジョンで使われる多項式基底
● バーンスタインベジェ
● B-スプライン
● BOX-スプライン(Bスプラインの一般化)
Catmull-Clark では双3次一様Bスプラインを多用
62
様々なサブディビジョン手法(一部)
63
プライマル(面分割)
デュアル(頂点分割)
正則部の基底 特異頂点以外の
連続性
補間系(制御点を通る)
近似系(制御点を通らない)
Loop プライマル Boxスプライン C2 近似系
Catmull-Clark プライマル Bスプライン C2 近似系
Doo-Sabin デュアル Bスプライン C1 近似系
4-8 プライマル + デュアル Boxスプライン C4 近似系
Kobbelt プライマル 一般多項式 C1 補間系
Butterfly プライマル 一般多項式 C1 補間系
その他いろいろ
今でも学会では毎年のように新手法や改良型が提案されているが、実用されてるのは
ほぼ Loop(三角形) と Catmull-Clark(四角形、一般) のみ
(Softimage が Doo-Sabin 使っていたが・・・)
ノット挿入=サブディビジョン
Catmull-Clark
(3次)
Primal
Doo-Sabin
(2次)
Dual
64
・Rayの方向をz軸とする座標系にパッチを座標変換する
65
ベジェクリッピング法の手順1
X
Z
・Z軸を軸にしXY回転する
66
ベジェクリッピング法の手順2
Y
X
Y
X
Y軸とできるだけ平
行になるように
・X軸でベジェックリップ
・凸包性を利用して一気に範囲を絞り込む!!
67
ベジェクリッピング法の手順3
Y
X
Y
X
68
ベジェクリッピング法の手順4
Y
X
Y
X
Y
X
Y
X
・U方向・V方向を交互に手順2手順3を繰り返す
・十分に小さくなるまで・・・(概ね5〜6回程)
ベジェクリッピング法の手順5
・十分にパッチが小さいときZ値がそのまま視点からの距離とな
る
・交点の位置、法線などは微小パッチの平均したZ値、UV値な
どから求めることができる
X
Y
Z
70
レイディファレンシャル(Ray-Differential)
による分割精度取得
● 画面のピクセルごとに分割精度を求める
● 曲面の分割精度をピクセルの幅以下にすればよい
C2
グレゴリーパッチ
71

CEDEC2015 サブディビジョンサーフェスの すべてがわかる