Loki Elliot has been running a series of articles titled AvaStar Unleashed (now part 7). The articles appear when Loki gets to it, meaning not a regularly published thing.
In this one, he has found a problem…
For sometime, Loki has been frustrated with AvaStar as it wasn’t doing what he wanted… or it maybe he just wasn’t doing things as AvaStar was designed to do them. I haven’t dug deeply enough into his workflow to know. But, I have been in the same place a number of times finding it was more me than AvaStar.
Often how we work and how AvaStar is designed to work conflict. The best way to resolve such issues is in the Blender AvatStar in-world group. Filing trouble tickets on the AvaStar site is great for reporting bugs. But, not that great for getting feedback. Feedback comes best from the in-world group.
In the current article, Loki has found the math precision problems that creep into Blender work from repeated operations on a model. He has a GIF image that shows the progression and eventual distortion.
The math problem is like the problem of making Xerox copies of copies. Each copy generation loses quality. Each time a mesh has an operation performed on it, a bit more precision is lost. I don’t mean just moving a vertex. I am talking about the modifiers that perform mathematical operations on the mesh.
People are often unaware of the nature of real numbers in a digital world. Blender uses a number format known as single-precision floating-point. This means the number is represented by 32 bits of information: 00000000 00000000 00000000 00000000. This uses 4-bytes of computer memory. The number and its sign and exponent have to be represented in these 32 bits.
What this means is not all numbers can be represented. Like images in Second Life™, the number of pixels has to be evenly divisible by 2. So, we make our images 64, 128, 256, … In our digital world, there is no way to represent the number 1/3 to infinite precision. So, the number at some point becomes .3333334. In Blender, I think we are limited to 7 digits of precision.
So, each time we have a math operation that produces an odd number, the system has to force it to an even number in the last significant digit. In my example that introduces 0.0000001 of error.
If you use the Windows 10 scientific calculator you’ll see it uses an extended algorithm and 128 bits or 32 digits of precision. Since all it has to do is process numbers, it can use that large numerical format. Blender and SL have to render hundreds of millions of numbers in <=22ms. So, they take some shortcuts and one of those is a smaller number format. Blender needs speed and accuracy is WAY less important.
It is a physical limit of the digital world.
There are obviously ways around the limit, but it is an accuracy versus speed thing. So, if you are working at CERN, your computer uses a more precise numerical format because you use special software and have time. Using Windows 10 as most of us do is revealed by a bit of research as having the same issue and you will find that Microsoft warns users about the problem: Floating-point arithmetic may give inaccurate results in Excel. (2017 – This explains the problem with more technical accuracy) So, it isn’t just a Blender or AvaStar problem. Any digital binary system has the issue. We just do or don’t see the problem depending on what the software is designed to do.
Versions
I noticed Loki mentioning a version 2.1.2 (11/2017) Checking the AvaStar website I only see version 2.1.1 in My Products. Etheria tells me there is a Beta version 2.1.2 out and to look for it in the Archive folder then in the Experimental folder.
fix: system meshes where no longer treated by the appearance sliders as expected
imp: use maximum available precision for exported float data (fix issues with sky platforms and SL precision animation) fix: Stacktrace when reporting issues during export of models with references to unavailable images.
IMP: … Improved? Implemented? Whatever, some precision stuff has been improved. But, the reality of digital math is still there and we’ll have to deal with it.
Blender is on version 2.79 with version 2.8 close on the horizon.
imp: Improved feature
I added some text to the release notes at
https://blog.machinimatrix.org/avastar/changelog-2/
thanks for the tip 🙂