在three.js中使用银色抛光材质

3

我是three js的新手,正在尝试创建一个像这样的立方体: 3D Cube 我无法弄清楚如何为我的立方体创建材质。该材料似乎是银色抛光。它具有反射和漂亮的边缘。请帮助我找出哪种带有哪些参数的材料可以给我这样的结果。


1
SO并不是为你编写代码的地方。展示你当前的代码,这样我们才能帮助你,而不是替你创造。 - undefined
1
@MitchellvanZuylen 我知道这不是关于为他人编写代码的问题。我想我没有很好地提问,或者是因为我贴的图片让你误解了。我只是想知道用哪种材料和参数可以给我一个类似银色的材质,而不是问如何编写整个立方体的代码。正如你可以看到 @WestLangley 的回答,并不需要我的代码。 - undefined
2个回答

7
你想在three.js中创建一种银色、抛光的材质。
`MeshStandardMaterial` 是一种基于物理的材质,专门为此目的而设计。
var material = new THREE.MeshStandardMaterial( {
    metalness: 1,   // between 0 and 1
    roughness: 0.5, // between 0 and 1
    envMap: envMap,
} );

确保指定一个环境贴图,这样就有东西可以反射了。调整其他参数以符合您的喜好。

three.js r.86


2
这也是正确的答案。MeshPhongMaterial不能正确地模拟金属材质,也不是基于物理的。当材质的粗糙度改变时,MeshPhongMaterial无法正确处理反射。 - undefined
请帮忙将此CodePen的样式改得像银色抛光一样。谢谢! - undefined
2
请使用我上面发布的材料参数。如果需要的话,您可以调整粗糙度。此外,场景中的光线太强了,请减小定向光的强度。您还可以增加或减小material.envMapIntensity。如果需要的话,您也可以将材质颜色从白色更改为银色。 - undefined

3
使用THREE.MeshPhongMaterial(),并将envMap属性设置为您想要用于反射的相机的renderTarget。为了使外观更加光滑,您可以在specularMap属性(甚至是specular属性)中使用纹理。
通过调用geometry.computeVertexNormals()来实现平滑边缘。 编辑:如@prisoner849所述,需要在应用材料之前调用computeVertexNormals编辑2:根据@prisoner849的要求,这里有一个工作示例编辑3:@WestLangley提到使用THREE.MeshStandardMaterial()应该更好,因此更新了示例以反映这一点。

实际上,这可以应用于网格,但它会更加复杂(对于那么多模型而言计算成本也更高)。这是一个例子。它使用THREE.SubdivisionModifier()完成。 - undefined
@prisoner849 刚刚加了一个可运行的示例。我大部分使用了你的代码,希望你不介意。 - undefined
干得好。我完全不介意你使用了我的作品。但是我还在想,为什么你在回答中没有提到如果想要圆角边缘,需要完全不同的几何形状呢? - undefined
@JuanFerrer 谢谢你的回答。它看起来很不错,就像抛光过的金属一样。虽然它有点太暗了,不像银色。还是谢谢你。 - undefined
@prisoner849谢谢你对这个问题的热情。 - undefined
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接