Pular para o conteúdo principal

Introdução

Toda estrutura de aceleração de nível inferior (BLAS) tem uma AABB armazenada na raiz que delimita toda a BLAS. Essa AABB está no mesmo espaço que a geometria, ou seja, no espaço do objeto. Ao inserir uma instância de uma BLAS em uma estrutura de aceleração de nível superior (TLAS), os limites da instância devem ser determinados no espaço do mundo. A abordagem ingênua é transformar os cantos da AABB do espaço do objeto para o espaço do mundo e formar uma nova AABB. Se houver qualquer rotação na transformação, isso inflará a AABB no espaço do mundo, aumentando sua área de superfície e resultando em mais interseções falso-positivas. A AABB exata no espaço do mundo exigiria transformar cada vértice contido na BLAS para o espaço do mundo e delimitá-los. Isso não é prático, especialmente em tempo de execução. Existe um meio-termo que pode melhorar o ajuste da AABB no espaço do mundo sem um custo de tempo de execução tão alto quanto o da abordagem exata. Ele requer a pré-construção de uma envoltória convexa (uma malha de pontos) que delimita a BLAS. Em vez de girar uma AABB do espaço do objeto para o espaço do mundo, podemos girar essa malha e encontrar seus limites no espaço do mundo. Quanto mais refinada for a malha, mais próxima do resultado exato poderemos tornar a AABB da instância no espaço do mundo.

k-DOP

Um k-DOP é um politopo discreto orientado de dimensão ‘k’. Trata-se de um volume delimitador generalizado com ‘k’ planos delimitadores. Caixas delimitadoras alinhadas aos eixos (AABBs) e caixas delimitadoras orientadas (OBBs) são exemplos de 6-DOPs, formados por três lajes delimitadoras (pares de planos delimitadores). Um icosaedro (dado de 20 lados) é um exemplo de 20-DOP.

Mapa de pontos de ápice

Se o k-DOP representa os lados planos de uma malha delimitadora, os pontos de ápice são seus vértices. O mapa de pontos de ápice refere-se a um método para consultar o ponto de ápice em qualquer direção. Ele é chamado de ponto de “ápice” porque é um ponto extremo no volume delimitador.

Implementação

Aplicaremos os conceitos de k-DOP e de mapa de pontos de ápice para gerar uma envoltória convexa bem ajustada que atue como volume delimitador. Em vez de transformar todos os vértices da envoltória para o espaço do mundo, projetaremos os vetores da base no mapa de pontos de ápice para obter os pontos extremos nessas direções. Precisamos transformar apenas esses seis pontos, porque eles são os pontos mais extremos nos eixos X, Y e Z do espaço do mundo. Primeiro, o XDXR constrói o k-DOP na memória temporária. Isso é semelhante a formar uma AABB. Para cada plano do k-DOP, cada vértice é projetado em sua normal, e a distância máxima a partir da origem é calculada. A normal e a distância definem o plano delimitador. Idealmente, as normais dos planos do k-DOP deveriam ser distribuídas uniformemente na esfera unitária, mas, por conveniência e para facilitar a geração de uma tabela de consulta, usamos pontos na superfície de um cubo para formar os vetores normais. As faces do cubo são tesseladas em NxN células quadradas, em que N é o fator de tesselação. (Observe que N=1 equivale a uma AABB.) O tamanho do k-DOP (a partir do GDK de junho de 2022) pode ser calculado a partir do fator de tesselação. O número de vértices em um lado do cubo tesselado é (N+1)2. SizeOfKDOP = (N + 1) * (N + 1) * 6 * sizeof(float) Depois que o k-DOP for construído, podemos formar os pontos de ápice para as regiões delimitadas por três normais de plano. Lembre-se de que os planos do k-DOP são como os lados de um poliedro, e os pontos de ápice são seus vértices. Para encontrar cada ponto de ápice, fazemos a interseção de três planos. Cada região quadrada tesselada tem quatro planos e, portanto, dois pontos de ápice. Cada lado do cubo tesselado tem 2*N2 pontos de ápice. SizeOfAPM = (2 * N * N) * 6 * sizeof(float3) Observação: somente o mapa de pontos de ápice é mantido na BLAS final. O k-DOP não é necessário em tempo de execução.

Resumo

As AABBs de instância no espaço do mundo podem ser excessivamente conservadoras quando uma rotação é aplicada pela transformação da instância. Isso aumenta a área de superfície da AABB em relação ao resultado exato. Isso, por sua vez, tem um impacto negativo no desempenho ao aumentar as interseções de raios falso-positivas. O XDXR implementa uma técnica escalável chamada “mapa de pontos de ápice” para atenuar o impacto no desempenho de instâncias rotacionadas. Ela funciona pré-calculando pontos de ápice em várias direções, que podem ser usados para gerar limites rotacionados mais justos. Embora o mapa de pontos de ápice exija armazenamento adicional de BVH, ele pode escalar com a complexidade da BLAS, aumentando a memória em uma quantidade relativamente pequena do total. É evidente que aumentar o fator de tesselação é uma troca entre limites mais precisos e um aumento no tamanho da memória. Também é notável que o custo para construir o k-DOP aumenta com a tesselação e é O(n2). Esse custo não trivial deve ser pago em tempo de execução ao atualizar a BLAS. Pode ser recomendável usar um N pequeno para BLASes atualizáveis ou omitir totalmente o mapa de pontos de ápice. Para BLASes grandes, estáticas e construídas offline, um fator de tesselação proporcional à complexidade da geometria pode ser útil. Uma estimativa inicial sugeriria valores entre 2 e 8. O limite superior é 15.

Referências

https://research.nvidia.com/publication/2015-06_apex-point-map-constant-time-bounding-plane-approximation
Última modificação em 6 de outubro de 2026