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
добиться разных результатов.