【问题标题】:Implement lights and shadows in ShaderMaterial in Three.js r136在 Three.js r136 的 ShaderMaterial 中实现灯光和阴影
【发布时间】:2022-01-19 07:14:18
【问题描述】:

r136 目前在 ShaderMaterial 中混合 lightsshadowscolor 的解决方案是什么?我已经找到了雾支持的解决方案。
我在以前的版本 (r108) 中找到了一些示例,例如 codesandbox

实际上,我正在寻找这种结果:codesandbox
我应该将 MeshPhongMaterial 着色器复制为我自己的着色器的代码库吗?

在我的项目中必须使用自定义着色器,这就是我不使用内置材质的原因。

有什么想法或例子吗?
谢谢!

【问题讨论】:

    标签: three.js shader shadow light shadermaterial


    【解决方案1】:

    这个问题很大,没有一个答案。创建灯光、阴影和颜色因材质而异,并且包含许多元素,需要完整的课程才能学习。

    但是,您可以查看 Three.js in this folder called /ShaderChunk 使用的着色器代码段。如果您查找“光”,您会看到着色器段(或“块”),用于每种材质,如香椿、朗伯、物理等。有些材质需要在着色器代码的开头定义参数,(这些是_pars文件),一些在顶点着色器中计算,一些在片段中,一些需要在_begin and _end之间分割代码,等等:

    阴影更加复杂,因为它们需要单独的渲染通道来构建阴影贴图。就像我说的,重新构建自己的灯光、阴影和颜色是一项艰巨的任务,需要一门完整的课程来学习。我希望这个答案至少可以为您指明正确的方向。

    【讨论】:

    • 毫无疑问,知道什么是块是件好事。它有助于了解在添加所需功能时使用 .onBeforeCompile() 更改哪个着色器(顶点或片段,或两者)的哪一部分,保持着色器的其余功能(例如照明)完好无损。
    • 感谢您的回复!所以你建议复制整个内置材料并修改我需要的东西?如果我理解得很好,另一种方法是通过使用onBeforeCompile() 回调来修改纹理颜色,以避免创建我自己的材质并实现灯光/阴影的整个复杂逻辑?我目前正在考虑的另一个解决方案是使用 2 个网格、1 个用于灯光/阴影的透明 phong 材质,以及在后面带有纹理计算的另一个着色器材质。你怎么看 ?在这种情况下,我实际上正在寻找最佳实践
    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多