kawecki opened this issue on Jul 20, 2010 · 19 posts
kawecki posted Tue, 20 July 2010 at 6:05 PM
BACKGROUND
The camera model that Poser use is wrong, well not only Poser, other 3d engines too.
The camera model that Poser use is the same as a photograph machine, but human eyes are not a photo camera. What our eyes see is not the same as what is captured in a photograph.
Our eyes are able to see near and far objects at the same time, with a camera we have to adjust the focal distance and lenses for near or far away objects, but we cant have both at the same time.
The consequence is that we have blurred and distorted images near or far and the distances shown in the picture are not the real distances.
Translating the problem to Poser, the subject of this thread, the most annoying problem is with the ground plane. The texture of the ground plane that is very near the camera looks very bad, is horrible and distorted and not only very near, far away it also looks bad. In the middle range is ok.
We can improve the rendering using big or huge high resolution textures for the ground plane. As there are much more pixels in the texture the distortion of the near pixels is not so horrible.
Other way is to tile the ground plane to avoid the use of huge textures.
In this way we can solve in some way the near ground, but the far away ground plane texturing continue to look bad and nothing can be done.
The research
Looking at the texture near the camera of the rendering I observed that the pixels are very stretched vertically, more nearer more stretched and in the far away ground the pixels are very compressed. If we divide the texture image in square elements the shape of each element is not preserved. Near the camera each element looks as a vertical dash, far away looks as a line and in the middle is more or less a square. Also the size of each element decreases in a non linear way as get away from the camera.
By comparison, looking with my eyes al around I found that the shape is more or less preserved and the size of each element decrease in a linear way as the distance from my eye increase.
Mathematics
The camera model of Poser or photo machine is
x1 = A.x.f(z) y1 = B.y.f(z) where x,y,z are the object coordinates and x1,y1 are the coordinates of the projection plane and
f(z) = d/(d + z) where d is the distance from the camera to the projection plane.
From this we can find the size of an element decreases with the square of the distance (not - linear) d f(z)/dz = 1/z^2
Human eye camera model
Premise: As I observed the size of an element must decrease with distance in a linear way
d f(z)/dz = 1/z
One function that fulfill this is f(z) = ln(z), but this is not correct because the function must be f(infinity) = 0 and logarithm is not.
Another alternative can be f(z) = 1/z^0.1 that behaves similar to logarithm and gives a zero value for z = infinity.
Even so, withim some range of z both functions can be used.
Research in progress
What to do
As I cannot change the camera of Poser and have no ways to do it unless have the source code, the only way is to change the ground plane.
I can make a ground plane textured in a way that the texturing of the plane multiplied by the Posers camera model gives the human eye camera model.
Stupidity also evolves!