macos - SceneKit:是否可以在透明对象上转换阴影?

标签 macos shadow scenekit

我正在尝试在 OSX 上的 SceneKit 中的一个完全透明的平面上转换阴影。几个小时以来,我一直在努力解决这个问题,但没有找到任何解决方案。

我的目的是生成几个对象的屏幕截图,这些对象具有透明背景和不可见平面上的阴影。

你对我如何用苹果 SceneKit 做这个有什么建议吗?

我是否必须编写自己的着色器,我可以使用着色器修改器来实现它,还是可以使用内置功能?

最佳答案

更新:

我为任何需要的人找到了替代解决方案:

  1. 在3D模型下创建一个白色平面,注意平面颜色必须是纯白色。
  2. 将平面 Material 的混合模式设置为SCNBlendModeMultiply
  3. 将飞机 Material 的灯光模型设置为SCNLightingModelLambert

这是可行的,因为任何颜色乘以白色 (1, ,1, 1) 都会返回自身,而兰伯特光模型不会考虑定向光,因此平面将始终是看起来像透明的背景色。这个解决方案的另一个好处是你不需要改变光的阴影渲染模式。

对于习惯于检查 Xcode 的人。

enter image description here enter image description here


根据 SceneKit: What's New .

首先,在您的模型下添加一个平面。然后阻止它写入 colorBuffer。 其次,将光照模型的阴影渲染模式更改为延迟。请注意,您必须使用可以转换阴影的光。 plane's material inspector

light's attributes inspector

关于macos - SceneKit:是否可以在透明对象上转换阴影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30975695/

相关文章:

objective-c - CALayer阴影性能

ios - SceneKit:文本节点字体不适用

macos - SpriteKit 保留周期或内存泄漏

java - 在 MacOS 上的 AdoptOpenJDK 上链接 JNA 库时出错

python-beautifulsoup 误报了我的 html 吗?

macos - 如何在 Spotify/iTunes 中开始播放特定歌曲

android - 带有阴影的按钮看起来像android xml中的渐变

OpenGL - 将阴影立方体贴图投影到场景上

swift - 使用 SceneKit 快速移动数学网格

swift - 如何使用 SCNAvoidOccluderConstraint(任意示例)