Артефакты при включении сглаживания 4x MSAA на iPad / iOS

Я включил 4x MSAA в своем приложении iPad OpenGL ES 2.0, используя пример на веб-сайте Apple. На симуляторе это работает хорошо, и изображение красивое и плавное, однако на устройстве есть цветные артефакты по краям, где оно должно быть сглажено. Это существует на iPad / iPad2 и iPhone4, но не в симуляторе. Ниже я прикрепил изображение того, как выглядит артефакт. Кто-нибудь знает, что это может быть?

Пример


person paranoidroid    schedule 27.06.2011    source источник
comment
Вы просто рисуете текстуру или происходит что-то более сложное? Как выглядит шейдер?   -  person Nicol Bolas    schedule 27.06.2011
comment
Это текстура над сферой, здесь вы видите горизонт над землей. Шейдер Земли - это просто текстурирование над сферой, затем есть шейдер атмосферы, который отображает синее свечение.   -  person paranoidroid    schedule 27.06.2011
comment
Можете ли вы показать изображение с MSAA и без шейдера атмосферы?   -  person Ben Voigt    schedule 27.06.2011
comment
С MSAA и без атмосферы артефакты все еще присутствуют cl.ly/2E2N343Y0W3l3m1Z3h0Y   -  person paranoidroid    schedule 27.06.2011
comment
Извините, это было неверно, на том последнем изображении все еще был шейдер атмосферы над землей. Здесь он без каких-либо шейдеров атмосферы. cl.ly/0R0K1W0X2A1U0q151L29 Артефакт исчез из шейдера. Почему включение MSAA может вызвать это для этого шейдера? (Это сложный шейдер). Также можно ли отключить MSAA только на этом проходе шейдера?   -  person paranoidroid    schedule 27.06.2011


Ответы (1)


Похоже, ваш шейдер атакует, но вы этого не сделали. опубликуйте шейдер, чтобы я не был уверен. Видите ли, когда вы включаете MSAA, шейдер может выполняться для образцов, находящихся внутри области пикселей, но за пределами области треугольника. Без MSAA этот пиксель вообще не вызвал бы выполнение фрагментного шейдера, но теперь, когда вы включили MSAA, он должен выполнить фрагментный шейдер для этого пикселя, если один из образцов активен.

Ссылка, которую я опубликовал, объясняет проблему более подробно. Это также дает вам способы избежать этой проблемы, но я не знаю, предоставляет ли OpenGL ES 2.0 доступ к выборке центроидов. Если это не так, вам придется отключить мультисэмплерный рендеринг для тех вещей, которые вызывают артефакты с glDisable(GL_MULTISAMPLE). Вы можете снова включить его, когда вам понадобится активировать мультисэмплинг.

person Nicol Bolas    schedule 27.06.2011
comment
Ты обалденный. Посмотрим на это. - person paranoidroid; 27.06.2011
comment
Похоже, OpenGL ES 2.0 не поддерживает выборку центроидов. Кроме того, мне пришлось бы разделить мою функцию текстуры земли с моей функцией атмосферы в шейдере, чтобы я мог отключить только часть атмосферы. Это почти мой единственный вариант, верно? - person paranoidroid; 27.06.2011
comment
@ mm1: Довольно много. Если в ES 2.0 нет выборки центроидов, это единственный вариант. Однако вы можете проверить списки расширений, так как вы можете использовать расширение центроида. - person Nicol Bolas; 27.06.2011
comment
Что ж, я наконец сделал всю работу по отделению шейдеров земли от шейдеров атмосферы. В конце концов, похоже, что iOS игнорирует glDisable (GL_MULTISAMPLE), поскольку их отключение в других шейдерах ничего не дает. Так что с этим неработающим и без выборки центроидов, я думаю, мне не повезло! - person paranoidroid; 15.07.2011