我正在尝试使用ShaderMaterial
来构建MeshStandardMaterial
。我保留了大部分#include <logic>
语句,这使得放置断点有点困难。
我想知道是否有一种直接的方法来渲染PMREM立方图,在这个特定的材料模板中,并让它以应该显示的方式显示出来。
我大致使用:
material.defines.USE_ENVMAP = ''
material.defines.ENVMAP_MODE_REFLECTION = ''
material.defines.ENVMAP_TYPE_CUBE_UV = ''
material.defines.ENVMAP_BLENDING_MULTIPLY = ''
material.defines.TEXTURE_LOD_EXT = ''
material.defines.USE_UV = ''
material.extensions.derivatives = true
material.extensions.shaderTextureLOD = true
据我所知,这是向material.envmap
添加纹理时出现的所有定义。着色器编译,正在生成PMREM纹理,并且可以在着色器中读取(例如,gl_FragColor = vec4( texture2D( envmap, vUv ).xyz, 1.)
工作)。这些是我克隆的制服:
{
envmap: UniformsUtils.clone(UniformsLib.envmap),
fog: UniformsUtils.clone(UniformsLib.fog),
lights: UniformsUtils.clone(UniformsLib.lights),
displacementmap: UniformsUtils.clone(UniformsLib.displacementmap)
}
当使用MeshStandardMaterial
时,maxMipmap
制服的值似乎为0,我不确定还使用了什么。
我在material.uniforms.envmap.value
中放置纹理并使用这些定义完全没有效果。如果我在场景中关闭灯光,我的对象渲染为黑色,没有反射。
这看起来不需要那么多的输入,但我得到了0。不是这样的:
radiance += getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );
发布于 2019-12-10 04:36:32
对我来说,那是一件丢失的制服:
https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib.js#L99
envMapIntensity: { value: 1 } // temporary
它不是envmap
的一部分。
https://stackoverflow.com/questions/59257581
复制相似问题