FN Server - F4 BMS 4.38

Servidor TS

Discord Server

Welcome to =FN=. Please login or sign up.

BMS 4.38: DLL que remove as árvores e melhora o FPS (VR e monitor)

Iniciado por =FN=Killer, Hoje às 02:22:36 PM

tópico anterior - próximo tópico

=FN=Killer

Quem sofre com FPS no BMS 4.38, principalmente em VR, provavelmente está pagando por árvores. Fiz uma DLL que corta a vegetação na hora de desenhar, sem mexer em nenhum arquivo do BMS. Testei aqui (Quest 2 + RX 9070).



Por que as árvores pesam tanto

Capturei e analisei um frame do BMS, shader por shader:

  • 97,7% da geometria do frame são árvores. O terreno da Coreia é ~1%.
  • São ~24 milhões de billboards por frame (12 milhões por olho em VR), em 78 draw calls por olho.
  • O BMS só descarta as árvores distantes dentro do shader, depois de já ter processado todas. O custo é pago até pelas que você não vê. É por isso que o FPS sobe quando você voa sobre o mar.
  • Elas também são a fonte do shimmer: billboards minúsculos com alpha-test, que o MSAA não resolve. Piora em encostas com neve.

E o BMS não tem opção para isso: o g_bNewTerrainRenderTrees foi removido no beta, e o gTreesDistanceFactor só esmaece as árvores, não tira a geometria. Editar os arquivos de terreno quebra o multiplayer.

O que a DLL faz

É um d3d11.dll que fica entre o BMS e o Direct3D. Ele reconhece o shader das árvores e encurta essas draw calls antes de chegarem na GPU. Não altera nenhum arquivo do BMS e não grava nada no disco.

Medido em VR (resolução 1.5 + MSAA 2x, mesma missão). Quanto do tempo o jogo ficou preso em 30 fps, conforme a quantidade de árvores mantida:

  • 60% das árvores → 19,3% dos frames em 30 fps
  • 25% das árvores → 14,4%
  • 10% das árvores → 9,6%
  • 0% das árvores → 7,3%

Em VR o FPS anda em degraus (90, 45, 30), então o que importa é quanto tempo você passa no degrau ruim, não a média.



Instalação

Download: https://www.falcoesdanoite.com.br/tools/bmstune.zip

  • Feche o BMS.
  • Copie d3d11.dll e bmstune.ini para a pasta Bin\x64 do BMS, a mesma onde está o Falcon BMS.exe. Exemplo: C:\Falcon BMS 4.38\Bin\x64
  • Abra o BMS.

Não precisa instalar mais nada. Funciona com AMD ou NVIDIA, em VR ou no monitor.

Se já existir um d3d11.dll nessa pasta (de outra ferramenta), renomeie o existente para bmstune_d3d11.dll antes de copiar. A DLL carrega ele em cadeia.

Configuração

O padrão remove todas as árvores. Para trazer parte de volta, abra o bmstune.ini no Bloco de Notas e mude o valor de keepPercent:

  • keepPercent=0 → sem árvores (padrão)
  • keepPercent=25 → um quarto das árvores
  • keepPercent=100 → igual ao BMS original
Reinicie o BMS para aplicar. Com enabled=0 a DLL desliga sem precisar desinstalar.

Valores intermediários afinam a vegetação por igual em todo lugar. Não é um corte por distância.

Desinstalar

Apague d3d11.dll e bmstune.ini do Bin\x64. Se o BMS não abrir por qualquer motivo, apagar o d3d11.dll resolve.

=FN=Killer

Algumas configs que ajudam ganhar FPS extras. Basta adicionar no arquivo User\Config\Falcon BMS User.cfg

// VR
set g_bVRParallelRenderThread 1    // 1 = throughput, 0 = lower latency

// Vegetation besides trees
set g_bNewTerrainRenderShrubs 0    // 8.2 M indices per frame; its draws drop to zero when off
set g_bNewTerrainRenderGrass 0    // never seen running in my flights, off anyway

// Shadows: measured at only 0.71 ms per frame, so turn it on if you want shadows
set g_bShadowMapping 0
set g_bShadowOnSmoke 0            // reported by the community as very expensive

// Environment cubemaps: ~10% of GPU time for under 1% of the geometry
set g_nPrefilterENVSampling 64    // default 256. One pass went from 3.6 ms to 1.3 ms
set g_bRenderNewTerrainToENVMap 0
set g_bRenderNewTreesToENVMap 0
set g_bEnvMapRenderObjects 0
set g_bEnvMapRenderClouds 0
set g_bEnvMapRenderFocusObject 0

// Effects (cost not measured)
set g_bHdrLighting 0
set g_bUseHeatHazeShader 0
set g_bReducePSFires 1

// Texture filtering: helps terrain textures, not the tree shimmer
set g_nAnisotropicValue 16        // needs anisotropic ON in the BMS setup UI
set g_bAlwaysAnisotropic 1