ZBrushCentral

Notes and observations on peformance issues in ZBrush 2018

Hello!

I made a post regarding my experience with ZBrush 2018’s performance a few days back. There I presented some of the issues I have been experiencing ever since I upgraded my copy of ZBrush Core to ZBrush 2018 and inquired if anyone else was experiencing similar problems to mine. I was rather puzzled over the lack of threads on the problems I was experiencing and I thought there had to be a bottleneck on my end. I asked around on one of the ZBrush Discord servers and found a few users with the same issues. I have since then got in touch with several other users that have experiencing similar issues with performance. While I havn’t used ZBrush Core for quite a while, I can’t remember ever having performance issues like this.

I am thus suspecting that the issue might be something else than a bottleneck in my system, especially since I installed ZBrush 2018 on a fresh installation of Windows 10 on a system that should be capable of running it decently. Since other users had the same issue as well, I did some more in depth testing and I thus thought I’d make this thread to compile some of the issues I have been having, solutions suggested to me that failed, the procedures and workarounds I have tried, the hardware of my system and the other users I have spoken to, as well as some potential bugs and annoyances I experienced during my testing.

To quickly summarize my problem; ZBrush 2018 runs very sluggishly when navigating the viewport, while also often using close to 100% CPU usage. The slowdown is proportional to how closely zoomed in the viewport is; the more of the viewport the model/tool is covering, the worse the performance gets. There’s no real correlation to the complexity of the model, I primarily used simple primitives during my testing and the performance was still abyssmal when zoomed in. Subdividing/increasing the polygon count of the model does worsen the performance, but it’s only noticable when it exceeds a few million polygons, which is to be expected, unlike the extreme decrease in performance when panning and rotating the view while zoomed in close to the model. One might argue that you could still work pefectly fine with ZBrush despite the rotation/panning performance, however, the decrease in viewport performance also cause major input delays/lag and often causes unexpected behaviour due to the delays, indirectly interfering with the overall workflow.

I do understand that more of the model covering the viewport requires more computational power to fill the area with pixel/pixols and that it increases rather steeply as the area grows, which should affect the fillrate performance. However, with this in mind, I still find it very strange to see the performance takes such a large hit from navigating simple models when zoomed in.

It is my understanding that ZBrush uses a non-traditional, CPU-based method of 3D rendering and that it’s build on the concept of “Pixols”, storing RGB+Normal+Depth data in contrast to the traditional GPU pipeline. From what I have been able to gather and test, the big hitters for performance are the RAM, CPU and Document size, with the scratchdisk also playing an important role. I still however included my GPU specs and notes regarding drivers for the sake of completion.

In short my system specs are:

  • OS: Windows 10 Pro x64, version 1709 (Build 16299) (fully updates)
  • CPU: Intel Core i7-4770K, 8M Cache Quad core (8 logical cores) @ 3.5GHz (Clocks up to 3.9GHz w/ Intel Turboboost)
  • [LIST]
  • Running the latest chipset driver "Intel Chipset Driver v10.1.1.42 (1/17/2017)"
  • iGPU running the latest driver as well "Intel® Graphics Driver for Windows [15.40.37.4835] (11/6/2017)"
  • Watercooled
  • RAM: Crucial 32GB DIMM DDR3 clocked @ 1600 MHz
  • GPU: EVGA GeForce GTX 1080 Ti FTW3
    • Latest NVIDA driver "391.35 (2018-03-27)"
    • DirectX 12 installed and up to date
  • MOBO: MSI Z87-G45 Gaming (MS-7821)
    • Running the latest BIOS version "AMI BIOS v1.9 (2014-07-22)"
  • Disks: Samsung EVO 850 500GB SSD & Corsair Force GS 128GB SSD
    • The Samsung disk is updated to the lastest firmware "EMT02B6Q"
    • The Corsair disk is updated to the lastest firmware "Corsair Force GS v5.24"
    • Page file is located on the faster 850 EVO and managed by the system. 30857MB available according to the system.
  • Tablet: Wacom Intuos Pro Medium (2013)
    • Previously running the latest driver "Driver 6.3.29-6 (4/3/2018)"
    • After inital tests, I ended up uninstalling the driver altogether and switching to mouse to reduce possible bottlenecks

    [/LIST]

    (All parts mentioned above are present in BIOS and is shown to be working properly. I also restored BIOS to it’s factory default settings and only configured the bare minimum settings required to get the system running)

    At the time of installing and trying ZBrush 2018 for the first time, my system was running a fresh, week old, installation of Windows 10. It was fully updated, more or less empty with the exception for Firefox & Spotify, with bloat and startup programs disabled. When I noticed the strange ZBrush performance I used Microsoft’s Media Creation Tool to download and reinstall a fresh image of the OS to see if there was anything wrong with the OS itself. I re-downloaded the ZBrush 2018 installer from the link I recieved when upgrading to make sure the installer wasn’t corrupt. I also made sure to update all drivers (GPU, chipset, integrated GPU, SSD firmware, BIOS/UEFI) (though I doubted it was the culprit, I checked an extra time to ensure all driver where x64), this however, did not change the performance. Finally I scanned the Windows 10 registry and my disks for errors.

    I might add that I disabled my anti-virus during the download, installation, activasion and during my first tests, to be certain there was no interference, as recommended by the ZBrush Support pages. I also had a look through the Troubleshooting folder that ships with the ZBrush installation. I installed all the x64 vcredist/.Net Framework updates provided in the folder, in addition to downloading the updates from Microsoft as well and ensuring that everything was up to date. I made an extra check to ensure that “Data Execution Prevention” was off, as recommended. Finally I made sure that “High Performance” under Windows energy saving settings was enabled. Alas, still no noticable difference in terms of viewport performance.

    At this point I figured I might as well try to isolate each part of my system and do as much testing as possible individually. I did some monitoring of temps, clocks and trends with a few different tools and ran a few different benchmarking tools to see if there was any underperforming or components, but I could not find any problems with the hardware. Benchmark results provided below for reference.

    Memcheckx86 (RAM):

    • 4 passes, all possible patterns, 0 errors

    CrystalDiskMark (Disks):

    • Passing status on all S.M.A.R.T. attributes for both drives
    • Health status:
      • Samsung EVO: 100%
      • Corsair: 99%
    • Samsung 500GB:
      • Read: 550MB/s
      • Write: 527MB/s
    • Corsair 128GB:
      • Read: 484MB/s
      • Write: 213MB/s

    Samsung Magician (Disks):

    • Drive Condition: Good
    • Firmware Version: Latest
    • Samsung 500GB:
      • Read: 549MB/s
      • Write: 526MB/s
    • Corsair 128GB:
      • Read: 477MB/s
      • Write: 237MB/s

    Corsair SSD Toolbox (Disks):

    • Status: OK
    • “Firmware is up to date”

    Windows chdsk (Disks):

    • No errors reported for either drives

    UserBenchmark

    • Samsung 500GB:
      • Read: 492MB/s
      • Write: 399MB/s
    • Corsair 128GB:
      • Read: 483MB/s
      • Write: 214MB/s

    7-Zip (30 passes) (CPU)

    • Rating: 22744MIPS

    Cinebench R15 (CPU, GPU):

    • CPU score: 98
    • OpenGL score: 748

    3D Mark (CPU, GPU):

    • Time Spy score:
      • CPU: 4077
      • GPU: 8346
    • Fire Strike score: 18636

    PCMark 10

    • Score: 5424

    userbench.png

    When comparing my system with similar systems shown in the benchmarking tools highscores, the machine is performing fairly well and there doesn’t seem to be any hardware issues occurring. It’s well within both the minimum and the recommended specs for running ZBrush and exceeds the recommended RAM and disk hardware.Pixologic :: System Specs

    Below is the system load after a clean startup of the PC:

    boot_perf.png
    boot_perf2.png

    Going back to performance issue itself; I did a few test, panning and rotating at a few different level of viewport zoom to see how much on an impact the zoom did to the navigation performance. I used very few samples for the example below (5 different levels of zoom), but in my experience, the result holds up to almost any level of zoom I tested and I tried using the average RenderTime I got rather than extremes. I used a rough approximation for the “model view-area coverage” so it’s not necessarily very correct, but it shows off relation between model coverage and performance descrease.

    Since GPU FPS overlays doesn’t work in ZBrush I used the “Preferences > Utilities > Timing Info > RenderTime” to approximate framerates. I still feel like the approximations are rather optimistic, in practice it feels far lower, especially in combination with input lag and stutters.

    A graph showing off the relation between model coverage and performance based on the samples:

    view_perf_graph.png

    Below is the CPU/RAM load during Exmaple 1 (fully out-zoomed):

    view1_perf.png

    And the CPU/RAM load during Example 5 (fully zoomed in) as well as the per-core usage at that level.

    view5_perf.png
    view5_cores.png

    Based on the images above, it appears that ZBrush is using all the CPU and all of the 8 cores to the max. Even a slight rotation or viewport movement, regardless of model complexity cause the CPU usage to spike. While using 100% of the CPU is not inherently a bad thing, the performance is still rather poor all things considered. The watercooling also keeps the CPU running at 3.9GHz at a cool 30-40C (86-104F), which makes me doubt that the CPU is throttling due to overheating.

    It also doesn’t seem to be a shortage of RAM, since the OS+ZBrush always stayed <5GB, barely scratching the surface of the 32GBs installed during all of my testing. Albeit, the RAM itself is DDR3 1600GHz, it was still capable of transfer speeds up to 19GB/s during benchmarks, making me doubt the RAM is causing the issue.

    Before testing, I did a fresh restart, only starting notepad, MSI Afterburner and the TaskManager alonside ZBrush, which i re-initialized. I also disabled my second monitor, since some old threads suggested that it could cause issues in previous ZBrush versions. As for my ZBrush settings, I kept all of the settings other than the one I am mentioning at default and running it without a custom UI or any UI modifications. While going through old ZBrush threads regarding performance, a common remedy that was often suggested was to play around with MultiDraw, CompactMem, QuickAndDirtyEdit and also use the multicore optimizers. I had previously tried tweaking these settings but to no avail, but I tried configuring it for maximum performance. (Settings in the image below). According to the optimizer, there wasn’t much optimizing to be done.

    I repeatedly read that it was rather common to accidentally enable “Dynamic Subdivisions” and I double checked to make sure this was off several time both before, during and after my tests. I was also recommended to reduce document size. I reduced it 50% at a time down to about 144p and tested the results. While the viewport performed better, it was still far from desireable, especially since the whole canvas became a pixelated mess and hard to work on. Double sided display was also turned off.

    As for the models I used, I primarily tested the performance with my ZBrush Core projects, a few new simple ZBrush 2018 projects I made, simple primitives and ZBrush Demo projects. I did not test it with polygon-heavy or subtool-heavy tools, since the performance scaled even worse on polycount-heavy tools. My primary test file was the Dynamesh_Sphere_64.ZPI and the female face basemesh. I also used a simple primitive cube in different scenarios to ensure that the polygon count wasnt the main issue.

    multicore_perf.png
    settings.png

    Some miscellaneous things I tried or noted:

    • - When asking around for people with similar problems, I noted that the majority of those that had similar issues ran i7:s from the 4th and 3rd generation (specifically 4770. 4770k, 4790, 3770), while Ryzen (Ryzen 1800 2nd gen) did not experience the issue. Those who also had ZBrush 4R8 reported significantly better performance and did not notice them same issues as in 2018. They also found CPU usage to be significantly lower. I can't confirm this as I do not own 4B8 myself, but it seems to be the consensus that 4B8 performed better. The issue doesnt seem to common among the users I spoke with. Some had it, some didn't.
    • I tried running ZBrush on the integrated Intel GPU instead of the NVIDIA GPU. Since ZBrush isn't very GPU reliant I didnt expect a performance increase. It didnt make a difference.
    • I tried a couple different matcaps that ships with ZBrush and noticed some performance changes between them. Also worth noting is that basic materials (the ones that react to light direction) really destroyed the performance and made it impossible to work with. The Fast render mode however, gave a nice performance boost, but at the loss of MatCap variety.
    • I tried installing ZBrush on both of my SSD disks without any noticable difference. I borrowed an SSD from a friend to see if that would make a difference, it did not.
    • I changed the scratchdisk location as well and tried it on all the disks. I also removing all the plugins, with no noticable change.
    • I tried reducing the core count for MultiDraw since some Mac users had some success with that, but that only made performance worse.
    • A common thing that happens is that I press the S-key to resize the brush, then immediately after set my desired brush size and proceed to put down a stroke on a tool. This works fine when zoomed out, but when zoomed in, due to the input lag, the size-selection doesnt always register. When I then try to make a stroke on the model ZBrush still thinks I am in the brush-size selection and keeps the brush-size UI visible. It kind of becomes stuck until I either locate it and select a brush size, or change my brush. Pressing S again doesnt close the stuck slider. It's a minor annoyance since it sometimes leads to accidentally increasing the brush size by a massive amount by accident during a lag spike, but could be solved by allowing the option to only keep the slider visible and active while the S-key is pressed down and close itself when the key is released.
    • Another input-lag related issue is that actions doesnt register until ZBrush catches up from a lag-spike. I use "CTRL + Right Mousebutton" to scale/zoom the viewport and "ALT + Right Mousebutton" to pan around the viewport, it works out pretty good for me. However, when I pan during a lagspike, my "ALT+RMB" pan doesnt always register but instead, ZBrush registers the ALT key and my Right Mousebutton movement, but when I release it and expect the view to stay in the location I panned to, ZBrush, due to the lag, registers it as if I release ALT first, which register the action as a "Alt + Right Mousebutton + Release Alt" scale/zoom, which cause my viewport to suddenly just zoom-in/out very suddenly instead of performing the pan I expected. (It can be seen in the video linked at the bottom of the post, the viewport zooms in-out very suddenly a few times, which is me trying to pan, but due to the lag, performing zooms)
    • Since licenses are cross-platform, I thought I would try ZBrush 2018 on my 13" Macbook Pro Early 2015 (Intel i5 2.7GHz Dual Core, Intel Iris 6400 iGPU, 8GB DDR3 1867MHz, 128GB SSD, Retina Display). Surprisingly it ran much smoother, framerate-wise, than my PC. It did suffer from pretty severe screentearing, but the performance was very acceptable. Due to an already worn out battery, the heat generated and the fans maxing out, I doubt I will work with ZBrush on it. But I found the performance difference compared to my PC interesting, considering that it's pretty modest hardware in terms of specs.

    While on the topic of bugs and stability, I had a lot of crashes during testing and I’ve read and heard other people having issues with this as well. I understand this is to be expected with a new release and as far as I am concerned, this is not as big of an issue for me as the performance, which at the moment makes me more or less unable to work with the tool, or at least really tests my patience. The input lag can really mess up interactions with the menus and hotkey usage.

    Unrelated to the performance; I played around a bit with creating custom UI:s while reading through the docs and ended up creating a custom menu. When I saved my configuration and restarted ZBrush, on opening my custom menu, I noticed that all the palettes and subpalettes in my custom menu would be expanded by default when starting ZBrush. This might be intended, but I would like the option to start ZBrush with custom menus palettes contracted/closed. Better illustrated with the image below.

    custom_menu.PNG

    That would be most of the notes I’ve gathered during my testing of 2018. I havent found a solution (except for turning on Fast/Flatshading and using ZBrush with a 240p canvas), but I still have a few things I want to try. To be absolutely sure there isn’t any hardware issues I’m planning on taking my PC apart and cleaning it and checking all the connections to really be sure if it’s hardware related in my case. I’ll then do a complete reinstall and go through the driver/installation process once more. I will update this thread if I find anything useful or leads on what could be the cause.

    I hope this can be of some use for the devs or any users that have similar problems and are trying to chase down the issue. At the very least, there’s now at least a thread about it for those who are experiencing the issue.

    I am very pleased with the tools, brushes and plguins themselves. I really love what features I have been able to use and I don’t regret my purchase, kudos to the Pixologic team. I do however, hope to se a fix or patch for this issue in the near future since I really, really want to get started sculpting and at this current state, I have a very hard time doing that.

    Finally, here’s the video I attached to my other thread. If watched in 60fps, it can clearly be seen when the framerate drops. It also shows the input lag, causing the vieweport to zoom in and out suddenly every now and then when I try to pan.

    //youtu.be/odZ1sN68WLs

    Cheers!

    Attachments

    userbench.png

    view5_cores.png

    Thanks for all the work on this. I have the exact same problems and had to go back to 4R8 for my production work as the performance there is perfectly fine!

    I also went back to 4R8!

    I have to agree. Similar problems forced me to revert back to 4R8.

    @dsoellbuster, @believehammer & @dddstudio; Would you guys mind sharing your computer specs? Or at least your processor model and your amount of RAM?

    Sure.

    Operating System: Win10 64bit
    CPU: i5 3570k
    RAM: 16 GB

    Sure: my pc has 32 GB of RAM and my CPU is a Ryzen 1800x.

    Just wanted to let you know I have the exact same problem. 4R8 worked just fine, but 2018 performs horribly when zoomed and it constantly runs at 100% CPU load, even when I just move the cursor.

    I run a an old mid 2010 iMac 27":
    i7 2.93Ghz (870)
    24GB ram

    So, I don’t think the CPU could be the problem, considering the big difference in generations.

    Yeah it seems it is not processor specific.
    The problem on my setup is so bad, that I can’t even listen to music in the background, because it lags constantly when I rotate my zoomed-in model.

    Has there been any update on the issue? Any patch plans announced I may have missed?

    from what ive seen no.
    aurick did say he was going to pass along the message to the developers (if they already didn’t know)

    Seems to be fixed now with the update. At least for me.
    How’s it working for you?

    I experience the same performance issue with 2018. Unfortunately, it wasn’t fixed with the first patch.

    I found that it is the most obvious with the Move brush or the Transpose tools on high poly subtools.

    I ran a test on both 4r7,2018 and 2018.1 where i subdivide the default cylinder up to 8mil tris and play with the move brush or the transpose tool on the mesh. The performance difference between 4r7 and both 2018 version is very obvious.

    does anyone found a way to work around that issue?

    Ps: i tried this test and had the same result on 3 different pc with i7 or Xeon Cpu