Existem exemplos de tais efeitos dos quais você está falando em muitos jogos. Primeiro, há a profundidade de campo , que faz com que o objeto à distância pareça desfocado, como se a câmera estivesse focando coisas próximas a ela, como neste exemplo. Você pode explorar mais exemplos relacionados a isso no pacote DirectX SDK - eles também contêm código de exemplo. Para o OpenGL, você os encontrará na rede se pesquisar.
A segunda coisa que você pode querer ver é o que talvez seja conhecido como Geometry MipMaping ou Progressive Malhes que, como o nome sugere, é semelhante ao mapeamento de mip de textura, mas para geometria. O número de polígonos em uma malha é reduzido à medida que o objeto se afasta da câmera. Isso ajuda a aumentar o desempenho. No D3D, existe uma função que ajudará a gerar malhas progressivas automaticamente. Aqui está:
HRESULT WINAPI D3DXGeneratePMesh(
LPD3DXMESH pMesh,
const DWORD *pAdjacency,
const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,
const FLOAT *pVertexWeights,
DWORD MinValue,
DWORD Options,
LPD3DXPMESH *ppPMesh
);
Aqui está um exemplo disso:
EDIT:
considere a seguinte imagem:
Este é o frustum de abate da câmera. A linha que passa pelo meio é o vetor LookAt. Agora, assumindo que o jogador sempre deseje focar no centro da tela, você define o ângulo x. Qualquer objeto que será posicionado em um ângulo maior que o x decidido terá uma renderização de baixa resolução e os que estiverem dentro do ângulo serão renderizados com detalhes. Assim, os objetos no centro da tela serão mais detalhados que os dos lados. Se o jogador não estiver olhando para o centro, basta ajustar a linha central na direção em que o jogador está olhando. (ou talvez gire a câmera inteira nessa direção).