Não faz muito tempo, criamos um sistema de criação da lua. Nosso objetivo era criar luas de tamanho e composição semelhantes às existentes em nosso sistema solar. A principal dificuldade era obter as vastas superfícies de tais luas e seu interior, para que, enquanto permanecessem interessantes. Além disso, precisávamos que as luas fossem renderizadas com detalhes claros, independentemente da distância até elas.
O sistema assume que as luas tenham uma base esférica. A criação de uma malha geodésica é aplicada à esfera base, o que garante a mesma área de todas as partes da superfície. O sistema aplica essa estrutura apenas como uma grade computacional para geração procedural; a superfície real da lua será muito mais suave que a grade de geração.
Esfera geodésicaPara obter pequenas luas irregulares, as formas geométricas básicas são distorcidas pelo ruído 3D de baixa frequência.
Esfera de Inspeção distorcida por ruídoComeçando com essa base, o sistema utiliza uma série de invólucros concêntricos. Cada célula determina as características volumétricas da casca concêntrica subsequente. A concha mais externa define as propriedades da superfície da lua.
Concha concêntricaCada revestimento pode ser distorcido pelo ruído 3D de baixa frequência exclusivo desse revestimento. Se você escolher esta opção de geração, o shell interno poderá ser maior que o externo.
Distorção do cascoNos diagramas acima, a distância entre as conchas e a quantidade de distorção é exagerada para mostrar mais claramente o processo de construção. Na prática, as conchas estarão muito mais próximas umas das outras e a magnitude de sua distorção será proporcionalmente menor.
Abaixo, falaremos sobre como criar o shell mais externo. Os mesmos princípios se aplicam ao criar shells internos, portanto, não os consideraremos em detalhes.
Um sistema lua processual requer um componente em tempo real e um componente offline. O componente em tempo real é executado no computador do jogador. O componente offline é executado nos computadores dos desenvolvedores de jogos. O componente de geração offline cria informações que podem ser rapidamente complementadas com um componente em tempo real.
Cada vértice de uma concha esférica é classificado como pertencente a um bioma separado. Um bioma é um conjunto de propriedades da superfície, incluindo: altura, distribuição de materiais, colocação de amostras e coloração de materiais.
Exemplo de biomaAs informações do bioma contêm propriedades ricas em entropia, como crateras, mares secos, rachaduras na superfície causadas por marés gravitacionais.
Grande cratera registrada em informações do biomaA definição do bioma também contém regras para a colocação de objetos que determinam a localização, frequência e randomização de pequenas peças - pedras, paralelepípedos, bordas, etc.
Instâncias de rockCada bioma é criado a partir de elementos colocados por ladrilhos (ladrilhos) para que o componente em tempo real possa aplicar as mesmas informações em diferentes partes da lua e em outras luas. As informações do bioma devem ser geradas de forma que seja possível uma rápida distorção e rearranjo, reduzindo assim o número de padrões ambientais repetitivos e previsíveis.
O sistema utiliza dois tipos de blocos de bioma: transitório e isolado.
Informações transitórias dos biomas ocorrem em áreas onde o bioma passa para o bioma vizinho. Informações isoladas de biomas ocorrem em áreas onde o sistema garante a ausência de biomas vizinhos.
Esses dois modos separados são necessários porque alguns elementos dos biomas, por exemplo, crateras, só podem ser localizados em áreas onde o bioma não se transfere para outro bioma, porque as transições entre os biomas podem afetar o perfil de altura e a aparência dos elementos de alívio.
Abaixo está um exemplo simplificado da lua, que usa três biomas diferentes: polar, tropical e equatorial, coloridos, respectivamente, em vermelho, azul e verde.
Lua com três biomasÁreas com um bioma isolado têm uma cor uniforme; em áreas com biomas de transição, as cores se misturam.
O sistema utiliza um conjunto de ruído pré-calculado para introduzir variabilidade nas zonas de transição entre os biomas, criando transições interessantes e únicas de um bioma para outro.
Ruído processual aplicado às transições entre biomasNas imagens acima, o tamanho de cada porção do bioma é exagerado em relação ao tamanho da lua, para mostrar mais claramente a técnica de criação de biomas. Um site de bioma separado cobrirá uma área de aproximadamente 10 por 10 km. Uma lua com um raio de 1.500 km terá uma superfície de 30.000.000 km
2 . Para cobrir essa superfície, seriam necessárias quase 300.000 dessas áreas.
Resolução da grade do bioma para a lua com um raio de 1.500 kmA resolução da grade do bioma pode levar a um número muito grande de sites de biomas. O sistema não rastreará cada um deles individualmente, porque o local de cada site pode ser calculado analiticamente. Um bioma para a maioria dos sites pode ser atribuído a partir de um mapa de bioma de alto nível.
Os mapas de bioma de alto nível determinam as principais características das luas quando vistas a uma grande distância. O sistema usa esses mapas para gerar detalhes adicionais de formas mais próximas, preservando a uniformidade da definição da lua ao visualizar de diferentes distâncias.
Os mapas de bioma de alto nível são imagens 2D que podem ser colocadas na superfície da lua usando a parametrização 2D. Cada ponto do mapa contém um identificador numérico do bioma predominante no local correspondente da superfície ou concha interna.
Mapa bioma 2DA imagem acima mostra um mapa com quatro tipos diferentes de biomas (azul, vermelho, amarelo e branco). A imagem é sobreposta à esfera usando a parametrização 2D. Uma possível parametrização é mostrada abaixo:
Parametrização 2D para mapa de identificação de biomasAlém do mapa identificador do bioma, o sistema permite o uso de outros mapas, por exemplo, contendo alturas e cores da superfície.
Longa distância lua sombra e renderizaçãoUm pixel em cada imagem pode cobrir 4 km
2 , tornando sua criação econômica. Esses mapas de altura e cor podem ser gerados proceduralmente ou desenhados por artistas. Em um projeto que usa apenas uma dúzia de luas e onde cada lua deve ter propriedades naturais ricas e únicas, é melhor usar o trabalho de artistas nesta fase.
A imagem abaixo mostra o processo de geração da altura da superfície da bainha e outras propriedades:
Três escalas usadas para construir a luaA lua consistirá em pelo menos uma concha esférica. Se houver várias cascas, o sistema extrudará as cascas internas com base em seu raio máximo e na função da altura da casca, que é obtida executando o processo com diferentes escalas descritas acima.
Para cada concha, o projetista da lua cria um mapa de alto nível da distribuição dos biomas, definições de biomas para os biomas encontrados neste mapa e identificação dos materiais encontrados nesse bioma.
O sistema considera o ar um material aceitável, portanto pode ser usado para criar cavidades em qualquer invólucro.
Seção transversal do relevo da lua, na qual várias conchas são visíveisUm invólucro separado também pode ser um objeto volumétrico, cuja profundidade é definida por uma pilha de materiais. As informações da pilha são armazenadas em um bioma.
Uma pilha de materiais composta por seis materiaisComo os materiais subterrâneos raramente chegam à superfície, eles podem ser descritos com uma resolução muito mais baixa do que os materiais da superfície dos biomas, e o uso de ruído de procedimento local permanecerá invisível para o jogador.
A funcionalidade da pilha de materiais pode ser suficiente para o layout, porque alguns materiais na pilha podem ser bastante raros. O designer do bioma pode personalizar a prevalência e o padrão de qualquer material na pilha.
A geração de procedimentos é realizada por shaders de GPU e algoritmos de CPU voxel.
O sombreador calcula a cor do fragmento para cada uma das três escalas e mistura essas amostras, dependendo da distância entre a câmera e o fragmento.
Todas as peças que são pequenas demais para serem registradas na geometria. mas ainda afetando a complexidade percebida das superfícies, elas são registradas em mapas normais gerados em tempo real, com base na determinação processual de materiais, biomas ou mapas de alto nível para determinar a lua. Devido a isso, um baixo número de polígonos é mantido em cena.
Você deve pagar o preço por isso, desde que a lua esteja visível na câmera, o bioma e os mapas de definição de alto nível devem ser armazenados na GPU. Você pode usar o carregamento seletivo apenas das texturas mip necessárias para renderizar a escala atual da lua. A quantidade total de memória da GPU necessária é reduzida ao mínimo devido ao carregamento e descarregamento de streaming da GPU ao alterar a posição do observador.
Quando, devido à proximidade da câmera, elementos individuais se tornam grandes o suficiente, eles começam a aparecer na saída da geometria usando a geração de voxel em tempo real. O mesmo se aplica a todas as partes da lua que são formadas ou escavadas pelos jogadores. Se as mudanças forem grandes o suficiente e puderem ser observadas da órbita, o gerente de cena adaptável Voxel Farm aumentará o nível de detalhe (LOD) de todas as áreas, cuja mudança a aplicação considera importante.