2016-09-23 3 views
2

У меня есть простая сцена SceneKit с двумя источниками света (окружающая среда и omni) и одна модель. Я заметил, что моя сцена кажется абсолютно темной при работе на iOS 10 (даже до того, как я перекомпилировал свое приложение с SDK iOS 10). После расследования я понял, что мой окружающий свет был единственным, влияющим на мою модель.iOS 10: SCNLight типа Omni, игнорирующий значения затухания?

Единственный способ сделать мой осминный свет повлиять на мою модель - это приблизить ее к ней или увеличить ее интенсивность (используя новый селектор setIntensity:) в 5000000.

Изменение значения attenuationStartDistance, attenuationEndDistance и attenuationFalloffExponent не меняет результата, который на самом деле странно, учитывая, что, если я использую 0.0 для обоих расстояний, то я не должен ожидать ослабления, и все же это произошло (отсюда необходимость использования этого огромного значения интенсивности).

Этот результат не изменяется, даже если я добавлю ключ SCNDisableLinearSpaceRendering к моему Info.plist или к ключу SCNDisableWideGamut.

Я пропустил какой-то новый параметр или это ошибка iOS 10?

ответ

2

мне удалось изменить результат после изменения значения attenuationStartDistance, attenuationEndDistance и attenuationFalloffExponent, но только при использовании этого огромной intensity значения. iOS 10, безусловно, не игнорирует эти параметры.

Однако, похоже, что iOS 10 применяет еще одно ослабление сверху предыдущего. Он также автоматически ослабляет значение intensity независимо от этих параметров. Возможно, это относится к этому новому параметру intensity, как к физическому рендерингу, даже если это не так?

Итак, если у вас есть отдаленный источник света omni, кажется, что вам все равно понадобится большой intensity, чтобы он был достаточно ярким на расстоянии, даже если вы отключите ослабление.

EDIT

iOS 10 действительно с использованием модели освещения физически на основе как новое значение по умолчанию! После загрузки модели iOS 9 будет иметь SCNLightingModelBlinn для свойства материала lightingModelName, тогда как iOS 10 будет иметь SCNLightingModelPhysicallyBased. Вы можете достичь поведения iOS 9, изменив значение этого свойства после загрузки вашей модели.

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