У меня есть GLKViewController, встроенный в обычный контроллер представления, отображающий вращающуюся трехмерную модель одного из продуктов моей компании. Я использую тот же код в другом приложении, чтобы отобразить другую модель, и у меня нет проблем с этим.Затенение различное на устройстве и симуляторе
По какой-то причине, когда я запускаю свое текущее приложение на симуляторе, я получаю совершенно гладкое затенение, как и ожидалось, но когда я запускаю устройство (я тестировал как iPad 3, так и iPad 4), я получаю то, что похоже, является затенением клеток, как если бы значения освещенности были более дискретными.
Настоящая путаница в том, что это происходит только при работе на устройстве и только в этой конкретной модели, а не с другими, которые я использовал.
Есть известная ошибка в GLSL, что может вызвать это поведение?
EDIT
Интересно, что во время моей отладки, если я изменю
gl_FragColor = vec4(ambientColor.rgb + diffuseReflection + specularReflection, 1.0);
в
gl_FragColor = vec4(diffuseReflection, 1.0);
Я получаю желаемый результат, но когда я выход каждого компонента, то остальные компоненты отображаются только как черные, что не должно вызывать такого странного поведения затенения.
Такая специфичность для конкретного устройства в моем опыте обычно исходит от точных артефактов. Используете ли вы низкие или средние значения в этих расчетах? Что произойдет, если вы поправитесь с повышением до следующего уровня точности? Другая вещь, которую я видел, вызывает черные пиксели - это ошибки в шейдере, такие как деления на ноль или переполнение. Они иногда обрабатываются в Simulator, а не на устройстве. –
@BradLarson Я использовал много переменных lowp в шейдерах, но изменение их в highp не разрешило проблему. –
@BradLarson. Как я могу проверить наличие/0 и переполнение? есть только одно подразделение во всем моем вычислении шейдеров (ослабление света) –