Como evitar a "visão subaquática" nos jogos

19

Em muitos jogos em que o jogador pode ficar embaixo d'água, parece que quando você olha onde a metade superior da tela está no ar e a metade inferior da tela está na água, é quase como se a água não existisse. jogador está ... voando devagar com sons de água?

insira a descrição da imagem aqui

Existe uma maneira lógica de resolver isso? Um algoritmo? Parece que nenhuma solução surgiu ainda, já que muitos jogos ainda a possuem. Eu não quero cometer o mesmo erro.

LiquidFeline
fonte
4
Os jogos modernos têm sombreadores diferentes para acima e abaixo da água. Definitivamente, não parece assim hoje em dia. Acredito Crysis tem renderização subaquática bastante avançado: youtube.com/watch?v=yXxEZJdFjeM
MartinTeeVarga
9
@ sm4: Acho que esse jogo também tem esse recurso. Mas o problema é que a câmera não está abaixo da água, está acima e você pode ver abaixo devido ao corte próximo.
Kikaimaru
@ Kikaimaru Entendo, eu não entendi completamente a pergunta. No entanto, o Crysis parece não ter esse problema.
MartinTeeVarga
2
Ah, mas de que outra forma eu devo ver se existem pérolas no fundo do rio? (Elder Scrolls Oblivion): D
Singular #
1
Talvez você possa verificar se o caráter "cabeça" está debaixo d'água, em vez da câmera e não permitir que a câmera para ir debaixo d'água a menos que o personagem é também subaquática
Luke B.

Respostas:

16

Que tal simplesmente não permitir esta situação?

Não sei como você está fazendo o seu jogo, mas se você detectar que a vista ficará parcialmente embaixo d'água, poderá forçar a câmera a ficar acima da água, e somente quando toda a vista estiver abaixo da água, você poderá mudar para o visão subaquática.

Dependendo de como você faz isso, isso pode significar um atraso adicional a partir do momento em que você começa a mergulhar e quando realmente vê a cena por baixo da superfície. Isso pode ser uma coisa boa do ponto de vista da experiência do usuário, portanto, sinta-se à vontade para experimentar.

Em uma nota separada, mas relacionada, pergunto-me por que a maioria das cenas subaquáticas fica cristalina ... Se você colocar a cabeça debaixo d'água, notará que seus olhos não foram projetados para visão subaquática e, portanto, tudo parece embaçado. Você teria que usar óculos para realmente ver claramente debaixo d'água.

Além disso, as coisas parecem (e ouvem) muito diferentes debaixo d'água do que acima da água. A água absorve a luz muito mais rapidamente que o ar; portanto, quanto mais a luz viaja, menos luz chegará aos seus olhos. Isso significa que, quanto mais fundo você vai, mais azuis ficam as coisas (a luz vermelha tem menos energia e, portanto, é absorvida mais facilmente do que a luz azul). De fato, a meros 12 metros debaixo d'água, o sangue parece preto, não vermelho.

Ainda não vi um jogo não especializado que até tenta acertar ambientes subaquáticos ...

Panda Pajama
fonte
5
Muitos jogos mudam a luz e o som debaixo d'água. Veja o vídeo do Crysis vinculado nos comentários acima. Tenho certeza de que não é perfeitamente realista, mas (a) a maioria das pessoas não tem experiência direta com ambientes subaquáticos profundos e (b) em jogos nos quais você mergulha debaixo d'água, você presumivelmente precisa ver, jogar o jogo .
Nathan Reed
Acredito que a maioria dos jogos não faz isso simplesmente porque ninguém gostaria de ir para a água se não vir nada lá. Ou talvez todos os personagens principais do jogo tenham sido treinados por pessoas de Moken! news.nationalgeographic.com/news/2004/05/…
MartinTeeVarga
1
No desenvolvimento de jogos, esse tipo de "médico, dói quando faço isso" geralmente é a solução ideal.
Trevor Powell
1
@TrevorPowell: li o seu comentário uma dúzia de vezes e ainda não entendo o seu ponto. Talvez você gostaria de elaborar?
Panda Pyjama
2
Desculpas! É uma referência a uma velha piada de vaudeville . A piada é mais ou menos assim: Paciente: "Doutor, dói quando faço isso!". Médico: "Não faça isso!" Eu só queria dizer que em jogos, geralmente a maneira mais simples de resolver um problema é impedir que o jogo entre em um estado em que o problema deve ser resolvido. (por exemplo: a maneira mais fácil de corrigir "os gráficos parecem errado quando o avião quase clipe cruza a superfície da água" é "não deixe que o avião perto clipe cruzam a superfície da água")
Trevor Powell
7

O problema a que você está se referindo tem a ver com o volume de visualização da câmera cortando o plano de água; "efeitos subaquáticos" típicos são feitos por meio de efeitos pós-processo em tela cheia e não pareceriam corretos se a exibição fosse cortada dessa maneira (seria apenas o problema oposto).

Mesmo que você se preocupe em detectar a caixa de recorte (potencialmente difícil) e em tesoura ou recortar o efeito subaquático em tela cheia, de modo que ele se aplique apenas à cena subaquática (que é uma solução potencial que você pode explorar), você ainda terá o problema do próprio plano de água. A transição ainda haveria um artefato visual estridente. Você poderia detectar esse avião e desfocá-lo intensamente; provavelmente é o mais próximo possível de uma analogia do mundo real do que pode ser a visão através de uma lente de câmera parcialmente submersa.

Como alternativa, evite que isso aconteça completamente: não deixe a câmera abaixo do plano aquático se o jogador estiver "acima" da água ou acima do plano aquático quando o jogador estiver "abaixo" da água. Isso realmente funcionará realmente se você tiver modos de operação discretos para jogadores acima / abaixo da água e funcionará melhor se houver um botão físico ou outra ação clara e óbvia que o jogador possa executar para fazer a transição entre "nadar na superfície" e "nadar abaixo" a superfície."

Em vez de pressionar uma tecla explícita para mergulhar, você pode interpretar o movimento para frente enquanto a câmera é abaixada o suficiente para significar "mergulho". Você pode usar um efeito gráfico (respingos ou o que for) para ocultar a transição da câmera através do plano aquático, que normalmente não seria capaz de atravessar.

Usamos uma técnica como esta em Guild Wars 2.


fonte
3

Os jogos geralmente ativam algum tipo de efeito, principalmente o nevoeiro azul, quando a câmera está embaixo da água. Para lidar com a situação em que o plano próximo passa pela superfície da água, você pode ativar o shader de nevoeiro quando a câmera se aproxima da superfície da água, mas depois adicionar algum código ao shader de pixel que calcula o ponto no plano próximo correspondente a esse pixel e ativa a névoa apenas se esse ponto estiver sob a superfície da água.

Se o nevoeiro é feito como um pós-processo, renderizando uma passagem em tela cheia, isso é especialmente fácil - basta calcular a posição no espaço mundial de cada vértice do quad ou triângulo da tela cheia no plano próximo (com o inverso matriz de visualização / projeção) e interpole esse valor até o pixel shader; então você pode verificar seu componente vertical e ver se está acima ou abaixo do plano de água.

Para pontos de bônus, você pode usar a mesma técnica para adicionar uma textura de poucos pixels de espessura para representar o menisco na superfície da água, para que não pareça muito com uma linha pontiaguda.

Nathan Reed
fonte
(tem problemas se a superfície da água é uma malha, mas ainda uma grande resposta geral)
Will
0

Eu tenho dois métodos; Um usa um sombreador, o outro pode usar uma GUI. Ambos iniciarão o mesmo:

"Simplificado" - If, Object(Camera) is in 3d Space(Water bounding box/whatever you choose) trigger a shader/GUI.

Shader dará mais realismo, você pode aplicar uma distorção como esta

Névoa Como Com. Menino afirmou, pode ser aplicado através de GUI. Crie uma foto com transparência parcial e use-a como GUI em toda a exibição da câmera. Para a foto que você forneceu, eu tentaria uma cor marrom.

Isso foi usado em um jogo de terror chamado Drea D Out. Se o jogador se aproximasse de um fantasma, a tela ficaria embaçada. Embora não tenha sido usado debaixo d'água, deu um efeito semelhante :)

Você sempre pode escolher os dois métodos ou criar um sombreador que altere a cor.

http://media.indiedb.com/images/games/1/21/20833/Demo_update_SS01.png

Taken from : http://sahdan-share.blogspot.com/2013/04/dreadout.html
Mikolaj Marcisz
fonte