opengl-es-2.0 - 在 Scenekit 中的透明地板/平面上显示阴影

标签 opengl-es-2.0 scenekit metal

试图弄清楚如何在不可见的平面上渲染阴影,所以我的 sceneView 的背景显示通过。

THREE.js 有一个 ShadowMaterial这正是这样做的 - 仅渲染阴影。

目前的想法是制作一个看起来很简单的自定义 Metal 着色器,但我不确定如何敲掉地板以显示除阴影之外的所有内容。

这是一个影子捕手的例子:https://knowledge.autodesk.com/search-result/caas/sfdcarticles/sfdcarticles/Maya-2015-Shadow-Catching-with-Use-Background-material.html

最佳答案

好的,请查看 Github 上的这个示例项目:

https://github.com/carolight/Metal-Shadow-Map/blob/master/Shadows/Shader.metal#L67

该链接指向执行阴影贴图测试的着色器。基本上,它标准化了正在渲染的片段的 Z 位置,并将其与阴影贴图的 Z 缓冲区进行比较。如果它小于阴影-Z,则像素完全点亮(第 67 行),否则会稍微着色(第 69 行)。

您想要做的是为第 69 行写入 (0,0,0, shadow_opacity),为第 67 行写入 (0,0,0,0)。这应该发出透明像素。将 shadow_opacity 设置为 [0.0..1.0] 的统一值。

其余的设置显示在 example 中。 .将飞机/相机倾斜到所需的设置,跳过绘制立方体/花瓶/在 main pass 中的任何内容如果您真的不想在场景中使用它(行 279 )。 (但是,请注意 shadow pass 并将其保留在那里)。

关于opengl-es-2.0 - 在 Scenekit 中的透明地板/平面上显示阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43959406/

相关文章:

scenekit - 如何使用 Scenekit(ARKit) iOS 11 以编程方式在相机上创建具有给定宽度和高度的正方形或矩形覆盖层(平面)?

ios - Apple Metal Matrix 乘法基准测试结果不一致

iOS Metal API 在体积内绘制 3d 纹理

Android OpenGL ES 2.0 - 某些设备上不显示纹理

c++ - 在 Windows 上开始使用 OpenGL ES 2.0

opengl-es - OpenGL ES 2.0 和 OpenGL ES 3.0 有什么区别

android - 在 android opengl es 2 上强制重绘以超过 60 fps

swift - 麻烦子类化 SCNScene

ios - SceneKit 剔除平面

metal - 多线程情况下的 Apple Metal blitCommandEncoder