Я отображаю 360-градусное фотосферное изображение на сфере с камерой в центре сферы. Когда мы создаем приложение с использованием собственного Android SDK и OpenGL ES 2.0, мы видим неровные края, как показано на изображении ниже. Зубцы видны на подлокотниках дивана, краях пола и т. д., когда я смотрю на этот вид с помощью картонного устройства.
С другой стороны, то же самое изображение (разрешение 4096X2048) отлично отображается в приложении unity3d для Android.
Используемый нами фильтр увеличения и уменьшения для текстуры — GL_LINEAR.
Исходный код, используемый для настройки параметров фильтрации текстуры и генерации текстуры и мипмапа:
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mSphereTextureIds[0]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
Код для мультисемплового сглаживания (4X MSAA)
cardboardView.setEGLConfigChooser(new MyConfigChooser());
cardboardView.setRenderer(renderer);
Я также включил сглаживание 4x Multisample. Но даже после этого внутри текстуры остаются зазубрины. В обоих шейдерах я использовал высокую точность как для чисел с плавающей запятой, так и для целых чисел.
class MyConfigChooser implements CardboardView.EGLConfigChooser {
@Override
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
int attribs[] = {
EGL10.EGL_LEVEL, 0,
EGL10.EGL_RENDERABLE_TYPE, 4, // EGL_OPENGL_ES2_BIT
EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER,
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_DEPTH_SIZE, 16,
EGL10.EGL_SAMPLE_BUFFERS, 1,
EGL10.EGL_SAMPLES, 2, // This is for 4x MSAA.
EGL10.EGL_NONE
};
EGLConfig[] configs = new EGLConfig[1];
int[] configCounts = new int[1];
egl.eglChooseConfig(display, attribs, configs, 1, configCounts);
if (configCounts[0] == 0) {
// Failed! Error handling.
Log.d("test","MSAA Failed............");
return null;
} else {
return configs[0];
}
}
Есть ли какая-то постобработка, которую Unity делает с текстурами для фильтрации во время увеличения, что придает им лучший вид без эффекта наложения? Можем ли мы сделать анизотропную фильтрацию, чтобы сгладить текстуру при увеличении без размытия на Android? Если да, можем ли мы получить подсказку о том, как это сделать? Является ли 4X максимальным MSAA, поддерживаемым в настоящее время на Android? (Я использую Нексус 5).
заранее спасибо
Апурв Нигам