Os efeitos HLSL para Windows¶
Por predefinição, o MAME gera um sinal de vídeo puro, assim como seria também no hardware original do arcade até o sinal chegar aos circuitos que levam ao monitor CRT do arcade, com pequenas modificações na saída (em geral, esticar a imagem do jogo de volta à proporção que se teria num monitor CRT, geralmente na proporção 4:3), no geral isso funciona bem, mas perde-se um pouco do fator nostalgia. Os monitores de arcade, ainda que em perfeitas condições, nunca foram ideais pois devido a sua natureza o monitor CRT distorciam a imagem original de maneira a distorcerem significativamente a sua aparência final na tela.
Os monitores CRT dos arcades são uma experiência única na maneira que a imagem é formada e apresentada na tela, imagem essa que os monitores de LCD e até mesmo monitores CRT não possuem.
É aí então que o hlsl entra em cena.
O filtro hlsl simula a maioria dos efeitos de vídeo que um monitor CRT de arcade teria, fazendo com que o resultado visual seja muito mais realista. Porém, os filtros hlsl exigem um esforço extra dos recursos do seu computador e em especial do monitor que você estiver usando. Além disso, havia centenas de milhares de tipos monitores diferentes nos fliperamas. Cada um foi ajustado e mantido de forma diferente, o que significa que, não tem como escolher e definir entre todos eles, apenas um como referência. Diretrizes básicas serão fornecidas aqui para ajudá-lo, mas você também poderá pedir mais opiniões em qualquer um dos fóruns conhecidos sobre o MAME espalhados pela internet.
Resolução e relação de aspecto da tela¶
A resolução é um assunto muito importante para as configurações do hlsl. Você desejará que o MAME esteja usando a resolução nativa do seu monitor para evitar distorções e atrasos adicionais criados pelo seu monitor ao tentar preencher a imagem na tela.
Enquanto a maioria dos sistemas de arcade usava um monitor com proporção de tela no formato 4:3 (ou 3:4 se o monitor estivesse orientado verticalmente como é no caso do Pac Man), a essa altura do campeonato é difícil encontrar nos dias de hoje um monitor ou TV que tenha uma proporção de tela no formato 4:3.
A boa notícia é que esse espaço extra que sobra nas laterais não é desperdiçado. Muitos gabinetes de arcade na época utilizavam uma moldura com ilustrações ao redor da tela, caso você tenha esses arquivos o MAME também irá exibir essas ilustrações na tela. Para se obter um melhor resultado, ative o visualizador de ilustrações e selecione o modo recortado [1].
Alguns monitores de LCD mais antigos usavam uma resolução nativa de 1280x1024 onde tinham uma proporção de tela no formato 5:4. Neste exemplo, não há muito espaço extra suficiente para exibir a ilustração e você vai notar um leve esticamento vertical, porém os resultados ainda serão bons o suficiente, como se fossem um monitor com formato 4:3.
Introdução ao HLSL¶
Antes de começar, você precisará seguir as instruções de configuração inicial do MAME encontrada em outra parte deste manual. As distribuições oficiais do MAME já incluem o hlsl, então você não precisa baixar nenhum outro arquivo adicional.
Abra o seu mame.ini
no seu editor de texto preferido como o bloco de
notas por exemplo e verifique se as seguintes opções estão definidas
corretamente:
video d3d
filter 0
O primeiro é necessário porque hlsl requer suporte do Direct3D. O último desliga filtro extras que possam interferir com a saída hlsl.
Por último, uma edição a mais para ativar o hlsl:
hlsl_enable 1
Salve o arquivo .ini
e você está pronto para começar.
Nota
Caso tenha problemas com o d3d
(o efeito não funciona por
exemplo), consulte o capítulo Usando o HLSL no Windows 8/10/11 sem precisar instalar o DirectX 9.
Várias predefinições foram incluídas na pasta ini
junto com o MAME,
permitindo um bom ponto de partida para as configurações iniciais de
tela para os consoles Nintendo Game Boy, Nintendo Game Boy
Advance, Rasterizado e Vetorizado.
Customizando as configurações HLSL dentro MAME¶
Por vários motivos complicados de explicar, as configurações hlsl não são mais salvas quando você sai do MAME. Isso significa que apesar das configurações exigirem um pouco mais de trabalho de sua parte, os resultados sempre sairão conforme esperado.
Comece rodando o MAME com o jogo de sua preferência como por exemplo mame pacman.
Use a tecla til (~) [2] para chamar a tela de opções que vai aparecer na parte de baixo da tela. Use as teclas cima e baixo para navegar dentre as várias opções, enquanto as teclas esquerda e direita irão permitir que você altere o valor dessas opções. Os resultados aparecerão em tempo real conforme elas forem sendo alteradas.
Depois de encontrar as configurações desejadas, anote os números num bloco de notas e saia do MAME.
Alterando as configurações¶
Como descrito em Diversos arquivos de configuração, o MAME segue uma sequência
na hora de processar os arquivos .ini
. As configurações hlsl podem
ser editadas diretamente no arquivo mame.ini
, porém para tirar melhor
proveito do poder dos arquivos de configuração do MAME, talvez seja
melhor copiar as opções do hlsl do mame.ini
para um outro arquivo de
configuração e fazer as modificações lá.
Por exemplo, uma vez que você encontrou configurações de hlsl que acha
que são apropriadas para os jogos de Neo-Geo, você pode colocar essas
configurações num arquivo neogeo.ini
para que todos os jogos de Neo-Geo
usem essas configurações sem que você tenha que adicioná-las manualmente
uma a uma em diferentes arquivos .ini
como o nome do jogo.
Alterando as configurações¶
hlslpath
Seus arquivos de sombreamento hlsl são armazenados aqui. Por definição o nome desta pasta é hlsl fica na pasta raiz do MAME.
hlsl_snap_width
Define a largura que as capturas de tela hlsl terão (Alt+F12).
hlsl_snap_height
Define a altura que as capturas de tela hlsl terão (Alt+F12).
shadow_mask_alpha
Define a intensidade que o efeito de sombra da máscara terá. O intervalo aceitável vai de 0 a 1, onde 0 não exibe nenhum efeito de sombra da máscara, 1 a mascara será completamente opaca e 0.5 será 50% transparente.
shadow_mask_tile_mode (Máscara de Sombra em Modo Ladrilhado)
Define se a máscara de sombra deve ser lado a lado com base na resolução de tela do seu monitor ou com base na resolução de origem do sistema emulado. Os valores válidos são entre 0 para modo de tela Screen e 1 para modo de origem Source.
shadow_mask_texture shadow_mask_x_count (Quantidade X de Pixels Máscara de Sombra) shadow_mask_y_count (Quantidade Y de Pixels Máscara de Sombra) shadow_mask_usize (Tamanho U da Máscara de Sombra) shadow_mask_vsize (Tamanho V da Máscara de Sombra) shadow_mask_x_count (Deslocamento U da Máscara de Sombra) shadow_mask_y_count (Deslocamento V da Máscara de Sombra)Essas configurações devem estar em harmonia entre si. As regras shadow_mask_texture em particular, definem as regras de como você deve configurar as outras opções.
shadow_mask_texture
Configura a textura do efeito de máscara de sombra. O MAME vem com três máscaras de sombra:
aperture-grille.png
shadow-mask.png
slot-mask.png
shadow_mask_usize e shadow_mask_vsize
definem o tamanho a ser usado pela textura do efeito shadow_mask_texture em valores de porcentagem, começando pelo canto superior esquerdo.
Isso significa que, para uma textura com o tamanho real com pixels de 24x24 e um tamanho de u/v com 0.5,0.5, serão usados 12x12 pixels no canto superior esquerdo.
Lembre-se de definir um tamanho de u/v que possibilite organizar a textura lado a lado sem lacunas ou falhas. 0.5,0.5 é bom para qualquer uma das textura de máscara de sombra que estão inclusas no MAME.
shadow_mask_x_count e shadow_mask_y_count
Definem quantos pixels devem ser usados na tela para exibir o tamanho u/v da textura. Caso use o exemplo acima e configurar a quantidade textura x/y numa proporção de 12,12 pixels, ela será exibida com uma proporção 1:1 na tela.
Caso defina a quantidade da textura x/y em proporção 24,24 ela será exibida duas vezes maior.
Exemplos de configuração para
shadow_mask.png
:shadow_mask_texture shadow-mask.png shadow_mask_x_count 12 shadow_mask_y_count 6 ou 12 shadow_mask_usize 0.5 shadow_mask_vsize 0.5Exemplos de configuração para
slot-mask.png
:shadow_mask_texture slot-mask.png shadow_mask_x_count 12 shadow_mask_y_count 8 ou 16 shadow_mask_usize 0.5 shadow_mask_vsize 0.5Exemplos de configuração para
aperture-grille
:shadow_mask_texture aperture-grille.png shadow_mask_x_count 12 shadow_mask_y_count 12 ou outro qualquer shadow_mask_usize 0.5 shadow_mask_vsize 0.5
shadow_mask_uoffset e shadow_mask_voffset
Podem ser usados para customizar o alcance do alinhamento final da máscara de sombreamento a nível de subpixel. O intervalo aceitável vai de -1.00 até 1.00, onde 0.5 move a máscara de sombreamento em 50% com relação ao tamanho u/v da textura.
distortion
Define a intensidade da distorção quadrática da imagem na tela.
cubic_distortion
Define a intensidade da distorção cúbica da imagem na tela.
Os fatores de distorção em ambos podem ser negativos para que um seja compensado pelo outro, por exemplo, distortion 0.5 e cubic_distortion -0.5.
distort_corner
Define a intensidade de distorção dos cantos da tela, o que não afeta a distorção da imagem na tela em si.
round_corner
Define a intensidade de arredondamento dos cantos da tela.
smooth_border
Define a intensidade de suavização e desfoque das bordas da tela.
reflection (Intensidade de Reflexo)
Se configurado com um valor acima de 0, cria um efeito de um reflexo em formato de mancha esbranquiçada na tela. É predefinido que a mancha seja colocada no canto superior direito da tela.
Editando o arquivo
POST.FX
na seção GetSpotAddend, você poderá alterar essa posição.Os valores entre 0.00 até 1.00 ajustam a intensidade do efeito.
vignetting
Se configurado com um valor acima de 0, incrementa o efeito vinheta nos cantos da tela com um pseudo efeito 3D.
Os valores entre 0.00 até 1.00 ajustam a intensidade do efeito.
scanline_alpha
Determina a intensidade do efeito de linhas de escaneamento dos monitores CRT na tela. O intervalo aceitável fica entre 0 e 1, onde 0 não exibe nenhum efeito, 1 seria uma linha de escaneamento totalmente preta e 0.5 exibe 50% de transparência.
Observe que na tela dos monitores arcade as linhas de escaneamento não são completamente pretas.
scanline_size
Define o espaçamento total das linhas de escaneamento da tela. Se configurado como 1, mostra uma consistente alternância de espaço entre as linhas da tela e as linhas de escaneamento.
scanline_height
Define o tamanho total de cada linha individual de escaneamento. Se configurando com um valor menor que 1, faz com que as linhas fiquem mais finas, maiores que 1 as deixam mais grossas.
scanline_variation
Define a variação do tamanho de cada linha de escaneamento, dependendo do seu brilho. As linhas de escaneamento mais claras ficarão mais finas em comparação com as mais escuras.
Os valores ficam entre 0 e 2.0, onde o valor predefinido é 1.0. Se definido como 0.0, todas as linhas de escaneamento ficam com o mesmo tamanho, independente do seu brilho.
scanline_bright_scale
Define a escala de brilho que a linha de escaneamento terá.
Valores maiores que 1 faz com que elas fiquem mais clara, valores menores as deixam mais escuras. Se definido como 0, faz desaparecer todas as linhas de escaneamento.
scanline_bright_offset
Define o deslocamento do brilho/saturação das linhas de escaneamento, suavizando e deixando mais lisa a parte de cima e de baixo de cada linha de escaneamento.
scanline_jitter
Define a intensidade de oscilação ou tremulação das linhas de escaneamento na tela do monitor.
Alerta: Valores muitos altos podem irritar seus olhos.
hum_bar_alpha
Define a intensidade do efeito de interferência vertical.
defocus
Define a intensidade de desfoque na tela borrando os pixels individualmente como as bordas de um monitor velho. Especifique com valores X,Y (defocus 1,1 por exemplo).
Os valores abaixo ajustam a convergência dos canais vermelho, verde e azul para uma determinada direção simulando um monitor velho, muitos monitores mal cuidados tem uma péssima convergência causando um efeito fantasma devido ao vazamento de cores que ficam fora do eixo do sprite.
converge_x (Convergência Linear X, RGB)
converge_y (Convergência Linear Y, RGB)
radial_converge_x (Convergência Radial X, RGB)
radial_converge_y (Convergência Radial Y, RGB)
Os valores abaixo definem a matriz 3x3 que será multiplicado junto com os sinais RGB para simular a proporção de interferência em cada canal de cor.
Por exemplo, o sinal verde com (0.100, 1.000, 0.250) é 10% mais fraco que o sinal vermelho e 25% mais forte no sinal azul.
red_ratio (Proporção de sinal RGB Vermelho)
grn_ratio (Proporção de sinal RGB Verde)
blu_ratio (Proporção de sinal RGB Azul)
offset
Fortalece ou enfraquece a intensidade do deslocamento do sinal em uma determinada cor. Por exemplo, o sinal vermelho com um valor 0.5 com um desvio/deslocamento de 0.2 será intensificado para 0.7.
scale
Aplica uma escala ao valor da cor do sinal atual. Por exemplo, o sinal vermelho com um valor de 0.5 com uma escala 1.1, resultará num sinal de vermelho com 0.55
power
Define um valor expoente da cor do sinal atual, também conhecido como gama. O gama é o valor relativo entre o claro e o escuro de uma imagem. Por exemplo, o sinal vermelho com um valor de 0.5 e com power valor 2 no vermelho, resulta um sinal de vermelho com 0.25.
Em jogos com vetores, essa configuração também pode ser usada para ajudar a espessura dessas linhas.
floor
Define o valor do piso do sinal RGB, é o valor mínimo absoluto para um sinal de cor. Por exemplo, o sinal vermelho com um valor de 0.0 (ausência total do sinal vermelho) com o sinal vermelho com piso de 0.2, resulta num sinal vermelho com valor 0.2.
Normalmente usado em conjunto com a ilustração ativada para fazer a tela ter um brilho da trama mais fraca.
phosphor_life
Define o tempo de vida útil do fósforo das telas CRT, dando um efeito de envelhecimento na cor do sinal e de fantasma na tela.
O valor 0 não produz nenhum efeito fantasma, enquanto o valor 1 deixa um rastro para trás que só volta a ser alterado por sinal de cor de maior valor.
Isso também afeta bastante os jogos vetoriais.
saturation
Define a intensidade de saturação de cor.
bloom_blend_mode
Define a intensidade da mistura do efeito lume [3]. Os valores ficam entre 0 para um efeito mais Claro e 1 para um tipo mais Escuro, essa última só é útil com monitores do tipo STN LCD.
bloom_scale
Determina a escala da intensidade do efeito lume. Os monitores CRT dos arcades tem uma tendência a ter esse efeito naturalmente, onde as cores mais claras se misturam com os pixels que ficam ao redor. Este efeito utiliza mais recursos da sua placa de vídeo, deixe em 0 para desabilitar e economizar recursos de processamento da sua GPU.
bloom_overdrive
Determina o nível de saturação do branco do efeito lume, os valores RGB são separados por vírgula. Muito útil em jogos com tramas coloridas, LCD colorido ou jogos vetorizados coloridos.
bloom_lvl0_weight (Escala do Nível do Bloom 0)
bloom_lvl1_weight (Escala do Nível do Bloom 1)
. . . .
bloom_lvl7_weight (Escala do Nível do Bloom 7)
bloom_lvl8_weight (Escala do Nível do Bloom 8)
Define o nível de intensidade do efeito lume. Os valores ficam entre 0.00 até 1.00. Se for usado da maneira correta em conjunto com o phosphor_life o efeito de brilho/fantasma enquanto os objetos se movem na tela será aprimorado.
hlsl_write
Defina como 1 para habilitar a gravação dos efeitos hlsl junto com a gravação do vídeo.
O valor predefinido é desligado ou 0.
Estes são as predefinições sugeridos para os jogos rasterizados:
bloom_lvl0_weight 1.00
bloom_lvl1_weight 0.64
bloom_lvl2_weight 0.32
bloom_lvl3_weight 0.16
bloom_lvl4_weight 0.08
bloom_lvl5_weight 0.06
bloom_lvl6_weight 0.04
bloom_lvl7_weight 0.02
bloom_lvl8_weight 0.01
|
Peso 0 do Nível Bloom
Peso 1 do Nível Bloom
Peso 2 do Nível Bloom
Peso 3 do Nível Bloom
Peso 4 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
|
Tamanho Máximo.
1/4 menor que o nível 0
1/4 menor que o nível 1
1/4 menor que o nível 2
1/4 menor que o nível 3
1/4 menor que o nível 4
1/4 menor que o nível 5
1/4 menor que o nível 6
1/4 menor que o nível 7
|
Jogos vetorizados¶
Os efeitos HLSL também podem ser usados com jogos vetorizados. Devido a
uma grande variedade de opções para a configuração individual de jogos
vetoriais, é altamente recomendável que você os adicione em arquivos INI
individuais jogo a jogo (tempest.ini
por exemplo).
As máscaras de sombreamento só estão disponíveis em jogos vetoriais e não devem ser usados em jogos vetoriais monocromáticos. Além disso, os jogos de vetoriais não usavam linhas de varredura, de modo que também devem ser desativados.
Abra o seu arquivo .ini
no seu editor de texto preferido (o Bloco de
notas por exemplo) e verifique se as seguintes opções estão configuradas
corretamente:
video d3d
filter 0
hlsl_enable 1
Nas Opções Principais de Vetores:
beam_width_min 1.0 (Feixe Com o Máximo de)
beam_width_max 1.0 (Feixe Com o Mínimo de)
beam_intensity_weight 0.0 (Altura da Intensidade do Feixe)
flicker 0.0 (Vector Flicker)
Na Seção das Opções de Pós Processamento de Vetores:
vector_beam_smooth 0.0 (Intensidade de Suavização do Feixe do Vetor)
vector_length_scale 0.5 (Atenuação Máxima do Vetor)
vector_length_ratio 0.5 (Extensão Mínima de Atenuação do Vetor)
Valores sugeridos para jogos vetoriais:
bloom_scale o valor dever ser maior em jogos vetoriais do que os jogos rasterizados. Para obter um melhor efeito, tente valores entre 0.4 e 1.0.
bloom_overdrive só deve ser usado em com jogos vetoriais coloridos.
bloom_lvl_weights deve ser configurado como mostrado abaixo:
bloom_lvl0_weight 1.00
bloom_lvl1_weight 0.48
bloom_lvl2_weight 0.32
bloom_lvl3_weight 0.24
bloom_lvl4_weight 0.16
bloom_lvl5_weight 0.24
bloom_lvl6_weight 0.32
bloom_lvl7_weight 0.48
bloom_lvl8_weight 0.64
|
Peso 0 do Nível Bloom
Peso 1 do Nível Bloom
Peso 2 do Nível Bloom
Peso 3 do Nível Bloom
Peso 4 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
Peso 1 do Nível Bloom
|
Tamanho Máximo.
1/4 menor que o nível 0
1/4 menor que o nível 1
1/4 menor que o nível 2
1/4 menor que o nível 3
1/4 menor que o nível 4
1/4 menor que o nível 5
1/4 menor que o nível 6
1/4 menor que o nível 7
|