The OpenMW team is proud to announce the release of version 0.38.0! Grab it from our Downloads Page for all operating systems. Hot on the heels of the previous one, this release brings many fixes and improvements, notably movement of objects between cells, and support for the OSG native model format.
- Shadows are not re-implemented at this time, as well as distant land and object shaders
- Features are missing from OpenMW-CS as well: only basic camera controls are implemented, pathgrid and cell marker rendering is missing, as well as instance moving
- Implemented werewolf field of view
- Implemented movement of objects between cells, fixes several issues
- Implemented handling OSG native model format
- Implemented separate field of view settings for hands and game world
- Implemented isInCell checks on PlaceAt and PlaceItem
- Implemented handling NiLODNode and NiPointLight
- Implemented notification to indicate when a game is saved
- Fixed player object being deletable
- Fixed AiCombat distance check to take into account collision box
- Fixed saw in Dome of Kasia not hurting a stationary player
- Fixed rats floating when killed near a door
- Fixed kwama eggsacks pulsing too fast
- Fixed NPC voice sound source not being placed at their head
- Fixed crash with OpenMW install wizard
- Fixed reseting delete flag when loading a reference from a save game
- Fixed issues with clicking on unexpected inventory items on character doll
- Fixed spell absorption to apply once per effect
- Fixed enchantment merchant items reshuffling every time barter is clicked
- Fixed not being able to resurrect the player through the console if health is zero
- Fixed projectile weapon behavior when underwater
- Fixed not being able to use keywords in strings for message boxes
- Fixed items not sinking when dropped underwater
- Fixed crash when onPcEquip script removes the equipped item
- Fixed dialog not triggering correctly in Julan Ashlander Companion mod
- Fixed tooltips for Health, Magicka, and Fatigue showing in the Options menu when bars aren’t visible
- Fixed guards accepting gold for crimes even when you don’t have enough
- Fixed Show Owned option affecting tooltips that are not objects
- Fixed player sound source being at the feet
- Fixed not being able to replace interactive message boxes
- Fixed fatal error on OpGetTarget when the target has disappeared
- Fixed first person rendering glitches with high field of view
- Fixed crash on new game at character class selection
- Fixed RigGeometry bone references to be case-insensitive
- Fixed NPCs using wrong sound when landing
- Fixed missing journal textures without Tribunal and Bloodmoon installed
- Fixed multiple AiFollow packages causing the distance to stack
- Fixed creature dialogs not being handled correctly
- Fixed crash when entering Holamayan Monastery with mesh replacer installed
- Fixed dreamers spawning too soon
- Fixed Next/Previous Weapon/Spell and Ready Spell working as a werewolf
- Fixed being able to soultrap a creature more than once
- Fixed summoned creatures and objects disappearing at midnight
- Fixed gamecontrollerdb file being created as a txt instead of a cfg
- Fixed “same race” dialog functions never triggering
- Fixed dialog choice condition issue
- Fixed body part rendering when in a pose
- Fixed reversed sneak awareness check
- Fixed positional sound acceleration issue
- Fixed fatal error when LandTexture is missing
- OpenMW-CS: Implemented choosing colors for syntax highlighting
- OpenMW-CS: Implemented hiding script error list when there are no errors
- OpenMW-CS: Implemented ability to create omwaddons with periods in the filename
- OpenMW-CS: Implemented configurable size for scipt error panel
- OpenMW-CS: Implemented tooltips in the 3D scene
- OpenMW-CS: Fixed issue with handling of DELE subrecords
- OpenMW-CS: Fixed Verify not checking if given item ID for a container exists
Want to leave a comment?
2016-01-22 - raevol -
The OpenMW team is proud to announce the release of version 0.37.0! Grab it from our Downloads Page for all operating systems. This release brings the long-anticipated implementation of the OpenSceneGraph renderer! More info on this 3d graphics toolkit can be found on the OSG website. Hats off to scrawl for the Herculean amount of effort he put in working on this massive codebase change! The new renderer brings a massive performance speedup, as well as many graphical fixes and improvements.
You may notice that shadows are not re-implemented at this time, as well as distant land and object shaders, but we wanted to get the release out rather than delay any further! These features will be re-added soon! This release brings many other changes and bugfixes, as well as a huge amount of new work done on OpenCS, the editor for OpenMW. Some features are missing from OpenCS as well: only basic camera controls are implemented, pathgrid and cell marker rendering is missing, as well as instance moving. See below for the full changelog.
- Rewrote graphics engine using OSG rendering toolkit
- Implemented profiling overlay (press F3!)
- Implemented journal and book scaling
- Implemented NiStencilProperty
- Implemented Game Time Tracker
- Implemented comments in openmw.cfg
- Implemented resource manager optimizations
- Implemented handling NIF files as proper resources
- Implemented using skinning data in NIF files as-is
- Implemented small feature culling
- Implemented configurable near clip distance
- Implemented GUI scaling option
- Implemented support for anonymous textures
- Implemented loading screen optimizations
- Implemented character preview optimization
- Implemented sun glare fader
- Implemented support for building with Qt5
- Implemented Bullet shape instancing optimization
- Implemented FFMPEG 2.9 support
- Implemented head tracking for creatures
- Implemented additive moon blending
- Implemented an error message when S3TC support is missing
- Fixed short activation distance for light emitting objects
- Fixed animation not resizing creature’s bounding box
- Fixed setPos and setScale instructions only modifying the collision model when invoked on Static objects
- Fixed stars showing on horizon at night when they should be obscured by clouds
- Fixed errors in moon trajectory
- Fixed NPCs width not being adjusted by their weight
- Fixed raycasting for dead actors
- Fixed several issues with underwater view
- Fixed Erene Llenim not wandering
- Fixed cliff racers failing to hit the player (should have left this broken, hm?)
- Fixed NPCs not being able to hit small creatures
- Fixed vibrating terrain in cells far from the origin
- Fixed several issues with first person weapon model rendering
- Fixed crash when switching from full screen to windowed mode in D3D9
- Fixed scripts failing to compile if name starts with a digit
- Fixed Socucius Ergalla having doubled greetings during the tutorial
- Fixed underwater flora lighting up the entire area
- Fixed not handling controller extrapolation flags
- Fixed footstep frequency not updating immediately when speed attribute changes
- Fixed crash with OpenGL 1.4 drivers
- Fixed antialiasing not working on Linux
- Fixed enemies attacking the air when they spot the player
- Fixed NIF rotation matrices that include scaling not being supported
- Fixed crank in Old Mournhold: Forgotten Sewer turning about the wrong axis
- Fixed several particle transparency stacking issues
- Fixed Trueflame and Hopesfire flame effect rendering
- Fixed little box rendering beneath verminous fabricants
- Fixed sparks in Clockwork City not bouncing off the floor
- Fixed dicer traps in Clockwork City not activating when you’re too close
- Fixed scrambled pixels on the mini map
- Fixed NIFs with more than 255 NiBillboardNodes not loading
- Fixed objects flickering
- Fixed issue with running out of vram
- Fixed NPCs dying silently
- Fixed jumping animation restarting when equipping mid-air
- Fixed light spell not working in first person view
- Fixed light spell not being as bright as in Morrowind
- Fixed transparency sorting to be more accurate, obsoleting transparency-overrides.cfg
- Fixed player followers reporting crimes
- Fixed hidden emitter nodes still firing particles
- Fixed music from title screen continuing after loading a saved game
- Fixed map not being consistent between saved games
- Fixed dialog scroll not always starting at the top
- Fixed Detect Enchantment marks not appearing on top of the player arrow
- Fixed changing NPC position via console not taking effect until cell is reloaded
- Fixed mannequins in mods appearing as dead bodies
- Fixed spurious fifth parameter on Placeatme raising an error
- Fixed COC command printing multiple times when the GUI is hidden
- Fixed crash when a creature has no model
- Fixed character sheet not properly updating when backing out of CharGen
- Fixed Horkers using land idle animations under water
- Fixed map notes not showing on cell marker tooltips
- Fixed alchemy including effects that show twice on the same ingredient
- Fixed ORI console command
- Fixed Ashlanders in front of Ghostgate wandering around
- Fixed ESM writer not handling encoding when saving the TES3 header
- Fixed NIF node names to be not case-sensitive
- Fixed fog depth and density not being handled correctly
- Fixed Combat AI changing target too frequently
- Fixed not being able to attack during block animations
- Fixed player not raising arm in third person view for blizzards
- Fixed current screen resolution not being selected in Options when starting OpenMW
- Fixed Ordinators thinking beast races can wear their helm
- Fixed slider bars still moving after clicking to move them and not releasing the mouse button
- Fixed quirks with sleep interruption
- Fixed being able to ready weapons and magic while paralyzed
- Fixed inverted Kwama Queen head
- Fixed additem and removeitem behavior with gold
- Fixed –start putting the player inside models
- Fixed a glitch that allowed infinite free items when bartering
- Fixed handling of quotes in names of script functions
- Fixed Open and Lock spell effects persisting when cast on certain statics
- Fixed being able to lock beds
- Fixed script compiler not accepting IDs as instruction or function arguments if the ID is also a keyword
- Fixed cell names not being localized on the world map
- Fixed swimming player being too low in the water
- Fixed Save and Load menu localization issues
- Fixed Disintegrate Weapon applying to lockpicks and probes
- Fixed mouse wheel in journal not being disabled by Options menu
- Fixed Heart of Lorkhan not visually responding to attacks
- Fixed inventory highlighting the wrong category after a load
- Fixed teleport amulet not being placed in player inventory in Illuminated Order 1.0c
- Fixed fSleepRandMod not behaving correctly in special cases
- Fixed hang in non-GOTY version caused by bad SetRot data
- Fixed NPC confusion over player race
- Fixed custom races breaking numbering of PcRace
- Fixed being able to sneak while paralyzed
- Fixed Chameleon not working for creatures
- Fixed player power chance to show as 0 when used
- Fixed error handling for non-existing enchantment references
- Fixed recursive script execution
- Fixed infinite recursion when compiling a script with warning mode 2 and enabled error downgrading
- Fixed potential infinite loop in addToLevCreature script function
- Fixed PlaceItem returning radians instead of degrees
- Fixed a crash when entering cell “Tower of Tel Fyr, Hall of Fyr”
- Fixed a crash on assertion in a rare combat case
- Fixed an issue with loading a save game with mod LGNPC_PaxRedoran_v1_20
- Fixed an issue with loading a game when a mod that provided a spell known by the player was removed
- Fixed an issue with unequipping amulets that had been created with the console
- Fixed crash when switching from full screen to windowed mode in D3D9 (switched to OpenGL)
- Fixed no texture issue with DirectX (switched to OpenGL)
- Renamed ‘grid size’ setting to ‘cell load distance’
- OpenCS: Implemented Merge tool
- OpenCS: Implemented copying a record ID to the clipboard
- OpenCS: Implemented script line number in results search
- OpenCS: Implemented mouse button bindings in 3D scene
- OpenCS: Implenented scrolling newly created TopicInfo and JournalInfo records into view
- OpenCS: Implemented horizontal slider to scroll between opened tables
- OpenCS: Implemented shortcut for closing focused subview
- OpenCS: Implemented context menu for dialog subview fields with an item matching “Edit ‘x'” from the table subview context menu
- OpenCS: Implemented ignoring mouse wheel input for numeric values unless the respective widget has focus
- OpenCS: Implemented refreshing the verify view
- OpenCS: Implemented configuration of double click behavior in results table
- OpenCS: Implemented severity column to report tables
- OpenCS: Implemented improvements to dialog button bar
- OpenCS: Implemented mouse picking in worldspace widget
- OpenCS: Implemented cell border arrows
- OpenCS: Implemented cloning enhancements
- OpenCS: Implemented fine grained configuration of extended revert and delete commands
- OpenCS: Implemented magic effect record verifier
- OpenCS: Implemented Sound Gen record verifier
- OpenCS: Implemented Pathgrid record verifier
- OpenCS: Implemented Script Editor enhancements
- OpenCS: Implemented color values in tables
- OpenCS: Implemented ID auto-complete
- OpenCS: Implemented partial sorting in info tables
- OpenCS: Implemented dialog for editing and viewing content file meta information
- OpenCS: Implemented using checkbox instead of combobox for boolean values
- OpenCS: Implemented dropping IDs into bar at bottom of subview when creating a record
- OpenCS: Fixed global search not automatically focusing the search input field
- OpenCS: Fixed opening a chest blurring the character portrait
- OpenCS: Fixed not being able to edit alchemy ingredient properties
- OpenCS: Fixed being able to select Attribute and Skill parameters for spells that do not require them
- OpenCS: Fixed unnamed checkbox showing when right clicking an empty place in the menu bar
- OpenCS: Fixed freeze when editing filter
- OpenCS: Fixed verifier not updating local variables when other scripts are modified
- OpenCS: Fixed AIWander Idle not being settable for a creature
- OpenCS: Fixed not being able to enter values for rows in Creature Attack
- OpenCS: Fixed not being able to add a start script
- OpenCS: Fixed verifier reporting non-positive level for creatures with no level
- OpenCS: Fixed value of “Buys *” not saving for a creature
- OpenCS: Fixed scale value of 0.000 making the game lag
- OpenCS: Fixed “AI Wander Idle” value not being saved
- OpenCS: Fixed created creatures always being dead
- OpenCS: Fixed being unable to make NPC say a specific “Hello” voice dialog
- OpenCS: Fixed being unable to make a creature use text dialog
- OpenCS: Fixed not being able to set trade gold for creatures
- OpenCS: fixed race filter on body parts not displaying correctly
- OpenCS: Fixed inverted table sorting
- OpenCS: Fixed Undo and Redo command labels
- OpenCS: Fixed listed attributes and skill being based on the number of NPC objects
- OpenCS: Fixed crash when removing the first row of a nested table
- OpenCS: Fixed incorrect GMSTs for newly created OMWGame files
- OpenCS: Fixed deleted scripts being editable
- OpenCS: Fixed line edit in Dialog subview table showing after a single click
- OpenCS: Fixed incorrect position of an added row in Info tables
- OpenCS: Fixed deleting a record triggering a Qt warning
- OpenCS: Fixed metadata table missing the Fixed record type column
- OpenCS: Fixed not being able to reorder rows with the same topic in different letter case
- OpenCS: Fixed Sort by Record Rype on the Objects table being incorrect
- OpenCS: Fixed undo/redo shortcuts not working in script editor
- OpenCS: Fixed missing TopicInfo “custom” condition section
- OpenCS: Fixed sorting search and verification result table by clicking on the column names
- OpenCS: Fixed enchantment effects always switching to water breathing
- OpenCS: Fixed NPC information failing to save correctly due to mNpdtType value
- OpenCS: Fixed deleting record in Objects (referencables) table messing up data
- OpenCS: Fixed some NPC data not being editable
- OpenCS: Fixed some missing data in cell definition
- OpenCS: Fixed value filter not working for float values
- OpenCS: Fixed undo leaving record status as modified
- OpenCS: Fixed crash from closing subview and opening a new one
- OpenCS: Fixed default window size being ignored
- OpenCS: Fixed TopicInfo data loss when saving from ESP to OMWAddon
- OpenCS: Fixed deleted record remaining in Dialog subview
- OpenCS: Fixed editor not scrolling to a newly opened subview when Scrollbar Only mode is active
- OpenCS: Fixed changing Level or Reputation of an NPC crashing the editor
- OpenCS: Fixed filters not updating when adding or cloning records
- OpenCS: Fixed issues when referencing a non-existing script
- OpenCS: Fixed focus problems on edit subviews input fields
- OpenCS: Fixed crash when applying filter to TopicInfo on mods that have added dialog
- OpenCS: Fixed some dialog only editable items not refreshing after undo
- OpenCS: Fixed cancel button exiting the program
- OpenCS: Fixed mapcolor not changing correctly on the Regions table
- OpenCS: Fixed crash when trying to use cell render view on OS X
- OpenCS: Fixed missing columns in tables
- OpenCS: Fixed a sort problem in the Objects table when nested rows are added
- OpenCS: Fixed script verifier not catching endif without an if
- OpenCS: Fixed list of available content files not refreshing in Open dialog
- OpenCS: Fixed Flies flag having no effect on ghosts
- OpenCS: Fixed save game failing to load due to script attached to NPC
- OpenCS: Fixed reputation value not being stored
2015-11-30 - raevol -
First of all…
2015-09-25 - Okulo
Hello again. Small update since it’s been a while since the last one. The move to OSG has called for a lot of work left and right. Most of it is not exciting enough to get into in a newspost (interesting enough if you want to delve deeper into the development of this project, though!), but there are a couple of things worth noting. First is the object selection via the scene view in OpenMW-CS. Scenes may contain a lot of stuff, and finding the exact item you need may be a hassle. Scrawl and Zini have been working on a way to use the scene window to select objects. Next up is selecting terrain and stuff that isn’t rendered in the scene (such as pathgrids and cell markers). You can’t move them around yet, though, that’s all for a different update.
If you’re not a modder, but only play the game, you will enjoy this second bit of news: Scrawl has restored sun flares! Check out the before and after pics:
Rather than being a flat disk in the sky, light blooms now. Pretties.
Every step in the direction of beautifying the game is a good one and the team (especially OSG/shader magician Scrawl) is planning to do much more! There’s the water shaders, and there are object shaders. The latter may be a bit more difficult than just using an already existing implementation, as performance might be negatively impacted too severely to just plop it in and go, so some work on that is required. After the object shaders are done, work on object shadows can start, something that doesn’t seem all that significant, but it’s one of those touches that makes a ton of difference once you see it. Definitely more on that in a later version.
Disposing of bugs is, of course, also a staple of Morrowind releases. Counting only the bugs on the tracker – so not including all the bugs that have been fixed as soon as they were encountered – 149 bugs have been fixed so far for this release. The other 40 issues on the tracker that have been closed are things such as small optimizations, a scaleable GUI, and several OpenMW-CS features.
Doing so has left OpenMW with less than 100 issues until 1.0. Of course this amount fluctuates wildly and some issues are relatively small while others are huge. Still, it’s great to see the finish line drawing nearer and nearer.
I’m not going to lie to you, though: porting is a toughie and OpenMW-CS has come to that point where nearly all basic functionalities are in place. That means that the next version won’t be released next week or even the week after that. But still, the team is working hard: they are committed to pushing out the next release with terrain optimizations and a basic water shader for your enjoyment.
Troubling as the time since our last release may seem, know that the team is still busy and that the work put in the next version brings one of the most significant changes for players since the implementation of terrain and physics. Thanks for your patience and see you next time.
2015-09-25 - Okulo -
No pingbacks so far.
2015-07-28 - Okulo
Those who have the ability to build OpenMW from the OpenSceneGraph branch have probably already tried it. The new OpenMW is streamlined, fast and of course, most importantly, very functional. It’s not very pretty yet, though. The Ogre version has a bunch of shaders, including Scrawl’s own gorgeous “Shiny” shader which makes the water look incredibly good, but they couldn’t be easily ported to the OSG version. But that’s just eyecandy, and though that is one step back, it’s only temporary. Add to that the fact that with its huge progress in terms of speed and the many fixes that it brings, the whole OSG port represents three steps forward. In fact, it’s far along enough to be included in the next release. So get ready, 0.37.0 will be the version that brings OpenMW-OSG to the world!
At the time of writing, 0.37.0 closes a whopping 138 issues on our tracker. As mentioned in the last post by Scrawl, NPCs are finally the right size. Raindrops won’t make fire see-through anymore and fire no longer make stuff look black. Your followers also won’t be squealing when you touch something the wrong way, so no more “friends” ratting you out to the popo just because you took something that is technically not entirely yours.
Newcomer Kunesj has created a fun little extra that has been integrated already: the crosshair and tooltips can now show if something is owned or not. It doesn’t work as well as it should yet, so for now it requires editing some configuration files to enable and configure this feature, but it’s a good start to something that a lot of players will welcome.
There’s been some work on OpenMW-CS. NPCs should now have a whole lot more stuff for you to edit, including faction rank, level, skills, and the like. UI nags such as the starting size of the main window and a cancel button closing OpenMW-CS rather than returning to the last screen have been resolved. You can now also sort your search results, which should make the global search function even more useful than before. And, oh, bonus! – we also have a pretty colour picker now!
So as you can see, the team is marching on, but besides the engine and the CS, two other projects have seen the light of day.
For the first one we should give a shout-out to TravDark, the creator of Ashes of the Apocalypse mod, and Envy123, the creator of an unofficial expansion to AoA called Desert Region 2. These two creators have generously allowed their work to be expanded and revamped so that they can be run as stand-alone games on the OpenMW engine. To this end, content in these mods needs to be replaced, and such an effort has already started. In order to be stand-alone, however, it requires replacement of all assets made by Bethesda and work from other modders. That’s a ton of work and a solution needs to be found.
Which brings us to the other project: a bare minimum package for game developers. As OpenMW is merely an engine, it doesn’t only run Morrowind. To have a working game on OpenMW, you need some bare minimum files, such as a sky and some animations. Enter the OpenMW Game Template project, a project which aims to provide a minimum package to run OpenMW. Aside from being a good foundation for game developers to work off of, it’s also a fantastic test run for OpenMW. When people try to create their own game, they could run into all sorts of issues and with the tight connections the Game Template project has to the development team, these basic issues can be documented and/or resolved before they can get in the way of the developers of full-fledged games.
So there it is. Two new projects on the side, the CS getting expanded, and OpenMW proper switching to a whole new graphical engine with major fixes and speed as a bonus. Plenty to be excited about, even in this late stage of development!
2015-07-28 - Okulo -
No pingbacks so far.
During the past three months, the OpenMW team has been hard at work porting their codebase away from the Ogre3D engine and towards the OpenSceneGraph rendering toolkit. The previous post talks about our motivations.
We are pleased to announce the porting efforts are finally bearing fruit – as in, all gameplay-essential features have been ported across, so users can enjoy a legitimate game of Morrowind in the OpenMW-osg development branch.
Some advanced features – shaders, distant terrain, shadows, and water reflections – have not been ported yet. However, even this early, it is safe to say the transition has been a massive success, in more ways than we initially imagined. Players will find the new OpenMW loads faster, improves framerate, looks more like the original game, and fixes a host of long-standing bugs that proved difficult to address within our old framework.
Hold on… improved framerate? Let’s put that to the test…
The first benchmark
Our test environment shall be:
GeForce GTX 560 Ti/PCIe/SSE2, AMD Phenom(tm) II X4 955 Processor × 4, Linux 3.13.0-24-generic x86_64
1680×1050, full screen, no AA, 16x AF, no water reflections, no shadows, no shaders
Maximum view distance as per the in-game slider
The testing scene: good old (laggy) Balmora
|Loading time avg.
|System memory avg.
Unsurprisingly, the OSG port wins on all three counts. The framerate improvement is decent, though still far short of the 3-4x improvement we saw in earlier tests with a single model. There is no reason to be concerned, however – you should take these numbers with a grain of salt:
- The comparison is unfair. New rendering features are included in the OSG branch, that bring us closer to vanilla Morrowind compatibility, but affect performance as well. For example, we now dynamically expand bounding boxes based on running animations, which fixes the infamous bug of cliff racers disappearing under certain angles (Bug 455), but is taxing on frame rate as well. Likewise, we have ditched static geometry batching, a performance optimization that was causing a multitude of issues, mainly incorrect lighting and scripted movement of objects not working. Even under all this new workload, the OSG port is still faster!
- Expect higher performance gains for advanced graphical features. The comparison was made with the minimum graphics settings, for the simple reason that the advanced settings (shadows, reflections, etc.) do not exist in the OSG branch yet. We expect that once those advanced features are ported, their impact on framerate will be much lower than before, simply due to the new renderer scaling a lot better with regards to GPU workload. Draw submissions are now offloaded to a worker thread, so the graphical complexity of the scene does not block the main thread from performing work in the meantime such as culling, physics, scripting, and animation.
- The real optimization phase hasn’t even begun yet. The main focus for now has been to get the game back to a playable state, and that only happened a few days ago. Now, there are plenty of optimization opportunities on the horizon. Our new rendering framework gives us more control over how the scene graph is structured, and how updates are dispatched, something we are only just starting to take advantage of. Planned optimizations in the near future include:
- Move skinning updates to a worker thread.
- Move particle updates to a worker thread.
- Share state across different NIF files.
- Enable culling for particle emitters/programs.
- Integrate a model optimizer. Morrowind’s models unfortunately contain plenty of redundant nodes, redundant transforms, and redundant state, which impacts rendering performance. The original engine runs an “optimizer” pass over the models upon loading them into the engine. We should implement a similar optimizer pass. OpenSceneGraph provides the osgUtil::Optimizer that might prove useful for this very purpose.
- Create a more balanced scene graph, e.g. a quad tree, to reduce the performance impact of culling and scene queries.
- Rendering is not the only bottleneck. Assuming an N times faster renderer would lead to an N times faster OpenMW is wrong. We have other systems contending for frame time, and now that our renderer is faster, these other bottlenecks are becoming ever more apparent. In particular, the physics and animation systems are currently the worst two offenders. Some preliminary optimizations for these systems have made it into the OSG port, but we have no doubts there is more room for improvement.
With that said, better performance is certainly not the only change users can look forward to:
- Non-uniform NPC scaling (Bug 814):
Certain NPCs are now scaled along their X and Y axes, giving them a more bulky appearance, just like in vanilla Morrowind. Previous versions of OpenMW were unable to support this kind of scaling, due to an Ogre3D limitation.
- Improved rendering precision: solves large coordinate precision issues, exhibited by flickering/shaking when the player travels too far from the world origin. Video comparison
- Removed static geometry batching: fixes incorrect lighting (Bug 385), fixes scripted movement of objects (Bug 602), and improves cell loading time.
- Vanilla-accurate transparency settings: Previous versions of OpenMW were using transparency settings not quite accurate to vanilla Morrowind, in an effort to facilitate static geometry batching. That has been fixed – users will notice that foliage and other transparent objects now have softer edges.
- Added small feature culling option: In addition to culling off-screen objects, we can now also cull objects that would be smaller than a single pixel when rendered. The visual change is virtually unnoticeable, so we have enabled the option by default.
NPC scaling comparison
Re-designed NIF loader
- Support for non-uniform scaling in NIF files (Bug 2052)
- Fixed limitation on the number of nodes in NIF files (Bug 2187)
- Fixed animations “freezing” when the object is culled (Bug 2151)
- Redesigned skinning algorithm to allow for a more efficient scene graph
- Dynamically expand bounding boxes based on skeletal animation; fixes certain creatures disappearing under certain view angles (Bug 455)
- NIF scene graphs are now a shared resource; drastically improves loading time.
- Animation text keys are now a shared resource
- When compiled with Bullet 2.83 or later, take advantage of btScaledBvhTriangleMeshShape for efficient shape instancing
- Remove the “detailed” Bullet raycasting shapes, replaced by direct raycasting on the scene graph (see “New raycasting” section), vastly reducing memory usage
- Use a btCollisionWorld in place of a btDynamicsWorld, to avoid unnecessary updates for functionality that we are not using
- Map collision objects by pointer instead of by name
- Use the osgUtil::IntersectionVisitor for direct raycasting on the scene graph
- Support for raycasting against animated meshes, fixing inaccurate cursor selection for actors (Bug 827)
- Rewrote item selection logic for the inventory preview doll to use raycasting instead of a selection buffer, improving response time
Improved loading screen
- Loading screen now renders in the draw thread, thus no longer blocks the loading procedure
- Increased loading screen FPS so the loading bar moves more smoothly
- Upload OpenGL objects in a background thread while the area loads, using osgUtil::IncrementalCompileOperation
Improved SDL2 support
SDL2, the library we are using for cross-platform input and window creation, has been more closely integrated with the rendering system. Practical benefits for the user include:
- The antialiasing option finally works on Linux systems (Bug 2014)
- SDL2 is now responsible for creating the graphics context, meaning new display APIs, such as Wayland and Mir on Linux, are automatically supported with no extra maintenance overhead for the OpenMW team.
8x antialiasing in action
A nice side effect of using OpenSceneGraph is access to their top-notch profiling tools. With the ‘F3’ key, an on-screen overlay appears that shows more information with every key press.
Profiling overlay – the colored bars represent OpenSceneGraph’s internal threads, the white bars OpenMW logic
The new OpenMW sports a unified OpenGL renderer on all our platforms. Rendering via Direct3D is no longer supported, easing the maintenance and support overhead for the OpenMW team.
Practically speaking, we have thus “fixed” Bug 2186 (garbage pixels on the minimap on Windows) and Bug 1647 (crash when switching to windowed mode on Windows).
Finally, we do have some bonus changes that are not strictly related to the OpenSceneGraph transition, but were committed to the OSG branch anyway in an effort to reduce merge conflicts:
- Tweaked the activation range for lights (Bug 1813)
- Fixed NiGravity strength (Bug 2147)
- Implemented controller extrapolation modes (Bug 1871)
- Implemented the NiPlanarCollider particle processor (Bug 2149)
- Added UI scaling option:
Normal UI scale
2x UI scale, same resolution
Code maintenance / restructuring / cleanup
The codebase has considerably lost weight, which is likely interesting to developers, though not so interesting to end-users.
- Physics code moved to a new “mwphysics” subsystem
- Removed scene node names, i.e. the RefData::getHandle identifier
- Removed OpenEngine
- Removed platform wrapper
- Removed shiny
In total, ~23.000 lines of code were removed:
git diff upstream/master --shortstat
689 files changed, 24051 insertions(+), 47695 deletions(-)
Phew, that was a lot to take in – even at this stage, the list of improvements is massive, so our first priority should be to merge the port into the main branch, get our various nightly builds up and running again, then get a new release out.
Speaking for the longer term, we are not even close to unleashing the full potential of our new rendering engine. The next steps would be to further improve performance, then work on restoring shaders, distant terrain, water reflections and shadows. Our new NIF loader facilitates the implementation of background cell loading, which was originally planned as a post-1.0 improvement – now, it would be trivial to do, so we might see this feature pre-1.0 after all.
In the meantime though, on the graphics front, there is now nothing stopping us from releasing the long awaited OpenMW 1.0, so perhaps efforts should be diverted to fix the remaining OpenMW 1.0 blockers first, get version 1.0 out the door, then port the advanced graphical features for version 1.1. We might decide this on a case-by-case basis. In particular, the water reflections should be a lot easier to port than shadows, which weren’t working particularly well in the Ogre branch anyway.
If you have an opinion on the matter, feel free to comment. Though regardless of the priorities we decide on, these are certainly exciting times ahead!
2015-06-07 - scrawl -