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 tantoCapturei 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çãoDownload: 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çãoO 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.
DesinstalarApague
d3d11.dll e
bmstune.ini do
Bin\x64. Se o BMS não abrir por qualquer motivo, apagar o d3d11.dll resolve.
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