【问题标题】:Why won't "dithering" on three.js material actually do dithering?为什么在three.js 材料上的“抖动”实际上不会进行抖动?
【发布时间】:2022-01-22 00:37:26
【问题描述】:

我的对象上有一个简单的材料,例如:

    THREE.MeshPhysicalMaterial({
        roughness:1,
        color: 0xffffff,
        dithering:true 
    })

还有一个简单的定向灯。现在,我认为“抖动”会对阴影做这样的事情:

但是,它似乎没有做任何事情。抖动属性实际上是做什么的?还是我忘了配置什么?

【问题讨论】:

    标签: three.js shadow dithering


    【解决方案1】:

    材质中的抖动是一种非常微妙的效果,有助于防止颜色混合不顺畅时出现条带。您在屏幕截图中显示的效果更加明显,黑白且大部分像素化。默认材质没有此功能。

    你想要的效果可以通过后处理pass来实现。 Threejs 在这里有一个演示:https://threejs.org/examples/?q=post#webgl_postprocessing

    Here’s the source code for that demo。请注意,它使用 DotScreenShader 着色器通道。

    【讨论】:

    • 哦,我明白了,谢谢。您是否知道是否可以仅将此通道用作纹理着色器,并为对象的纹理和它本身的阴影设置抖动?我不想抖动整个场景
    • threejs 内置的默认材质无法做到这一点。您需要编写自己的自定义着色器才能做到这一点。
    • 是的,我知道我必须编写自己的着色器,我想知道如何将片段着色器应用于单个对象并将其阴影贴图作为输入,而不是使用 EffectComposer对整个三个js场景使用效果
    • 这是一个非常高级的请求,其中包含许多需要花费数小时编写的步骤。如果你想学习如何编写着色器,我推荐thebookofshaders.com
    • 不,你不明白。我了解编写着色器的复杂性(我知道一些基础知识)。我想知道将我的自定义着色器设置为对象纹理并将闪电贴图传输到其中的能力(我猜是通过 sampler2D)。不是如何编写着色器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多