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 (запуск на пользовательском устройстве):

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам