Notes d'étude sur la simplification du réseau (QEM)

Simplification du maillage (QEM)

1 Présentation et principe

La simplification du maillage simplifie l'expression du modèle en réduisant le nombre de sommets, d'arêtes et de faces des données de maillage complexes. Dans le domaine du graphisme, cette technologie est également appelée Niveau de détails (LOD, détails multi-niveaux).

1.1 Application de la simplification du maillage

  • Rendu multi-résolution : pour les modèles avec des tailles de projection plus petites (affichées à distance), une version simplifiée de celui-ci peut être rendue pour remplacer le maillage original de haute complexité par des détails riches, améliorant ainsi l'efficacité du rendu.
  • Simulation proxy : effectuez une simulation sur un modèle simplifié, puis obtenez des résultats de simulation approximatifs de la grille complexe d'origine grâce à la méthode d'interpolation pour améliorer l'efficacité de la simulation. [ 1 ] ^{[1]}[ 1 ]

1.2 Opérations simplifiées communes

  • Décimation du sommet

    Sélectionnez un sommet à supprimer, supprimez les faces adjacentes à ce sommet, puis retriangulez le trou obtenu.

  • Clustering de sommets

    image-20230730150803895

    Divisez le cadre de délimitation de la grille d'origine en une grille, regroupez les sommets de chaque cellule en un seul, puis mettez à jour les faces de la grille en fonction des sommets regroupés.

  • Contraction des bords

    image-20230730151429110

    ( v 1 , v 2 ) → v ‾ (v_1,v_2)\rightarrow{\overline{v}}( v1,v2)v, réduisez une arête à un point et supprimez les faces dégénérées (ombrées dans l'image ci-dessus).

  • Contraction des paires

    image-20230730162827401En tant que généralisation de la contraction des bords, si la paire de points ( v 1 , v 2 ) (v_1,v_2)( v1,v2) est une arête, alors cela équivaut à une contraction d'arête ; si la paire de points( v 1 , v 2 ) (v_1,v_2)( v1,v2) n'est pas une arête, alors la réduction de la paire de points reliera ensemble les parties initialement déconnectées.

1.3 Mesure de l'erreur quadratique

Afin de garantir que la distance locale entre les sommets rétrécis et le maillage d'origine n'est pas trop grande, nous choisissons une méthode basée sur une métrique de distance quadratique pour trouver le point de rétrécissement optimal.

Trouvez le point de retrait optimal en fonction de la distance quadratique

image-20230730174452604

Pour le calcul de la formule ici, veuillez consulter l'explication détaillée de la méthode QEM de simplification de grille , qui est expliquée très clairement dans l'article.

Considérons un retrait des bords. Pour deux points v 1 , v 2 v_1, v_2v1,v2, se rétrécit en un point v ˉ \bar{v}vˉ。定义 plan( vi ) \left(v_i\right)( vje) représentevi v_ivjeLes surfaces triangulaires d'origine correspondantes, alors notre objectif d'optimisation est
v ˉ = arg ⁡ min ⁡ v ∑ p ∈ plan ( v 1 ) ∪ plan ( v 2 ) distance ⁡ ( v , p ) 2 \bar{v}=\ underset{ v}{\arg \min } \sum_{p \in \text { plan }\left(v_1\right) \cup \text { plan }\left(v_2\right)} \operatorname{distance}(v , p )^2vˉ=var gminp  plan  ( v1)  avion  ( v2)distance ( v ,p )2
Ce qui suit simplifie étape par étape. Laissez l'avionppL'expression de p estax + by + cz + d = 0 a x+b y+c z+d=0un x+par _+cz+d=0 , oùa 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1un2+b2+c2=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=[ X ,oui ,z ,1 ]T ,p=[ une ,b ,c ,]T,可得
distance ⁡ ( v , p ) 2 = ( v T p ) 2 = v T pp T v = v TK pv \operatorname{distance}(v, p)^2=\left(v^T p\ à droite) ^ 2 = v ^ T pp ^ T v = v ^ T K_p vdistance ( v ,p )2=( vT p)2=vT ppTélévision _=vTK _pvoù K p = pp T K_p=pp^
TKp=p pT,则原式简化为
v ˉ = arg ⁡ min ⁡ v v T ( ∑ p ∈ plan ( v 1 ) ∪ plan ( v 2 ) K p ) v \bar{v}=\underset{v}{\arg \ min }\space v^T\left(\sum_{p \in \text { plane }\left(v_1\right) \cup plane\left(v_2\right)} K_p\right) vvˉ=var gmin vT p  plan  ( v1)planane ( v2)Kp v
此处取约等于
v ˉ ≈ arg ⁡ min ⁡ v v T ( ∑ p ∈ plan ⁡ ( v 1 ) K p + ∑ p ∈ plan ⁡ ( v 2 ) K p ) v \bar{v} \approx \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ˉvar gmin vT p plan ( v1)Kp+p plan ( v2)Kp v
Q i = ∑ p ∈ plan ( vi ) K p Q_i=\sum_{p \in \text { plan }\left(v_i\right)} K_pQje=p  plan  ( vje)Kp,则有
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ˉ=var gmin vT( Q1+Q2)
Lorsque v est initialisé, plan ⁡ ( v ) \operatorname{plane}(v)le plan ( v ) est défini sur le pointv \mathrm{v}Les faces triangulaires autour de v suffisent. À l'heure actuelle, le signe égal ci-dessus n'est pas grave, car une face triangulaire peut être répétée au maximum trois fois (trois sommets), ce qui non seulement n'entraîne pas de grandes erreurs, mais simplifie également le calcul.
De plus,K p K_pKpest une matrice symétrique, donc QQIl en va de même pour Q , il n'a donc besoin que de stocker 10 éléments.
À ce moment, résolvezv ˉ \bar{v}vLes coordonnées de ˉ deviennent les points extrêmes de résolution de la fonction quadratique. [ 2 ] ^{[2]}[ 2 ]

Q = Q 1 + Q 2 Q=Q_1+Q_2Q=Q1+Q2, résolvez v ˉ \bar{v} en résolvant l'équation suivantevˉ的坐标:
[ 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{ tableau}{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{array}}\right]\bar{v}=\left[{\begin{array}{c}0\\0\\0\\1\end{ tableau}}\right] q11q12q130q12q22q230q13q23q330q14q24q341 vˉ= 0001
Dans la formule ci-dessus, q 11 q_{11}q11signifie QQLa valeur du premier élément de la première ligne de Q , où v ˉ \bar{v}vˉDes coordonnées homogènes sont utilisées. Si la matrice du côté gauche de la formule ci-dessus est inversible, alors
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{array}{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{array}}\right]^{-1}\left[{\begin{ tableau}{c} 0\\0\\0\\1\end{array}}\right]vˉ= q11q12q130q12q22q230q13q23q330q14q24q341 1 0001
Si irréversible, alors [4] ^{[4]}[ 4 ]
v = ( 1 − k ) v 1 + kv 2 , où k ∈ [ 0 , 1 ] v ˉ = arg ⁡ min ⁡ v v T ( Q 1 + Q 2 ) vv=(1-k)v_1+kv_2 ,\text{where}\space{k}\in[0,1]\\ \bar{v}=\underset{v}{\arg \min }\space v^T\left(Q_1+Q_2\right )vv=( 1k ) v1+k v2,k [ 0 ,1 ]vˉ=var gmin vT( Q1+Q2)Si v
ne fonctionne toujours pas, sélectionnez les points de terminaisonv 1, v 2 v_1, v_2v1,v2Ou point médian v 1 + v 2 2 \frac{v_1+v_2}22v1+ v2Erreur parmi les trois ( Δ ( v ) = v TQ v \Delta(v)=v^TQv( v )=vT Qv) minimum commev ˉ \bar{v}vˉ [ 3 ] ^{[3]}[ 3 ]

2 Processus algorithmique

img

Source de la figure : simplification de la grille QEM - Jianshu (jianshu.com)

2.1 Analyse étape par étape

  • Calculer QQ de tous les sommets initiauxMatrice Q

    Laissez l'avion ppL'expression de p estax + by + cz + d = 0 a x+b y+c z+d=0un x+par _+cz+d=0 , oùa 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1un2+b2+c2=1.p = [ a , b , c , d ] T p=[a, b, c, d]^Tp=[ une ,b ,c ,]T. _ A partir de là, nous définissonsQ i Q_iQje(4x4, point vi v_ivjeQQ cibleMatrice Q ) comme suit :
    Q i = ∑ p ∈ plans ( vi ) pp T Q_i=\sum_{p\in planes(v_i)}pp^TQje=p plans an es ( vje)p pT

  • Choisissez une paire légale

    Une paire de sommets ( vi , vj ) (v_i,v_j)( vje,vj) est une paire de points légale :

    • ( vi , vj ) (v_i,v_j)( vje,vj) est une arête ;
    • ‖ vi − vj ‖ < t ‖v_i − v_j‖ < t‖v _jevj<t ,tt est le paramètre de seuil.

    Il suffit de remplir l'une des conditions ci-dessus.

  • Calculez chaque paire de points légaux (vi, vj) (v_i,v_j)( vje,vj) l'erreur de retrait minimalecostij cost_{ij}coût _je, et le point de contraction optimal vopt v_{opt}voups _la position

    Calculez d’abord vopt v_{opt}voups _Q correspondant opt ​​Q_{opt}Qoups _
    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}.Qoups _=Qje+Qj= q11q12q13q14q12q22q32q24q13q23q33q34q14q24q34q44 .define costij cost_{ij
    }coût _jeExemple :
    costij = v TQ optv cost_{ij}=v^TQ_{opt}vcoût _je=vTQ _oups _v
    minimise l'erreur de retrait et obtientvopt v_{opt}voups _. Pour des calculs spécifiques, voir la section précédente [Mesure de l'erreur quadratique] (#1.3 Mesure de l'erreur quadratique).

  • Appuyez sur toutes les paires de points légaux en fonction de leur costij cost_{ij} correspondantcoût _jesont placés en tas dans l'ordre, avec un coût minimumij cost_{ij}coût _jepaire en haut

    Généralement, de petits tas de racines sont utilisés pour le tri.

  • Supprimer le coût minimumij cost_{ij}coût _jePaire de points correspondante, contraction (vi, vj) → vopt (v_i,v_j)\rightarrow{v_{opt}}( vje,vj)voups _, mettez à jour tous les éléments contenant vi v_ivjeou vj v_jvjLe coût coût de la paire de points légauxcoût _

    Cette étape est réalisée de manière itérative, et le signe de fin est que le taux de simplification fixé est atteint ou que le tas est vide [5] ^{[5]}[ 5 ]

3 Implémentation du code Python

En termes d'implémentation de code, il est recommandé d'étudier directement ce projet : Mesh_simplification_python : Une implémentation d'un algorithme de simplification de maillage utilisant python . Le code est entièrement commenté et bien organisé, ce qui mérite d'être appris.

3.1 Résultats des tests

Maillage du modèle d'entrée (9 397 sommets, 18 794 faces) :

image-20230802000140688

t = 0 , rapport = 0,5 t=0,\espace rapport=0,5t=0 , rat i o _ _=0,5(4698 sommets, 9396 faces):

image-20230802000230337

t = 0 , rapport = 0,1 t=0,\espace rapport=0,1t=0 , rat i o _ _=0,1(939 sommets, 1878 faces):

image-20230802000546218

4 Résumé

  • Optimisation des fonctions de code

    Les deux détails suivants ont également été mentionnés dans le document original :

    • préserver les limites

      Pour certains maillages de modèles qui doivent conserver les limites pendant le processus de simplification, nous déterminons si la paire de points est une arête de frontière lorsque la paire de points se rétrécit. Si tel est le cas, nous pouvons pondérer le coût de la paire de points avec un facteur de pénalité plus élevé pour éviter le rétrécissement. .

    • Empêcher la pâte de se retourner

      L'utilisation directe de l'algorithme QEM pour la simplification du maillage peut entraîner le retournement de certains correctifs. Par conséquent, lors du calcul du coût de retrait d’une paire de points, nous devons simultanément déterminer si chaque patch adjacent de la paire de points a été inversé. La taille de l'angle entre les vecteurs normaux du retrait avant et après peut être utilisée pour juger. Dans le même temps, nous punissons également ses coûts.

référence

[1] JEUX102 : 几何建模与处理
[2] https://zhuanlan.zhihu.com/p/411865616
[3] Michael Garland et Paul S. Heckbert. 1997. Simplification de la surface à l'aide de métriques d'erreur quadrique. Dans Actes de la 24e conférence annuelle sur l'infographie et les techniques interactives (SIGGRAPH '97). ACM Press/Addison-Wesley Publishing Co., États-Unis, 209-216. https://doi.org/10.1145/258734.258849
[4] https://www.jianshu.com/p/2bf615c38165
[5] https://github.com/AntonotnaWang/Mesh_simplification_python

Je suppose que tu aimes

Origine blog.csdn.net/qq_39784672/article/details/132053304
conseillé
Classement