A renderização nativa em primeira pessoa oferece suporte à funcionalidade geralmente necessária na criação de experiências usando uma perspectiva de câmera em primeira pessoa, como a capacidade de renderizar apenas alguns objetos com um campo de visão diferente daquele que renderiza o restante da cena. Por exemplo, renderizar coisas como as mãos, os braços ou as armas do personagem é ideal para renderização em primeira pessoa, para que eles não se sobreponham (se projetem) nas paredes quando você se aproxima delas.
A renderização em primeira pessoa oferece as seguintes funcionalidades:
Renderização de primitivas de primeira pessoa com um campo de visão (CDV) personalizado.
Aplicação de um fator de dimensionamento às primitivas de primeira pessoa para aproximá-las da câmera de maneira eficaz, evitando a maioria dos casos em que a geometria da primeira pessoa se cruzaria com a cena, o que também é chamado de clipagem. Isso permite que as primitivas de primeira pessoa sempre sejam renderizadas sobre a cena.
Inclui uma solução completa de sombreamento em que a geometria em primeira pessoa recebe sombras da cena, projeta sombras sobre si mesma, e os jogadores podem ver sua própria sombra sendo projetadas na cena.
Possui integração com o Traçado de Raio por hardware (HWRT), permitindo que os jogadores se vejam refletidos na cena e possam projetar sombras com traçado de raios.
Integração com materiais:
Controle por vértice sobre o efeito de primeira pessoa. Essa saída opcional permite a interpolação entre o espaço do mundo e o que é considerado o espaço de primeira pessoa. Isso é útil quando há necessidade de ter algumas partes da geometria no espaço do mundo para conectar com o mundo, como fazer o personagem ficar com os pés no chão.
Use o gráfico de material para consultar parâmetros de renderização em primeira pessoa e transformar posições arbitrárias do espaço do mundo em espaço em primeira pessoa.
Ele funciona na maioria dos tipos de primitivas. Isso inclui malhas estáticas, malhas revestidas e Efeitos de partículas Niagara.
Implementação da renderização de primeira pessoa
Para o desenvolvimento de jogos em primeira pessoa, o ideal é que a câmera do jogador renderize a geometria em primeira pessoa de modo que ela tenha um campo de visão personalizado e não faça interseção com o mundo. A implementação da renderização em primeira pessoa na Unreal Engine pode ser entendida como transformar a geometria em primeira pessoa de modo que ela alcance o efeito desejado de um campo de visão personalizado e tenha comportamento anticlipagem. Essa transformação ocorre após a aplicação do deslocamento de posição no mundo, mas antes de o vértice ser projetado no espaço de corte.
Como resultado, a geometria existe tecnicamente no espaço do mundo, mas, na maior parte, parece ter sido renderizada com uma matriz de projeção diferente. A ressalva é que a geometria agora está muito pequena e um pouco distorcida. Isso é feito para que ela tenha uma boa aparência do ponto de vista da câmera, mas é inadequado para outras perspectivas e, portanto, não deve converter sombras na cena ou ser visível em reflexos de traçado de raios por hardware , o que é evitado por padrão.
A vantagem de implementar a renderização em primeira pessoa dessa maneira é que ela permite que primitivas de primeira pessoa renderizem na mesma etapa que outras primitivas, dessa forma evitando a necessidade ou a complexidade de etapas de renderização adicionais, o que teria impacto sobre a memória e o desempenho.
Configurações de primitivas de primeira pessoa
Os componentes incluem uma configuração que determina como serão renderizados pela câmera em primeira pessoa quando seu Tipo de primitiva em primeira pessoa estiver definido como Primeira pessoa ou Representação do espaço do mundo.
Essa configuração inclui a seguinte seleção:
Nenhuma: essa primitiva não interage com a renderização em primeira pessoa.
Primeira pessoa: essa primitiva é renderizada como primeira pessoa e é afetada pelas propriedades de primeira pessoa na câmera para Campo de visão em primeira pessoa e Escala em primeira pessoa, que são usadas para renderizar o componente com diferentes campos de visão e um intervalo de profundidade menor, de modo que o anticorte visual com a cena possa ser evitado. A primitiva não projeta sombras na cena e também não será visível no mundo de traçado de raios.
Representação de espaço do mundo: essa primitiva representa uma primitiva em primeira pessoa no espaço do mundo. Essa é a primitiva que os outros jogadores veriam e é usada para projetar sombra no chão e para reflexos com traçado de raio por hardware, entre outras coisas. Ela é invisível para a câmera em primeira pessoa proprietário. Isso define implicitamente a opção Projetar sombra oculta como falso e Proprietário não vê como verdadeiro nos bastidores, o que é necessário para que a sombra em primeira pessoa funcione corretamente com Mapas de sombras virtuais.
Sombras em primeira pessoa
Há duas considerações sobre sombreamento que você precisa levar em conta ao configurar um personagem jogável usando a renderização em primeira pessoa:
Habilitar luzes para projetar sombras de modo que as primitivas definidas como Primeira pessoa possam projetar sombras sobre si mesmas.
Configurar componentes que sejam a representação do espaço do mundo de primitivas em primeira pessoa para sombras e reflexos da cena.
Sombras próprias em primeira pessoa
O Sombreamento próprio em primeira pessoa é uma solução de sombreamento especializada para primitivas renderizadas na perspectiva de primeira pessoa. Ele permite que essas primitivas em primeira pessoa projetem sombras sobre si mesmas, como uma arma projetando uma sombra sobre si mesma e o braço do jogador, mas não sobre a cena. Isso impede que a geometria transformada e distorcida na perspectiva da câmera em primeira pessoa fique visível nas sombras da cena.
No momento, o sombreamento próprio em primeira pessoa é implementado com o traçado de espaço de tela. Embora esse método seja bem econômico, ele está limitado apenas a projetores de sombra na tela. Na maioria das configurações em primeira pessoa, isso não será um problema na prática, pois todos os projetores de sombras relevantes costumam estar na tela. Lembre-se de que outras limitações típicas da renderização do espaço de tela também se aplicam à renderização em primeira pessoa, como um buffer de profundidade de camada única (os raios podem ficar atrás da geometria).
Veja a seguir exemplos com uma luz direcional com a opção Sombra própria em primeira pessoa habilitada.
A Sombra própria em primeira pessoa é atualmente (a partir da versão 5.6) controlada por variáveis de console. Isso foi feito para facilitar o controle do efeito em mapas com muitas luzes. O efeito apenas afetará o desempenho se a luz se sobrepuser à geometria em primeira pessoa. Portanto, supondo que haja pouca ou nenhuma sobreposição de luzes, não há problema em habilitá-lo em todas as luzes locais. No entanto, a maneira de controlar a funcionalidade pode mudar no futuro. Para definir a sombra própria em primeira pessoa, siga estas etapas:
Defina
r.FirstPerson.SelfShadowcomo1. Isso habilita a funcionalidade em luzes que projetam sombras (Projetar sombras dinâmicas), conforme determinado pela seguinte variável do console:Defina
r.FirstPerson.SelfShadow.LightTypescomo:0, habilitando a Sombra própria em primeira pessoa apenas em luzes direcionais1, habilitando-a apenas em luzes locais2, habilitando-a em todas as luzes (locais e direcionais)
Habilitar Sombra própria em primeira pessoa tem um pequeno impacto sobre o desempenho. Ter muitas luzes em sobreposição e essa opção habilitada pode prejudicar o desempenho. Cuidado com as fontes de luz em que você a habilita. Para obter mais informações sobre as limitações dessa funcionalidade, confira a seção Limitações abaixo.
Sombras da representação do espaço do mundo em primeira pessoa
Quando há um personagem jogável em primeira pessoa com a propriedade Tipo primitivo de primeira pessoa definida como Primeira pessoa, as sombras não são projetadas na cena a partir desses componentes. Para projetar uma sombra, é necessário ter uma malha que seja vista pelo mundo e pelos outros jogadores para projetar uma sombra, e seu tipo de primitivo deve ser definido como Representação do espaço do mundo. Uma vez definida, a malha projetará sombras na cena, além de tornar essa primitiva visível nos reflexos do traçado de raios por hardware.
Configurar uma câmera em primeira pessoa
Ao configurar uma câmera para renderização em primeira pessoa, a complexidade dependerá do tipo de jogo ou experiência que você está criando. Você pode acompanhar com a configuração básica abaixo para começar com um personagem jogável em primeira pessoa. A configuração avançada oferece orientação sobre como configurar partes do personagem que são visualizadas pelo mundo ou por outros jogadores em um jogo multijogador.
Por exemplo, em uma configuração básica, você configura um personagem apenas com componentes visíveis em uma perspectiva em primeira pessoa. Pode ser uma malha esquelética com apenas braços para segurar uma arma. Em uma configuração Avançada, você pode acrescentar a isso adicionando pernas visíveis em primeira pessoa e uma malha de personagem completa visível ao mundo para projetar sombras e aparecer em reflexos.
Configuração básica de uma câmera em primeira pessoa
O processo de criação de uma configuração em primeira pessoa é bem simples: primitivas podem ser marcadas como sendo de primeira pessoa e as câmeras podem ser configuradas para aplicar um campo de visão e dimensionamento personalizados a esses ativos separadamente do restante da renderização da cena.
As etapas para fazer isso podem ser divididas em duas categorias:
Configurar os componentes e suas configurações iniciais.
Configurar as propriedades desses componentes para que se ajustem ao visual das primitivas e do seu jogo em primeira pessoa
Configurar a câmera e os componentes em primeira pessoa
Siga estas etapas para definir a câmera e os componentes em primeira pessoa:
Crie um novo ator de Câmera.
No painel Detalhes, clique em Adicionar e selecione o componente de Primitiva desejado (Malha estática, Malha do esqueleto, Sistema de partículas e assim por diante) para adicionar a esse ator.
Embora não seja necessário, é considerado uma boa ideia, pois garante que a câmera seja a proprietária das primitivas em primeira pessoa, o que é uma propriedade importante para configurações mais avançadas em que os sinalizadores para Proprietário não vê e Somente proprietário vê são necessários.
Com o componente Primitiva selecionado, use o painel Detalhes para localizar a propriedade Tipo de primitiva de primeira pessoa em Renderização > Avançada. Use a seleção do menu suspenso para defini-lo como Primeira pessoa.
No painel Detalhes, clicar em Componente de câmera e marque as caixas ao lado de Habilitar campo de visão em primeira pessoa e Habilitar escala em primeira pessoa nas propriedades de Opções de câmera.
Com o Componente de câmera selecionado, você pode observar os resultados na janela de pré-visualização da câmera, localizada no canto inferior direito da janela de visualização do editor.
Como definir as configurações de escala e campo de visão em primeira pessoa
Depois de habilitar as propriedades do Componente de câmera para Habilitar campo de visão em primeira pessoa e Habilitar escala em primeira pessoa, você poderá usar as configurações com o mesmo nome na categoria Configurações da câmera para fazer ajustes.
Essas configurações funcionarão para essa Câmera em todos os tipos de primitivas que tiverem o Tipo de primitiva em primeira pessoa definido como Primeira pessoa. Caso contrário, a câmera os verá no espaço do mundo. Use a janela Pré-visualização da câmera na janela de visualização para inspecionar as alterações. A janela de visualização do editor ainda mostra a Primitiva em primeira pessoa como inalterada. Isso acontece porque a câmera implícita usada para a janela de visualização não tem as propriedades de primeira pessoa configuradas.
É possível ajustar o valor do Campo de visão em primeira pessoa para alterar o campo de visão horizontal (em graus) de qualquer primitiva que essa câmera em primeira pessoa renderizar. Ao ajustar o controle deslizante do campo de visão, você pode observar a alteração do campo de visão da primitiva na janela de pré-visualização da câmera.
Você pode ajustar o valor de Escala em primeira pessoa para reduzir a escala das primitivas de “primeira pessoa” em direção à câmera, de modo que fiquem pequenas o suficiente para não fazerem interseção com a cena para essa câmera em primeira pessoa. Do ponto de vista da câmera, a primitiva deve ter a mesma aparência, embora seja menor. Quando o valor da escala for muito pequeno, a primitiva desaparecerá. Isso ocorre porque ele foi redimensionado o suficiente de maneira a fazer interseção com o plano de corte visual próximo.
Ao ajustar a escala para uma configuração adequada com a câmera e as primitivas, você deverá encontrar um valor de escala pequeno o suficiente para não causar corte visual na cena, mas grande o suficiente para não desaparecer devido ao plano de corte próximo. Na prática, muitas vezes basta escalar a geometria da primeira pessoa apenas o necessário para que ela esteja contida nos limites do jogador.
Dependendo do conteúdo e da configuração, pode ser necessário ajustar o valor padrão de Plano de corte visual próximo do editor. Isso pode ser ajustado nas configurações do projeto em Engine > General com Plano de corte visual próximo, mas isso o ajustará globalmente para todo o projeto.
A configuração avançada da câmera e dos componentes em primeira pessoa é semelhante à configuração dessa visão usando a configuração básica descrita acima. Ao usar a configuração avançada a seguir, considere como o personagem é representado no mundo em um jogo multijogador ou como é representado em cenas de jogo usando funcionalidades de traçado de raio por hardware. Isso garantirá consistência na forma como o jogador é visto pelo mundo (ou por outros jogadores) ao seu redor. Também afeta como o jogador vê o personagem em sombras e reflexos.
Considere o seguinte ao usar o fluxo de trabalho avançado em primeira pessoa:
Adicionando primitivas de representação do espaço do mundo para projetar sombras no mundo.
os pés de um personagem em primeira pessoa e fazer com que os pés se conectem às sombras projetadas pelo jogador no chão.
Reflexos do jogador ao visualizar a si mesmo com reflexos de traçado de raios por hardware.
Todas essas funcionalidades exigem uma representação adequada das primitivas de primeira pessoa no mundo. Essa representação é o que os outros jogadores veriam em um jogo multijogador quando olhassem para esse jogador. Como alternativa, você pode pensar nisso como a versão em terceira pessoa do personagem jogável. Na Unreal Engine, isso é chamado de Representação de espaço do mundo em primeira pessoa. Ele é usado para projetar sombras na cena e é como o jogador é representado na cena do traçado de raios.
Geometria em primeira pessoa
A geometria em primeira pessoa deve incluir uma malha para a parte inferior do corpo e as pernas. Essa malha pode estar totalmente no espaço do mundo ou pode usar um gradiente de interpolação no material para ter os pés totalmente no espaço do mundo e o restante do corpo no espaço em primeira pessoa (consulte a seção Integração com materiais abaixo).
Essa configuração por si só melhorará o realismo, pois agora os jogadores podem ver suas próprias pernas quando olham para baixo na visualização em primeira pessoa.
Configurar componentes de primeira pessoa e suas representações no espaço do mundo
Na Configuração básica de uma câmera em primeira pessoa, os componentes que você deseja ver apenas pela câmera em primeira pessoa têm o Tipo de primitiva de primeira pessoa definido como Primeira pessoa. Para qualquer geometria que você deseja que seja vista no espaço do mundo por funcionalidades como reflexos com traçado de raios por hardware ou outros jogadores em jogos multijogador, defina o tipo de primitiva como Representação do espaço do mundo, o que garantirá que seja possível projetar sombras no mundo e ter uma representação do jogador em reflexos com traçado de raios.
Na cena a seguir, há duas coisas importantes a serem observadas ao configurar um componente para a Representação do espaço do mundo:
O componente não está mais visível à câmera em primeira pessoa na janela de pré-visualização da câmera.
O componente projeta uma sombra no mundo.
Nos bastidores, essa opção de Representação do espaço do mundo usa a funcionalidade "Proprietário não vê" para ocultar a geometria da câmera, mas isso exige que as primitivas pertençam à câmera, o que pode ser feito tornando-as componentes filhos do ator de câmera.
Depois de configurar um personagem com uma primitiva de malha em primeira pessoa e uma primitiva de malha de representação de mundo, os pés da malha em primeira pessoa devem se alinhar com a representação de mundo. Você pode ver um exemplo dessa configuração abaixo, analisando apenas as primitivas de primeira pessoa e, em seguida, as primitivas de representação de primeira pessoa e de mundo combinadas para projetar sombras na cena e fazer com que elas se "conectem" aos pés do personagem.
Apenas a primeira primitiva de malha em primeira pessoa definida como “Primeira pessoa” é exibida. Essa malha não projeta sombras na cena. | Ambas as primitivas de malha definidas como Primeira pessoa e Representação do mundo são exibidas juntas. A malha de Representação do mundo é invisível para a câmera em primeira pessoa, mas projeta sombras no mundo. Elas devem se alinhar com a malha de primitiva em primeira pessoa. |
Para o mundo ou qualquer outro jogador em uma configuração multijogador, a malha e os componentes do personagem devem estar definidos como Representação do espaço do mundo.
A demonstração a seguir mostra uma câmera de "mundo" olhando para o personagem em primeira pessoa refletido em uma superfície espelhada. Você também pode ver a visualização da câmera em primeira pessoa e como a malha de representação do mundo é visualizada quando definida como Nenhum, Primeira pessoa ou Representação do espaço do mundo e como isso afeta sua capacidade de projetar sombras na cena, ou ser renderizada pela câmera em primeira pessoa.
Integração com materiais
O gráfico de material inclui os seguintes nós que aceitam configurações de renderização em primeira pessoa:
Nó Saída em primeira pessoa
O nó Saída em primeira pessoa usa um valor alfa para interpolar entre o espaço do mundo e o espaço de primeira pessoa usando valores entre 0 e 1 em uma frequência por vértice. Isso é muito útil quando a geometria em primeira pessoa precisa se conectar ao resto da cena. Um exemplo é ter a malha dos pés da geometria do personagem em primeira pessoa conectada ao chão. Você pode fazer isso aplicando um gradiente de 0,0 (espaço do mundo) a 1,0 (espaço em primeira pessoa) ao longo do comprimento das pernas (que seriam definidas como uma primitiva de primeira pessoa).
Você também pode usar Definir atributos de material para definir a mesma propriedade sem precisar adicionar o nó Saída em primeira pessoa ao material. Isso é útil em casos em que você deseja definir valores de funções de material, pois estas não permitem o uso de nós de saída personalizados.
Nó Posição de transformação
O nó Posição de transformação oferece suporte à transformação de posições arbitrárias no espaço em primeira pessoa. Útil para calcular onde alguns pontos ficariam na tela ao serem renderizados como primeira pessoa.
Com o nó selecionado, use o painel Detalhes para definir o seguinte:
Fonte: Espaço de mundo relativo da câmera
É o formato de origem da posição que será transformada.
Destino: Espaço em primeira pessoa (espaço mundial relativo à câmera)
Esse é o tipo de transformação a ser aplicado à expressão de entrada.
(Opcional) Alfa da interpolação de primeira pessoa: 0 a 1
Isso interpola entre o espaço do mundo traduzido e o espaço em primeira pessoa, onde 0 é o espaço do mundo e 1 é o espaço em primeira pessoa. Esse nó pode ser usado em qualquer material, incluindo materiais de pós-processamento, onde ele pode ser usado para transformar qualquer posição arbitrária em primeira pessoa, o que não nos permite saber o valor do nó Saída em primeira pessoa. Esse valor é fornecido pelo usuário para o que faz sentido para o jogo, mas, na maioria dos casos, é sensato manter o valor padrão.
Um exemplo de quando usar esse nó é ao calcular onde o retículo deve estar em primeira pessoa para algo como o material de pós-processamento de uma arma com mira. Nesse caso, você pode presumir que todas as posições que precisam ser consideradas (apontar para a arma e a mira telescópica) serão em primeira pessoa.
Nó É primeira pessoa
O nó É primeira pessoa pode ser usado para aplicar diferentes efeitos no material dependendo de o tipo de primitiva atual em renderização estar ou não com a opção Tipo de primitiva em primeira pessoa definida como Primeira pessoa.
O gráfico de material abaixo é uma configuração simples usando o nó É primeira pessoa para definir uma cor para a geometria renderizada no Espaço do mundo (vermelho) em oposição ao Espaço de primeira pessoa (verde).
Na cena a seguir, você pode ver como esse material com o nó É primeira pessoa é usado para definir a cor do rifle usado na representação do espaço do mundo e na visão em primeira pessoa. A primitiva do Rifle em primeira pessoa (verde) fica visível na câmera do jogador (canto inferior direito) e é renderizada com os parâmetros de primeira pessoa na câmera. O Rifle de representação do espaço do mundo (vermelho) está invisível para a câmera do jogador, mas é usado para projetar sombra no chão e será visto por reflexos de traçado de raios por hardware e sombras no mundo do traçado de raios.
Nó Propriedades da visão
O nó Propriedades da visão pode ser usado para consultar o Campo de visão em primeira pessoa e a Escala em primeira pessoa da visão atual.
O Campo de visão em primeira pessoa retorna os ângulos horizontais e verticais do campo de visão em primeira pessoa em radianos.
A Escala em primeira pessoa retorna o fator de escala aplicado a primitivas de primeira pessoa para evitar que estas façam interseção com a cena.
Com o nó selecionado, use o painel Detalhes para definir a lista suspensa Propriedade da visão como a visão que você deseja consultar.
Nó Textura da cena
O nó Textura da cena pode obter uma amostra do GBuffer para identificar se um determinado pixel foi desenhado por uma primitiva de primeira pessoa que usa um material opaco.
Com o nó selecionado, use o painel Detalhes para definir a lista suspensa ID da textura da cena de modo a definir a textura da cena como É primeira pessoa.
Para obter mais informações, confira a seção Limitações abaixo.
Limitações e notas
O campo de visão em primeira pessoa (CDV) personalizado, a escala anticorte visual, os controles de interpolação por vértice e a maioria dos recursos de integração do gráfico de material funcionam em todas as plataformas e configurações.
Bit do GBuffer de primeira pessoa
Certas funcionalidades avançadas de renderização em primeira pessoa requerem que os pixels em primeira pessoa sejam marcados com um bit no GBuffer.
A primeira consequência disso é que esses recursos não funcionam com o renderizador móvel ou com a renderização direta.
A segunda consequência é que a opção Permitir iluminação estática precisa estar Desabilitada nas configurações do projeto. Ao desativar a iluminação estática do projeto, alguns bits do GBuffer são liberados para serem utilizados pela renderização em primeira pessoa.
Isso pode mudar no futuro, mas a partir da versão 5.6, é uma escolha que precisa ser feita. Como alternativa, usuários muito avançados podem optar por fazer alterações locais em sua versão da Unreal Engine e sacrificar uma funcionalidade diferente no GBuffer que não é necessária para o seu projeto.
As funcionalidades afetadas são as seguintes:
Sombras próprias em primeira pessoa
Uso de primitivas de representação do espaço do mundo para projetar sombras na cena.
Visualização de primitivas de representação do espaço do mundo refletidas na cena.
Uso do nó Textura da cena para identificar se um pixel é de primeira pessoa.
Todas essas funcionalidades possuem uma reserva eficiente caso o bit do GBuffer de primeira pessoa não esteja disponível: sombras e reflexos simplesmente não serão exibidos, e o nó Textura da cena sempre retornará 0,0 (falso).
Suporte geral a funcionalidades
Sem o Mapa de sombras virtuais (ou sombras com traçado de raios), não haverá sombras em primeira pessoa no chão.
Atualmente, ele não é compatível com penteados e cabelos com mechas.
Recursos adicionais
Modelo First Person
O Modelo de primeira pessoa está configurado para usar a renderização nativa em primeira pessoa. Você pode explorar a variante de Jogo de tiro em primeira pessoa ao criar o Modelo de primeira pessoa para ver essa funcionalidade em ação.
Para obter mais informações sobre esse modelo, confira Modelo de primeira pessoa.