如何在SceneKit中制作平面镜像

时间:2015-03-13 02:11:52

标签: ios objective-c swift scenekit

对于SCNFloor,如果反射设置为1且reflectionFallOffEnd足够大,它就像一面镜子。

我的问题是如何将其应用于其他几何图形(例如平面或方框)?因为我想在我的游戏中拥有一面镜子。

3 个答案:

答案 0 :(得分:3)

我已经做了很多关于如何使用Scenekit进行反射的研究。

以下是我发现的不同线索(遗憾的是,他们都需要大量的代码和研究):

屏幕空间反射

优点:

  • 便宜
  • 易于制作

<强>缺点

  • 看起来并不总是很好
  • 我不确定如何使用SCNTechnique输出正常传递

视差映射立方体贴图

优点:

  • 便宜
  • 看起来很神奇

<强>缺点

  • 除非使用图像代理,否则没有实时对象
  • 网上没有好的代码示例,需要研究
  • 不太确定如何将其与SCNProgram一起使用

两个摄像头+模板

优点:

  • 现实
  • 实时
  • 几乎内置

<强>缺点

  • 没有关于SCNTechnique pointOfView
  • 的文档
  • 没有关于Stencils的文档
  • 需要渲染场景两次

OpenGL镜像

优点:

  • 实际上复制了几何图形,因此非常准确
  • 这是SCNFloor使用的技术(我认为)

<强>缺点

  • 几何体可以与镜像平面一起剪辑(与SCNFloor一起发生)
  • 在飞机以外的任何地方都不可用
  • 需要OpenGL代码

4个相机链接到Cubemap

优点:

  • 易于设置
  • 实时
  • 适用于任何对象
  • 现代视频游戏中非常流行的技巧

<强>缺点

  • 我不知道这是否有用
  • 需要为单个镜像渲染场景5次
  • 根据对象不太准确

我的结论是我们需要更多关于使用SCNTechnique的帮助。我们可以用它来构建令人惊奇的东西,但缺乏文档和示例是一个大问题。

如果您可以指定您想要的镜像,我将很乐意帮助您选择最佳方式。

答案 1 :(得分:3)

我知道这是一个古老的问题,但是我想分享我所做的事情。我在GitHub上创建了一个gist,其中包含代码并说明了其工作原理。

它基本上将六个摄像机附加到一个节点,并自动创建一个立方体贴图,然后将其用作对象的反射特性。主要缺点是它不适用于基于物理的材料,但是为了模拟粗糙度,它将立方贴图模糊化为您将粗糙度属性设置为的任意值。实时效果很好,您可以设置立方体贴图的更新速度,以免对游戏的帧率产生太大影响。它还可以处理许多不同的反射对象,并自动停止更新看不见的节点。

答案 2 :(得分:0)

其他几何类型目前不支持此功能。请file a request to Apple

相关问题