Volumes: fumaça, fogo e líquidos
Um volume é uma caixa de voxels em vez de uma superfície: uma pluma de fumaça, uma chama, uma explosão, água. O Pixor lê arquivos .vdb do Blender, do EmberGen e do Houdini, e tem alguns próprios para quando você não tem uma ferramenta de simulação.
Um volume não tem geometria. Ele é desenhado percorrendo um raio através dele para cada pixel, no processador, e o resultado entra na mesma imagem que o modelo — então uma chama fica na frente de uma mão, um personagem fica dentro da fumaça, e as faixas, os traços e a limpeza o tratam exatamente como tratam qualquer outra coisa.
Adicionando um
Na etapa Cena, no menu + da Estrutura, em Um volume:
| Baforar | uma baforada redonda de fumaça |
| Chama | quente e estreito embaixo, frio e largo em cima |
| Nuvem | largo, plano embaixo, irregular em cima |
| Névoa | fino, baixo e uniforme |
| De um arquivo .vdb… | uma simulação do Blender, EmberGen ou Houdini |
Um volume é um nó Volume do Grafo de cena, e a linha dele na Estrutura é o mesmo nó: uma Linha depois dele é uma fileira de volumes, cada um posicionado pela sua cópia, e um conectado a nada não está na cena. Os ajustes dele também ficam no nó (pxr project scene game.pixor --set flame.voxels=48, pelo nome do volume).
Na linha de comando: --volume flame:0.5,0.8,0.5:0,0.55,0, em que os números são o tamanho e depois a posição, em metros. Um caminho para um .vdb funciona no mesmo lugar: --volume smoke.vdb:1.2.
Carregado por um osso, um volume vai para onde o osso vai em cada clipe — a chama de uma tocha numa mão — e fica em pé, como o fogo fica; sua posição passa então a ser medida a partir do osso. Na linha de comando, @BONE no fim: --volume flame:0.25:0,0.05,0@hand.r.
Carregado pelo emissor de um efeito, um volume faz parte daquele efeito: ele é desenhado nas próprias linhas do efeito, a partir do primeiro quadro do efeito, onde quer que o emissor esteja — no seu osso, ou onde as chaves de um clipe o movem — e em nenhuma outra linha. A fumaça de uma explosão, o fogo de um feitiço. Sua posição passa então a ser medida a partir do emissor. Na linha de comando, @effect:N para o N-ésimo efeito do projeto: --effect explosion --volume puff:1.5@effect:1.
Como é desenhado
Eles ficam em Como é desenhado no Inspetor do volume.
- Espessura é quanto volume um pixel precisa para ser desenhado. Mais alto dá uma forma mais justa e dura; mais baixo, uma mais esfiapada.
- Borda suave é a largura da borda que se desfia. A borda some num pontilhado ordenado ancorado no próprio volume, nunca mesclado, então cada pixel fica na paleta e o padrão não rasteja quando o volume gira.
- Autossombra é o quanto o volume escurece onde a luz precisa atravessá-lo.
- Cor é a do próprio volume, e sua rampa é montada a partir dela. Cor quente é a cor da parte que queima; defini-la igual à cor significa que nada queima, que é o que a fumaça quer. Brilha sobre diz quão quente uma parte precisa estar para assumir a cor quente, seja qual for a luz.
- Voxels é o quão fino o volume é cortado ao longo do seu lado mais longo. Um pixel de sprite pede um ou dois voxels: mais que isso só cintila, porque um voxel diferente ganha o pixel a cada quadro. Uma simulação de 256³ é reduzida a isso ao carregar, e é por isso que uma pluma a 32 px fica estável.
- Amostras é quantos pontos de um raio são examinados por voxel. Dois bastam em tamanhos de sprite; mais é mais suave e mais lento.
Volumes não recebem reflexo: uma nuvem não tem, e a densidade a partir da qual são sombreados é irregular o bastante para cintilar se pudessem ter um.
Sequências: fazendo-o se mover
Um .vdb é um volume parado. Uma simulação grava um arquivo por quadro — fire_0001.vdb, fire_0002.vdb e assim por diante — e apontar o Pixor para o primeiro deles reproduz o resto.
Na seção Sequência do volume:
| Quadros | quantos arquivos tocar, contando a partir do que você abriu |
| A cada | pegar um arquivo a cada N: uma simulação costuma ser gravada com mais quadros do que um sprite quer |
| Fechar o loop ao longo de | fazer um cross-fade de tantos quadros do final de volta ao início, para que o sprite toque sem parar e sem salto. Esses arquivos viram o fade e não tocam: cinco arquivos com fade de um são quatro quadros |
Na linha de comando, a sequência vem depois do tamanho e da posição: --volume fire_0001.vdb:1.5::24,2,4 — 24 arquivos, um a cada dois, os quatro últimos esmaecendo de volta para o primeiro.
Uma sequência roda junto com qualquer movimento que a folha já tenha: ponha um fogo ao lado de um ciclo de caminhada e os quadros do fogo são os quadros da caminhada. Quando não há mais nada se movendo, a sequência é o movimento e ganha uma ação própria, chamada volume.
Cada quadro é posicionado pela mesma transformação, tirada da caixa que a sequência inteira preenche, então uma pluma que cresce não encolhe a imagem de volta a cada quadro. Isso também quer dizer que Tamanho é o tamanho da sequência inteira, não do primeiro quadro.
Uma sequência nunca fica inteira na memória: cada arquivo é lido uma vez para encontrar aquela caixa, e de novo quando a folha ou a prévia chega ao seu quadro, com os três últimos guardados. Uma simulação longa custa tempo de leitura, não memória.
O que o Pixor lê
Arquivos .vdb com grades de float ou de vetores na árvore usual, com valores guardados sem compressão, zipados ou compactados com Blosc-LZ4 (divididos num fluxo por byte ou não, como o Blosc 1.14 e posteriores os gravam), todos eles ou só os ativos — que é o que o Blender, o EmberGen, o Houdini e as ferramentas do próprio OpenVDB gravam. Pixeliza uma grade chamada density, smoke, fog ou d, depois temperature, flame, heat ou fire para a parte quente, depois velocity para o movimento que a passada anticintilação usa. A superfície de um líquido (um level set) é lida como uma espessura com borda dura, sólida de ponta a ponta.
Tudo o que o Pixor não consegue ler é dito pelo nome em vez de sair errado: outro compressor, outro tipo de árvore, uma transformação com cisalhamento. pxr inspect fire.vdb imprime as grades de um arquivo, o tamanho delas e o tamanho dos voxels.
O que ainda não existe
- Líquidos são lidos e desenhados como volume, sem espuma e sem reflexo. Uma lâmina de água com os dois é o nó Água do mundo (Mundos).
O que esta página descreve está na versão completa; a demo grátis no navegador fica no visual padrão e na folha PNG.
Testar no navegador Obter o Pixor