首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SceneKit中使用运动模糊?

如何在SceneKit中使用运动模糊?
EN

Stack Overflow用户
提问于 2019-03-19 01:27:08
回答 1查看 230关注 0票数 1

根据WWDC2017,motionBlurIntensity被添加为SCNCamera的一个属性。我尝试了以下方法,但未能让SceneKit在相机移动时模糊我的场景:

  • 将wantsHDR设置为true
  • 将SCNDisableWideGamut作为布尔值添加到我的Xcode项目中的每个Info.plist中
  • 通过在motionBlurIntensity设置为1.0的情况下更改其set节点在相机前面的位置来移动SCNBox
  • 通过在motionBlurIntensity设置为1.0的情况下更改其set节点的位置来移动相机本身
  • 使用motionBlurIntensity设置为1.0的SCNTransaction设置相机的动画,而不是在每一帧中更改其位置
  • 在motionBlurIntensity设置为500或更大的情况下执行上述操作

我像这样在每个渲染的帧中运行以下代码:

代码语言:javascript
复制
    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将其pointOfView设置为摄像头的位置:

代码语言:javascript
复制
    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];

像Bloom和SSAO这样的HDR效果可以正常工作,但不是运动模糊。我在macOS Mojave上使用Xcode10.1版本。我运行了Badger示例应用程序,该项目中的运动模糊在我的计算机上工作。我是不是漏掉了什么?任何见解都将不胜感激。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55226912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档