Shader
Notas: A seção da edição Bedrock está incompleta e precisaria de mais informações. A seção Histórico da Edição Java poderia ser expandida para incluir mais detalhes sobre as alterações feitas entre as versões 1.17 e 1.19. A seção "Processo de renderização" da Edição Java precisaria de mais informações. A versão Java se beneficiaria de mais informações sobre efeitos de pós-processamento (especificamente shaders de vértice antes e depois da versão 25w31a) e atributos de vértice para shaders de pós-processamento e shaders principais
Shaders são usados para definir a renderização de certos elementos do jogo.
Edição Java
[editar | editar código-fonte]na Edição Java, são utilizados dois tipos distintos de shaders: shaders principais e shaders de pós-processamento. Os shaders principais são usados para renderizar partes fundamentais do jogo, como entidades e terreno, enquanto os shaders de pós-processamento são usados para aplicar efeitos visuais à tela depois que os shaders principais já foram executados.
Exemplos de shaders de pós-processamento incluem o desfoque do plano de fundo do menu, certos tipos de visão das criaturas vistos no modo espectador, o tratamento aprimorado de objetos translúcidos do ajuste gráfico Fabuloso! e o efeito de brilho.
Os shaders são escritos na Linguagem de Sombreamento OpenGL (GLSL). Cada programa de shader[nota 1] é composto por duas partes: o shader de vértice e o shader de fragmento. Os shaders de vértice definem as posições dos vértices individuais, enquanto os shaders de fragmento definem a cor final de um único fragmento renderizado. Por exemplo, os shaders de vértice são frequentemente usados para criar folhagens e água em movimento, e os shaders de fragmento podem ser usados para adicionar efeitos como bloom, raios de luz e desfoque. No Minecraft, os shaders de vértice devem usar a extensão .vsh e os shaders de fragmento, .fsh.
Os programas de shaders são armazenados no diretório assets/minecraft/shaders do arquivo client.jar e podem ser substituídos por um pacote de recursos. Observe que, se ocorrer algum erro ao carregar os shaders, o pacote de recursos será desativado e o modo gráfico fabuloso será desativado.
Shaders principais
[editar | editar código-fonte]Os shaders principais são usados para renderizar quase tudo no jogo, incluindo terrenos, entidades, elementos da interface, etc. Os programas de shader para shaders principais estão localizados no diretório assets/<namespace>/shaders/core de um pacote de recursos.
Lista de shaders principais
[editar | editar código-fonte]Uma lista de todos os shaders principais pode ser encontrada expandindo o cabeçalho abaixo, listando descrições das responsabilidades de cada shader, bem como quais uniformes, amostradores e diretivas de definição estão disponíveis para cada shader.
| Nome | Usado para | Imagens de exemplo | Blocos uniformes disponíveis | Amostradores disponíveis.
Todos os amostradores são do tipo |
Diretivas de definição |
|---|---|---|---|---|---|
| blit_screen | Copia um buffer para outro, não pode ser totalmente substituído por um pacote de recursos. | Nenhum presente. | Sampler0 - O buffer do qual copiar.
|
Nenhum presente. | |
| debug_point | Usado para alguns renderizadores de depuração [mais informações necessárias]
Utiliza o programa de fragmentos |
DynamicTransforms
|
Nenhum presente. | Nenhum presente. | |
| entity | Renderiza a maioria das entidades, incluindo, entre outras:
|
DynamicTransforms
|
Sampler0 - A textura base da entidade.
|
ALPHA_CUTOUT - Opacidade mínima antes que os pixels sejam descartados. Se não for definida, nenhum pixel será descartado.
| |
| glint | Faz o reflexo de encantamento em itens, equipamentos, etc. | DynamicTransforms
|
Sampler0 - A textura de reflexo de encantamento.
|
Nenhum presente. | |
| gui | Renderiza elementos de interface de usuário com cores sólidas, incluindo, entre outros:
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. | |
| lightmap | Renderiza o lightmap usado por outros shaders para determinar o quão claras ou escuras as partes do mundo devem ser.
Utiliza o programa de vértice |
LightmapInfo
|
Nenhum presente. | Nenhum presente. | |
| panorama | Renderiza o cubemap panorâmico da tela de título. |
|
DynamicTransforms
|
Sampler0 (samplerCube) - Um amostrador de cubemap contendo todas as 6 imagens panorâmicas.
|
Nenhum presente. |
| particle | Renderiza todos os efeitos de partículas. Também renderiza os efeitos climáticos de chuva e neve. |
|
DynamicTransforms
|
Sampler0 - O atlas de partículas ou blocos, dependendo da partícula que está sendo renderizada. Se estiver renderizando um efeito climático, esta é a textura correspondente a esse efeito.
|
Nenhum presente. |
| position_color | Renderiza a metade inferior do céu ao nascer e ao pôr do sol. Também renderiza a pizza de depuração do F3 e as bordas dos chunks. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| position_tex_color | Renderiza alguns objetos texturizados diversos, incluindo, entre outros:
|
|
DynamicTransforms
|
Sampler0 - Para a maioria dos widgets e ícones da interface, este é o atlas da interface. Para ícones do mundo, pacotes de recursos, etc., logotipo da Mojang, sobreposições de câmera ou outros elementos não relacionados à interface, esta é a textura do objeto que está sendo renderizado.
|
Nenhum presente. |
| position_tex | Não utilizado. | Nenhum presente. | Nenhum presente. | Nenhum presente. | |
| position | Lida com a profundidade dos raios da morte do Dragão Ender[mais informações necessárias]. | DynamicTransforms
|
Nenhum presente. | Nenhum presente. | |
| rendertype_beacon_beam | Renderiza os feixes do sinalizador e da passagem do End. |
|
DynamicTransforms
|
Sampler0 - A textura da parte atual do feixe que está sendo renderizado.
|
Nenhuma presente. |
| rendertype_clouds | Renderiza as nuvens. | CloudInfo
|
CloudFaces (isamplerBuffer) - Dados sobre faces das nuvens[mais informações necessárias]
|
Nenhum presente. | |
| rendertype_crumbling | Renderiza a animação de quebra de bloco. |
|
DynamicTransforms
|
Sampler0 - A textura para o estágio atual da animação de quebra de bloco.
|
Nenhuma presente |
| rendertype_end_portal | Renderiza o efeito "campo estelar" do portal do End e da passagem do End. |
|
DynamicTransforms
|
Sampler0 - Textura do céu do End textures/environment/end_sky.png.
|
PORTAL_LAYERS - A quantidade de camadas de estrelas a serem renderizadas.
|
| rendertype_entity_alpha | Atua como uma máscara alfa para o Dragão Ender enquanto ele está morrendo. Pixels descartados neste shader tornarão os pixels correspondentes no Dragão Ender invisíveis. |
|
DynamicTransforms
|
Sampler0 - A textura do Dragão Ender explodindo textures/entity/enderdragon/dragon_exploding.png.
|
Nenhuma presente. |
| rendertype_entity_decal | Renderiza as partes texturizadas do Dragão Ender enquanto ele está morrendo. |
|
DynamicTransforms
|
Sampler0 - A textura base da entidade.
|
Nenhum presente. |
| rendertype_entity_shadow | Renderiza a sombra que aparece sob a maioria das entidades. |
|
DynamicTransforms
|
Sampler0 - A textura de sombra textures/misc/shadow.png.
|
Nenhuma presente. |
| rendertype_item_entity_translucent_cull | Renderiza esferas de experiência e itens que não são renderizados pelo shader entity, incluindo:
Além disso, torna as entidades invisíveis em algumas situações:
|
|
DynamicTransforms
|
Sampler0 - A textura do objeto que está sendo renderizado; pode ser o atlas de blocos, a textura da esfera de experiência ou a textura da entidade.
|
Nenhum presente. |
| rendertype_leash | Renderiza laços que estão anexados a entidades no mundo. |
|
DynamicTransforms
|
Sampler2 - O lightmap.
|
Nenhum presente. |
| rendertype_lightning | Renderiza relâmpagos e os raios da morte do Dragão Ender. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| rendertype_lines | Renderiza todos os tipos de linhas, incluindo:
|
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| rendertype_outline | Renderiza um contorno colorido plano de entidades que possuem o efeito Brilho.
A cor disso é baseada na equipe em que a entidade está inserida ou na substituição da cor brilhante para entidades de exibição, que é passada ao shader por meio do atributo de vértice A saída desse shader é salva em um buffer e depois usada no efeito de pós-processamento |
|
DynamicTransforms
|
Sampler0 - A textura base do objeto que está sendo renderizado.
|
Nenhuma presente. |
| rendertype_text_background_see_through | Renderiza o plano de fundo de entidades-exibição de texto que são definidas para renderizar por meio de blocos. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| rendertype_text_background | Renderiza o plano de fundo de entidades-exibição de texto que não estão definidas para renderizar por meio de blocos. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| rendertype_text_see_through
rendertype_text_intensity_see_through |
Renderiza o texto visível através de blocos. Também renderiza o fundo das etiquetas de jogadores e entidades.
Observação: rendertype_text_intensity_see_through é idêntico, porém é usado apenas para renderizar fontes TTF. |
|
DynamicTransforms
|
Sampler0 - Um atlas 256x256 gerado automaticamente que contém o caractere atual que está sendo renderizado.
|
Nenhum presente. |
| rendertype_text
rendertype_text_intensity |
Renderiza o texto no mundo e em interfaces. Também renderiza mapas em molduras ou quando visto em primeira pessoa.
Observação: rendertype_text_intensity é idêntico, porém é usado apenas para renderizar fontes ttf. |
|
DynamicTransforms
|
Sampler0 - Um atlas 256x256 gerado automaticamente que contém o personagem que está sendo renderizado. Para mapas, esta é a textura de fundo do mapa, o atlas map_decorations ou o próprio mapa, dependendo de qual parte está sendo renderizada no momento.
|
Nenhum presente. |
| rendertype_translucent_moving_block | Renderiza blocos translúcidos, como vidraças, que estão sendo movidos por um pistão. Blocos não translúcidos são renderizados pelo shader terrain.
|
|
DynamicTransforms
|
Sampler0 - O atlas de blocos.
|
Nenhum presente. |
| rendertype_water_mask | Uma máscara usada para esconder água dentro de botes. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| rendertype_world_border | Renderiza a barreira do mundo. |
|
DynamicTransforms
|
Sampler0 - Textura da barreira do mundo textures/misc/forcefield.png.
|
Nenhuma presente. |
| sky | Renderiza a metade superior do skybox da Superfície. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| stars | Renderiza as estrelas no céu da Superfície à noite. |
|
DynamicTransforms
|
Nenhum presente. | Nenhum presente. |
| terrain | Renderiza todos os blocos e fluidos do mundo. |
|
DynamicTransforms
|
Sampler0 - O atlas de blocos.
|
ALPHA_CUTOUT - Opacidade mínima antes que os pixels sejam descartados. Se não for definida, nenhum pixel será descartado.
|
Shaders de inclusão
[editar | editar código-fonte]Os shaders de inclusão (armazenados em assets/<namespace>/shaders/include) contêm funções auxiliares e variáveis que podem ser usadas em vários programas de shader. Eles devem ter as extensões de arquivo .glsl, .vsh ou .fsh.
Para importar um shader de inclusão, adicione uma das seguintes diretivas de importação em qualquer lugar de um programa de shader de vértice ou fragmento.
#moj_import <filepath.glsl>importa um arquivo deassets/minecraft/shaders/include/<filepath>.glsl#moj_import <namespace:path.glsl>importa um arquivo deassets/<namespace>/shaders/include/<path>.glsl#moj_import "filepath.glsl"importa um arquivo deassets/minecraft/<filepath>.glsl#moj_import "namespace:path.glsl"importa um arquivo deassets/<namespace>/<filepath>.glsl
Ao importar um shader de inclusão, o jogo substitui a diretiva import pelo conteúdo do shader de inclusão. O arquivo importado precisa terminar com uma linha em branco, caso contrário, o shader não carrega.
- Shaders de inclusão padrão
Os seguintes shaders de inclusão são usados em todo o pacote de recursos padrão
| Nome | Descrição |
|---|---|
| fog.glsl | Contém a função linear_fog para calcular a cor com base na distância do vértice. Contém uma definição do bloco uniforme Fog
|
| light.glsl | Contém a função minecraft_mix_light, usada para calcular a iluminação facial em shaders de entidade. Contém uma definição do bloco uniforme Lighting
|
| matrix.glsl | Contém a função mat2_rotate_z que retorna a matriz de rotação para um vec2 em torno do eixo z.
|
| projection.glsl | Contém a função projection_from_position. Contém uma definição do bloco uniforme Projection
|
| globals.glsl | Contém uma definição do bloco uniforme Globals.
|
| dynamictransforms.glsl | Contém uma definição do bloco uniforme DynamicTransforms.
|
Efeitos de pós-processamento
[editar | editar código-fonte]Como mencionado anteriormente, os efeitos de pós-processamento são usados em fundos de menu, ao espectar certas criaturas para criar efeitos de visão, no ajuste gráfico Fabuloso! e ao renderizar o efeito Brilho.
Formato de arquivo de pós-efeito
[editar | editar código-fonte]Os efeitos de pós-processamento são compostos por múltiplas passagens e alvos de renderização. Um alvo é um buffer que pode ser lido e gravado. O jogo fornece alguns alvos integrados que contêm certas partes do mundo do jogo (partículas, água, etc.), e você pode definir os seus próprios para ler e gravar dados. Uma passagem pode ter múltiplas entradas de texturas PNG ou alvos de renderização.
Os efeitos de pós-processamento são definidos em assets/<namespace>/post_effect/<post effect>.json. Observe que os efeitos de pós-processamento são aplicados antes que os elementos da interface de usuário e da interface sejam renderizados
- : A marcação raiz
- targets: Alvos de renderização personalizados a serem usados por passes de renderização
- target definition: A chave é o nome do alvo
- width: O valor padrão é a largura atual da área de visualização. A largura do alvo
- height: O valor padrão é a largura atual da área de visualização. A altura do alvo
- persistent: O valor padrão é false. Se for verdadeiro, este alvo não será limpo entre os quadros. No entanto, ele ainda será limpo quando a janela do jogo for redimensionada.
- clear_color O valor padrão é
[0, 0, 0, 0]. A cor com a qual este alvo é preenchido quando é criado ou limpo. Suporta dois formatos. Uma lista de valores flutuantes no intervalo de 0 a 1[R, G, B, A], ou uma cor em formato decimal calculada a partir dos componentes vermelho, verde e azul usando esta fórmula:
(Alfa << 24) + (Vermelho << 16) + (Verde << 8) + Azul
- target definition: A chave é o nome do alvo
- passes: Passes de renderização
- pass: Um passe de renderização
- vertex_shader: O ID com espaço de nomes de um shader de vértice a ser usado para este passe, em relação à pasta de shaders.
minecraft:post/blité resolvido paraassets/minecraft/shaders/post/blit.vsh - fragment_shader: O ID com espaço de nomes de um shader de fragmento a ser usado para esta passagem, em relação à pasta de shaders.
minecraft:post/box_bluré resolvido paraassets/minecraft/shaders/post/box_blur.fsh - inputs: Uma lista de entradas de alvos de renderização e/ou entradas de textura
- render target input
- sampler_name: O nome do uniforme do amostrador
- Definir como
MainDepth, por exemplo, torna um uniforme sampler2D chamadoMainDepthSamplerdisponível para o programa shader para esta passagem. Isso também adicionará um vetor vec2 adicional ao bloco uniformeSamplerInfochamado<sampler_name>Size, por exemplo,MainDepthSize.
- Definir como
- bilinear: Padrão: false. Se definido como true, o amostrador usa filtragem bilinear em vez do mais próximo.
- target: O nome do alvo. Pode ser um alvo personalizado, conforme especificado em
targetsacima, ou um dos seguintes alvos integrados:minecraft:main,minecraft:translucent,minecraft:item_entity,minecraft:particles,minecraft:weather,minecraft:cloudsouminecraft:entity_outline - use_depth_buffer: Padrão: false. Se definido como true, a amostra é obtida da textura de profundidade em vez da textura de cor.
- sampler_name: O nome do uniforme do amostrador
- texture input
- sampler_name: O nome do uniforme do amostrador
- Definir como
MyTexture, por exemplo, torna um uniforme sampler2D chamadoMyTextureSamplerdisponível para o programa shader para esta passagem. Isso também adicionará um vetor vec2 adicional ao bloco uniformeSamplerInfochamado<sampler_name>Size, por exemplo,MyTextureSize.
- Definir como
- bilinear: Padrão: false. Se definido como true, o amostrador usa filtragem bilinear em vez do mais próximo.
- location: A localização do recurso da textura.
my_namespace:post_textureresolve paraassets/my_namespace/textures/effect/post_texture.png - width: A largura da textura em pixels.
- height: A altura da textura em pixels.
- sampler_name: O nome do uniforme do amostrador
- render target input
- output: O alvo para a saída. Pode ser um alvo personalizado, conforme especificado em
targetsacima ou emminecraft:main. Observação: você não pode ler e escrever no mesmo alvo na mesma passagem. - uniforms: Um objeto de blocos uniformes a serem passados para os shaders de vértice e fragmento. Por exemplo:
uniforms: { "NomeDoBlocoUniforme": [ { "type": "vec2", "value": [...] } ] }- uniform block: A chave é o nome que este bloco uniforme terá ao ser referenciado em um shader.
- uniform definition
- name: O nome do uniforme. Esta informação não é utilizada pelo jogo, mas é recomendável defini-la para fins de organização.
- type: O tipo da variável uniforme pode ser qualquer um dos seguintes:
int,float,ivec3,vec2,vec3,vec4ematrix4x4. - value: Valores uniformes. A quantidade e o formato dependem do valor definido no campo
type:intrequer um único inteirofloatrequer um único floativec3requer uma lista de 3 inteirosvec2requer uma lista de 2 floatsvec3requer uma lista de 3 floatsvec4requer uma lista de 4 floatsmatrix4x4requer 16 floats
- uniform definition
- uniform block: A chave é o nome que este bloco uniforme terá ao ser referenciado em um shader.
- vertex_shader: O ID com espaço de nomes de um shader de vértice a ser usado para este passe, em relação à pasta de shaders.
- pass: Um passe de renderização
- targets: Alvos de renderização personalizados a serem usados por passes de renderização
Lista de efeitos de pós-processamento
[editar | editar código-fonte]Atualmente, há seis efeitos de pós-processamento usados no jogo:
| Nome | Usado para | Imagens de exemplo |
|---|---|---|
| blur | Usado para o efeito de desfoque no fundo da maioria dos menus do jogo e na tela de título. Este efeito de pós-processamento não é usado quando a configuração de acessibilidade "Desfoque de fundo do menu" está definida como 0. |
|
| creeper | Adiciona um filtro verde sobre a tela e dá a impressão de uma resolução reduzida. Usado ao espectar um creeper. |
|
| entity_outline | Aplica um desfoque sobre a silhueta de uma entidade em uma cor sólida. Usado quando uma entidade com o efeito Brilho está na tela. |
|
| invert | Inverte as cores da tela. Usado ao espectar um enderman. |
|
| spider | Renderiza uma versão desfocada da tela com 5 cópias adicionais sobrepostas e bordas desfocadas. Usado ao espectar uma aranha. |
|
| transparency | Combina múltiplas passagens (alvos) de diferentes objetos no mundo, resultando em uma mistura de translucidez ligeiramente melhor em comparação com os gráficos "Rápidos" ou "Detalhados". Usado quando o modo gráfico está definido como "Fabuloso!". |
|
Processo de renderização
[editar | editar código-fonte]Renderização geral do jogo
[editar | editar código-fonte]Cada quadro é renderizado na seguinte ordem: [mais informações necessárias]
- O mundo, incluindo entidades, blocos, o céu, itens, etc., é renderizado (pelos shaders principais)
- Quaisquer efeitos posteriores são aplicados conforme necessário
- Os elementos da interface e da interface de usuário são renderizados (pelos shaders principais)
Renderização de itens e entidades da interface de usuário
[editar | editar código-fonte]Quando o jogo desenha um item ou entidade em uma interface, ocorre o seguinte processo:
- O item ou entidade é pré-renderizado para uma textura interna. Para itens, este pode ser um atlas de todos os itens visíveis no momento ("atlas de itens da interface") ou uma única textura para aquele item. Isso depende se o campo
oversized_in_guiestá definido como verdadeiro ou falso na definição do modelo de itens. Para entidades, cada uma sempre tem uma textura única para a qual é renderizada. - Para cada item ou entidade, um quadrilátero é desenhado na tela, que utiliza amostras do atlas de itens da interface ou da textura individual do item ou entidade correspondente.
O jogo pode pular a renderização de um item quando necessário e usará o que foi desenhado no quadro anterior. Um item só é renderizado novamente se uma das seguintes condições for atendida:
- O item possui uma textura animada em algum lugar do seu modelo
- O item possui um reflexo de encantamento
- O atlas de itens da interface é preenchido; neste caso, ele é limpo e todos os itens da interface visíveis no momento são redesenhados
- A escala da interface é alterada; neste caso, o atlas de itens da interface é limpo e todos os itens da interface visíveis no momento são redesenhados
- Os dados do item são alterados de forma a causar uma atualização visual. Isso inclui, entre outros: alterar os componentes de dado
item_model,custom_model_dataouprofile
Blocos uniformes padrão
[editar | editar código-fonte]Os blocos uniformes usam o disposição std140. Todos os uniformes devem ser especificados na ordem correta e com o tipo correto, caso contrário, ocorrerá um comportamento estranho e indefinido. Por conveniência, alguns blocos uniformes são predefinidos em shaders de inclusão. Consulte a seção shaders de inclusão para obter mais informações.
Alguns shaders podem não usar todos os uniformes em um determinado bloco uniforme; nesse caso, os uniformes não utilizados terão um valor "padrão". Por exemplo, enquanto o shader principal rendertype_lines terá o valor apropriado para o uniforme LineWidth, outros shaders terão um "valor padrão" que provavelmente não será útil.
Blocos comuns
[editar | editar código-fonte]Os seguintes blocos uniformes estão disponíveis tanto em shaders de pós-processamento quanto em shaders principais.
Globals
Este bloco uniforme está sempre vinculado e possui valores adequados em todos os shaders.
- (vec2)
ScreenSizeA largura e a altura do framebuffer atual em pixels. - (float)
GlintAlphaO valor do ajuste de acessibilidade Intensidade do reflexo em um intervalo de 0 a 1. - (float)
GameTimeUm valor que aumenta constantemente de 0 a 1 ao longo de aproximadamente 20 minutos e, em seguida, retorna a 0. A fórmula exata para isso é(<idade do mundo> módulo 24000) / 24000. - (int)
MenuBlurRadiusO valor do ajuste de acessibilidade Desfoque de fundo do menu em um intervalo de 0 a 10.
Blocos principais
[editar | editar código-fonte]Os seguintes blocos uniformes estão disponíveis apenas em shaders principais.
Fog
Este bloco uniforme é sempre vinculado, porém pode não ter valores apropriados se usado fora de shaders que o suportam.
- (vec4)
FogColorCor da neblina. - (float)
FogEnvironmentalStartDistância inicial da neblina ambiente. - (float)
FogEnvironmentalEndDistância final da neblina ambiente. - (float)
FogRenderDistanceStartDistância inicial da distância de renderização da neblina. - (float)
FogRenderDistanceEndDistância final da distância de renderização da neblina. - (float)
FogSkyEndDistância final da neblina para a parte superior do céu. - (float)
FogCloudsEndDistância final para neblina das nuvens.
DynamicTransforms
- (mat4)
ModelViewMatA matriz de visualização do modelo. - (vec4)
ColorModulatorUm multiplicador de cores que pode ser definido no código do jogo para modificar a cor final dos objetos. - (vec3)
ModelOffsetO deslocamento do modelo que está sendo renderizado. - (mat4)
TextureMatUma matriz 4D usada para transformar UVs para alguns efeitos animados, como o reflexo do encantamento, o vórtice e o projétil de vento, a barreira do mundo, etc. - (float)
LineWidth[até EJ 1.21.11] A largura da linha.
Lighting
Este bloco uniforme é sempre vinculado, porém pode não ter valores adequados se usado fora de shaders que o suportam.
- (vec3)
Light0_DirectionPrimeira direção da luz. Usada para calcular o sombreamento direcional da entidade. - (vec3)
Light1_DirectionSegunda direção da luz. Usada para calcular o sombreamento direcional da entidade.
Projection
Este bloco uniforme é sempre vinculado, porém pode não ter valores apropriados se usado fora de shaders que o suportam.
- (mat4)
ProjMatA matriz de projeção
LightmapInfo
- (float)
AmbientLightFactorQuanta luz ambiente deve haver. 0.1 para o Nether, 0.25 para o End, e 0 para a Superfície. - (float)
SkyFactorUm valor que especifica o quanto o lightmap deve ser iluminado quando o céu pisca, normalmente quando ocorre um relâmpago. - (float)
BlockFactorUm valor que flutua aleatoriamente, usado no shader padrão para a cintilação da luz de bloco. - (float)
NightVisionFactorUm valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Visão Noturna deve clarear o lightmap. - (float)
DarknessScaleUm valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Escuridão deve escurecer o lightmap. - (float)
DarkenWorldFactorUm valor que especifica o quanto escurecer o lightmap quando uma barra de chefes estiver visível. Aparentemente, isso só é usado na luta contra o Dragão Ender [mais informações necessárias]. - (float)
BrightnessFactorO valor do ajuste gráfico de brilho em um intervalo de 0 a 1. - (vec3)
SkyLightColorA cor da luz do céu. - (vec3)
AmbientColorA cor da luz ambiente.
CloudInfo
- (vec4)
CloudColorA cor das nuvens. - (vec3)
CloudOffsetDeslocamento das nuvens [mais informações necessárias]. - (vec3)
CellSizeTamanho de cada nuvem individual [mais informações necessárias].
Blocos de pós-processamento
[editar | editar código-fonte]Os seguintes blocos uniformes estão disponíveis apenas em shaders de pós-processamento.
SamplerInfo
- (vec2)
OutSizeA largura e a altura do buffer de entrada em pixels. - (vec2)
InSizeA largura e a altura do buffer de saída em pixels. - (vec2) Outros tamanhos de amostrador.[mais informações necessárias]
Uniformes padrão
[editar | editar código-fonte]Uma lista de uniformes fornecidos pelo jogo.
- Uniformes de pós-processamento
Uniformes disponíveis para pós-shaders.
- (vec2)
InSizeA largura e a altura do buffer de entrada em pixels. - (vec2)
OutSizeA largura e a altura do buffer de saída em pixels. - (matrix4x4)
ProjMatA matriz de projeção. - (vec2)
ScreenSizeA resolução do framebuffer atual em pixels (largura, altura). - (float)
GameTimeA idade atual do mundo. Este é o resultado de/time query gametimemódulo 24000 e dividido por 24000. Ele aumenta de 0 e atinge 1 aproximadamente 20 minutos depois, retornando a 0.
- Uniformes principais
Uniformes disponíveis para shaders principais. Observe que nem todos os uniformes estão disponíveis em todos os shaders. Consulte a lista de shaders principais.
- (matrix4x4)
ProjMatA matriz de projeção. - (matrix4x4)
ModelViewMatA matriz de visualização do modelo. - (vec2)
ScreenSizeA resolução do framebuffer atual em pixels (largura, altura). - (float)
GameTimeA idade atual do mundo. Este é o resultado de/time query gametimemódulo 24000 e dividido por 24000. Ele aumenta de 0 e atinge 1 aproximadamente 20 minutos depois, retornando a 0. - (vec4)
ColorModulatorUm multiplicador de cores que pode ser definido no código do jogo para modificar a cor final dos objetos. - (vec3)
Light0_DirectionPrimeira direção da luz, usada no padrão para calcular a iluminação da entidade. - (vec3)
Light1_DirectionSegunda direção da luz, usada no padrão para calcular a iluminação da entidade. - (float)
FogStartA distância da câmera em que a neblina começa a ser aplicada. - (float)
FogEndA distância da câmera em que a neblina é totalmente aplicada. Objetos mais distantes que essa distância normalmente ficam ocultos pela neblina. - (vec4)
FogColorA cor da neblina. - (vec3)
ModelOffsetO deslocamento do modelo que está sendo renderizado. Disponível apenas em shaders de terreno para deslocar seções de blocos para a posição correta. - (float)
GlintAlphaContém o valor da configuração de acessibilidade da intensidade do reflexo em um intervalo de 0 a 1. - (matrix4x4)
TextureMatMatriz 4D usada para transformar UVs para alguns efeitos animados, como o reflexo do encantamento, o vórtice e o projétil de vento, a barreira do mundo, etc. - (float)
LineWidthA largura da linha. - (float)
AmbientLightFactorA quantidade de luz ambiente que deve haver. 0,1 para o Nether e 0 para o End e a Superfície. - (float)
SkyFactorUm valor que especifica o quanto o mapa de luz deve ser clareado quando o céu pisca, normalmente quando ocorre um raio. - (float)
BlockFactorUm valor que flutua aleatoriamente, usado no shader padrão para a cintilação da luz de bloco. - (int)
UseBrightLightmapUm valor "booleano" que especifica se a dimensão atual possui claraboia. Isso é usado apenas para The End no padrão, mas também pode ser aplicado a dimensões de datapack personalizadas. - (vec3)
SkyLightColorA cor da luz do céu. - (float)
NightVisionFactorUm valor em um intervalo de 0 a 1 que especifica o quanto o status effect da Visão Noturna deve clarear o mapa de luz. - (float)
DarknessScaleUm valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Escuridão deve escurecer o lightmap. - (float)
DarkenWorldFactorUm valor que especifica o quanto escurecer o lightmap quando uma barra de chefes estiver visível. Aparentemente, isso só é usado na luta contra o dragão Ender [mais informações necessárias]. - (float)
BrightnessFactorO valor do ajuste gráfico de brilho em um intervalo de 0 a 1.
Edição Bedrock
[editar | editar código-fonte]Desde a Edição Bedrock 1.18.30, shaders de terceiros em pacotes de recursos não são mais suportados em todos os dispositivos devido à implementação do RenderDragon.
Pipeline de Renderização Deferido
[editar | editar código-fonte]O pipeline de renderização deferido é um pipeline de renderização alternativo que pode ser personalizado por meio de pacotes de recursos e é usado no jogo padrão para o modo gráfico Visuais Vibrantes.
Embora não suporte shaders personalizados diretamente, ele oferece maneiras de definir propriedades sobre luz, neblina, atmosfera e materiais de textura PBR. Isso pode ser usado para criar efeitos de iluminação semelhantes aos vistos nos pacotes de shaders da Edição Java.
Histórico
[editar | editar código-fonte]| Edição Java | |||||||
|---|---|---|---|---|---|---|---|
| 1.7.2 | 13w38a | Os shaders foram adicionados para o Super Secret Settings. | |||||
| 1.8 | 14w05a | Os shaders Creeper e Spider foram adicionados. Os shaders são aplicados automaticamente no modo Espectador ao visualizar o mundo como um creeper, uma aranha ou um enderman. | |||||
| 14w05b | Os shaders foram removidos da visualização ao mudar de perspectiva enquanto se especta uma criatura.[1] | ||||||
| F4 agora alterna diferentes shaders em vez de desligá-los.[1] | |||||||
| 14w06a | O shader de pós-efeito entity_outline foi adicionado.
| ||||||
| 1.9 | 15w31a | O botão Super Secret Settings foi removido para uma reescrita interna.[2] | |||||
| 1.16 | 20w22a | O shader de pós-efeito transparency foi adicionado para o modo gráfico Fabuloso!.
| |||||
| 1.17 | 21w10a | Os shaders principais foram adicionados. | |||||
Os shaders de inclusão fog.glsl, light.glsl, matrix.glsl e projection.glsl foram adicionados.
| |||||||
| O jogo agora requer o OpenGL 3.2 Core Profile. | |||||||
Os programas de sombreamento existentes para efeitos de pós-processamento da versão GLSL 110 foram atualizados para a versão 150.
| |||||||
| 1.18.1 | ? | O shader de inclusão fog.glsl agora possui uma função cylindrical_distance. Todos os shaders principais que anteriormente usavam a função interna length para calcular a distância do vértice a utilizam.
| |||||
| 1.18.2 | ? | Em fog.glsl, a função cylindrical_distance foi renomeada para fog_distance. Ela também recebe um parâmetro int adicional para o formato da neblina.
| |||||
| ? | Oo uniforme FogShape foi adicionado para shaders principais.
| ||||||
| 1.19 | 22w12a | Agora há arquivos de shader para renderização de entidades translúcidas. | |||||
| 1.20.5 | 24w05a | O array de atributos nas definições do shader principal foi removido. Todos os atributos agora estão sempre vinculados a um determinado shader. | |||||
Os shaders principais não utilizados position_color_normal e position_tex_lightmap_color foram removidos.
| |||||||
O shader principal position_tex_color_normal foi renomeado para rendertype_clouds.
| |||||||
O uniforme IViewRotMat foi removido e o atributo Position para entidades agora está no espaço do mundo (relativo à câmera).
| |||||||
| Os uniformes de direção da luz não são mais pré-multiplicados pela matriz de visualização. | |||||||
| 24w09a | A textura de terra do fundo do menu foi substituída por um shader de desfoque de pós-processamento. | ||||||
| 24w11a | Todos os shaders de pós-processamento não utilizados que foram usados para Super Secret Settings foram removidos. | ||||||
| 1.21.2 | 24w34a | As configurações do programa de shader agora podem especificar diretivas de definição de pré-processador a serem aplicadas aos seus shaders vinculados. | |||||
| O formato das configurações do shader principal e do shader de pós-processamento foi consolidado. | |||||||
O shader principal rendertype_entity_glint_direct foi removido e substituído por rendertype_entity_glint.
| |||||||
O shader rendertype_entity_translucent_cull foi removido e substituído por rendertype_item_entity_translucent_cull.
| |||||||
| ? | o uniforme ChunkOffset foi renomeado para ModelOffset
| ||||||
| ? | A maioria dos elementos texturizados da interface agora usam o shader principal position_tex_color em vez de position_tex
| ||||||
| 1.21.5 | 25w06a | Um novo shader principal foi adicionado, rendertype_world_border, que é usado para renderizar a barreira do mundo
| |||||
| 25w07a | Os arquivos de configuração do programa de shader foram removidos. Os programas de shader ainda estão presentes, porém os únicos uniformes disponíveis para eles são os padrões usados na renderização padrão. | ||||||
Em efeitos de pós-processamento, o campo program foi substituído por vertex_shader e fragment_shader, que resolvem para assets/<namespace>/shaders/<path>.<vsh ou fsh>
| |||||||
Em efeitos de pós-processamento, type agora é um campo obrigatório para cada uniform, com os valores possíveis sendo int, ivec3, float, vec2, vec3, vec4 e matrix4x4
| |||||||
Em efeitos de pós-processamento, o campo values agora é opcional para cada uniform. Não é recomendado deixá-lo sem definição, pois resultará em um comportamento indefinido. Deixá-lo indefinido é usado apenas para configuração em tempo de execução do efeito de pós-processamento de desfoque na renderização padrão.
| |||||||
O uniforme EndPortalLayers foi removido e substituído por uma definição de pré-processador chamada PORTAL_LAYERS. | |||||||
| 25w10a | Os uniformes "globais" agora podem ser definidos em programas de shader. Se um uniforme não estiver normalmente disponível para esse shader, ou se o tipo do uniforme não for definido como normalmente seria, ocorrerá um comportamento indefinido. | ||||||
Atualmente, os uniformes "globais" são: ModelViewMat, ProjMat, TextureMat, ScreenSize, ColorModulator, Light0_Direction, Light1_Direction, GlintAlpha, FogStart, FogEnd, FogColor, FogShape, LineWidth, GameTime e ModelOffset
| |||||||
| 1.21.6 | 25w16a | Todos os uniformes integrados agora são blocos uniformes em vez de uniformes opacos soltos | |||||
| Os uniformes personalizados fornecidos aos shaders de pós-processamento agora são blocos uniformes | |||||||
Em efeitos de pós-processamento, targets agora suporta dois novos campos opcionais: persistent e clear_color
| |||||||
Em efeitos de pós-processamento, o campo uniforms agora é uma lista de blocos uniformes, por exemplo: { "UniformBlockName": [ { "type": "vec2", "value": [...] } ] }.
| |||||||
Nas definições de uniformes de efeitos de pós-processamento, o campo name agora não é utilizado pelo jogo, mas ainda está presente. O campo values foi substituído por value, que se comporta basicamente da mesma forma, exceto para os tipos uniformes int e float, que aceita um único número em vez de uma lista com 1 entrada.
| |||||||
Nos efeitos de pós-processamento, a lista de uniformes de tamanho (todos vec2 *Size) foi substituída por um único bloco uniforme SamplerInfo.
| |||||||
O panorama do menu principal agora usa um novo programa de fragmento, core/panorama.fsh.
| |||||||
O programa core/position_tex.fsh não é mais utilizado.
| |||||||
O shader principal position agora pode ter uma diretiva de definição FOG_IS_SKY.
| |||||||
O minecraft_sample_lightmap foi removido do shader de inclusão light.glsl. Todos os shaders que anteriormente usavam essa função agora amostram a textura do lightmap diretamente.
| |||||||
| 25w17a | Dois novos shaders principais foram adicionados; stars e sky, que são usados para renderizar as estrelas e a parte superior do céu, respectivamente.
| ||||||
A diretiva de definição FOG_IS_SKY foi removida, pois o céu agora usa um shader separado.
| |||||||
| 25w19a | O panorama do menu principal agora usa um novo programa de vértice, core/panorama.vsh.
| ||||||
O programa core/position_tex.vsh não é mais utilizado.
| |||||||
Quatro novos uniformes foram adicionados, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart e FogRenderDistanceEnd.
| |||||||
Os uniformes FogShape, FogStart e FogEnd foram removidos.
| |||||||
| 1.21.9 | 25w31a | Os programas de shader post/blit.vsh, post/blur.vsh, post/invert.vsh, post/sobel.vsh, post/screenquad.vsh e core/blit_screen.vsh foram removidos e substituídos por core/screenquad.vsh.
| |||||
Os shaders de vértice para efeitos de pós-processamento e operações de transferência de imagem em tela cheia não recebem mais um atributo Position. Em vez disso, eles devem atribuir as coordenadas do vértice usando gl_VertexID. Além disso, esses shaders são executados com apenas 3 vértices em vez de um quadrado completo, como acontecia anteriormente.
| |||||||
| 25w33a | No bloco uniforme LightmapInfo, o uniforme int UseBrightLightmap foi removido e o uniforme vec3 AmbientColor foi adicionado.
| ||||||
O shader core/lightmap.fsh foi modificado para os novos efeitos de clarão do End.
| |||||||
| 25w35a | O shader core/lightmap.fsh foi ligeiramente modificado para corrigir alguns problemas com os clarões do End. Como parte dessas alterações, o efeito de pulsação da escuridão não é mais aplicado no End.
| ||||||
| 25w36a | Os programas de shader não utilizados core/position_color_lightmap.fsh, core/position_color_lightmap.vsh, core/position_color_tex_lightmap.fsh e core/position_color_tex_lightmap.vsh foram removidos.
| ||||||
Uma pequena alteração nos cálculos de coordenadas UV na função minecraft_sample_lightmap no programa core/terrain.vsh.
| |||||||
| 25w37a | O shader core/entity agora pode ter uma flag PER_FACE_LIGHTING. Quando ativada, a iluminação cardinal será calculada separadamente para as faces frontal e traseira de cada quadrilátero.
| ||||||
| O jogo agora requer o OpenGL 3.3 Core Profile. | |||||||
Todos os programas de shader da versão GLSL 150 foram atualizados para a versão 330.
| |||||||
A lógica da função minecraft_mix_light no arquivo include/light.glsl foi dividida em duas funções adicionais: minecraft_compute_light e minecraft_mix_light_separate.
| |||||||
| Em breve na Edição Java | |||||||
| 1.21.11 | 25w41a | Um novo programa de shader core/debug_point.vsh foi adicionado.
| |||||
A variável uniforme LineWidth do bloco de variáveis uniformes DynamicTransforms foi removido. A largura da linha agora é passada como um atributo de vértice para os shaders core/rendertype_lines e core/debug_point.
| |||||||
Galeria
[editar | editar código-fonte]-
Shader de visão do creeper
-
Shader de visão do enderman
-
Shader de visão da aranha
Referências
[editar | editar código-fonte]- ↑ a b MC-46727 (comment #219617)
- ↑ "Não, só reescrevendo tudo :p Eles ainda estão no jogo, o botão simplesmente sumiu no momento. Faria mais sentido usar atalhos de teclado, na minha humilde opinião." – @_grum (Erik Broes) no X (anteriormente Twitter), 31 de julho de 2015
Notas
[editar | editar código-fonte]- ↑ Uma coleção de shaders que são executados em conjunto.
Links externos
[editar | editar código-fonte]- Vanilla Shaders Wiki
- Minecraft Vanilla Shaders Guide
- OpenGL Shading Language on the OpenGL Wiki
- The Book of Shaders
- Learn OpenGL
- Minecraft Post-Processing Shaders Guide
- Bedrock Edition Deferred Rendering Pipeline Documentation
Navegação
[editar | editar código-fonte]| Componentes |
| ||||
|---|---|---|---|---|---|
| Pacotes de recursos |
| ||||
| Tutoriais | |||||
Atribuído a: MeiaQuatru (discussão)
















































