我想采用现有的工作场景设置,其中加载了一些网格物体,在将MeshLambertMaterial或MeshPhongMaterial设置到它们上时可以完美呈现。它适用于灯光,灯光的所有制服都是神奇地设置在引擎盖下,效果很好。阴影贴图也很有用。
现在我想增强着色器。我想在着色器中添加一些新东西。在我的情况下,这是一组带有硬编码参数的点光源,但你可以想象一个实际的事情就是打开使用一些制服动态配置它们的能力。这只是在重新设计渲染管道以执行延迟渲染之前的中间步骤。
当我转到three.js源并查看渲染器/着色器/ ShaderLib.js时,我们看到MeshLambertMaterial的着色器在此处被称为lambert
,它主要由着色器块构建。
我所做的是将整个内容逐字记录下来并将所有这些内容粘贴到我自己的ShaderMaterial
中,但我的网格现在全部呈现黑色。
我必须使用ShaderMaterial
进行一些额外的内务管理,以使其通过three.js设置的灯光开始正常运行,(这就像内置的一样)材料的行为),但我无法弄清楚这是什么。(我尝试过RawShaderMaterial,但它所做的只是制作了一堆关于未声明的#if
变量的着色器编译器错误)