Atualização do terreno 2018.3: Primeiros passos

CHRIS TCHOU / UNITY TECHNOLOGIESContributor
Oct 10, 2018|5 Min
Atualização do terreno 2018.3: Primeiros passos
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Agora temos uma equipe dedicada ao terreno, e nossos esforços iniciais logo estarão disponíveis ao público! O Unity 2018.3 será fornecido com uma atualização do sistema de terreno. Essa atualização apresenta ferramentas e desempenho aprimorados, aproveitando melhor a GPU. Ele também adiciona suporte aos pipelines de renderização HD e LW, além de ser compatível com o pipeline de renderização integrado e o sistema Unity Terrain existente.

Obtenha a versão beta do Unity 2018.3 agora para ter acesso antecipado às atualizações! Lembre-se de que a interface do usuário e a API ainda estão sujeitas a alterações, pois a versão beta ainda está em desenvolvimento ativo.

Desempenho

Em termos de desempenho, adicionamos um caminho de renderização instanciado pela GPU para o terreno. Na maioria dos casos, a instanciação produz uma redução drástica no número de chamadas de sorteio emitidas. Muitos de nossos testes registraram uma redução de mais de 50% nos custos de CPU (embora, é claro, os números reais dependam de sua plataforma e do caso de uso). Você pode escolher esse novo caminho de renderização ativando a opção "Draw Instanced" (Desenhar instanciado) nas configurações do terreno:

Imagem

Quando ativado, o Unity transforma todos os dados pesados do terreno, como mapas de altura e mapas de respingos, em texturas na GPU. Em vez de construir uma malha personalizada para cada trecho de terreno na CPU, podemos usar a instanciação da GPU para replicar uma única malha e obter uma amostra da textura do mapa de altura para produzir a geometria correta. Isso reduz a carga de trabalho da CPU do terreno em ordens de magnitude, pois algumas chamadas de desenho instanciadas substituem potencialmente milhares de desenhos de malha personalizados.

Como um bom efeito colateral, isso também melhora nosso tempo de carregamento! Não apenas podemos pular a criação de todas essas malhas personalizadas, mas também podemos usar a GPU para criar o mapa base (textura LOD pré-misturada); a GPU é muito mais rápida nesse tipo de coisa. Isso também significa que, se você tiver seu próprio shader de terreno personalizado, agora poderá substituir o shader "build basemap" e gerar texturas LOD de mapa base correspondentes.

Visuais do terreno

A instanciação também melhora a aparência das normais do terreno; desacoplamos as normais da malha do terreno da geometria, armazenando-as em uma textura de mapa normal gerada a partir do mapa de altura e amostrada no sombreador de pixels. Isso significa que as normais são independentes do nível de LOD da malha. Consequentemente, você pode aumentar a "taxa de erro de pixel" para diminuir o custo do vértice, com menos artefatos.

Imagem

Também desenvolvemos shaders de terreno para os pipelines de renderização HD e LW, disponíveis nas versões 4.0.0 ou posteriores do pacote, com suporte para renderização instanciada e normais por pixel. O sombreador HD foi aprimorado ainda mais para oferecer suporte a novos recursos, como modos de mesclagem de altura e densidade, dimensionamento normal, metalização e suavidade da superfície controlada por textura. O sombreador de terreno HD é limitado a uma única passagem, mas suporta a combinação de até 8 camadas de terreno em uma única passagem.

Ferramentas de GPU com script

No lado do editor, expusemos uma API de script para a criação de suas próprias ferramentas de terreno personalizadas, juntamente com um conjunto de funções utilitárias que você pode usar para implementar facilmente operações de escultura e pintura entre ladrilhos na GPU. A nova TerrainAPI inclui TerrainPaintTool<T0>, uma classe base para ferramentas de terreno, e TerrainPaintUtility, que contém funções utilitárias para modificar os dados do terreno.

Ao aplicar essas alterações, convertemos todas as ferramentas de terreno existentes em operações de GPU. Além de tornar essas ferramentas muito mais rápidas, isso também nos proporcionou tamanhos maiores de pincéis, visualizações aprimoradas de pincéis e a capacidade de pintar nas bordas dos ladrilhos do terreno com costura automática.

Imagem

Também começamos a experimentar os recursos de pincel, como rotação e randomização de pincéis e ferramentas de pintura mais avançadas, como estampagem de mapa de altura e malha, pincéis de clone e muito mais. No momento, esses recursos das ferramentas de pintura não estão na versão 2018.3, mas estamos disponibilizando-os por meio do nosso projeto GitHub Terrain Tools.

Suporte a vários terrenos
Imagem

Facilitamos o trabalho com vários blocos de terreno. Além da pintura contínua entre terrenos, agora você pode gerenciar automaticamente as conexões entre terrenos vizinhos. Anteriormente, isso exigia a criação de um script para conectar os vizinhos manualmente.

Ative a opção "Auto connect" (Conexão automática) nas configurações do terreno, e o terreno se conectará automaticamente aos seus vizinhos com a mesma ID de agrupamento.

Ao expandir o terreno existente, você pode usar a nova ferramenta "Create Neighbor Terrain" (Criar terreno vizinho) para adicionar rapidamente blocos de terreno correspondentes ao longo das bordas vazias.

Imagem

Também estamos trabalhando para tornar as alterações de redimensionamento e resolução menos destrutivas. No 2018.3, o mapa de altura e os mapas de manchas serão reamostrados quando você alterar a resolução, em vez do comportamento anterior de limpar os dados e perder todo o seu trabalho. Estamos trabalhando para melhorar todas as operações de redimensionamento em um futuro próximo.

Novos tipos de ativos

Para simplificar os fluxos de trabalho, também criamos dois novos tipos de ativos relacionados ao terreno: o ativo TerrainLayer e o ativo Brush.

Imagem

O TerrainLayer nos permite definir materiais de terreno independentes do objeto de terreno para que possamos rastrear facilmente o mesmo material em vários terrenos. Isso ajuda na pintura contínua e na modificação de materiais. Também estendemos o ativo TerrainLayer para oferecer suporte a texturas de "mapa de máscara", que podem ser usadas para fins de sombreamento arbitrário, e uma interface de script para fornecer uma GUI personalizada dependente de sombreamento para o ativo TerrainLayer.

Imagem

O Brush representa as formas de pincel GPU usadas pelas ferramentas de pintura e escultura. Eles agora são definidos por uma textura e uma curva de queda radial. Isso facilita muito a criação e o ajuste das formas dos pincéis (o que antes exigia a inserção de arquivos de imagem criados de forma arcaica em uma pasta especialmente nomeada).

Também adicionamos suporte para o formato de textura R16 (um formato de 16 bits de canal único) ao Unity. Isso nos permite evitar a quantização de 8 bits em nossas formas de pincel, o que pode causar efeitos indesejáveis de "terraceamento" se for usado como um carimbo de mapa de altura.

Imagem

Nossa equipe de terreno está apenas começando e o desenvolvimento continua. Envie-nos seu feedback no fórum World Building!