SceneKit: как воспроизвести цветовой эффект освещения iOS 9 (однонаправленное, одно окружающее) на iOS 10 без отключения PBR?

Как упоминается в этой ветке на форумах Apple, индикаторы iOS 10 теперь слабее и меняются как выглядят сцены.

В потоке предлагается установить SCNDisableLinearSpaceRendering на ДА, но это не сработало. Другими словами, использование SCNDisableLinearSpaceRendering не приведет к тому, что ваша сцена в iOS 10 будет выглядеть так же, как в iOS 9 - по крайней мере, в нашем тестировании.

Мы также пробовали:

floorNode.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn

На скриншотах ниже показана разница между одной и той же сценой. Обратите внимание, как пол меняет цвет с зеленого на желтый, хотя освещение остается прежним.

Сцена содержит один направленный свет и один рассеянный свет.

Файлы для воспроизведения сцены: https://www.dropbox.com/sh/cg5f7hyf1oonxfu/AAAJef7LhpSxuJyUSjqfGbmca?dl=0.

Даже если это сработало, установка SCNDisableLinearSpaceRendering на ДА, похоже, отключает PBR.

Наше приложение позволяет пользователям настраивать цвет направленного света. Цель состоит в том, чтобы воспроизвести такое же настроенное освещение из сцены iOS 9 в сцене iOS 10, используя преимущества PBR.

1) Как мы можем гарантировать, что сцены iOS 10 будут выглядеть идентично сценам iOS 8/9?

2) Как достичь №1, используя PBR?

iOS 8/9 (запуск в симуляторе):

введите здесь описание изображения

iOS 10 (запускается на пользовательском устройстве):

введите здесь описание изображения


person Crashalot    schedule 16.09.2016    source источник
comment
Как бы то ни было, установка для этого свойства значения YES делает мою игру SceneKit идентичной iOS 9. Может быть, вы столкнулись с ошибкой или какой-то незначительной проблемой с этим свойством, вместо того, чтобы делать то, что вам нужно?   -  person Nerrolken    schedule 17.09.2016
comment
@Nerrolken Какие лампы вы использовали? У нас только один окружающий и один направленный свет. Может, выставили неправильно? Вы только что установили из списка? Вы еще что-нибудь делали?   -  person Crashalot    schedule 17.09.2016
comment
Для меня всего один Омни с периодически появляющимся эмбиентом. И да, я просто установил его в PList, и он вернулся в норму. Изменится ли ваше вообще, когда вы установите это свойство?   -  person Nerrolken    schedule 17.09.2016
comment
@Nerrolken не меняет, к сожалению. это похоже на то, что установка опоры на ДА не работает. в любом случае, не могли бы вы опубликовать в качестве ответа? может помочь другим читателям.   -  person Crashalot    schedule 18.09.2016


Ответы (2)


Вы можете визуализировать свою сцену на iOS 10 так же, как на iOS 9, изменив модель освещения ее материалов с SCNLightingModelPhysicallyBased на SCNLightingModelBlinn.

Пример. Если в вашей сцене только одна 3D-модель:

for(SCNMaterial * mt in model.geometry.materials)
    mt.lightingModelName = SCNLightingModelBlinn;

Однако, сделав это, вы не сможете воспользоваться преимуществами PBR. Если вы хотите продолжать использовать PBR, вы можете поиграть со свойствами intensity и temperature SCNLight для достижения разных результатов.

person fabio914    schedule 23.09.2016
comment
Спасибо! Где ты это читал? Итак, вы должны сделать это и установить SCNDisableLinearSpaceRendering = YES? Обратите внимание, что это происходит только на устройстве. На симуляторе свет выглядит нормально на iOS 10. - person Crashalot; 23.09.2016
comment
Вы имеете в виду mt.lightingModel? Похоже, что в документах класса нет свойства lightingModelName ... - person Crashalot; 24.09.2016
comment
Это floorNode.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn вместе с SCNDisableLinearSpaceRendering=YES, к сожалению, не сработало. Будет обновлять вопрос со сценой и кадрами до / после, если вы хотите попробовать воспроизвести. Спасибо! - person Crashalot; 24.09.2016

Это подтвержденная ошибка в Scene Kit. Мы отправили отчет в Bug Reporter под номером ошибки 28459280. Проблема в том, что Metal всегда устанавливает locksAmbientWithDiffuse в true на iOS 10.

По словам одного из инженеров Scene Kit, обходной путь состоит в том, чтобы вручную установить locksAmbientWithDiffuse на true для рассматриваемых узлов (в этом примере, узла пола), а затем отрегулировать освещение в iOS 8/9 до тех пор, пока не будет достигнут желаемый внешний вид.

Это должно гарантировать, что сцены iOS 10 будут выглядеть так же, как сцены iOS 8/9.

person Crashalot    schedule 26.09.2016