Some issues about rendering when camera moving out.

Started by kiffa, February 25, 2013, 02:29:22 PM

Previous topic - Next topic

kiffa

With the same object3D and the same lookAt-vector, If i move camera out by Camera.moveCamera(CAMERA_MOVEOUT, distance); some abnormal things will happen:

1, the aliasing between boundaries will be rather obvious.

2, some transparency issues(I'm not very sure, but the appearance seems like that), i.e, some parts of an opacity object3D will be transparent and the object3D behind it will be visible.

3, when rotating object3D/camera, the aliasing between boundaries is rather obvious.

Some images:

1, With the near camra,  the aliasing is not obvious:



2, With the far camera, the aliasing is obvious:



3, With the rotating, the aliasing is obvious:


EgonOlsen

This is z-fighting. It occurs when the accuracy of the depth buffer isn't sufficient. Which hardware (gpu) is this running on?

kiffa

Log:

02-26 09:55:59.560: D/Woo3d(15288): GL vendor:NVIDIA Corporation
02-26 09:55:59.560: D/Woo3d(15288): GL renderer:NVIDIA Tegra

02-26 09:55:58.580: D/Woo3d(15288): choose EGLConfig: CSAA enabled!
02-26 09:55:58.580: D/Woo3d(15288): Unable to find a matching config...using default!
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_RED_SIZE: 8
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_GREEN_SIZE: 8
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_BLUE_SIZE: 8
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_ALPHA_SIZE: 8
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_DEPTH_SIZE: 16
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_RENDERABL_TYPE: 4
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_SAMPLE_BUFFERS: 0
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_SAMPLES: 0
02-26 09:55:58.580: D/Woo3d(15288): eglconfig: EGL_STENCIL_SIZE: 0

EgonOlsen

I expected that...it's a Nvidia Tegra powered device. Tegra has the worst depth buffer accuracy that i've ever seen on any gpu (including old ones from 1996). You can improve this by using a special extension. Judging from the log output, you seem to use the AAConfigChooser, which should try to enable that extension by default. Try the NVDepthConfigChooser instead and post the log output, please.

kiffa

Some info about egl extension:

02-27 10:42:12.270: D/Woo3d(3944): egl vendor: Android
02-27 10:42:12.270: D/Woo3d(3944): egl version: 1.4 Android META-EGL
02-27 10:42:12.270: D/Woo3d(3944): egl extension: EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image EGL_ANDROID_image_native_buffer EGL_ANDROID_swap_rectangle

And i didn't use the AAConfigChooser, but a custom ConfigChooser like that:

int[] configSpec = new int[] {
        EGL10.EGL_RED_SIZE, mRedSize,
        EGL10.EGL_GREEN_SIZE, mGreenSize,
        EGL10.EGL_BLUE_SIZE, mBlueSize,
        EGL10.EGL_ALPHA_SIZE, mAlphaSize,
        EGL10.EGL_DEPTH_SIZE, mDepthSize,
        EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
        12512, 1, // EGL_COVERAGE_BUFFERS_NV
        12513, 2, // EGL_COVERAGE_SAMPLES_NV
        EGL10.EGL_NONE };


Using NVDepthConfigChooser, the appearance seems much better! Log:

02-27 10:46:59.190: I/jPCT-AE(4917): Nonlinear depth buffer enabled!
02-27 10:46:59.190: I/jPCT-AE(4917): Unable to find a matching config...using default!
02-27 10:46:59.200: I/jPCT-AE(4917): Initializing GL20 render pipeline...


Using AAConfigChooser, the appearance is as good as using NVDepthConfigChooser!

Thanks, i will use AAConfigChooser by default. I used  a custom ConfigChooser before, because i want to print some info to study.

Another question, where can i get the doc of EGL/GL extensions? The home page of GPU-vendor?

I print the EGL extensions of Tegra(above), why there is no extension like EGL_NV_XXXX? My printing code:

    String extension = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS);
    WLog.d("egl extension: " + extension);



EgonOlsen

Quote from: kiffa on February 27, 2013, 04:15:40 AM
Another question, where can i get the doc of EGL/GL extensions? The home page of GPU-vendor?

I print the EGL extensions of Tegra(above), why there is no extension like EGL_NV_XXXX? My printing code:

    String extension = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS);
    WLog.d("egl extension: " + extension);

I got them from some forum post. The problem is that there are some extensions that haven't made it into the SDK. So you can use them only if you know their magic number. There's no constant exposed for them in the API.

kiffa

Thanks, and i found the extension(EGL_NV_depth_nonlinear) spec(include the magic num) in khronos:

http://www.khronos.org/registry/egl/extensions/NV/EGL_NV_depth_nonlinear.txt

The last question: Could you plan to support OpenGL ES 3.0?

EgonOlsen

There's no SDK that supports 3.0 ATM. If it's out AND i have a device that supports it, i'll consider it.