我想找出如何在不可见平面上渲染阴影,以便我的sceneView
的背景显示出来。
THREE.js有一个ShadowMaterial
可以实现这一点 - 只有阴影被渲染。
目前的想法是制作一个自定义的金属着色器,看起来很简单,但我不确定如何去掉地板来显示除阴影以外的所有内容。
我想找出如何在不可见平面上渲染阴影,以便我的sceneView
的背景显示出来。
THREE.js有一个ShadowMaterial
可以实现这一点 - 只有阴影被渲染。
目前的想法是制作一个自定义的金属着色器,看起来很简单,但我不确定如何去掉地板来显示除阴影以外的所有内容。
好的,请查看Github上的这个示例项目:
https://github.com/carolight/Metal-Shadow-Map/blob/master/Shadows/Shader.metal#L67
这个链接指向执行阴影映射测试的着色器。基本上,它会标准化正在渲染的片段的Z位置,并将其与阴影图的Z缓冲区进行比较。如果它小于阴影-Z,则像素完全亮(第67行),否则它会略微着色(第69行)。
您要做的是在第69行中写入(0,0,0,阴影不透明度),在第67行中写入(0,0,0,0)。这应该产生透明像素。将阴影不透明度设置为[0.0..1.0]的统一值。
其余设置显示在示例中。将平面/相机倾斜到所需的设置,如果您不真正想要它在场景中,则跳过在main pass
中绘制立方体/花瓶/任何其他物品(第279行)。 (但请注意shadow pass
并保留它)。
sceneView
上绘制3D对象? - James Poag