Yona-Appletree / LEDscape

Beagle Bone Black cape and firmware for driving a large number of WS281x LED strips.
126 stars 58 forks source link

Dithering vs maxing out framerate #11

Open MFornander opened 10 years ago

MFornander commented 10 years ago

Yona,

Apologies if I am abusing the "Issues" as a forum. I'm wondering if you would recommend leaving dithering on or off in the following scenario:

We produce and consume OPC frames on the same BBB and simply loop back the UDP messages on localhost. This allows us to use the OGL OPC simulator to test patterns for people without hardware. Since our strands are 100LEDs we have a max rate of 300fps. We are close to this with a rate of around 240FPS both producing OPC frames and consuming them using opc-server.

I'm turning dithering and interpolation off at these rates since our effects are time-driven functions that are driven by delta-T, not frame index. At these rates I think it's the right thing to do but I'd like your opinion in the matter.

Cheers, Mattias

Yona-Appletree commented 10 years ago

Mattias,

Let's consider interpolation and dithering separately, and I do apologize if I'm telling you things you already know (or if I'm making any factual errors or false assumptions).

Interpolation happens first and handles cases where the incoming framerate is low, but the outgoing framerate is high. This can be useful to save resources on the effect generation side. In your case, the difference between input framerate (240) and output (300) is low, so I would agree and say you don't need interpolation. You might consider using it though, if your visualization generation uses more CPU than LEDscape does to do interpolation.

Dithering handles the fact that WS2811-based LEDs have a linear brightness response but human perception is more logarithmic. The perceived brightness delta between brightness levels 0, 1, 2, etc... is much greater than the difference between 250, 251, 252. Inspired by FadeCandy, dithering will improve the perceived brightness shift by "flickering" the LED levels over time so they average to a value between the levels that the hardware supports. Generally, I would say that dithering helps at any framerate above 200fps, but I would experiment with it to see. You'll see the most improvement when the brightness levels are low...you can try dimming your pattern generation down to 10% or so.

Let me know what you find out, and we can update the README and close this ticket.

Thanks,

Yona

MFornander mailto:notifications@github.com July 28, 2014 at 14:23

Yona,

Apologies if I am abusing the "Issues" as a forum. I'm wondering if your would recommend leaving dithering on or off in the following scenario:

We produce and consume OPC frames on the same BBB and simply loop back the UDP messages on localhost. This allows us to use the OGL OPC simulator to test patterns for people without hardware. Since our strands are 100LEDs we have a max rate of 300fps. We are close to this with a rate of around 240FPS both producing OPC frames and consuming them using opc-server.

I'm turning dithering and interpolation off at these rates since our effects are time-driven functions that are driven by delta-T, not frame index. At these rates I think it's the right thing do do but I'd like your opinion in the matter.

Cheers, Mattias

— Reply to this email directly or view it on GitHub https://github.com/Yona-Appletree/LEDscape/issues/11.

Yona Appletree Senior Developer Concentric Sky, inc yona@concentricsky.com