Saturday, November 14, 2015

Olsen Noise Implicit Boxiness, or Causing Artifacting With Interpixel Levels

If for whatever reason you need something that does a full range of levels rather than discrete levels, you'll find Olsen Noise to cause artifacting, if you try to achieve that by doing a non-floored division on the blur. The problem is within the scopes it does a few operations:

upsample & adjusts position for scoping.
applies blur,
applies noise.

Well, the upsample are squares and the blur is a box blur, applied for each given level. The blur could well just be a high sigma gaussian of upsampled and speckled landscape (infinite scoped field).


Without blurring the pixels at various level become apparently. It's a bunch of noisy pixels and different levels (and thus sizes) which then gets blurred successively, rather than something like midpoint displacement in diamond squared. This works, but only if the edges are not allowed to propagate. Typically this is because the number of blurs will clip out the error so that the topmost iteration, none of it could persist. Well, if you're doing things where the difference between 0 and 1 matters to you, something other than voxel height maps or images where very tiny but ultimately discrete distances from one pixel to the next matter, then the obvious seeming desire is to have the blur (total / 9) rather than floor(total/9). As this will result in a non-boxy set of levels and give you artifacting as you cannot fully clip the edge of the giant deep-level pixels.




For clipped floored blur between the areas.


Without clipping during the blur process.

The latter method causes artifacting from those boxes being blended but not clipped. So the impact of the difference between one pixel and the next at the iteration=0, will *still* exist in the final image. Rather than be guaranteed to be eaten by the rounding in the blur. Since every pixel transition will always have a non-zero effect on the final image, and pixels are square. It produces square artifacts if you don't clip. If you do, then you get boxes. You could apply a final blur that doesn't clip to the end result.

So get the boxy version, then blur that, and get it looking smooth and artifact free.