Home Adobe Substance

[Painter] Performance, Painting, and Height L32F

Bek
interpolator
Offline / Send Message
Bek interpolator
So recently I jumped back into SP to try the new updates. All the new features are fantastic. There are still a few bugs that are an annoyance, but my biggest problem, which may be my fault, is performance. Specifically, when painting. Here's what I experience:

[ame]https://www.youtube.com/watch?v=1UCqoXOYWPs[/ame]


So, is it normal to use Linear 8bit float as a working format for height (Obviously switching to 16 or 32 before final export)? Or have I just gone overboard with my layers? I hope the latter isn't the case as I'd like to be as non-destructive as possible. Is there anything else I am missing or misunderstanding about the SP workflow? Is anyone else, specifically AMD users, experiencing anything similar? For reference when I started this project performance is fine even with 32bit float for height. So I assume all the layers are contributing to the slowdown. Viewport performance is fine though, no issues there. Only when painting or making changes.

As for specs:

i5 2500k @3.3ghz (stock)
AMD 7870 2gb (In the video my audio is cut out as it re-renders at 8bit for height, I was explaining that I'm not using catalyst 14.4 as SP recommends in the log as I get stability issues in other apps, and the newer 14.12 omega drivers are, from what I read online, worse for my particular card. Currently on 13.12)
8gb ddr3
Win8

Replies

  • Froyok
    Offline / Send Message
    Froyok greentooth
    Hi,

    So let me answer some points regarding your video as I see some misunderstanding (not your fault to be honest, some things in Substance Painter are not always very clear unfortunately). Also some technical knowledge can be required to understand Substance Painter the best possible and get the maximum performances.

    - Painting on layers that are below of other layers will have some impact on performances, similar to Substance Designer when you tweak a node at the source of a graph : by changing a layer early, you end-up computing the layers on top simply because of the hierarchy. A solution to that is to hide the layers on top of the one you are currently working on (temporarily). Then unhide them once you have finished, this way to will compute the whole layer stack only once and not during each stroke.

    - The Solo channel is only a display feature, it has no real impact on performances, in the background we still compute all the channels, whether you display all of them with the PBR view or not via the solo channels.

    - We can't guarantee performances without the recommend drivers unfortunately. I understand if you don't want to update them since you have performances issues in other applications. If one day you have the chance to upgrade them, I recommend to do it.
    Also note that AMD drivers have a tendency to make poor performances and break things between drivers versions without any reasons, especially for 3D Softwares. So while we do our best to support AMD cards, the drivers make our job really hard (that's why I would personally advise to use NVidia GeForce cards instead).

    - In the video you mention you are working at 4K by 2K, but that's not the case. In the TextureSet settings I'm not sure why the second dropdown display 2K, because it seems disabled and the lock on, so it should display 4K instead. If the lock is on, it's means the Width and Height of your texture will be defined by the first dropdown only. So on your current texture set you are at 4K by 4K.

    See this example :
    1427880197-texture_set_settings.gif


    - Our channels are uncompressed, this means that when you are working with multiple textures (height, basecolor, metallic, roughness and so on) you end up with 4 or more textures at the resolution of your document that need to do some back and forth between the software and the VRam (your GPU memory), you end-up with a lot of bandwidth consumption. Also your card has only 2GB of VRam, this means painter will use 1GB (at launch Painter register 50% of your VRam is possible). A 32bits height map will be around 190mb for example.

    The uncompressed map per channels adds up quickly in size, then you add all the substances and materials and other layers you have to keep in VRam in order to be able to compute the result of the blending. So you quickly fill the VRam and do a lot of back and forth with the GPU. A 4K by 4K texture set can consume something like 4 to 8 GB per second on very complex layer stack.

    - Another source of poor performances is the fact that some other applications can eat the VRam too. The Unreal Engine 4 will require something like 70%/80% as far I know, Flash (yes, the ugly Flash player that you get on Youtube) can also impact the performances. A solution to that is to be sure Substance Painter is launched first in order to request its own VRam allocation.
  • Bek
    Offline / Send Message
    Bek interpolator
    Hi Froyok, thanks for the detailed reply, that helps a lot. This is the first big project I've attempted in Painter so I was unsure what my expectations should be. I guess until I upgrade my hardware I'll just have to dial in what # of layers etc it can handle at once.

    Interesting that the lock was enabled; I actually just checked this and it was at 2:1 despite what the lock might mean ; I checked this by disabling the lock and switching to 4k x 2k and nothing happened. Additionally the textures I had already exported from that project were at 2:1. I'll change that and see how it goes. And yes I can try to minimise my vram usage before launching painter. Working with all other groups disabled seems like a good current solution though; it is a shame that the texture set feature couldn't also be used to break up a mesh into parts that still use the same UV's — I tried this so I could hide/unhide stuff in painter when working for convenience, but realised it split each texture set for exporting. I mean I could combine them manually afterwards but... eh. That soon becomes tedious. Using texture sets for a single mesh would also solve having to import an exploded mesh to texture the moving parts and so on that are normally obscured, like the folding stock on an AKS.

    Alternatively, some way to 'merge' layers as in photoshop would be cool. Does this exist already? I may have missed it.

    If I do end up playing around with drivers and finding out anything useful I'll post here. nVidia seems to be better supported all around the 3d world though, so that'll most likely be my next card.
  • WarrenM
    A solution to that is to be sure Substance Painter is launched first in order to request its own VRam allocation.
    Ahh that's a good tip, thanks! I'll try that in the future...
  • Froyok
    Offline / Send Message
    Froyok greentooth
    Bek wrote: »
    Interesting that the lock was enabled; I actually just checked this and it was at 2:1 despite what the lock might mean ; I checked this by disabling the lock and switching to 4k x 2k and nothing happened.
    Sounds like a bug then. I will look into it.
    Bek wrote: »
    I tried this so I could hide/unhide stuff in painter when working for convenience, but realised it split each texture set for exporting. I mean I could combine them manually afterwards but... eh. That soon becomes tedious.
    Yeah I can understand. In the future we will offer some advanced settings for controlling the padding, this should help for merging the textures. Also Substance Designer would quite handy for this kind of process by the way (by working on full materials at once to perform some masking and texture compositing).
    Bek wrote: »
    Alternatively, some way to 'merge' layers as in photoshop would be cool. Does this exist already? I may have missed it.
    Nope, we don't have this "feature" simply because we can't support it, we don't work the same way : Painter is fully non-destructive. So every stroke you do is saved. The thing that could be improved would be to compress or compute the data more quickly on our side. There is still room for improvements on this subject.
  • WarrenM
    To extend the compression idea, there COULD maybe be something where I could right click layers and set them to "frozen" mode or something so Painter could optimize them in some way so painting below them would become faster? I dunno...

    As it is now, once I get beyond a handful of layers, working at 4096 is a no-go. Even 2048 becomes challenging after awhile.

    The offset is that I like that I can work at 1024 if I want to but it still exports at 4096 and looks great...
  • Bek
    Offline / Send Message
    Bek interpolator
    WarrenM wrote: »
    To extend the compression idea, there COULD maybe be something where I could right click layers and set them to "frozen" mode or something so Painter could optimize them in some way so painting below them would become faster? I dunno...

    Yeah, like nDo has a zip layers/group function — so it isn't destructive as you can unzip and make changes if you later need to.

    Having a lower working res is a good option too, but you really need the full resolution for doing the small details. I also noticed quite a big difference in quality between 32bit and 8bit for the height map, so not sure how practical working at 8bit or 16bit will be. But I'll give it a go.

    Out of curiosity how much ram/vram are you running Warren?
  • Gheromo
    Offline / Send Message
    Gheromo polycounter lvl 11
    Theres also similar functionality in Mari where you freeze particular layers you want and it improves performance a lot.
Sign In or Register to comment.