Multiple layer PNG sequence

Hello at all,
i’ve a huge problem regard playng 5 different layer of png sequence played bu Player DX9.
When I add more layer thank 1 the framerate collapse at 9 fps.
I trying to use the dds dtx1 / dtx5 compression with any difference.
I’m testing now with a custom version of dx11 player but there’s not a notable difference.

How can I resolve it?

The system of my pc is this:
intel i7-4510 @ 2.00
8 gb ram
128 ssd drive
NVIDIA® GeForce® 750Ti

Asus rog gr8



how large are the png’s?
and can you share a patch, then it is easier to point out what could be improved

each frame is 2160 * 1416 span in two diferent render of 1080*1920 ( a vertical projection)

here the patch…
each group of png have 500 frame more or less

test3.v4p (44.6 kB)

Right now you are preloading 512 = 60 frames, that is 60216014164bytes ~ 734MB depending on the amount of GPU ram, that might be a limiting factor.
Try preloading fewer frames.

Also depending on the content of the images you could resize the textures so they take up less space eg. half the resolution on the x-axis will on most content not be noticable in common use especially video.

ok…i’m trying now…
another question…the pc have discrete nvidia card but i cannot put that like primary card…is it normal?

PNGs most of the time are compressed, depending on the actual image content the compression ratio and thus the performance needed to decode the frames varies. (Try for example saving an image that is single-colored vs. one that contains 100% noise). The CPU might not be able to cope with decoding that many frames.

When on the other hand the images are not compressed (or not that much) you’ll may have run into another problem: the speed of your SSD. A decent single SATA SSD should yield about 500 MB/s read speed.
If your images were totally uncompressed the player would have to load about 734 MB/s as Sune already calculated. Which is nearly 1,5 times more than your SSD can most likely deliver.

The Player (EX9.Texture) node has two output pins Duration IO and Duration Texture. Connect each of those outputs to an add-(value-spectral) and compare the results. Both results added together will give you the total loading time, which should not be greater than 1/60 or 1/50 depending on the desired renderer framerate.

If the IO-Duration is the bottleneck you have to increase the loading speed. Which can be achieved for example by putting 2 or more SSDs in a RAID0 configuration or a Windows Stripe Volume. Up to a certain point (e.g. max speed of your sata or raid controller) the read speed increases linearly so two SSDs should give you a read speed of about 1000 MB/s.

If the Texture Duration is the problem you might need a faster processor and / or a faster GPU…

Just as a side note:

I rencently also ran into a performance problem with Player (EX9.Texture) using a rather powerful PC. (Intel Core i7-5820K, 3.300 MHz, Sapphire 4GB HBM R9 NANO, 4 SSDs in Raid0). Even though the combined loading time was nowhere near the time needed for calculating one frame (1/50), the framerate always dropped. I tested a lot of different filetypes/formats and only a combination of tga (textures with alpha) and jpg (no alpha) (if barely) worked out. DDS in various formats didn’t work at all though according to the player decoding time was virtually 0 and loading time also negligible.

When doing some “cross-tests” with a (proprietary) DX11 player there were no perf problems at all.

Unfortunately there was no time to test an equally powerful nvidia card.

actually the frame rate in the player node is just 25fps, so it should “just” load (25/60)*734=305MB/s (if using uncompressed textures) so it should be possible via the SSD if it is decent. So perhaps with DDS DXT1 it could be lighter on the CPU.

but is not possilbe upload all on gpu???
dx11 version works better?

you cannot fit all your images on the gpu at once.
you cannot directly upload png to the gpu without decoding.

so depending where you’re bottleneck is - which bjoern described how to find it out - you’ll either have to go for a less cpu intensive imagecompression or if reading is the trouble you need a faster ssd/raid.

another thing to try is adjusting Threads IO, Threads Texture and IO Buffer Size but since you’re already down to 9 fps i’d not expect to much of these tweaks

png decompression is rather slow… i am pretty sure that this is the main bottleneck.

definitely use DXT compression in .dds files. it has 1:4 with DXT5 and alpha channel or even 1:6 compression ratio with DXT1 if you dont need alpha, which would be only about 80mb…

you can use this nice and fast compression tool: dds-converter

i’ve tried with all type of dds format…but with any result…
at the end I make an OSC controller in order to control a resolume project with dxv codec compression