-- Views
October 17, 25
スライド概要
2025/10/16 LODGE XR “Tech” Talk - visionOSでの発表資料です
岐阜の山中でヒキコモリ系プログラマー WindowsとiOSの間で生きる何か C/C++/Java/C#/Obj-C/Swift/F#/Haskell/Rustで生きている
カタチ を 自在に操 る 2025/10/16 LODGE XR “Tech” Talk - visionOS @ta̲ka̲tsu
自己紹介
自己紹介 岐阜県出身 岐阜県在住 フリーランスエンジニア 元CAD/CAM系エンジニア エンジニアと人生コミュニティに生息 @ta̲ka̲tsu
趣味で砂鉄から鉄をつくっています
visionOSでのカタチ
・Model3D usdzをロードして表示
・Model3D usdzをロードして表示 ・RealityView usdzやrcprojectから作ったEntityを追加して表示
・Model3D usdzをロードして表示 ・RealityView usdzやrcprojectから作ったEntityを追加して表示 ModelComponentを持つEntityを追加して表示
・Model3D usdzをロードして表示 ・RealityView usdzやrcprojectから作ったEntityを追加して表示 ModelComponentを持つEntityを追加して表示 →MeshResource(形状)とMaterial(質感)からなる
・Model3D usdzをロードして表示 ・RealityView usdzやrcprojectから作ったEntityを追加して表示 ModelComponentを持つEntityを追加して表示 →MeshResource(形状)とMaterial(質感)からなる
・MeshResourceを作るには generateBox generatePlane generateSphere generateCone generateCylinder generateText 曲線(Path)の押し出し
・MeshResourceを作るには generateBox generatePlane generateSphere generateCone generateCylinder generateText 曲線(Path)の押し出し 自分で作成
自分で作成
自分で設定
たくさん! たいへん!
パラメトリック曲面表現
パラメトリック曲面表現 x = f(u, v) y = g(u, v) z = h(u, v) 2つのパラメータを入力し 3次元の点を出力する関数を決める
パラメトリック曲面の例:球 x = r sin u cos v y = r sin u sin v z = r cos u 0≤u≤π 0 ≤ v ≤ 2π
パラメータを離散的に取れば 三角形の頂点が計算できる!
パラメータを離散的に取れば 三角形の頂点が計算できる!
関数の偏微分を取れば 法線も計算できる! (接線の外積を取る)
荒く描画するか
荒く描画するか
荒く描画するか 細かく描画するかも
荒く描画するか 細かく描画するかも 自由自在!
Bezier曲面
の前に
Bezier曲線
(3次)Bezier曲線 C1 C0 C3 C2
(3次)Bezier曲線 C1 C0 制御点と呼ばれる点列 C3 C2
(3次)Bezier曲線 C1 1−t C0′    C0 t C3 t C1′ 1−t C2′ 1−t 隣り合う制御点を t:1-tで分割 t C2
(3次)Bezier曲線 C1 C3 C1′ C2′ C0′    C0 新しい点列ができる C2
(3次)Bezier曲線 C1 C0′        C0 C0′′ C3 C1′ 繰り返す C1′′ C2′ C2
(3次)Bezier曲線 C1 C0′        C0 C0′′ C3 C1′ C1′′ C2′ C(t) 最後の点が パラメーターtに対応する点 C2
(3次)Bezier曲線 tを0から1まで動かす
(3次)Bezier曲線 その軌跡がベジエ曲線
(3次)Bezier曲線 Bezier曲線は 制御点によって形が決まる
(3次)Bezier曲線    C0′ = (1 − t)C0 + tC1 C1′ = (1 − t)C1 + tC2 C2′ = (1 − t)C2 + tC3
(3次)Bezier曲線            C0′ = (1 − t)C0 + tC1 C1′ = (1 − t)C1 + tC2 C2′ = (1 − t)C2 + tC3 C0′′ = (1 − t)C0′ + tC1′ C1′′ = (1 − t)C1′ + tC2′
(3次)Bezier曲線 C0′ = (1 − t)C0 + tC1 C1′ = (1 − t)C1 + tC2 C2′ = (1 − t)C2 + tC3 C0′′ = (1 − t)C0′ + tC1′ C1′′ = (1 − t)C1′ + tC2′                C(t) = (1 − t)C0′′ + tC1′′
(3次)Bezier曲線 C0′ = (1 − t)C0 + tC1 C1′ = (1 − t)C1 + tC2 C2′ = (1 − t)C2 + tC3 C0′′ = (1 − t)C0′ + tC1′ C1′′ = (1 − t)C1′ + tC2′ C(t) = (1 − t)C0′′ + tC1′′ 3 2 2 3                C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 (0 ≤ t ≤ 1)
(n次)Bezier曲線 C0, C1, …, Cn を制御点として
(n次)Bezier曲線 C0, C1, …, Cn を制御点として n i n−i C(t) = t (1 − t) Ci ∑(i) i=0 n (0 ≤ t ≤ 1) n n n! = ※ は二項係数で ( i ) i!(n − i)! (i)
(n次)Bezier曲線 C0, C1, …, Cn を制御点として n i n−i C(t) = t (1 − t) Ci ∑(i) i=0 n (0 ≤ t ≤ 1)
(n次)Bezier曲線 C0, C1, …, Cn を制御点として C(t) = n ∑ i=0 Bi,n(t)Ci (0 ≤ t ≤ 1) n i n−i Bi,n(t) = t (1 − t) をBernstein基底関数という (i) i = 0,1,…, n
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 B0,3(t) 3次のBernstein基底関数の0番目
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 B0,3(t) B1,3(t) 3次のBernstein基底関数の1番目
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 B0,3(t) B1,3(t) 3次のBernstein基底関数の2番目 B2,3(t)
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 B0,3(t) B1,3(t) 3次のBernstein基底関数の3番目 B2,3(t) B3,3(t)
(3次の)Bernstein基底関数 3 2 2 3 C(t) = (1 − t) C0 + 3t(1 − t) C1 + 3t (1 − t)C2 + t C3 B0,3(t) B1,3(t) B2,3(t) B3,3(t) 各制御点にtの関数をかけて足し合わせたものと見做せる
そ こ 今度 Bezier曲面
(3次x3次)Bezier曲面
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C1,2 C2,2 C3,2 C0,1 C1,1 C2,1 C3,1 C0,0 C1,0 C2,0 C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C31,2 3 C2,2 C3,2 S(u, v) = Bi,3(u)Bj,3(v)Ci,j ∑∑ i=0 j=0 C0,1 C1,1 C2,1(0 ≤ uC≤3,11) C0,0 C1,0 C2,0 (0 ≤ v ≤ 1) C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C31,2 3 C2,2 C3,2 S(u, v) = Bi,3(u)Bj,3(v)Ci,j ∑∑ i=0 j=0 C0,1 C1,1 C2,1(0 ≤ uC≤3,11) C0,0 C1,0 C2,0 (0 ≤ v ≤ 1) C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C31,2 3 C2,2 C3,2 S(u, v) = Bi,3(u)Bj,3(v)Ci,j ∑∑ i=0 j=0 C0,1 C1,1 C2,1(0 ≤ uC≤3,11) C0,0 C1,0 C2,0 (0 ≤ v ≤ 1) C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C31,2 3 C2,2 C3,2 S(u, v) = Bi,3(u)Bj,3(v)Ci,j ∑∑ i=0 j=0 C0,1 C1,1 C2,1(0 ≤ uC≤3,11) C0,0 C1,0 C2,0 (0 ≤ v ≤ 1) C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 C0,2 C31,2 3 C2,2 C3,2 S(u, v) = Bi,3(u)Bj,3(v)Ci,j ∑∑ i=0 j=0 C0,1 C1,1 C2,1(0 ≤ uC≤3,11) C0,0 C1,0 C2,0 (0 ≤ v ≤ 1) C3,0
(3次x3次)Bezier曲面 C0,3 C1,3 C2,3 C3,3 S(u, v) = B0,3(u)B0,3(v)C0,0 + B1,3(u)B0,3(v)C1,0 + B2,3(u)B0,3(v)C2,0 + B3,3(u)B0,3(v)C3,0 +B0,3(u)B1,3(v)C0,1 + B1,3(u)B1,3(v)C1,1 + B2,3(u)B1,3(v)C2,1 + B3,3(u)B1,3(v)C3,1 C0,2 C1,2 C2,2 C3,2 +B0,3(u)B2,3(v)C0,2 + B1,3(u)B2,3(v)C1,2 + B2,3(u)B2,3(v)C2,2 + B3,3(u)B2,3(v)C3,2 +B0,3(u)B3,3(v)C0,3 + B1,3(u)B3,3(v)C1,3 + B2,3(u)B3,3(v)C2,3 + B3,3(u)B3,3(v)C3,3 C0,1 C1,1 C2,1 C3,1 C0,0 C1,0 C2,0 C3,0 (0 ≤ u ≤ 1) (0 ≤ v ≤ 1)
(3次x3次)Bezier曲面
(3次x3次)Bezier曲面
(3次x3次)Bezier曲面
Vision Proで表示
OriginalMesh https://github.com/ta-ka-tsu/OriginalMesh
Bezier曲面の限界と拡張
Bezier曲面の限界 ・球面や円柱などの曲面を正確に記述できない
Bezier曲面の限界 ・球面や円柱などの曲面を正確に記述できない →有理Bezier曲面に拡張することで解決できる
Bezier曲面の限界 ・球面や円柱などの曲面を正確に記述できない →有理Bezier曲面に拡張することで解決できる ・一つの制御点の変更が曲面全体に影響する
Bezier曲面の限界 ・球面や円柱などの曲面を正確に記述できない →有理Bezier曲面に拡張することで解決できる ・一つの制御点の変更が曲面全体に影響する →NURBS曲面に拡張することで局所変形が可能 (NURBS=Non Uniform Rational B-Spline)
参考文献 Les Piegl, Wayne Tiller著 The NURBS Book 2nd Edition