Névoa debaixo d'água

8

Estou ciente do glFog, que combina entre o nevoeiro e a cor da superfície com base na distância da câmera, assim:

insira a descrição da imagem aqui

As equações são dadas nos documentos . Mas o nevoeiro é aplicado imediatamente na frente da câmera. Estou tentando renderizar uma superfície de água e quero que ela tenha profundidade, por exemplo:

insira a descrição da imagem aqui

No momento, estou apenas processando a superfície da água com mistura alfa, como abaixo. O que eu preciso é ter o nevoeiro com base na distância da superfície da água até o fundo da água. Como posso obter essa distância? No momento, estou assumindo que a câmera estará sempre acima da água.

insira a descrição da imagem aqui

jozxyqk
fonte

Respostas:

5

Você pode traçar o raio da distância até a segunda superfície. Este pode ser o método mais fácil conceitualmente, mas não necessariamente o mais rápido *.

Mas há um truque legal: você pode passar várias vezes para renderizar um mapa de profundidade para a superfície da água da câmera. A distância na água agora é de profundidade de pixel menos a profundidade do mapa de profundidade. Isso não funciona em todas as situações, como quando você sai da água e entra novamente mais tarde. Mas deve funcionar em muitos casos, como o descrito. Você pode até usar a mesma técnica para operações booleanas.

dmap

Imagem 1 : Renderize o mapa de profundidade, consulte o mapa de profundidade ao sombrear o fundo do seu lago.

* Pode ser em certos casos.

joojaa
fonte