I've been experimenting for a couple hours now... It's curious to me that upping the distant land settings seems to cause the game performance to suffer without any meaningful draw on my system CPU or memory. Upping to something that's well outside the recommended parameters, exterior cell load distance = 12 and viewing distance = 100000, nukes my frame rate down to 2 fps... but still without noticeably taxing the system. Am I right in assuming the bottleneck must be on the software side then? The client just has a hard cap on how many scripts, statics, land mesh vertices, etc. it can render before it chokes?
sonicboom12345 wrote: ↑15 Oct 2017, 06:39
Upping to something that's well outside the recommended parameters, exterior cell load distance = 12 and viewing distance = 100000, nukes my frame rate down to 2 fps...
That's because an engine tries to render (12+1)*(12+1)=169 cells.
Generally, you can use "exterior cell load distance = 2" for high-end GPUs (e.g. GTX1060), and "exterior cell load distance = 1" in other cases.
sonicboom12345 wrote: ↑15 Oct 2017, 04:57
I only hope when OpenMW hits 1.0, all of these settings will be put on a slider accessible through the in-game video menu. It's painstaking to tinker with config files in Notepad, then troubleshoot why they're getting poor performance...
IIRC, this has something to do with strings like "distant terrain" not being defined in vanilla Morrowind files. Creating UI with that option would require hardcoding that string into engine, which is not considered a good idea (not supported localization).
A lot of things can be done only after 1.0 because they will break backwards compatibility vanilla engine, rework of localization support is one of them (I think someone wanted to use *.po files).
sonicboom12345 wrote: ↑15 Oct 2017, 06:39
Upping to something that's well outside the recommended parameters, exterior cell load distance = 12 and viewing distance = 100000, nukes my frame rate down to 2 fps...
That's because an engine tries to render (12+1)*(12+1)=169 cells.
Generally, you can use "exterior cell load distance = 2" for high-end GPUs (e.g. GTX1060), and "exterior cell load distance = 1" in other cases.
While I understand features like distant land aren't as much a priority as getting the core game to 1.0, with MGE I was able to set the render options such that I could set my agility to 1500, jump high into the sky, and see the *entire* island of Vvardenfell laid out before me. That was with careful pruning of statics based on size, so only the trees, mushrooms, and edifices were perceptible from afar. At endgame, jumping from town to town became my favored method of traversing the game world. I could do that and still get a frame rate of around 20 fps outdoors.
OpenMW doesn't seem to be capable of anywhere near this rendering feat. Even setting the cell load distance to 1 and the viewing distance to something high like 100,000, so that the continent is rendered but none of the statics or scripts are, my frame rate hovers around 10. Therefore, I'm wondering, is the client choking trying to render the land mesh itself? What is the bottleneck, when MGE was able to provide for a better viewing distance with increased performance? "You should be able to see 2 cells away" doesn't provide a lot of encouragement when with MGE I cold stand atop the cantons of Vivec and see all the way to Ghostgate. :/
sonicboom12345 wrote: ↑15 Oct 2017, 15:37
While I understand features like distant land aren't as much a priority as getting the core game to 1.0, with MGE I was able to set the render options such that I could set my agility to 1500, jump high into the sky, and see the *entire* island of Vvardenfell laid out before me. That was with careful pruning of statics based on size, so only the trees, mushrooms, and edifices were perceptible from afar. At endgame, jumping from town to town became my favored method of traversing the game world. I could do that and still get a frame rate of around 20 fps outdoors.
OpenMW doesn't currently render static objects with distant terrain enabled, so you'll be able to see the terrain with hills and such, but things like trees, mushrooms, and rocks will still only be visible within the exterior cell load distance (radius). This is something that'll be worked on eventually, but it's not easy to automate (MGE XE requires running a distant land generator separately to prebuild an LOD world, which obviously would cause issues if you add or remove mods that affect the world, not to mention for scripts that change world objects during play).
OpenMW doesn't seem to be capable of anywhere near this rendering feat. Even setting the cell load distance to 1 and the viewing distance to something high like 100,000, so that the continent is rendered but none of the statics or scripts are, my frame rate hovers around 10.
What's your hardware and your settings.cfg? OpenMW's default cell preload/precache settings can be a bit aggressive on system memory, which can be exacerbated by distant terrain. Also forcing shaders on may improve performance a bit depending on your gfx card (modern hardware's fixed-function emulation isn't necessarily as good as tuned shaders can be).
# WARNING: If this file is named settings-default.cfg, then editing
# this file might have no effect, as these settings may be overwritten
# by your user settings.cfg file (see documentation for its location).
#
# This file provides minimal documentation for each setting, and
# ranges of recommended values. For detailed explanations of the
# significance of each setting, interaction with other settings, hard
# limits on value ranges and more information in general, please read
# the detailed documentation at the OpenMW Wiki page:
#
# https://wiki.openmw.org/index.php?title=Settings
#
[Camera]
# Near clipping plane (>0.0, e.g. 0.01 to 18.0).
near clip = 1
# Cull objects that occupy less than 'small feature culling pixel size' on the screen.
small feature culling = true
small feature culling pixel size = 32
# Maximum visible distance (e.g. 2000.0 to 6666.0). Caution: this setting
# can dramatically affect performance, see documentation for details.
viewing distance = 10000
# Camera field of view in degrees (e.g. 30.0 to 110.0).
# Does not affect the player's hands in the first person camera.
field of view = 55.0
# Field of view for first person meshes (i.e. the player's hands)
# Best to leave this at the default since vanilla assets are not complete enough to adapt to high FoV's. Too low FoV would clip the hands off screen.
first person field of view = 55.0
[Cells]
# Adjacent exterior cells loaded (>0). Caution: this setting can
# dramatically affect performance, see documentation for details.
exterior cell load distance = 3
# Preload cells in a background thread. All settings starting with 'preload' have no effect unless this is enabled.
preload enabled = true
# The number of threads to be used for preloading operations.
preload num threads = 3
# Preload adjacent cells when moving close to an exterior cell border.
preload exterior grid = true
# Preload possible fast travel destinations.
preload fast travel = false
# Preload the locations that doors lead to.
preload doors = true
# Controls whether or not the nodes/collision shapes are pre-"instanced" (i.e. cloned) when a cell is preloaded.
# Enabling this option slightly reduces the time it takes to transition into a preloaded cell, but also results in higher memory usage
# proportional to the number of cells that are preloaded.
preload instances = true
# The minimum amount of cells in the preload cache before unused cells start to get thrown out (see "preload cell expiry delay").
# This value should be lower or equal to 'preload cell cache max'.
preload cell cache min = 12
# The maximum amount of cells in the preload cache. A too high value could cause you to run out of memory.
# You may need to reduce this setting when running lots of mods or high-res texture replacers.
preload cell cache max = 20
# How long to keep preloaded cells in cache after they're no longer referenced/required (in seconds)
preload cell expiry delay = 5
# The predicted position of the player N seconds in the future will be used for preloading cells and distant terrain
prediction time = 1
# How long to keep models/textures/collision shapes in cache after they're no longer referenced/required (in seconds)
cache expiry delay = 5
# The count of pointers, that will be saved for a faster search by object ID.
pointers cache size = 40
[Terrain]
# The on-switch to distant terrain. Set this to True.
distant terrain = true
[Map]
# Size of each exterior cell in pixels in the world map. (e.g. 12 to 24).
# Warning: affects explored areas in save files, see documentation.
global map cell size = 18
# Zoom level in pixels for HUD map widget. 64 is one cell, 128 is 1/4
# cell, 256 is 1/8 cell. See documentation for details. (e.g. 64 to 256).
local map hud widget size = 256
# Enables Fog of War rendering on the HUD map. Default is Off since with default settings
# the map is so small that the fog would not obscure anything, just darken the edges slightly.
local map hud fog of war = false
# Resolution of local map in GUI window in pixels. See documentation
# for details which may affect cell load performance. (e.g. 128 to 1024).
local map resolution = 256
# Size of local map in GUI window in pixels. (e.g. 256 to 1024).
local map widget size = 512
# Similar to "[Cells] exterior cell load distance", controls
# how many cells are rendered on the local map. Values higher than the default
# may result in longer loading times.
local map cell distance = 1
# If true, map in world mode, otherwise in local mode
global = false
[GUI]
# Scales GUI window and widget size. (<1.0 is smaller, >1.0 is larger).
scaling factor = 1.0
# Transparency of GUI windows (0.0 to 1.0, transparent to opaque).
menu transparency = 0.84
# Time until tool tip appears when hovering over an object (0.0 is
# instantly, 1.0 is the maximum delay of about 1.5 seconds).
tooltip delay = 0.0
# Stretch menus, load screens, etc. to the window aspect ratio.
stretch menu background = false
# Subtitles for NPC spoken dialog and some sound effects.
subtitles = false
# Red flash visually showing player damage.
hit fader = true
# Werewolf overlay border around screen or window.
werewolf overlay = true
# Color for tool tips and crosshair when owned by an NPC (R G B A).
color background owned = 0.15 0.0 0.0 1.0
color crosshair owned = 1.0 0.15 0.15 1.0
[HUD]
# Displays the crosshair or reticle when not in GUI mode.
crosshair = true
[Game]
# Color crosshair and tool tip when object is owned by an NPC. (O is
# no color, 1 is tool tip only, 2 is crosshair only, and 3 is both).
show owned = 0
# Show damage bonus of arrow and bolts.
show projectile damage = false
# Show additional melee weapon info: reach and attack speed
show melee info = false
# Show success probability in self-enchant dialog
show enchant chance = false
# Always use the best mode of attack: e.g. chop, slash or thrust.
best attack = false
# Difficulty. Expressed as damage dealt and received. (e.g. -100 to 100).
difficulty = 0
# Show duration of magic effect and lights in the spells window.
show effect duration = false
# Prevents merchants from equipping items that are sold to them.
prevent merchant equipping = true
# Makes player followers and escorters start combat with enemies who have started combat with them
# or the player. Otherwise they wait for the enemies or the player to do an attack first.
followers attack on sight = false
# Can loot non-fighting actors during death animation
can loot during death animation = true
[General]
# Anisotropy reduces distortion in textures at low angles (e.g. 0 to 16).
anisotropy = 4
# File format for screenshots. (jpg, png, tga, and possibly more).
screenshot format = png
# Texture magnification filter type. (nearest or linear).
texture mag filter = linear
# Texture minification filter type. (nearest or linear).
texture min filter = linear
# Force rendering with shaders. By default, only bump-mapped objects will use shaders.
# Enabling this option may cause slightly different visuals if the "clamp lighting" option
# is set to false. Otherwise, there should not be a visual difference.
force shaders = false
# Force the use of per pixel lighting. By default, only bump mapped objects use per-pixel lighting.
# Has no effect if the 'force shaders' option is false.
# Enabling per-pixel lighting can result in visual differences to the original MW engine. It is not
# recommended to enable this option when using vanilla Morrowind files, because certain lights in Morrowind
# rely on vertex lighting to look as intended.
force per pixel lighting = false
# Restrict the amount of lighting that an object can receive to a maximum of (1,1,1).
# Only affects objects that render with shaders (see 'force shaders' option). Always affects terrain.
# Setting this option to 'true' results in fixed-function compatible lighting, but the lighting
# may appear 'dull' and there might be color shifts.
# Setting this option to 'false' results in more realistic lighting.
clamp lighting = true
# If this option is enabled, normal maps are automatically recognized and used if they are named appropriately
# (see 'normal map pattern', e.g. for a base texture foo.dds, the normal map texture would have to be named foo_n.dds).
# If this option is disabled, normal maps are only used if they are explicitly listed within the mesh file (.nif or .osg file).
# Affects objects.
auto use object normal maps = false
# If this option is enabled, specular maps are automatically recognized and used if they are named appropriately
# (see 'specular map pattern', e.g. for a base texture foo.dds, the specular map texture would have to be named foo_spec.dds).
# If this option is disabled, normal maps are only used if they are explicitly listed within the mesh file (.osg file, not supported in .nif files).
# Affects objects.
auto use object specular maps = false
# See 'auto use object normal maps'. Affects terrain.
auto use terrain normal maps = false
# If a file with pattern 'terrain specular map pattern' exists, use that file as a 'diffuse specular' map. The texture
# must contain the layer color in the RGB channel (as usual), and a specular multiplier in the alpha channel.
auto use terrain specular maps = false
# The filename pattern to probe for when detecting normal maps (see 'auto use object normal maps', 'auto use terrain normal maps')
normal map pattern = _n
# Alternative filename pattern to probe for when detecting normal maps. Files with this pattern are expected to include 'height' in the alpha channel.
# This height is used for parallax effects. Works for both terrain and objects.
normal height map pattern = _nh
# The filename pattern to probe for when detecting object specular maps (see 'auto use object specular maps')
specular map pattern = _spec
# The filename pattern to probe for when detecting terrain specular maps (see 'auto use terrain specular maps')
terrain specular map pattern = _diffusespec
[Input]
# Capture control of the cursor prevent movement outside the window.
grab cursor = true
# Key controlling sneak toggles setting instead of being held down.
toggle sneak = false
# Player is running by default.
always run = false
# Zoom in and out from player in third person view with mouse wheel.
allow third person zoom = false
# Camera sensitivity when not in GUI mode. (>0.0, e.g. 0.1 to 5.0).
camera sensitivity = 1.0
# Vertical camera sensitivity multiplier when not in GUI mode.
# (>0.0, Because it's a multiplier values should be near 1.0)
camera y multiplier = 1.0
# Invert the vertical axis while not in GUI mode.
invert y axis = false
[Saves]
# Name of last character played, and default for loading save files.
character = Aldea_Donder
# Automatically save the game whenever the player rests.
autosave = true
# Display the time played on each save file in the load menu.
timeplayed = false
[Sound]
# Name of audio device file. Blank means use the default device.
device =
# Volumes are 0.0 for silent and 1.0 for the maximum volume.
# Master volume. Controls all other volumes.
master volume = 1.0
# Footsteps volume.
footsteps volume = 0.2
# Music tracks volume.
music volume = 0.5
# Sound effects volume.
sfx volume = 1.0
# Voice dialog volume.
voice volume = 0.8
# Minimum size to use for the sound buffer cache, in MB. When the cache is
# filled, old buffers will be unloaded until it's using no more than this much
# memory. Must be less than or equal to 'buffer cache max'.
buffer cache min = 56
# Maximum size to use for the sound buffer cache, in MB. The cache can use up
# to this much memory until old buffers get purged.
buffer cache max = 64
# Maximum frames per second. 0.0 is unlimited, or >0.0 to limit.
framerate limit = 0.0
# Game video contrast. (>0.0). No effect in Linux.
contrast = 1.0
# Video gamma setting. (>0.0). No effect in Linux.
gamma = 1.0
[Water]
# Enable water shader with reflections and optionally refraction.
shader = true
# Reflection and refraction texture size in pixels. (512, 1024, 2048).
rtt size = 512
# Enable refraction which affects visibility through water plane.
refraction = false
# Draw NPCs and creatures on water reflections.
reflect actors = true
# Overrides the value in '[Camera] small feature culling pixel size' specifically for water reflection/refraction textures.
small feature culling pixel size = 16
[Windows]
# Location and sizes of windows as a fraction of the OpenMW window or
# screen size. (0.0 to 1.0). X & Y, Width & Height.
# Stats window displaying level, race, class, skills and stats.
stats x = 0.0
stats y = 0.0
stats w = 0.375
stats h = 0.4275
# Stats window pin status
stats pin = false
# Spells window displaying powers, spells, and magical items.
spells x = 0.625
spells y = 0.5725
spells w = 0.375
spells h = 0.4275
# Spells window pin status
spells pin = false
# Local and world map window.
map x = 0.625
map y = 0.0
map w = 0.375
map h = 0.5725
# Map window pin status
map pin = false
# Dialog window for talking with NPCs.
dialogue x = 0.095
dialogue y = 0.095
dialogue w = 0.810
dialogue h = 0.810
# Alchemy window for crafting potions.
alchemy x = 0.25
alchemy y = 0.25
alchemy w = 0.5
alchemy h = 0.5
# Console command window for debugging commands.
console x = 0.0
console y = 0.0
console w = 1.0
console h = 0.5
# Player inventory window when explicitly opened.
inventory x = 0.0
inventory y = 0.4275
inventory w = 0.6225
inventory h = 0.5725
# Inventory window pin status
inventory pin = false
# Player inventory window when searching a container.
inventory container x = 0.0
inventory container y = 0.4275
inventory container w = 0.6225
inventory container h = 0.5725
# Player inventory window when bartering with a shopkeeper.
inventory barter x = 0.0
inventory barter y = 0.4275
inventory barter w = 0.6225
inventory barter h = 0.5725
# Player inventory window when trading with a companion.
inventory companion x = 0.0
inventory companion y = 0.4275
inventory companion w = 0.6225
inventory companion h = 0.5725
# Container inventory when searching a container.
container x = 0.25
container y = 0.0
container w = 0.75
container h = 0.375
# NPC inventory window when bartering with a shopkeeper.
barter x = 0.25
barter y = 0.0
barter w = 0.75
barter h = 0.375
# NPC inventory window when trading with a companion.
companion x = 0.25
companion y = 0.0
companion w = 0.75
companion h = 0.375
lysol wrote: ↑15 Oct 2017, 19:05
The thing is: MGE XE is finished. OpenMW is not.
This is A-OK, and that's kind of what I was angling for... We've all got a lot of love for everybody working on this project, and a lot of hope that OpenMW will be the the best darn play experience in every possible respect. I understand everything's a work in progress, and I'm cool with that.