그리드 단순화(QEM) 연구 노트

메시 단순화(QEM)

1 개요 및 원리

메쉬 단순화(Mesh Simplification)는 복잡한 메쉬 데이터의 정점, 모서리, 면의 수를 줄여 모델의 표현을 단순화하는 기술로, 그래픽 분야에서는 이 기술을 LOD(Multi-level Detail)이라고도 합니다.

1.1 메쉬 단순화의 적용

  • 다중 해상도 렌더링 : 투영된 크기가 더 작은 모델(멀리 표시됨)의 경우 단순화된 버전을 렌더링하여 원래의 복잡도가 높은 메시를 풍부한 디테일로 대체하여 렌더링 효율성을 높일 수 있습니다.
  • 프록시 시뮬레이션 : 단순화된 모델에 대한 시뮬레이션을 수행한 후 보간법을 통해 원래의 복잡한 그리드에 대한 대략적인 시뮬레이션 결과를 얻어 시뮬레이션 효율성을 향상시킵니다. [ 1 ] ^{[1]}[ 1 ]

1.2 일반적인 단순화된 작업

  • 정점 데시메이션

    삭제할 꼭지점을 선택하고 해당 꼭지점에 인접한 면을 제거한 다음 결과 구멍을 다시 삼각형화합니다.

  • 정점 클러스터링

    이미지-20230730150803895

    원본 그리드의 경계 상자를 그리드로 나누고, 각 셀의 정점을 하나로 클러스터링한 다음 클러스터된 정점을 기반으로 그리드의 면을 업데이트합니다.

  • 가장자리 수축

    이미지-20230730151429110

    ( v 1 , v 2 ) → v ‾ (v_1,v_2)\rightarrow{\overline{v}}( v1,V2)V, 가장자리를 점으로 축소하고 퇴화된 면을 삭제합니다(위 이미지에서 음영 처리됨).

  • 쌍 수축

    이미지-20230730162827401모서리 수축의 일반화로서, 점 쌍 ( v 1 , v 2 ) (v_1,v_2)( v1,V2) 가 모서리이면 모서리 수축과 동일합니다. 점 쌍(v 1 , v 2 ) (v_1,v_2)( v1,V2)이 가장자리가 아닌 경우 점 쌍을 축소하면 원래 연결이 끊어진 부분이 서로 연결됩니다.

1.3 2차 오차 측정

축소된 정점과 원래 메쉬 사이의 로컬 거리가 너무 멀지 않도록 하기 위해 최적의 축소 지점을 찾기 위해 2차 거리 측정법을 기반으로 하는 방법을 선택합니다.

2차 거리를 기준으로 최적의 수축점 찾기

이미지-20230730174452604

여기에서 공식을 도출하려면 기사에서 매우 명확하게 설명된 그리드 단순화 QEM 방법에 대한 자세한 설명을 참조하세요.

가장자리 수축을 고려하십시오. 두 점 v 1 , v 2 v_1, v_2V1,V2, 점 v ˉ \bar{v} 로 축소됩니다.Vˉ。정义 평면( vi ) \left(v_i\right)( v) 는 vi v_i를나타냅니다.V해당 원래 삼각형 표면인 경우 최적화 목표는
v ˉ = arg ⁡ min ⁡ v ∑ p ∈ plane ( v 1 ) ∪ plane ( v 2 ) distance ⁡ ( v , p ) 2 \bar{v}=\ underset{ v}{\arg \min } \sum_{p \in \text { 평면 }\left(v_1\right) \cup \text { 평면 }\left(v_2\right)} \operatorname{거리}(v , p )^2Vˉ=V아르 gp  평면  ( v1)  평면  ( v2)거리 ( v ,)2
다음은 단계별로 단순화됩니다. 비행기를보자p 의 표현 은 ax + by + cz + d = 0 a x+b y+c z+d=0입니다.엑스 _+으로 _+cz+=0 , 其中a 2 + b 2 + c 2 = 1 a^2+b^2+c^2=12+2+2=1。 记v = [ x , y , z , 1 ] T , p = [ a , b , c , d ] T v=[x, y, z, 1]^T, p=[a, b, c , d]^TV=[ 엑스 ,y ,z ,1 ] ,=[ , _,,]T , 可得
거리 ⁡ ( v , p ) 2 = ( v T p ) 2 = v T pp T v = v TK pv \operatorname{거리}(v, p)^2=\left(v^T p\ 오른쪽)^2=v^T pp^T v=v^T K_p v거리 ( v ,)2=( v티피 )_2=V 피피_티비 _=V 케이v여기서 K p = pp T K_p=pp^
T케이=T,则原式简化为
v ˉ = arg ⁡ min ⁡ v v T ( ∑ p ∈ 평면 ( v 1 ) ∪ 평면 ( v 2 ) K p ) v \bar{v}=\underset{v}{\arg \ min }\space v^T\left(\sum_{p \in \text { 평면 }\left(v_1\right) \cup 평면\left(v_2\right)} K_p\right) vVˉ=V아르 g V p  평면  ( v1)계획 ( v __2)케이 v
此处取约等于
v ˉ arg ⁡ min ⁡ v v T ( ∑ p ∈ 평면 ⁡ ( v 1 ) K p + ∑ p ∈ 평면 ⁡ ( v 2 ) K p ) v \bar{v} \about \underset {v}{\arg \min }\space v^T\left(\sum_{p \in \operatorname{plane}\left(v_1\right)} K_p+\sum_{p \in \operatorname{plane}\left (v_2\right)} K_p\right) vVˉV아르 g V p 평면 ( v1)케이+p 평면 ( v2)케이 v
Q i = ∑ p ∈ 평면 ( vi ) K p Q_i=\sum_{p \in \text { 평면 }\left(v_i\right)} K_p=p  평면  ( v)케이,则有
v ˉ = arg ⁡ min ⁡ v v T ( Q 1 + Q 2 ) v \bar{v}=\underset{v}{\arg \min }\space v^T\left(Q_1+Q_2\right ) VVˉ=V아르 g V( Q1+2)v
가 초기화 되면평면 ⁡ ( v ) \operatorname{plane}(v)평면 ( v ) 은 점 v \mathrm{v}로 설정됩니다.v 주위의 삼각형 면이때, 위의 등호 근사는 삼각형의 곡면이 최대 3회(3개의 꼭지점) 반복되기 때문에 큰 문제가 되지 않으며, 이는 큰 오차를 가져오지 않을 뿐만 아니라 계산을 단순화시킨다.
또한,Kp K_p케이는 대칭행렬이므로 QQQ 도 마찬가지 이므로 10개의 요소만 저장하면 됩니다.
이때v ˉ \bar{v}를V 좌표는 2차 함수를 푸는 극점이 됩니다. [ 2 ] ^{[2]}[ 2 ]

Q = Q 1 + Q 2 Q=Q_1+Q_2=1+2, 다음 방정식을 풀어 v ˉ \bar{v}를 푼다.Vˉ的坐标:
[ q 11 q 12 q 13 q 14 q 12 q 22 q 23 q 24 q 13 q 23 q 33 q 34 0 0 0 1 ] v ˉ = [ 0 0 0 1 ] \left[{\begin{ 배열}{cccc}q_{11}&q_{12}&q_{13}&q_{14}\\q_{12}&q_{22}&q_{23}&q_{24}\\q_{13}&q_{23}&q_ {33}&q_{34}\\0&0&0&1\end{배열}}\right]\bar{v}=\left[{\begin{array}{c}0\\0\\0\\1\end{ 배열}}\오른쪽] 1112130122223013233301424341 Vˉ= 0001
위의 공식에서 q 11 q_{11}11QQ를 의미한다Q 의 첫 번째 행의 첫 번째 요소 값v ˉ \bar{v})Vˉ동차 좌표가 사용됩니다. 위 공식의 좌변에 있는 행렬이 가역적이면
v ˉ = [ q 11 q 12 q 13 q 14 q 12 q 22 q 23 q 24 q 13 q 23 q 33 q 34 0 0 0 1 ] − 1 [ 0 0 0 1 ] \bar{v}=\left[{\begin{배열}{cccc}q_{11}&q_{12}&q_{13}&q_{14}\\q_{12}&q_{22} &q_{23}&q_ {24}\\q_{13}&q_{23}&q_{33}&q_{34}\\0&0&0&1\end{배열}}\right]^{-1}\left[{\begin{ 배열}{c} 0\\0\\0\\1\end{배열}}\right]Vˉ= 1112130122223013233301424341 - 1 0001
되돌릴 수 없는 경우 [4] ^{[4]}[ 4 ]
v = ( 1 − k ) v 1 + kv 2 , 여기서 k ∈ [ 0 , 1 ] v ˉ = arg ⁡ min ⁡ v v T ( Q 1 + Q 2 ) vv=(1-k)v_1+kv_2 ,\text{여기서}\space{k}\in[0,1]\\ \bar{v}=\underset{v}{\arg \min }\space v^T\left(Q_1+Q_2\right ) VV=( 1-케이 ) v1+kv _2,어디 k [ 0 ,1 ]Vˉ=V아르 g V( Q1+2)v가
여전히 작동하지 않으면 엔드포인트v 1, v 2 v_1, v_2를V1,V2또는 중간점 v 1 + v 2 2 \frac{v_1+v_2}22V1+ v2세 가지 중 오류( Δ ( v ) = v TQ v \Delta(v)=v^TQv( v )=VT Qv) 최소v ˉ \bar{v}Vˉ [ 3 ] ^{[3]}[ 3 ]

2 알고리즘 프로세스

img

그림 출처: QEM 그리드 단순화 - Jianshu(jianshu.com)

2.1 단계별 분석

  • 모든 초기 정점의 QQ 계산Q 행렬

    비행기를 보자p 의 표현 은 ax + by + cz + d = 0 a x+b y+c z+d=0입니다.엑스 _+으로 _+cz+=0 , 其中a 2 + b 2 + c 2 = 1 a^2+b^2+c^2=12+2+2=1。记p = [ a , b , c , d ] T p=[a, b, c, d]^T=[ , _,,]티. _ 이것으로부터 우리는Q i Q_i를(4x4, 학점 vi v_iVQQQ 행렬)은 다음과 같습니다.
    Q i = ∑ p ∈ 평면( vi ) pp T Q_i=\sum_{p\in 평면(v_i)}pp^T=p 계획 ( v _ _)

  • 법적 쌍을 선택하세요

    정점 쌍 ( vi , vj ) (v_i,v_j)( v,Vj) 는 유효한 포인트 쌍입니다.

    • ( vi , vj ) (v_i,v_j)( v,Vj) 는 가장자리입니다.
    • ” vi − vj ” < t ”v_i − v_j” < tv-Vj<t ,ttt 는 임계값 매개변수입니다.

    위 조건 중 하나만 만족하시면 됩니다.

  • 각 법적 포인트 쌍 (vi, vj)(v_i,v_j)을 계산합니다.( v,Vj) 최소 수축 오차costij cost_{ij}비용 _ij, 최적 수축점 vopt v_{opt}Vo pt의 위치

    먼저 vopt v_{opt}를 계산합니다.Vo pt해당 Q opt Q_{opt}o pt
    Q opt = Q i + Q j = [ q 11 q 12 q 13 q 14 q 12 q 22 q 23 q 24 q 13 q 32 q 33 q 34 q 14 q 24 q 34 q 44 ] . Q_{opt}=Q_i+Q_j=\begin{bmatrix}q_{11}&q_{12}&q_{13}&q_{14}\\q_{12}&q_{22}&q_{23}&q_{24}\\ q_{13}&q_{32}&q_{33}&q_{34}\\q_{14}&q_{24}&q_{34}&q_{44}\end{bmatrix}.o pt=+j= 11121314122232241323333414243444 .define costij 비용_{ij
    }비용 _ij예:
    costij = v TQ optv cost_{ij}=v^TQ_{opt}v비용 _ij=VT Qo ptv
    축소 오류를 최소화하고vopt v_{opt}를Vo pt. 구체적인 계산에 대해서는 이전 섹션 [2차 오차 측정](#1.3 2차 오차 측정)을 참조하세요.

  • 해당 Costij 비용_{ij} 에 따라 모든 법적 포인트 쌍을 누릅니다.비용 _ij최소 Costij 비용_{ij} 으로 순서대로 힙에 배치됩니다.비용 _ij상단에 쌍

    일반적으로 정렬에는 작은 루트 힙이 사용됩니다.

  • 최소 Costij 비용 제거_{ij}비용 _ij대응점 쌍, 축약 (vi, vj) → vopt (v_i,v_j)\rightarrow{v_{opt}}( v,Vj)Vo pt, vi v_i를 포함하는 모든 항목 업데이트V또는 vj v_jVj법적 포인트 쌍의 비용 비용비용 _

    이 단계는 반복적으로 수행되며, 종료 신호는 설정된 단순화 비율에 도달했거나 힙이 비어 있음을 나타냅니다. [5] ^{[5]}[ 5 ]

3 Python 코드 구현

코드 구현 측면에서 이 프로젝트를 직접 연구하는 것이 좋습니다: Mesh_simplification_python: Python을 사용하여 메쉬 단순화 알고리즘을 구현합니다 . 코드가 완전히 주석 처리되고 잘 구성되어 있어 학습할 가치가 있습니다.

3.1 테스트 결과

입력 모델 메시(정점 9397개, 면 18794개):

이미지-20230802000140688

t = 0 , 비율 = 0.5 t=0,\공간 비율=0.5=0 , r a ti o _=0.5 (정점 4698개, 면 9396개):

이미지-20230802000230337

t = 0 , 비율 = 0.1 t=0,\공간 비율=0.1=0 , r a ti o _=0.1 (정점 939개, 면 1878개):

이미지-20230802000546218

4 요약

  • 코드 기능 최적화

    원본 논문에서는 다음 두 가지 세부 사항도 언급되었습니다.

    • 경계를 보존하다

      단순화 과정에서 경계를 유지해야 하는 일부 모델 메쉬의 경우 점 쌍이 축소될 때 점 쌍이 경계 가장자리인지 여부를 확인하고, 그렇다면 축소를 방지하기 위해 더 큰 페널티 계수로 점 쌍의 비용에 가중치를 부여할 수 있습니다. .

    • 반죽이 뒤집어지는 것을 방지

      메시 단순화를 위해 QEM 알고리즘을 직접 사용하면 일부 패치가 뒤집힐 수 있습니다. 따라서 점 쌍의 수축 비용을 계산할 때 점 쌍의 인접한 각 패치가 뒤집혔는지 여부를 동시에 확인해야 합니다. 수축 전후의 법선 벡터 사이의 각도 크기를 판단하는 데 사용할 수 있습니다. 동시에 우리는 그에 따른 비용도 처벌합니다.

참고

[1] GAMES102:几何建模与处리
[2] https://zhuanlan.zhihu.com/p/411865616
[3] Michael Garland와 Paul S. Heckbert. 1997. 2차 오차 측정법을 사용한 표면 단순화. 컴퓨터 그래픽 및 인터랙티브 기술에 관한 제24차 연례 컨퍼런스 진행(SIGGRAPH '97). ACM Press/Addison-Wesley Publishing Co., 미국, 209-216. https://doi.org/10.1145/258734.258849
[4] https://www.jianshu.com/p/2bf615c38165
[5] https://github.com/AntonotnaWang/Mesh_simplification_python

추천

출처blog.csdn.net/qq_39784672/article/details/132053304