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.
