Notas de estudo sobre simplificação de grade (QEM)

Simplificação de malha (QEM)

1 Visão Geral e Princípio

A simplificação da malha simplifica a expressão do modelo, reduzindo o número de vértices, arestas e faces de dados de malha complexos.No campo dos gráficos, essa tecnologia também é chamada de Nível de detalhes (LOD, detalhes de vários níveis).

1.1 Aplicação da simplificação da malha

  • Renderização multi-resolução : Para modelos com tamanhos de projeção menores (exibidos à distância), uma versão simplificada pode ser renderizada para substituir a malha original de alta complexidade com detalhes ricos, melhorando a eficiência da renderização.
  • Simulação proxy : execute a simulação em um modelo simplificado e, em seguida, obtenha resultados aproximados da simulação da grade complexa original por meio do método de interpolação para melhorar a eficiência da simulação. [1] ^{[1]}[ 1 ]

1.2 Operações simplificadas comuns

  • Dizimação de vértices

    Selecione um vértice para excluir, remova as faces adjacentes a esse vértice e triangule novamente o furo resultante.

  • Clustering de vértices

    imagem-20230730150803895

    Divida a caixa delimitadora da grade original em uma grade, agrupe os vértices de cada célula em uma e atualize as faces da grade com base nos vértices agrupados.

  • Contração da borda

    imagem-20230730151429110

    ( v 1 , v 2 ) → v ‾ (v_1,v_2)\rightarrow{\overline{v}}( v1,v2)v, reduza uma aresta até um ponto e exclua faces degeneradas (sombreadas na imagem acima).

  • Contração de par

    imagem-20230730162827401Como uma generalização da contração das arestas, se o par de pontos ( v 1 , v 2 ) (v_1,v_2)( v1,v2) é uma aresta, então é equivalente à contração da aresta; se o par de pontos( v 1 , v 2 ) (v_1,v_2)( v1,v2) não é uma aresta, então diminuir o par de pontos conectará as partes originalmente desconectadas.

1.3 Medição de erro quadrático

Para garantir que a distância local entre os vértices reduzidos e a malha original não seja muito grande, escolhemos um método baseado em uma métrica de distância quadrática para encontrar o ponto ideal de redução.

Encontre o ponto de contração ideal com base na distância quadrática

imagem-20230730174452604

Para a derivação da fórmula aqui, consulte a explicação detalhada do método QEM de simplificação de grade , que é explicado de forma muito clara no artigo.

Considere um encolhimento de borda. Para dois pontos v 1 , v 2 v_1, v_2v1,v2, encolhe em um ponto v ˉ \bar{v}vˉ。定义 plano( vi ) \left(v_i\right)( veu) significavi v_iveuAs superfícies triangulares originais correspondentes, então nosso objetivo de otimização é
v ˉ = arg ⁡ min ⁡ v ∑ p ∈ plano ( v 1 ) ∪ plano ( v 2 ) distância ⁡ ( v , p ) 2 \bar{v}=\ underset{ v}{\arg \min } \sum_{p \in \text { avião }\left(v_1\right) \cup \text { avião }\left(v_2\right)} \operatorname{distância}(v , p )^2vˉ=var gminp  plano  ( v1)  plano  ( v2)distância ( v ,p )2
O seguinte simplifica passo a passo. Deixe o aviãoppA expressão de p éax + by + cz + d = 0 a x+b y+c z+d=0um x+por _+cz+d=0 , ondea 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1a2+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 ,sim ,z ,1 ]T ,p=[ uma ,b ,c ,e ]T,可得
distância ⁡ ( v , p ) 2 = ( v T p ) 2 = v T pp T v = v TK pv \nome do operador{distância}(v, p)^2=\left(v^T p\ direita)^2=v^T pp^T v=v^T K_p vdistância ( v ,p )2=( vTp )_2=vT pptelevisão _=vT Kpvonde K p = pp T K_p=pp^
TKp=p pT,则原式简化为
v ˉ = arg ⁡ min ⁡ v v T ( ∑ p ∈ plano ( v 1 ) ∪ plano ( v 2 ) K p ) v \bar{v}=\underset{v}{\arg \ min }\espaço v^T\left(\sum_{p \in \text { avião }\left(v_1\right) \cup plane\left(v_2\right)} K_p\right) vvˉ=var gmin vT p  plano  ( v1)planoe ( v _2)Kp v
此处取约等于
v ˉ ≈ arg ⁡ min ⁡ v v T ( ∑ p ∈ plano ⁡ ( v 1 ) K p + ∑ p ∈ plano ⁡ ( v 2 ) K p ) v \bar{v} \approx \underset {v}{\arg \min }\space v^T\left(\sum_{p \in \operatorname{plano}\left(v_1\right)} K_p+\sum_{p \in \operatorname{plane}\left (v_2\direita)} K_p\direita) vvˉvar gmin vT p plano ( v1)Kp+p plano ( v2)Kp v
Q i = ∑ p ∈ plano ( vi ) K p Q_i=\sum_{p \in \text { plano }\left(v_i\right)} K_pPeu=p  plano  ( veu)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+P2)
Quando v é inicializado, plano ⁡ ( v ) \operatorname{plane}(v)o plano ( v ) está definido para o pontov \mathrm{v}As faces triangulares em torno de v são suficientes. Neste momento, a aproximação do sinal de igual acima não é grande coisa, pois uma superfície triangular se repete no máximo três vezes (três vértices), o que não só não traz grandes erros, mas também simplifica o cálculo.
Além disso,K p K_pKpé uma matriz simétrica, então QQO mesmo vale para Q , portanto ele só precisa armazenar 10 elementos.
Neste momento, resolvav ˉ \bar{v}vAs coordenadas de ˉ tornam-se os pontos extremos da resolução da função quadrática. [2] ^{[2]}[ 2 ]

Q = Q 1 + Q 2 Q=Q_1+Q_2P=P1+P2, resolva v ˉ \bar{v} resolvendo a seguinte equaçãovˉ的坐标:
[ 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{ matriz}{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{ matriz}}\direita] q11q12q130q12q22q230q13q23q330q14q24q341 vˉ= 0001
Na fórmula acima, q 11 q_{11}q11significa QQO valor do primeiro elemento da primeira linha de Q , onde v ˉ \bar{v}vˉCoordenadas homogêneas são usadas. Se a matriz no lado esquerdo da fórmula acima for invertível, então
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{ matriz}{c} 0\\0\\0\\1\end{array}}\direita]vˉ= q11q12q130q12q22q230q13q23q330q14q24q341 1 0001
Se irreversível, então [4] ^{[4]}[ 4 ]
v = ( 1 − k ) v 1 + kv 2 , onde k ∈ [ 0 , 1 ] v ˉ = arg ⁡ min ⁡ v v T ( Q 1 + Q 2 ) vv=(1-k)v_1+kv_2 ,\text{onde}\space{k}\in[0,1]\\ \bar{v}=\underset{v}{\arg \min }\space v^T\left(Q_1+Q_2\right )vv=( 1-k ) v1+k v2,onde k [ 0 ,1 ]vˉ=var gmin vT( Q1+P2)Se v
ainda não funcionar, selecione os endpointsv 1, v 2 v_1, v_2v1,v2Ou ponto médio v 1 + v 2 2 \frac{v_1+v_2}22v1+ v2Erro entre os três ( Δ ( v ) = v TQ v \Delta(v)=v^TQvD ( v )=vT Qv) mínimo comov ˉ \bar{v}vˉ [3] ^{[3]}[ 3 ]

2 Processo de algoritmo

imagem

Fonte da figura: simplificação da grade QEM - Jianshu (jianshu.com)

2.1 Análise passo a passo

  • Calcule QQ de todos os vértices iniciaisMatriz Q

    Deixe o avião ppA expressão de p éax + by + cz + d = 0 a x+b y+c z+d=0um x+por _+cz+d=0 , ondea 2 + b 2 + c 2 = 1 a^2+b^2+c^2=1a2+b2+c2=1。记p = [ a , b , c , d ] T p=[a, b, c, d]^Tp=[ uma ,b ,c ,e ]T. _ A partir disso, definimosQ i Q_iPeu(4x4, ponto vi v_iveuQQ alvoMatriz Q ) como segue:
    Q i = ∑ p ∈ planos ( vi ) pp T Q_i=\sum_{p\in planes(v_i)}pp^TPeu=p plano es ( v _eu)p pT

  • Escolha um par legal

    Um par de vértices (vi, vj) (v_i,v_j)( veu,vj) é um par de pontos válido:

    • (vi, vj) (v_i,v_j)( veu,vj) é uma aresta;
    • ‖vi − vj ‖ <t ‖v_i − v_j‖ <t‖v _eu-vj<t ,ttt é o parâmetro limite.

    Basta satisfazer uma das condições acima.

  • Calcule cada par de pontos legais (vi, vj) (v_i,v_j)( veu,vj) o erro mínimo de contraçãocostij cost_{ij}custo _eu, e o ponto de contração ideal vopt v_{opt}vo pontoposição

    Primeiro calcule vopt v_{opt}vo pontoQ opt correspondente Q_{opt}Po ponto:
    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{bmatriz}.Po ponto=Peu+Pj= q11q12q13q14q12q22q32q24q13q23q33q34q14q24q34q44 .define custoij custo_{ij
    }custo _euExemplo:
    costij = v TQ optv cost_{ij}=v^TQ_{opt}vcusto _eu=vT Qo pontov
    minimiza o erro de encolhimento e obtémvopt v_{opt}vo ponto. Para cálculos específicos, consulte a seção anterior [Medição de erro quadrático] (#1.3 Medição de erro quadrático).

  • Pressione todos os pares de pontos legais de acordo com seu custo correspondenteij cost_{ij}custo _eusão colocados em uma pilha em ordem, com custo mínimoij cost_{ij}custo _eupar no topo

    Geralmente, pequenos heaps de raiz são usados ​​para classificação.

  • Remova o custo mínimoij cost_{ij}custo _euPar de pontos correspondente, contração (vi, vj) → vopt (v_i,v_j)\rightarrow{v_{opt}}( veu,vj)vo ponto, atualize todos os itens contendo vi v_iveuou vj v_jvjO custo do par de pontos legaiscusto _

    Esta etapa é realizada de forma iterativa, e o sinal final é que a taxa de simplificação definida foi atingida ou o heap está vazio [5] ^{[5]}[ 5 ]

3 Implementação de código Python

Em termos de implementação de código, recomenda-se estudar diretamente este projeto: Mesh_simplification_python: Uma implementação de algoritmo de simplificação de malha usando python.O código é totalmente comentado e bem organizado, valendo a pena aprendê-lo.

3.1 Resultados do teste

Malha do modelo de entrada (9.397 vértices, 18.794 faces):

imagem-20230802000140688

t = 0, razão = 0,5 t=0,\razão espacial=0,5t=0 , r a t i o=0,5(4698 vértices, 9396 faces):

imagem-20230802000230337

t = 0, razão = 0,1 t=0,\razão espacial=0,1t=0 , r a t i o=0,1(939 vértices, 1878 faces):

imagem-20230802000546218

4 Resumo

  • Otimização da função de código

    Os dois detalhes a seguir também foram mencionados no artigo original:

    • preservar limites

      Para algumas malhas de modelo que precisam manter limites durante o processo de simplificação, determinamos se o par de pontos é uma borda de limite quando o par de pontos diminui. Nesse caso, podemos ponderar o custo do par de pontos com um fator de penalidade maior para evitar o encolhimento .

    • Evite que a massa vire

      O uso direto do algoritmo QEM para simplificação da malha pode fazer com que alguns patches sejam alterados. Portanto, ao calcular o custo de contração de um par de pontos, precisamos determinar simultaneamente se cada trecho adjacente do par de pontos foi invertido. O tamanho do ângulo entre os vetores normais do encolhimento antes e depois pode ser usado para julgar. Ao mesmo tempo, também punimos os seus custos.

referência

[1] GAMES102:几何建模与处理
[2] https://zhuanlan.zhihu.com/p/411865616
[3] Michael Garland e Paul S. Heckbert. 1997. Simplificação de superfície usando métricas de erro quádrica. Nos Anais da 24ª conferência anual sobre Computação Gráfica e Técnicas Interativas (SIGGRAPH '97). ACM Press/Addison-Wesley Publishing Co., EUA, 209–216. https://doi.org/10.1145/258734.258849
[4] https://www.jianshu.com/p/2bf615c38165
[5] https://github.com/AntonotnaWang/Mesh_simplification_python

Acho que você gosta

Origin blog.csdn.net/qq_39784672/article/details/132053304
Recomendado
Clasificación