Согласно WWDC 2017, motionBlurIntensity был добавлен как свойство в SCNCamera. Я попробовал следующее и не смог заставить SceneKit размывать мою сцену при перемещении камеры:
- Установить значение HHR в true
- Добавить SCNDisableWideGamut в качестве логического значения со значением YES в каждом Info.plist в моем проекте Xcode
- Переместите SCNBox, изменив положение его SCNNode перед камерой с параметром motionBlurIntensity, равным 1,0
- Переместите саму камеру, изменив положение ее SCNNode с параметром motionBlurIntensity, равным 1,0
- Анимировать камеру, используя транзакцию SCN с параметром motionBlurIntensity, установленным на 1,0, вместо изменения ее положения в каждом кадре
- Сделайте вышеупомянутое с motionBlurIntensity, установленным в 500 или больше
Я запускаю следующий код в каждом отображаемом кадре следующим образом:
camNode.position = SCNVector3Make(cx, cy, cz);
camNode.eulerAngles = SCNVector3Make(rotx, roty, rotz);
camNode.camera.wantsDepthOfField = enableDOF;
camNode.camera.wantsHDR = enableHDR;
camNode.camera.zNear = camNearVal;
camNode.camera.zFar = camFarVal;
camNode.camera.focalLength = camFocalLength;
camNode.camera.usesOrthographicProjection = usingOrthoProjection;
if(!usingOrthoProjection)
{
camNode.camera.projectionTransform = SCNMatrix4FromGLKMatrix4(GLKMatrix4MakeWithArray(projection));
}
else
{
// Ortho options
camNode.camera.orthographicScale = orthoScale;
if(cam_projectionDir == 1)
camNode.camera.projectionDirection = SCNCameraProjectionDirectionHorizontal;
else
camNode.camera.projectionDirection = SCNCameraProjectionDirectionVertical;
}
// DOF
camNode.camera.sensorHeight = dof_sensorHeight;
camNode.camera.focusDistance = dof_focusDistance;
camNode.camera.fStop = dof_fStop;
camNode.camera.apertureBladeCount = dof_apertureBladeCount;
camNode.camera.focalBlurSampleCount = dof_focalBlurSampleCount;
// Motion blur
camNode.camera.motionBlurIntensity = motionBlurIntensity;
И вот где SCNRenderer устанавливает свою точку зрения на камеру:
mainRenderer.scene = mainScene;
mainRenderer.pointOfView = camNode;
id<MTLCommandBuffer> myCommandBuffer = [_commandQueue commandBuffer];
[mainRenderer updateAtTime: currentFrame];
[mainRenderer renderWithViewport:CGRectMake(0,0,(CGFloat)_viewWidth, (CGFloat)_viewHeight) commandBuffer:myCommandBuffer passDescriptor:_renderPassDescriptor];
[myCommandBuffer commit];
HDR-эффекты, такие как Bloom и SSAO, работают правильно, но не размытие в движении.
Я использую версию Xcode 10.1 на MacOS Mojave.
Я запустил пример приложения Badger, и размытие движения в этом проекте работает на моем компьютере.
Я что-то здесь упускаю? Любое понимание будет с благодарностью.