Estudando o código de three.webgpu.js , me deparei com os termos "profundidade linear", "profundidade de perspectiva" e "profundidade ortográfica". Sei que há uma diferença visual entre projeções de perspectiva e ortográficas, mas por que o viewZ
valor seria diferente entre as diferentes projeções? Além disso, profundidade linear é apenas outro nome para profundidade ortográfica?
Fui inspirado a fazer essa pergunta depois de estudar as funções viewZToOrthographicDepth
e viewZToPerspectiveDepth
, e perceber que não há nenhuma viewZToLinearDepth
função.
const viewZToOrthographicDepth = (viewZ, near, far) => viewZ.add(near).div(near.sub(far));
const viewZToPerspectiveDepth = (viewZ, near, far) => near.add(viewZ).mul(far).div(far.sub(near).mul(viewZ));
Nota: Estou me referindo especificamente aos valores de profundidade (z) entre cada tipo de projeção.
Em gráficos 3D, perspectiva e projeções ortográficas, a profundidade é tratada de forma diferente, e é por isso que o
viewz
valor muda entre os dois.Aqui está uma análise simples: Projeção em perspectiva:
É isso que imita a visão do mundo real. Coisas mais distantes parecem menores. A profundidade (valores z) não é linear. Objetos distantes são espremidos em um intervalo menor, então você perde detalhes conforme as coisas se afastam da câmera. A função
viewZToPerspectiveDepth
cuida dessa compressão ajustando como a profundidade é calculada para objetos distantes. Projeção Ortográfica:Os objetos permanecem do mesmo tamanho, não importa quão distantes estejam. A profundidade é linear aqui. Isso significa que ela aumenta uniformemente de perto para longe. A função
viewZToOrthographicDepth
lida com esse mapeamento linear porque não há compressão de profundidade como em projeções em perspectiva. E quanto à Profundidade Linear? Profundidade linear significa que a profundidade aumenta uniformemente, que é exatamente como a projeção ortográfica funciona. Então, não há necessidade de umaviewZToLinearDepth
função. A função de profundidade ortográfica já está fazendo isso.Resumindo:
A projeção de perspectiva esmaga a profundidade para objetos distantes (profundidade não linear). A projeção ortográfica mantém tudo uniforme (profundidade linear).