oygn: Would anyone advise how to make the experience better playing on a modern LCD?
I realise that it has been years since you asked this question but I would like to offer some guidance. I'll assume that you want to play at the original aspect ratio of 4:3 so I shall not be discussing any widescreen mods.
The unmodified game runs at a resolution of 640x480. For upscaling the image to a modern LCD monitor, there are two ways to go. One is to perform integer - or pixel-perfect - scaling. For example, if your monitor has a native resolution of 1920x1080, there is the option of upscaling by a factor of exactly 2. The game would then render over an area of 1280x960, centered. The advantage of upscaling by an integer factor is that each pixel is magnified in a way that no interpolation is required. Consequently, the resulting image ends up being extremely sharp and stippled patterns are rendered correctly (for example, the fog of an unexplored map area).
Another way would be to upscale the image by a non-integer factor. For example, one could upscale by a factor of 2.25, resulting in 1440x1080. The advantage is that the game will make use of the full height of your monitor. The disadvantage is that scaling by a non-integer factor can result in a blurry image, along with artifacts caused by pixel-imperfect scaling. However, this disadvantage can be mitigated to varying degrees, depending on the upscaling algorithm that is used.
The game uses the DirectDraw API for drawing its graphics. One may use a DirectDraw wrapper to intercept the draw calls and translate them to either Direct3D or OpenGL. I have tested various wrappers with the Infinity Engine based games and have found that
cnc-ddraw offers the best balance of performance and upscaling flexibility. Indeed, one of the nice things about this wrapper is that it allows for the user to easily set an option for integer upscaling, if preferred. It is also capable of preserving the correct aspect ratio, without having to fiddle with GPU driver settings (as some other posts suggest).
Here is an overview of how to use
cnc-ddraw.
1. Download
cnc-ddraw.zip from
https://github.com/FunkyFr3sh/cnc-ddraw/releases 2. Open the ZIP archive and extract its contents into the Baldur's Gate folder
3. Open the
ddraw.ini file in a text editor (such as Notepad) and set the desired options
These are the options that should be set in the file if you would like to enforce pixel-perfect scaling:
fullscreen = true
maintas = true
boxing = true
renderer = direct3d9
d3d9_filter = 0
Otherwise, I would suggest configuring it to use OpenGL as the renderer. In that case, the wrapper allows for the use of external pixel shaders, which have marked inpact on the upscaling algorithm. I tried upscaling 640x480 to 1440x1080 with a catmull-rom filter and found the results to be quite acceptable. If you would like to try that, the settings should be as follows:
fullscreen = true
maintas = true
boxing = false
shader = Shaders\interpolation\catmull-rom-bilinear.glsl
renderer = opengl
If you encounter screen tearing, there is also a vsync option which can be enabled. On my system, I had to enable it if using the direct3d9 renderer, to avoid tearing:
vsync = true
Finally, Linux users will need to ensure that
DLLOVERRIDES=ddraw=n,b is in effect for Wine/Proton. Otherwise, the wrapper will not be used at all. I have tested both the opengl and direct3d9 renderers with the GloriousEggroll WINE builds and found both to work perfectly. Indeed, the direct3d9 renderer can be used in conjunction with DXVK.
EDIT: In my initial post, I accidentally stated that the value of the d3d9_filter option should be set to 2 for integer upscaling. In fact, it should be set to 0, along with boxing = true.