```
____ ____ ____ _____ ____ ______ ______
/ __ \ / __ ) / __ \ ____ ____ ____ ___ |__ / / __ ) / ____// ____/
/ /_/ // __ |/ / / // __ \ / __ \ / __ `__ \ /_ < / __ |/ /_ / / __
/ _, _// /_/ // /_/ // /_/ // /_/ // / / / / /___/ // /_/ // __/ / /_/ /
/_/ |_|/_____//_____/ \____/ \____//_/ /_/ /_//____//_____//_/ \____/
_______________________________________________________________________
```
RBDOOM-3-BFG Release Notes - https://github.com/RobertBeckebans/RBDOOM-3-BFG
Thank you for downloading RBDOOM-3-BFG.
_______________________________________
TBD - RBDOOM-3-BFG 1.6.0
_______________________________
# RBDOOM-3-BFG 1.6.0 adds Retro Rendering Support and Better Modding Support
## Retro Rendering
Experience the nostalgia of the 8-bit and 16-bit eras with the Retro Rendering Modes, including the Commodore 64, Amstrad CPC 6128, Sega Genesis/Megadrive and Sony PSX styles.
Immerse yourself in the authentic Commodore 64 mode, faithfully replicating the original 16-color palette. Step into the vibrant world of Sega Genesis, with its impressive 512-color range thanks to 3-bit per channel technology. And for those seeking a true PlayStation experience, the PSX mode brings back unfiltered textures and adds a captivating screen space dithering effect.
The retro rendering modes transport you back to the golden age of gaming, with a resolution that mimics the beloved 320x240 display, now extended to a widescreen 480x270 format. To enhance the arcade feel, two new CRT filters are included that overlay the entire game, including Doom 1 & 2.
To access these retro rendering modes, simply navigate to the menu options and select your desired mode. Alternatively, you can control the rendering mode by modifying the `r_renderMode` variable. The available values for `r_renderMode` are as follows: Default (0) for Doom 3, Commodore 64 (1), Commodore 64 Highres (2), Amstrad CPC (3), Amstrad CPC Highres (4), Sega Genesis (5), Sega Genesis Highres (6) and Sony PSX (7).
## Better Ingame Light Editor
The Light editor has undergone a complete revision, bringing you an enhanced and intuitive editing experience. With the new and improved Light editor, you can effortlessly modify and fine-tune your lighting setups.
To access the Light editor, simply use the `editLights` command in the console or bind it to a convenient key, such as F1. Once opened, the Light editor can be docked into different screen areas, allowing you to customize your workspace to suit your preferences.
The Light editor features a range of powerful gizmos that enable you to easily manipulate lights in your scene. Whether you need to translate, rotate, or scale lights, the gizmos provide precise control over every aspect of your lighting setup. Additionally, you can edit light transforms directly, giving you even more flexibility and control.
To ensure accuracy and precision, the Light editor includes snapping functionality. By default, the grid snapping is set to 4 units, angle snapping to 15 degrees, and scale snapping to 10%. This allows you to align lights perfectly and achieve the desired look and feel for your scene.
To streamline your workflow, the Light editor also provides a set of convenient keyboard shortcuts. These shortcuts allow you to perform common actions quickly and efficiently, saving you valuable time and effort.
```
G: Change to the translation gizmo
R: Change to rotation gizmo
Alt + R: Reset the current rotation
S: Change to scaling gizmo
Ctrl + S - Save all changed lights
Ctrl + D - Duplicate the current light
```
[](https://www.youtube.com/watch?v=vmuJ7f3FSio)
## Better TrenchBroomBFG Support
TrenchBroomBFG has some exciting updates! Now, you can toggle the visibility of patches, giving you more control over your designs. Additionally, models can be scaled using the modelscale/modelscale_vec keys in TrenchBroom. We've also introduced linked group instances, making it easier to create complex structures. And if you've had issues with leaking when using the `convertMapToValve220` command, those problems have been fixed.
Light entities with models are automatically grouped into new light groups and the models are moved to new func_static entities when using the `convertMapToValve220` console command. This workaround allows you to work with TrenchBroom's clean architecture where point entities cannot have optional brushes or patches.
Upgrade your mapping experience with TrenchBroomBFG!
## Standalone BSP Compiler
Some people requested a separate oldschool map compiler so they don't have to open the engine every time they compile a map. Now you can just hit a button in TrenchBroomBFG using this sample configuration:
rbdmap.exe is not only dmap but also provides the collision manager and AAS builder (runAAS cmd).
So like in the embedded dmap cmd the .cm files and .aas files are also automatically built.
rbdmap.exe uses Imtui with pdcurses on Windows to have features a like progress bar and just the old terminal output on Linux.
Also, there is a `significant improvement in dmap speed` by reducing the number of prints to a level similar to q3map.
For example, Mars City 1 now compiles in 15 seconds instead of 88 seconds on the developer machine.
## Improved Modding Support
The virtual filesystem has been revised, bringing back .pk4 support and changing the file lookup order in .resources paks to match previous id Tech engines.
It should help modders to organize the content as the filesystem has been slightly changed so paks in mod folders are ensured to have a higher priority regardless of multimod filename clashes. So there is no need to name your pak files zzzWhatever.resources.
E.g. a Multimod setup:
```
RBDoom3BFG.exe +set fs_game mod_E3_Alpha_Weapons +set fs_game_base mod_D3HDP_Lite
```
mod_D3HDP_Lite is the base mod and mod_E3_Alpha_Weapons is a submod that extends it even further.
The path command shows the priority how a file is being looked up in the virtual filesystem.
Higher is better.
```
Current search path:
C:\Users\rober\Saved Games\id Software\RBDOOM 3 BFG/mod_E3_Alpha_Weapons
C:\Projects\RBDOOM-3-BFG/mod_E3_Alpha_Weapons
C:\Projects\RBDOOM-3-BFG/mod_E3_Alpha_Weapons/zzz_E3_Alpha_Weapons.resources (41 files)
C:\Users\rober\Saved Games\id Software\RBDOOM 3 BFG/mod_D3HDP_Lite
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite06.resources (1641 files)
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite05.resources (3173 files)
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite04.resources (1683 files)
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite03.resources (1047 files)
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite02.resources (777 files)
C:\Projects\RBDOOM-3-BFG/mod_D3HDP_Lite/zzzD3HDPBFGLite01.resources (524 files)
C:\Users\rober\Saved Games\id Software\RBDOOM 3 BFG/base
C:\Projects\RBDOOM-3-BFG/base
C:\Projects\RBDOOM-3-BFG/base/maps/site3.resources (1725 files)
...
C:\Projects\RBDOOM-3-BFG/base/maps/admin.resources (2148 files)
C:\Projects\RBDOOM-3-BFG/base/_sound_pc_gr.resources (830 files)
C:\Projects\RBDOOM-3-BFG/base/_sound_pc_en.resources (840 files)
C:\Projects\RBDOOM-3-BFG/base/_sound_pc.resources (4759 files)
C:\Projects\RBDOOM-3-BFG/base/_ordered.resources (1336 files)
C:\Projects\RBDOOM-3-BFG/base/_common.resources (2262 files)
```
zzz_E3_Alpha_Weapons.resources has a higher priority now regardless of how the other paks are named.
## Miscellaneous Changes & Bugfixes
Steven Pridham has resolved the fullscreen FX effects, enhancing the game's visuals.
A classic flashlight option has been added for a nostalgic gameplay experience.
Private matches now function flawlessly, with ongoing efforts to fix the online game browser and leaderboards.
Steven Saunders, has addressed many Linux/macOS related compiler warnings and improved the renderer. The renderer now supports the Optick profiler using the Vulkan backend.
Optick has been enhanced for macOS and Vulkan users.
NVRHI has been updated to the latest version, and a new tool called ShaderMake by Nvidia has been integrated.
Blender users can seamlessly integrate Blender lights into their glTF workflow.
VRAM memory usage can be monitored by setting com_showFPS to a value greater than 2.
A critical issue with recursive texture loading during the loading screen has been fixed, resulting in improved performance and optimized texture management.
The bug causing the game to crash when triggering the bathroom mirror horror effect in Vulkan has been resolved.
Changelog:
* Allow skipping intro videos with Escape or Xbox controller Menu button
* Fixed VRAM memory leak when reloading maps
* Added cvar binaryLoadGuis so mods can override .gui files
* Extended listCvars with -new option to show all RBDoom related cvars
* Added new loading screen progressbar when loading textures
* Fixed a couple of bugs regarding Flash JSON reimport
* Show binarization indicator for 2D packed mipchain EXR files
* Updated tools/bfgpakexplorer to version 1.0.5 (thanks to George Kalampokis)
* Fixed PBR _rmao lookup hack on the wrong textures
* Added classic flashlight from Doom BFA (single player only)
* Replaced flashlight shadows option with classic flashlight
* Added detection for Doom 2004/2019 .pk4 files or .resources
* Added missing script event so we can boot vanilla Doom 3
* Added back .pk4 support but only for paks without a dll inside
* Changed file lookup order in .resources paks like in previous id Tech engines
* Added rbdmap -nogui option because pdcurses does not work with TrenchBroom
* Drastic dmap speed boost by reducing prints like in q3map
* Replaced JPG/PNG code with stb_image snippets from dhewm3
* Allow static glTF2 models to be inlined in dmap and kicked unused Collada DAE support
* Allow scalable models like in Quake 3 using modelscale/modelscale_vec keys in TrenchBroom
* Support linked group instances by TrenchBroom
* Restored internal envprobe fallback if map has no envprobes
* Bumped savegame version for idLight::modelTarget
* Split lights with brushes/patches into light groups for TrenchBroom
* Fixed leaking problems when converting a map to the Valve 220 format
* New makeMaterials `` cmd that generates a .mtr file based on PBR naming conventions
* extractResourceFile copysound automatically converts .idwav files to .wav files in the ADPCM format
* Added options "all" and "copysound" to extractResourceFile cmd
* Save .bcanim files under generated/cameraanim/. close #866
* Reduced Spam and crashes when r_useValidationLayers 2 was enabled (Thanks to Stephen Saunders)
* Fixed crash with Vulkan when using the colorProcess shader (bathroom mirror horror effect)
* Read Blender lights directly through the KHR_lights_punctual glTF extension
* Don't let VR options of other VR builds to break rendering of the non-VR master
* Fix testVideo to check for viewDef->viewEntitys (i.e. 3D/2D) not console state
* When playing testVideos, skip sRGB to linear conversion only when console active (i.e. 2D)
* Check for valid allocations before freeing Bink Decoder bundles
* Renamed DX12/Vulkan specific cvars with a r_vk/r_dx prefix
* Set r_maxFrameLatency max value constraint to NUM_FRAME_DATA
* Change r_maxFrameLatency cvar name and set to default value of 2 frames
* Implement m_frameLatencyWaitableObject sync for reduced DX12 frame latency
* Extend Optick to support data tags on custom storage events
* Added CMake -DRETAIL option for shipping builds on Github/ModDB
* Skip startup if not compiled with Doom Classic support, closes #874
* Killed hard to maintain renderdemo code
* Fix for cinematic audio when playing Bink video files with ffmpeg decoder, improve ffmpeg a/v resync
* Show VRAM memory usage with com_showFPS > 2 in separate line
* Correct some uint64 types and add Optick frame tag for DX12 / Vulkan Present()
* Optick: Eliminate need for blocking sleep wait at start of Vulkan clock sync
* Optick: Remove blocking sleep wait at start of Vulkan clock synchronization
* Complete Optick instrumentation and align with HUD GPU timers
* Fixes regression Multiplayer: Accessing memory after it has been freed #846 caused by an earlier, but broken memory leak fix on my part. The fix is almost identical to PR Free idLobby memory inside destructor #847
* Fixes a critical issue with mis-reading network snapshot data on the client side, which caused no end of problems with mis-rendering, slowdowns, unstable connections, etc. The client was ignoring the entity network-synced flag which tells it whether it should read entity class-specific data. It was trying to read it all the time and sometimes coming up with null data which caused tons of problems with rendering and physics calculations (e.g. operations on NaN numbers). Simple fix was to respect the entity's network-synced flag on the client side but it makes all the difference.
* Fixes an incorrect assert on multiplayer VoiceChat shutdown
* Allows r_useScissor and r_useParallelAdd cvars to be changed in multiplayer mode for use in bake* operations on multiplayer maps
* Fixed a couple of uninitialized variables that showed up in valgrind when in multiplayer mode
* Added Amstrad CPC 6128 Retro rendering mode
* Fixed scissor clipping issues of regular surfaces like light flares #651
* Duplicating lights with Ctrl+D works now
* Merged script interpreter improvements from Dhewm3, especially that fixes https://github.com/dhewm/dhewm3/issues/303
* Doubled MAX_GLOBALS for the Runners 2.6 mod
* Crash fix between level switching and loading of new textures for D3HDP and other mods
* Fixed many small memory leaks (thanks to Steve Saunders)
* Reduced console spam and got rid of the depth-stencil is read-only warnings
* Added image_pixelLook to disable texture filtering on most textures regardless of the render mode
* Changed devtools.cfg so you can easily switch between the new render modes with F7 and F8
* Added new helper entityDefs like func_elevator_model in base/def/_tb_helpers.def for TrenchBroomBFG
* Prioritize .wav and .ogg files over shipped .idwav files so overriding existing sounds works better
* Fixed some critical bugs in the convertMapToValve220 command. Added origin brushes
* Light editor can use the rotation/scale gizmos
* Light editor can use the translation gizmo
* Fixed Imgui and light scissor clipping issues. Closes #651
* Wrote simple exportMaterialsToBlender command which saves all materials to base/_bl/materials.json
* Use same Instance pattern of AF editor for light editor
* Always draw the console after Imgui
* Added code to load UE5 editor themes into Imgui
* Updated Imgui to newest docking release v1.89.9
* Fix fullscreen warp FX for grabber and various effects like Berserker (Thanks Steven Pridham)
* Fixed HLSL code to compile with newer versions of DXC
* Fix system vs. bundled library logic, suppress gcc/clang warnings for some third party source libs (jpeg, zlib, minizip)
* Fix MSVC warnings, suppress for some third party source libs (jpeg, png, oggvorbis)
* Update CMakeLists to add clang -Wno-shorten-64-to-32 flag to suppress flood of int conversion warnings
* Update rapidjson lib to remove deprecated std::iterator template and replace with required iterator types
* Update jpeglib's format_message() error routine to use snprintf() for buffer security
* Replace sprintf() / vsprintf() with idStr::snPrintf() / idStr::vsnPrintf() for buffer security
* BFG Resource File Manager under tools/bfgpakexplorer has been updated
Changelog TrenchBroomBFG:
* Added Show patches option to View Options
* Updated FGDs exported from the engine which can be found in base/_tb/fgd/*
* Bezier patches can be duplicated and copy pasted within a map and copied from another TrenchBroomBFG instance
* the DOOM-3-models.fgd has been restored
_______________________________________
23 May 2023 - RBDOOM-3-BFG 1.5.1
_______________________________
# RBDOOM-3-BFG 1.5.1 Hotfix Patch
This is just a bugfix build that addresses several crashes and minor changes.
## Quick Installation Guide for Beginners
1. Make a new DoomBFG folder
2. Copy base/ from your Steam Doom 3 BFG folder into DoomBFG
3. Download the RBDOOM-3-BFG 1.3.0 full package from the [RBDOOM-3-BFG ModDB page](https://www.moddb.com/mods/rbdoom-3-bfg) and extract it over DoomBFG.
4. Do the same with the 1.5.1 patch.
If you already have a version of RBDOOM-3-BFG then you can just unpack this patch over it.
Changelog:
* Bumped version to 1.5.1
* Fixed "Failed to create a graphics pipeline state object" error in the Erebus 3 map. #770
* Disable DXGI automatic display mode switching for alt-enter borderless fullscreen
* Fixed crash in Delta Labs Sector 3 with Vulkan on Linux (Radeon RX 6700)
_______________________________________
29 April 2023 - RBDOOM-3-BFG 1.5.0
_______________________________
# RBDOOM-3-BFG 1.5.0 adds DX12, Vulkan and glTF 2 Support
So over 600 commits later and probably over 1200 hours provided by 4 programmers RBDOOM-3-BFG 1.5.0 is final after one year of development.
This update is huge and replaces OpenGL with DX12 and Vulkan using Nvidia's NVRHI API and adds support for glTF 2 models and animations.
## DX12 & Vulkan through NVRHI
OpenGL is dead and won't be further developed. OpenGL was holding back the development of this source port for quite some time and all the HLSL -> GLSL translation code with different outputs for Windows, Mesa and Vulkan GLSL was a time eater.
I was excited when Vulkan was announced but it wasn't fun at all to work with because it is way too verbose and difficult to work with even after 17 years of OpenGL experience. It was even annoying to just render anything offscreen like shadow maps. Right now, Vulkan offers many extensions to make those tasks simpler but if you are using modern Vulkan then it is already so different that people demand to make a new Vulkan 2 API.
Vulkan became immediatly the extension hell OpenGL was and all I wanted was a nice and simple API like OpenGL ES 3 but with proper error feedback and more speed.
I was looking for several years for a good abstraction layer of modern graphics APIs like DX12 and Vulkan. I considered The-Forge, Dilligent Engine, Tiny Renderers (Google) or BGFX for reducing the maintencance costs of the RBDOOM-3-BFG renderer.
Then I stumbled over an excellent article by Alexey Panteleev about [Writing Portable Rendering Code with NVRHI](https://developer.nvidia.com/blog/writing-portable-rendering-code-with-nvrhi/).
NVRHI (NVIDIA Rendering Hardware Interface) is a library that implements a common abstraction layer over multiple graphics APIs (GAPIs): Direct3D 11, Direct3D 12, and Vulkan 1.2. It works on Windows (x64 and ARM64) and Linux (x64 and ARM64) and macOS through MoltenVK. It is not tied to Nvidia GPUs but also works with AMD and Intel drivers.
I suggested it in Discord and that we should go into that direction if we move the renderer to an abstraction library. Stephen Pridham took the initiative and wrote the initial port to NVRHI. Porting a game like Doom 3 BFG to another render API is not trivial.
It also changed my plans for 2022 and ruined many weekends by fixing renderer related bugs.
However I want to continue to work on this project in my spare time for the next 10 years so the effort was worth it. In the end it turned out that NVRHI is as easy to use as OpenGL with the Donut samples provided.
There is definitely some lack of documentation but now you have a former AAA game rendered with NVRHI as an example.
RBDOOM-3-BFG has a similar renderer complexity to older Call of Duty titles or the Source engine.
The implementation is not optimal in terms of performance and very close to the original rendering architecture of Doom 3 BFG.
However it is nice and simple that way.
Stephen Pridham did the major porting effort and was a big help when addressing certain difficult issues.
Stephen Saunders helped out with many Vulkan related rendering bugs. He also got it working with MoltenVk on macOS and improved support for AMD Vulkan users by integrating AMD's Vulkan Memory Allocator (VMA). He also contributed many other smaller bugfixes and improvements. Big thanks for both guys for all the help!
Also thanks to Alexey Panteleev at Nvidia who helped us through Discord and by pointing us into the right directions.
NVRHI will be also the gate opener for cross platform hardware accelerated Raytracing in the future so it is overall a big win for this source port.
There are also some immediate advantages for RBDOOM-3-BFG besides the smaller renderer backend.
### DX12 is faster than OpenGL
This is actually one of the most demananding scenes in Doom 3 with many shadow casting point lights. DX12 is now almost twice as fast as OpenGL. Vulkan is still lacking behind but DX12 is the primary API for Windows users which are the vast majority.
Stephen Saunders also provided triple buffering with NVRHI wich leads to a higher parallelization between the CPU and graphics card.
### Temporal Anti Aliasing
MSAA/SMAA have been replaced with a Temporal Anti Aliasing solution by Nvidia. This not only fixes geometric aliasing at the edges but also shader based aliasing within the geometries like extreme specular highlights caused by the new PBR shaders.
### New SSAO
The SSAO implementation has been updated with the latest code from Nvidia's Donut samples which outperforms the old implementation and also adds better stability on different view angles.
The old SSAO in 1.4.0 also lacked filtering and looked very noisy. The TAA would help but now it's really fixed and better.
It's hard to tell in these screenshots but the new SSAO gives most scenes a lot more depth.
## glTF 2 Support
Harrie van Ginneken contributed a new glTF 2 loader written from scratch using the awesome id Tech 4 idlib framework.
Also a big thanks here because this is huge and took a lot of time to develop.
The importer is not designed to work with all glTF 2 models you can find on the internet but it serves as a solid import facility from Blender. It can read ASCII .gltf and binary .glb models. It is recommend to use .glb for faster load times.
Models imported as .glb will be cached as .bglb models in the generated folder like all other model formats.
Cool about the current implementation is that animations are converted straight to the .bMD5Anim binary format of the Doom 3 BFG edition. This makes it a very tight integration into the existing architecture.
The basic idea about the glTF 2 `loader` is to make it easier getting models into the engine without any third party plugins in Blender. Another big disadvantage of .md5mesh exporters is that the format simply lacks support for normals.
So all normalmaps baked in Blender or Substance Painter using the Mikktspace algorithm would look wrong.
glTF 2 fixes this problem and it not only has support for normals but also tangents and those have to be calculated the Mikkelsen way so that's a perfect fit.
You can also use .glb files for static models without a skeleton just like with the original 3ds Max .ase and Lightwave .lwo files.
On top of that you can also use glTF 2 for new camera animations but that needs to be covered in an upcoming tutorial.
I also want to go back and keep things simple so I don't want to import and configure a model like in Unity or Unreal. I just want to load models and use them and the maximum should be to specify which frame plays a foot sound or which bone needs to be used to attach an item to it.
However it might be the case that someone exports a model from Blender and in a team environment someone else needs an option to load it differently. E.g. the front in Blender is -Y and forward in Doom is +X. So we need to rotate a model by 90 degrees around Z axis. All these things did the Maya .mb -> .md5mesh converter plugin for Doom 3 and we allow similar options in model declarations.
```
model character_mcneil
{
// scale from meters to Doom units (inches), add an "origin" bone from rig origin to pelvis and
// build automatically a root motion from the pelvis bone
options -scale 39.37 -addorigin -transfermotion "pelvis"
mesh models/characters/mcneil/mcneil.glb
channel legs ( origin *pelvis *foot_l *foot_r)
anim walk models/characters/mcneil/mcneil.Walk.glb
anim idle models/characters/mcneil/mcneil.Idle.glb
}
```
Supported options are:
* -armature `"armatureName"` if a glTF 2 file has more than one skeleton
* -reorient `pitch, yaw, roll`
* -rotate `yaw`
* -transferMotion `"boneName"` to enable root animations like in Unity
* -addorigin so we don't need put that extra "origin" bone in every Armature and can use common rigs like Mixamo or Rigify
* -scale `factor`
* -nomikktspace, specify if you want to use old normalmaps from an original Doom 3 model
```
NOTE: Material names in Blender need to be 1:1 the material names defined in the corresponding materials/*.mtr files.
```
Models are expected to be exported by Blender with the following settings:
```
Format: glTF Binary (.glb)
Transform: +Y Up On
Materials: Export
Images: None
Compression: Off
Data: Custom Properties On
Animation: Animation On, Shape Keys Off, Skinning On
```
## glTF 2 dmap Support and Blender Mapping Workflow
I rewrote dmap 8 years ago to compile a BSP from a polygon based map format instead of brushes.
Now, Harrie van Ginneken has extended it so we can compile glTF 2 files.
The trick is to use custom properties in Blender and the engine treats the .glb file like a .map file.
There is too much to explain here and this needs to be covered in a tutorial series along with a new Blender addon for editing the entities. But this is quite cool. You can now make maps without TrenchBroom or a Radiant based editor. Theoretically it is possible to use any 3D modelling package as a level editor now.
Just save your map as .glb file and compile it like:
```
dmap mymap.glb
```
Harrie managed to port entire asset packs with animations and hundreds of meshes by using a few clever Python scripts within Blender.
Here is a small demo of his WIP game which shows GPU skinning using Mixamo animations and a working BSP with typical Doom 3 style portal culling:
[](https://www.youtube.com/watch?v=KdwInY0A_qs)
Here is an another example map by Dmitri Engman that was done entirely in Blender. Kudos to him for pulling this off without documentation.
[](https://www.youtube.com/watch?v=8t7rzVGQScY)
He also wrote a tutorial here: https://modwiki.dhewm3.org/RBDoom3BFG-Blender-Mapping#2-BLENDER-SET-UP
## Imgui Articulated Figure Editor
Stephen Pridham added a new Imgui based Articulated Figure editor.
## Imgui Light Editor
The ImGui light editor, which you can spawn with editLights, has been slightly improved.
It shows the bounding boxes of the lights and you can move the lights with the arrow keys similar to TrenchBroom.
## Support for OGG Vorbis Soundtracks
Like in modern Quake sourceports users can now just throw their favorite soundtrack into base/music/ like base/music/aqm/*.ogg or into a modfolder/music/ path.
The game will play automatically it in the background as a looping track until the end of the map.
Each map will pick a different track but mappers can also define a "music" track in the worldspawn entity.
You can also fine tune the volume of each track if you write a sound shader for your files.
There is an example in mod_alternativequakemusic/sound/_rbdoom_aqm_tracks.sndshd for the Alternative Quake Music sound track.
## Optick Profiler
The super lightweight C++ profiler Optick has been integrated. You need to recompile the engine with the CMake option -DOPTICK=ON but then you can run the profiler along with RBDOOM-3-BFG and make detailed captures about what is going on.
It's also very useful if you want to understand the multithreaded architecture of the BFG edition.
## Borderless Fullscreen
Stephen Saunders contributed support for borderlesss fullscreen mode which can also be set by commandline with r_fullscreen -2. It's enabled automatically if you switch from windowed mode to fullscreen by using Alt + Enter. You can’t tell the difference visually. However, stick to borderless mode over fullscreen mode if you use multiple monitors.
You can access your displays and launch various apps while your game or work stays on the main display.
This has the advantage that you can run RBDOOM-3-BFG simultanously along with TrenchBroomBFG, Blender, Krita or any other gamedev weapon of choice and it makes it easier to to switch between the applications.
But, there is a downside to borderless mode, depending on your device.
Most operating systems like Windows, for example, will continue dedicating resources to all background processes.
This means you might get less performance and experience input lag.
If you need to squeeze some extra FPS, go back to real fullscreen mode to see if it makes a difference.
## TrenchBroomBFG
The custom TrenchBroom build has been renamed to TrenchBroomBFG. This avoids conflicts with the original program like config files that are saved in the user directory. It also ignores all the other unsupported game profiles.
The new version has been updated to TrenchBroom 2023.1. It also supports the glTF 2 formats through the Assimp library but in this version the material loader has been tweaked to work directly with Doom 3 .mtr materials.
The icon size option also affects the entity inspector now which helps with high resolutions.
The engine command exportFGD was changed so it generates more variations of FGD files:
```
DOOM-3-all-and-models.fgd
DOOM-3-all.fgd
DOOM-3-multiplayer.fgd
DOOM-3-slim-and-models.fgd
DOOM-3-slim.fgd
```
If you switch to one of those with the additional autogenerated model entities then you can drag n drop meshes into your map without the models zoomap.
## Summarized Changelog
[RENDERING]
* Renderer uses DX12 & Vulkan instead of OpenGL
* Shaders are not compiled at runtime anymore. They are compiled in advance by CMake using the DXC shader compiler and distributed in binary form under base/renderprogs2/dxil/*.bin
* All shaders have been rewritten to proper HLSL
* MSAA/SMAA have been replaced with a temporal anti aliasing (TAA) solution by Nvidia. This not only fixes geometric aliasing but also shader based aliasing like extreme specular highlights by the PBR shaders.
* Tone mapping has been replaced using new shaders by Nvidia
* Removed stencil shadow volumes with additional fixes by icecoldduke
* Integrate the AMD's VMA allocator for images and buffer objects
* Shadow mapping uses a fat shadowmap atlas instead of switching between shadowmap buffers and the HDR render target for each light. This improves the speed of the offscreen shadowmap generation.
* Blend shadowmaps smoothly in for small distant lights
* Skip shadowmaps for small distant lights
* Added menu option to choose between DX12 and Vulkan
* Detect displays that only support 144, 165 and 240 Hz
* Show picked GPU with com_showFPS > 1
* Went back to 15 bits for VERTCACHE_FRAME_MASK to avoid weird model distortions in a single frame every 68 seconds
* Reverted com_smp back to CVAR_BOOL
* Removed obsolete cvar r_useHDR
* Removed obsolete cvar r_useSeamlessCubeMap
* Removed unused cvar r_useHalfLambert
* Show shadow atlas stats with com_showFPS 3
* Enable DX12 / Vulkan debug layers with r_useValidationLayers 2
[DMAP]
* Dmap: always write a .cm file, especially when overwriting from a mod dir
* Support the Valve 220 texture projection in MapPolygonMesh::ConvertFromBrush()
* Automatically remove map collision .cm, .bcm files before running dmap
* Changed dmap to support compiling maps from glTF 2 .glb models instead of .map files
* Fixed AAS compiler to work with maps compiled from glTF 2 .glb files
* Tweaked dmap -glview option to dump an .obj next to the .proc file with similar content and to print an ASCII art BSP tree in the proc file
[MISCELLANEOUS]
* Don't generate collision models for every rendermodel in advance. Restored vanilla Doom 3 behaviour.
* Crashfix: Don't refesh the screen using prints during engine shutdown
* Print engine version when starting to write a qconsole.log
* Improved Quake .map converter to get Makkon's samplemaps working
* Bumped the required C++ standard to C++14
* Add move semantics to idList and idStr (thanks Admer)
* idListArrayResize uses std::move
* idStr implements move constructor
* and move operator
* mpMap_t also implements a move operator
* Fix snprintf() buffer length issues for Doom Classic on Linux with GCC 12 compiler
* Fix ImGui include path handling to be consistent with other external libs
* Applied MD3 crashfix by Daniel Gibson
* Restore support for FFMPEG legacy channel_layout & channels fields, remove self-assignment in idSoundDecoder_Vorbis::Open()
* Update FFMPEG deprecated calls to use supported ch_layout structure
* R_TestVideo_f command fixes and Cinematics startup fix for NVRHI (BinkDec green frame)
* Add s_playCinematicAudio cvar to enable/disable cinematic audio playback
* Support mp4/webm/mkv cinematics for mods, fix duration calculation, fix testVideo shutdown on exit
* Tweaked exportFGD to output more FGDs with autogenerated model definitions
* Fixed missing shadows in the kitchen of Mars City 1
* Fixed fake parallel light in Mars City 1 opening scene
* Integrated Optick profiler. Needs CMake option -DOPTICK=ON
* LightEditor: Draw volume of selected light and move it with arrow keys
* Support Borderless Fullscreen and Borderless Window modes for Win32 and SDL platforms
* Fixed crash when executing extract_resources.cfg on Linux
[TRENCHBROOMBFG]
* Renamed custom TrenchBroom fork to TrenchBroomBFG
* Change TrenchBroomBFG to only load Doom 3 related game profiles as it breaks compatibility to other Quake based games
* TrenchBroomBFG code was updated with the stable TrenchBroom 2023.1 release which contains tons of bugfixes and improvements
* If you turn off certain brushes like visportals in the View Options you won't accidently select by clicking to brushes behind them
* TrenchBroomBFG uses the Assimp library for glTF2 support
* func_door FGD fix
* Use Icon size preferences not only in the textures browser but also in the entity browser
* FGD proxymodel evaluation fix #4052
* Use fixed size (-8 -8 0, 8 8 16) bounds for all model based entities
* Fixed missing support for the basecolormap keyword in .mtr files
_______________________________________
06 March 2022 - RBDOOM-3-BFG 1.4.0
_______________________________
## .plan
This version improves support for mapping with TrenchBroom. Until now you needed to extract and copy the vanilla Doom 3 models and textures over to the base/ folder to see the content in the TrenchBroom entity browser and texture viewer.
Owning the original game next to the BFG edition is not necessary anymore.
This version comes with a couple of new RBDOOM-3-BFG console commands that lets you export particular parts of the .resources files to the base/_tb/ folder.
You need to call exportImagesToTrenchBroom once and you are good to go to start mapping with the TrenchBroom level editor.
TrenchBroom comes with several more Doom 3 specific changes. After loading a map TrenchBroom generates unique entity names and also fixes missing or bad "model" keys for brush based entitites.
Also creating new entities like light will automatically receive names like light_2.
This patch also contains a couple of func_group related bugfixes. func_group works now with brush based entities, point entities and just regular brushes.
## Changelog
[TRENCHBROOM]
* Tweaked exportFGD command for new icons
* Added new icons to TrenchBroom for certain entities like lights, speakers or particle emitters
* TrenchBroom offers a dropdown menu to select the Quake 1 light style for lights
* Drastically improved loading time of textures for materials in TrenchBroom
* Added RBDoom console command convertMapToValve220 `