Most proper(human eye) camera frustrum for 1unit=1meter scale


#1

Hello,

recently i prepared assets to match 1unit -> 1 meter scale

but i had problem that faces were “culling”/hiding behind camera frustrum Far.

so i ofc apply scale all frustrum. but it made it not natural. i played arround configuring it but never had desired view.

i would like to ask if someone have proper frustrum configuration for 1meter per unit scale.


#2

oh my god. not even 15 minutes after write topic.

:man_facepalming:

the problem for me was “scope zoom” update that overrided my frustrum top, bottom, left, right :smiley:

anyway if there is more proper frustrum than “scaled” default one, then please tell.


#3

I just set my near to 0.1 and far to whatever. 500 or something. 100m is a soccer field so pretty far. Just make sure you set them all using the singular method and not individually. I.e use setFrustum and not setFrustumNear and setFrustumFar.

Fov is default 45 but I use 70 a lot, too. It’s personal preference imo.


#4

btw. i seen its nice to dynamic change a little fov like when character run to make player feel speed :slight_smile:


#5

The FastMath class has an interpolateLocal method or something for floats if you want to make the transition nice and smooth, too.


#6

“tunnel vision” you mean ?

I myself is a new bee in JME, codes below is what I used to reset my second Cam. Wish it can help.
In my code block the cam2 is set to parallel.
I think instead of “Scale” the scene, we can “Scale” the cam frustum by increase the “frustumSize” in my code block. I hope it works in normal cam mode.
And as for Human vision:
Max horizontal angle for single eye: 156
Max horizontal angle for two eyes: 188
normal horizontal angle for two eyes: 124 (within this area people can see objects in 3D )

        aspect =aspect*0.2f/0.33f;
        float frustumSize = 10f;
        cam2.setLocation(new Vector3f(0f,0f,70f));
        //cam2.lookAt(new Vector3f(0,0,0), Vector3f.UNIT_Z);
        cam2.setRotation(q);
        cam2.setAxes(Vector3f.UNIT_Y, Vector3f.UNIT_X, Vector3f.UNIT_Z.negate());
        cam2.setParallelProjection(true);
        cam2.setFrustum(-10f, 100f, -aspect*frustumSize, aspect*frustumSize, frustumSize, -frustumSize);
        cam2.update();
        cam2.normalize();

#7

thats not a problem, but thanks for info :slight_smile: didnt know about angles.