This is a thread with rendering updates for January! Also welcome to 2018. We’re starting to pick up pace again after the code freeze. Thanks to @ConvexRumbler, @Homeomorph, @maxvee, @programeow, @Qiblox and zeuxcg for working on these updates! Also welcome @NeoBuilder101 - excited to have you onboard!
Vulkan on Android
We have successfully shipped Vulkan support on basically all Android devices we can ship it on - this includes phones, tablets, Chromebooks and what have you. The general rule of thumb is that you should have an Android 7.0+ OS and a reasonably modern phone to support it - there are some exceptions where it works on Android 6.0 (Samsung has support on 6.0 on some phones, and I heard that some Tegra devices support it as well).
Overall Vulkan devices account for ~15% of our Android userbase. Vulkan improves rendering performance, improves battery efficiency and reduces memory consumption. We automatically figure out whether to enable it based on whether your device supports it.
The common devices where you’d see it work are Samsung Galaxy S6/S7/S8 with Android 7+, Google Pixel 1/2, many newer LG phones, etc. There’s probably an app somewhere on Google Play that tells you if your phone supports it We currently disable Vulkan on Meizu Pro, Acer Iconia and Huawei Mate devices; Huawei Mate will probably get re-enabled in February but I’m not optimistic about Meizu or Acer since the Vulkan drivers there aren’t great.
We have several further memory & performance tweaks that are coming down the line for Vulkan, and are thinking about enabling Vulkan on Windows - you can already test it in Studio if you have recent graphics drivers by changing GraphicsMode in Studio settings, so don’t hesitate to file bugs if you find any! (other than the “Unable to load Vulkan API” error, which is an indication that your drivers or GPU need updates)
Instancing
We continue to work on instancing. Since last update, we’ve enabled it on Vulkan-compatible Android devices and are looking into activating it on most non-Metal-compatible Macs and on some non-Vulkan compatible Android devices; next month we’ll find out how it went!
Additionally we shipped a number of instancing-related tweaks:
- Fix rare race conditions that could cause updates to instanced parts to be applied incompletely and fixed on the following frame (e.g. changing Color & Size from a script could have rendered the part with just the color or size changed applied for one frame).
- Instanced objects with Transparency=1 no longer render - this fixes some Glass artifacts and, more importantly, fixes a performance issue with having many hidden CSGs/MeshParts
- Instancing now consumes up to 20% less VRAM for large meshes/CSG objects
- Triangle counter on render stats panel was not taking instanced objects into account properly; this is now fixed.
We are now looking into making the instancing system work well with other part types. This will take time and we don’t know which parts we will end up supporting and which we won’t for now the advice is to prefer using MeshParts to SpecialMeshes if at all possible (MeshParts are instanced, SpecialMeshes aren’t).
Various performance and memory improvements
As usual, there’s a number of unrelated changes in this category:
- Lighting voxelization work has been largely moved out of Prepare and into Perform. We used to voxelize objects for lighting in Prepare which meant that all other work like Lua scripts couldn’t run concurrently with that. Now the lighting work we do in Prepare is as small as possible, and we’ve optimized some computations required for voxelization as well.
- UI is now slightly faster to render on mobile devices with high resolution screens.
- Some parts of the loading process are now more efficient for levels with many meshes; on ALONE this saves ~2 seconds of CPU time during loading which makes the process slightly faster and smoother.
Miscellaneous fixes and improvements
Pretty simple this time:
- Fix some fonts not rendering on Windows systems with localized Windows usernames
- Fix built-in screenshot recording functionality on Mac
Direct3D 9 quality changes
This is probably not terribly important to most of you, since Direct3D 9 is only used by ~3% of our Windows users, but just in case anybody is wondering:
We still support Direct3D 9 and will do so for the foreseeable future; however, to simplify maintenance, we treat it similarly to low-end mobile devices in that most high quality shading and some post-effects are disabled there as of this month. So don’t be surprised if you notice materials or water or other things not looking as good on systems that don’t support Direct3D 10/11.