三个js凹凸贴图

Three js bump mapping

我用三个js(r85)创建了一个简单的场景。它包含一个相机、一个灯和一个平面几何网格。我还创建了一个渲染器目标,我在其中使用 ShaderMaterial 渲染平面的凹凸贴图纹理。在片段着色器中,凹凸贴图使用连续函数(因此凹凸贴图应该是"smooth"):

varying vec2 vUV;

void main() {
    float x = sin(sqrt(vUV.x * vUV.x + vUV.y * vUV.y));
    gl_FragColor.rgb = vec3(x, x, x);
}

代码呈现以下图像(奇怪的线条):

当我使用 MeshPhongMaterial 的凹凸贴图时,出现了一些奇怪的线条。

请参阅此处 jsfiddle

谁能告诉我那些奇怪的线条是什么以及如何避免这些线条?如果我使用简单图像作为凹凸贴图(不是渲染目标),则线条不会出现。

谢谢!

发生这种情况是因为长度为 0-sqrt(2) or 0-1.41,您正在利用正弦波周期的一小部分 0-2*PI or 0-6.283 - 所以纹理的颜色深度被强调 -你每 50 个像素或其他任何东西得到 1 位的步长 - 这就是当你从 0x0000000x1a1a1a 渐变时径向渐变看起来像一系列环的原因。

Check out a branch i made from it. 我做了一些事情,比如将 magfilter 更改为 linear(最近的看起来总是像素化),但主要是我只是更改了凹凸贴图的周期,以便它在整个纹理过程中上下移动了几次,而不是仅仅上升了一点点。

另一件要记住的事情是,凹凸贴图本身总是看起来很粗糙,最高可达 11。它正在做一项艰巨的任务,试图在 2d space 中伪造 3d 表面,并且因为它是一种纹理,具有有限的分辨率,仔细观察会显得很粗糙。