Shader

De Minecraft Wiki
Ir para navegação Ir para pesquisar
Esse artigo fala sobre os shaders do jogo usando pacotes de recursos. Para os shaders fornecidos pelas modificações do jogo, veja Pacote de shaders. Para os shaders disponíveis no menu opções antes da Edição Java 1.9, veja Super Secret Settings. Para os shaders integrados na Edição Bedrock, veja Visuais Vibrantes.
Este artigo é um trabalho em andamento.
 
Por favor ajude na criação desse artigo com expansões ou melhorias. A página de discussão pode conter sugestões.
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]
Embora os shaders principais possam ser substituídos por um pacote de recursos, este não é um recurso pretendido ou suportado e pode mudar a qualquer momento.

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.

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 de assets/minecraft/shaders/include/<filepath>.glsl
  • #moj_import <namespace:path.glsl> importa um arquivo de assets/<namespace>/shaders/include/<path>.glsl
  • #moj_import "filepath.glsl" importa um arquivo de assets/minecraft/<filepath>.glsl
  • #moj_import "namespace:path.glsl" importa um arquivo de assets/<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
    •   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 para assets/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 para assets/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 chamado MainDepthSampler disponível para o programa shader para esta passagem. Isso também adicionará um vetor vec2 adicional ao bloco uniforme SamplerInfo chamado <sampler_name>Size, por exemplo, MainDepthSize.
            •   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 targets acima, ou um dos seguintes alvos integrados: minecraft:main, minecraft:translucent, minecraft:item_entity, minecraft:particles, minecraft:weather, minecraft:clouds ou minecraft: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.
          •   texture input
            •   sampler_name: O nome do uniforme do amostrador
              • Definir como MyTexture, por exemplo, torna um uniforme sampler2D chamado MyTextureSampler disponível para o programa shader para esta passagem. Isso também adicionará um vetor vec2 adicional ao bloco uniforme SamplerInfo chamado <sampler_name>Size, por exemplo, MyTextureSize.
            •   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_texture resolve para assets/my_namespace/textures/effect/post_texture.png
            •   width: A largura da textura em pixels.
            •   height: A altura da textura em pixels.
        •   output: O alvo para a saída. Pode ser um alvo personalizado, conforme especificado em targets acima ou em minecraft: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, vec4 e matrix4x4.
              •   value: Valores uniformes. A quantidade e o formato dependem do valor definido no campo type:
                • int requer um único inteiro
                • float requer um único float
                • ivec3 requer uma lista de 3 inteiros
                • vec2 requer uma lista de 2 floats
                • vec3 requer uma lista de 3 floats
                • vec4 requer uma lista de 4 floats
                • matrix4x4 requer 16 floats

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.
O lado esquerdo é o alvo "minecraft:entity_outline" antes do efeito de pós-processamento ser aplicado, o lado direito é a imagem final com o efeito de pós-processamento aplicado
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!".
alvo "minecraft:main"
alvo "minecraft:translucent"

alvo "minecraft:item_entity"
alvo "minecraft:particles"

alvo "minecraft:clouds"
alvo "minecraft:weather"

Imagem final

Processo de renderização

[editar | editar código-fonte]
Esta seção precisa de expansão.
 
Você pode ajudar expandindo-a.

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_gui está 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_data ou profile

Blocos uniformes padrão

[editar | editar código-fonte]
Usar blocos uniformes fora dos shaders suportados pode funcionar em alguns casos; no entanto, esse é um comportamento indefinido e pode causar resultados inesperados ou travamentos. Consulte a lista de shaders principais para obter mais informações

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) ScreenSize A largura e a altura do framebuffer atual em pixels.
  • (float) GlintAlpha O valor do ajuste de acessibilidade Intensidade do reflexo em um intervalo de 0 a 1.
  • (float) GameTime Um 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) MenuBlurRadius O 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) FogColor Cor da neblina.
  • (float) FogEnvironmentalStart Distância inicial da neblina ambiente.
  • (float) FogEnvironmentalEnd Distância final da neblina ambiente.
  • (float) FogRenderDistanceStart Distância inicial da distância de renderização da neblina.
  • (float) FogRenderDistanceEnd Distância final da distância de renderização da neblina.
  • (float) FogSkyEnd Distância final da neblina para a parte superior do céu.
  • (float) FogCloudsEnd Distância final para neblina das nuvens.
DynamicTransforms
  • (mat4) ModelViewMat A matriz de visualização do modelo.
  • (vec4) ColorModulator Um multiplicador de cores que pode ser definido no código do jogo para modificar a cor final dos objetos.
  • (vec3) ModelOffset O deslocamento do modelo que está sendo renderizado.
  • (mat4) TextureMat Uma 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_Direction Primeira direção da luz. Usada para calcular o sombreamento direcional da entidade.
  • (vec3) Light1_Direction Segunda 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) ProjMat A matriz de projeção
LightmapInfo
  • (float) AmbientLightFactor Quanta luz ambiente deve haver. 0.1 para o Nether, 0.25 para o End, e 0 para a Superfície.
  • (float) SkyFactor Um valor que especifica o quanto o lightmap deve ser iluminado quando o céu pisca, normalmente quando ocorre um relâmpago.
  • (float) BlockFactor Um valor que flutua aleatoriamente, usado no shader padrão para a cintilação da luz de bloco.
  • (float) NightVisionFactor Um valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Visão Noturna deve clarear o lightmap.
  • (float) DarknessScale Um valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Escuridão deve escurecer o lightmap.
  • (float) DarkenWorldFactor Um 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) BrightnessFactor O valor do ajuste gráfico de brilho em um intervalo de 0 a 1.
  • (vec3) SkyLightColor A cor da luz do céu.
  • (vec3) AmbientColor A cor da luz ambiente.
CloudInfo

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) OutSize A largura e a altura do buffer de entrada em pixels.
  • (vec2) InSize A 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]
Na Edição Java 1.21.6, uniformes opacos e soltos foram removidos e substituídos por Blocos uniformes

Uma lista de uniformes fornecidos pelo jogo.

Uniformes de pós-processamento

Uniformes disponíveis para pós-shaders.

  • (vec2) InSize A largura e a altura do buffer de entrada em pixels.
  • (vec2) OutSize A largura e a altura do buffer de saída em pixels.
  • (matrix4x4) ProjMat A matriz de projeção.
  • (vec2) ScreenSize A resolução do framebuffer atual em pixels (largura, altura).
  • (float) GameTime A idade atual do mundo. Este é o resultado de /time query gametime mó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.

Usar uniformes fora dos shaders em que normalmente estão disponíveis pode funcionar em alguns casos. No entanto, esse é um comportamento indefinido e pode causar resultados inesperados ou travamentos.
  • (matrix4x4) ProjMat A matriz de projeção.
  • (matrix4x4) ModelViewMat A matriz de visualização do modelo.
  • (vec2) ScreenSize A resolução do framebuffer atual em pixels (largura, altura).
  • (float) GameTime A idade atual do mundo. Este é o resultado de /time query gametime módulo 24000 e dividido por 24000. Ele aumenta de 0 e atinge 1 aproximadamente 20 minutos depois, retornando a 0.
  • (vec4) ColorModulator Um multiplicador de cores que pode ser definido no código do jogo para modificar a cor final dos objetos.
  • (vec3) Light0_Direction Primeira direção da luz, usada no padrão para calcular a iluminação da entidade.
  • (vec3) Light1_Direction Segunda direção da luz, usada no padrão para calcular a iluminação da entidade.
  • (float) FogStart A distância da câmera em que a neblina começa a ser aplicada.
  • (float) FogEnd A distância da câmera em que a neblina é totalmente aplicada. Objetos mais distantes que essa distância normalmente ficam ocultos pela neblina.
  • (vec4) FogColor A cor da neblina.
  • (vec3) ModelOffset O 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) GlintAlpha Contém o valor da configuração de acessibilidade da intensidade do reflexo em um intervalo de 0 a 1.
  • (matrix4x4) TextureMat 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 A largura da linha.
  • (float) AmbientLightFactor A quantidade de luz ambiente que deve haver. 0,1 para o Nether e 0 para o End e a Superfície.
  • (float) SkyFactor Um valor que especifica o quanto o mapa de luz deve ser clareado quando o céu pisca, normalmente quando ocorre um raio.
  • (float) BlockFactor Um valor que flutua aleatoriamente, usado no shader padrão para a cintilação da luz de bloco.
  • (int) UseBrightLightmap Um 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) SkyLightColor A cor da luz do céu.
  • (float) NightVisionFactor Um 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) DarknessScale Um valor em um intervalo de 0 a 1 que especifica o quanto o efeito de Escuridão deve escurecer o lightmap.
  • (float) DarkenWorldFactor Um 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) BrightnessFactor O valor do ajuste gráfico de brilho em um intervalo de 0 a 1.

Edição Bedrock

[editar | editar código-fonte]
Esta seção precisa de expansão.
 
Você pode ajudar expandindo-a.

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.

Edição Java
1.7.213w38aOs shaders foram adicionados para o Super Secret Settings.
1.814w05aOs 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.
14w05bOs 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]
14w06aO shader de pós-efeito entity_outline foi adicionado.
1.915w31aO botão Super Secret Settings foi removido para uma reescrita interna.[2]
1.1620w22aO shader de pós-efeito transparency foi adicionado para o modo gráfico Fabuloso!.
1.1721w10aOs 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.1922w12aAgora há arquivos de shader para renderização de entidades translúcidas.
1.20.524w05aO 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.
24w09aA textura de terra do fundo do menu foi substituída por um shader de desfoque de pós-processamento.
24w11aTodos os shaders de pós-processamento não utilizados que foram usados para Super Secret Settings foram removidos.
1.21.224w34aAs 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.525w06aUm novo shader principal foi adicionado, rendertype_world_border, que é usado para renderizar a barreira do mundo
25w07aOs 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.
25w10aOs 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.625w16aTodos 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.
25w17aDois 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.
25w19aO 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.925w31aOs 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.
25w33aNo 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.
25w35aO 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.
25w36aOs 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.
25w37aO 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.1125w41aUm 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.
  1. Uma coleção de shaders que são executados em conjunto.
[editar | editar código-fonte]
Esta página já foi uma tarefa pendente na wiki e foi completamente revisada pela última vez em julho de 2025
Atribuído a: MeiaQuatru (discussão)