试图找出如何在不可见的平面上渲染阴影,以便sceneView
的背景显示出来。
THREE.js有一个ShadowMaterial
就是这样 - 只渲染阴影。
目前的想法是制作一个看起来很简单的自定义金属着色器,但我不确定如何去除地板以显示除阴影之外的所有内容。
答案 0 :(得分:4)
好的,请查看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中。将飞机/摄像机倾斜到所需的设置,如果您不想在场景中(279行),请跳过main pass
中的立方体/花瓶/任何内容。 (但请注意shadow pass
并将其保留在那里。)