Pixel Bender issues

1 post

Flag Post

Granted I’ve engaged in PGGC#3, trying to make as much as possible out of Pixel Bender shaders, I’ve started running into really weird issues. For example, a resultant value of floor(height), divided by 256.0, results in a correct value, but if divided by 255.0 (or multiplied by 1.0/255.0, copypasted from calc), results in a strict 0.0. On the other hand, if I write (0.5+floor(height)/256.0), I result in equal 0.5, but if I write (floor(height)/256.0+0.5), I result in correct value. (This is a heightmap alteration shader, that uses two channels for more precise heightmap) CPU render of Pixel Bender, as well as GPU render, show consistent values, while Flash renderer depends on window size and is primarily inconsistent with what I request of it.

A DSA attempt at a shader worked for me twice, while I was using a one-channel heightmap, producing a decent heightmap all the time. But when I have changed pixel processing past collecting data, it broke apart in its entirety. NOTHING was changed either in coordinates calculation, or in the sampling part of code, only the past-sampling computation, and that made it do a big boo boo.

A Perlin noise attempt that used a white noise over the source bitmap instead of permutations, resulting in a consistent hash value within the shader, did work for some, but produced something that does not resemble the usual perlin noise (fractal noise), even if I amp frequency to 16. Weird, but can result from lack of my programming skills.

Several shaders do work, but still inconsistently, my attempt at sinusoidal projection of a cylindrical map did work, but resulted in an unbearable dent at poles, that forced me to abandon this approach at smoothing texture at poles. Slapping numerous blur filters did even worse (while retaining wrappability, though), so I went for ice caps. Pitiful. Of course, the core engine works, otherwise I’d plain rant about it and rage quit.

I wonder, what are the low-level limitations on those shaders, so that I can make them work as I intend, not as some weird programmer at nowhere wants me to comply with his intentions.