Em A Queda de Oriath, que foi lançada em Agosto deste ano, refizemos completamente como a água é renderizada no Path of Exile. Na notícia de hoje, o nosso programador gráfico, Alex, falará sobre como ele implementou essa grande mudança:

Conforme o crescimento do Path of Exile continuava, investimos cada vez mais recursos em sua engine de renderização. Entretanto, alguns jogadores julgavam a engine baseados em recursos antigos que criamos há anos, assim como o nosso efeito original de água (uma das primeiras coisas vistas ao criar um novo personagem). Na realidade, trabalhamos constantemente para manter essa engine moderna, veloz e extensiva, e queríamos que os nossos jogadores vissem isso. Quando me passaram a tarefa de substituir a água do jogo, mesmo eu tendo diversas ideias de o que eu poderia tentar, eu sabia que algumas delas (potencialmente a maioria) teriam que ser descartadas devido a razões de performance ou simplesmente por não serem bonitas o suficiente.

Substituir toda a água no jogo foi uma tarefa bem complicada, pois muitos recursos do jogo usam água e a nova água teria que funcionar 100% com eles. Criar um patch com uma água que parecesse bonita não seria suficiente, ela teria que se adaptar a qualquer terreno e qualquer condições de ambiente que tivéssemos. E claro, a performance estava nas minhas prioridades mais altas, pois temos uma quantidade de poder de GPU limitada para dedicar ao ambiente.

Meu trabalho com a água consistia primariamente em programar um shader para ela, um programa que roda na GPU e produz imagem na tela. Em casos como esse, você primeiro precisa quebrar o que atualmente funciona, depois reconstruí-lo desde o começo aos poucos para torná-lo melhor no final. Eu comecei a brincar com o nosso shader antigo de água gerando normas de debug para ele e adicionando um algoritmo de detecção de bordas no espaço da tela para potencialmente renderizar espuma em áreas onde os objetos e a água se encontram. (Note que a HUD UI exibida nessas screenshots era de uma versão da HUD 3.0.0 ainda em desenvolvimento, antes de ficar do jeito que é hoje.)



Mesmo com a detecção de bordas funcionando bem, eu sabia que ela poderia ter um impacto desnecessário na performance, então eu precisei descartá-la. O próximo passo foi adicionar algumas ondas na superfície, cor para a água e reflexo básicos:



A superfície renderizava através de um algoritmo de raytracing no espaço da tela, o que significa que a água é, na verdade, plana, mas parece 3D por conta de técnicas de shader parecidas com mapeamento por oclusão paralaxe. Em um ponto como este, eu precisava decidir o que estava funcionando bem e deveria ir para a próxima iteração de desenvolvimento e o que precisava ser refeito desde o começo. O engraçado sobre renderizar água é que você quase não vê a cor da água. Você vê coisas que ela reflete em sua superfície e depois retrai, então eu decidi trabalhar mais nessa parte, deixar a parte de raytracing como estava e refazer todo o resto.

Para ter reflexos razoavelmente precisos, eu até implementei um algoritmo de espaço de tela que realmente refletia coisas que estavam na tela. Um exemplo disso é essa “água” tipo mercúrio que reflete 100%:



É uma daquelas coisas que você precisa descartar independente de o quanto você gosta dela, só por não justificar o custo no fim.

As partes mais complicadas de renderizar água são provavelmente o algoritmo de geração de uma superfície ondulada e o algoritmo de renderização de espuma, pois eles exigem muita intuição artística (pela qual eu não sou conhecido). Todo o resto é física, óptica e programação que são significativamente mais simples. Eu sabia que os primeiros experimentos com espuma seriam difíceis, porém eu comecei:



Mesmo eu sabendo que estava no caminho certo, eu precisava entender o que fazia uma espuma real parecer real. Por exemplo, as minhas flutuações tinham uma estrutura muito regular, e uma espuma real é governada por correntes muito turbulentas e irregulares que a viram. Ao mesmo tempo, eu criei um aplicativo simples para estudar mais a maneira com que as partículas de água se movem nas camadas de uma onda quando uma onda começa a nascer.

Depois de colocar tudo isso no meu shader, parcialmente corrigir algumas iluminações, ela começou a ficar mais ou menos assim:



Muitos vídeos de referência foram estudados, linhas de código reescritas e conversas feitas com surfistas profissionais para deixar essa espuma do jeito mais real possível e com a melhor performance possível. Depois de implementar uma engine de física para tecidos, a renderização de água se tornou minha maior tarefa - minha mente estava completamente ocupada por ela. Na nossa academia, temos uma boa vista para a piscina e meus colegas constantemente faziam piadas de eu olhando para as garotas. Ugh, eles simplesmente não entendiam o quanto estava cativado por estudar os padrões de ondas na superfície e efeitos de dupla refração. Eu vi nuvens e pensei como elas refletiriam na água. Eu vi uma planta e não pude parar de pensar como ela difunde a luz debaixo de suas folhas, pois o mesmo acontece na água do oceano.

O próximo passo do desenvolvimento foi garantir que essa tecnologia funcionava com quaisquer áreas que possuíssemos e que ela seguisse a linha da costa em uma maneira natural. Por volta desse tempo, um trailer que mostrava um pouco dessa tecnologia de água foi feito e as pessoas ficaram preocupadas sobre essa expansão indo em um ângulo não natural. Áreas loucas com uma estrutura de costa complexa, como o Recife do Rei da Salmoura, estavam particularmente ruins e eu decidi fazer outro projeto paralelo para gerar uma costa mais suave em uma maneira mais controlada.

Este algoritmo nos permitiu suavizar a forma das ondas em uma maneira mais natural para qualquer grau que quiséssemos. Adicionar mapas com ambiente HDR ajudou a melhorar a percepção geral da superfície da água também. O que isso significa é que nos foi permitido criar padrões “brilhantes” bem claros quando você visse o sol ser refletido nas ondas:



A partir deste ponto só foi uma questão de otimizar todo o shader e adicionar vários outros efeitos cosméticos. Por exemplo, quando os raios do sol são refletidos pela superfície, eles cria um padrão claro na areia. Ou quando os raios do sol são refletidos de volta do fundo da água, cristas da onda recebem uma coloração mais clara chamada de subsurface scattering. Adicionar uma maneira física interessante de como a espuma se dissipa na areia ajudou a tornar a costa mais interessante. Todas essas mudanças nos trouxeram mais próximos da água que temos hoje:



A Costa do Crepúsculo é a primeira área que todos novatos entram. A água é uma das primeiras coisas que eles veem lá. Ao criar este sistema de água novo, eu queria muito que eles gostassem do Path of Exile logo de início.
Postado por 
em
Grinding Gear Games
A agua realmente faz uma grande diferença no cenário do game, trazendo um maior realismo dentro do jogo isso junto com efeitos de luz e brilho deixa realmente o jogo muito bonito, ver as ondas se formando as tonalidades das cores da agua realmente foi um belo trabalho espero que continue sempre melhorando esse maravilhoso game.
Ficou lindo!!!!
Подробности о сезоне, призах и очках можно узнать на этой странице.

Вы можете следить за своим прогрессом на странице сезона в разделе событий.

В гонках "Спуск" персонажи могут получать призы, даже если они погибли.

Призы:

Игрок с наибольшим количеством опыта, который выжил в гонке, получит 3 очка.

20 лучших игроков каждого класса получат:
  • #1 игрок каждого класса: Светоч полубога (Уникальное Золотое пламя) и 10 очка.
  • #2 игрок каждого класса: 6 очка.
  • #3 игрок каждого класса: 5 очка.
  • #4 игрок каждого класса: 4 очка.
  • #5 игрок каждого класса: 3 очка.
  • #6-10 игрок каждого класса: 2 очка.
  • #11-20 игрок каждого класса: 1 очко.

Награды за достижение уровней, герой должен выжить:
  • Уровень 25: 10 очка.
  • Уровень 21-24: 7 очка.
  • Уровень 17-20: 6 очка.
  • Уровень 14-16: 5 очка.
  • Уровень 11-13: 4 очка.
  • Уровень 8-10: 3 очка.
  • Уровень 5-7: 1 очко.

Альтернативные призы:
Эти призы могут получить все игроки, которые выполнят условие.
  • Убить Рукуку, Языческий Идол: 1 очко.
  • Убить Ирод: 1 очко.
  • Убить Злошторм: 1 очко.
  • Убить Воплощение Бури: 1 очко.
  • Убить Легат Гравиций: 1 очко.

Раздача случайных призов:
Каждое очко, заработанное в гонке, используется в качестве лотерейного билета в розыгрыше случайных призов:
  • Погребальный костер - уникальный предмет с альтернативным внешним видом (будет разыграно 30 предметов)
  • Гармония Ангила - уникальный предмет с альтернативным внешним видом (будет разыграно 15 предметов)
  • Кольцо с двумя камнями - предмет с альтернативным внешним видом (будет разыграно 25 предметов)
  • Опаляющее касание - уникальный предмет с альтернативным внешним видом (будет разыграно 10 предметов)

Reportar Post do Fórum

Reportar Conta:

Tipo de Reporte

Informação Adicional