在了解法线材质之前选了解下什么时法线,假设你在桌子上放了一张纸,法线就像是从纸面垂直向上伸出的箭头。这个箭头(法线向量)表示了纸面朝向的方向。如果你把纸竖起来,箭头(法线)会随着纸的方向变动,始终垂直于纸面。当我们使用法线材质会发现颜色进行了变化是因为 当表面不平整时,也就是每个像素点的xyz位置不同,例X 偏红色,Y偏绿色Z偏蓝色,导制是平面是颜色相同,而是曲面或者不是平面时颜色产生差异
MeshNormalMaterial 有十一个属性
- bumpMap 用于创建凹凸贴图的纹理。黑色和白色值映射到与光照相关的感知深度。凹凸实际上不会影响对象的几何形状,只影响光照。如果定义了法线贴图,则将忽略该贴图。bumpScale 正负决定 凹凸
// 创建 TextureLoader 实例
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load(person);
// 4. 创建几何体并应用材质
const geometry = new THREE.BoxGeometry(10, 10, 10);
const material = new THREE.MeshNormalMaterial({
color: 0xffffff,
bumpMap: texture,
bumpScale: 5
});
const box = new THREE.Mesh(geometry, material);
scene.add(box);
- bumpScale 凹凸贴图会对材质产生多大影响。典型范围是0-1。默认值为1。
- displacementMap 位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象, 以及充当真实的几何体。位移纹理是指:网格的所有顶点被映射为图像中每个像素的值(白色是最高的),并且被重定位。
// 创建 TextureLoader 实例
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load(person);
// 4. 创建几何体并应用材质
const geometry = new THREE.PlaneGeometry( 5, 5, 256, 256 );
const material = new THREE.MeshNormalMaterial({
map: texture, // 基础颜色贴图
displacementMap: texture, // 置换贴图
displacementScale: 0.5, // 控制置换强度,减少位移幅度
displacementBias: 0.5 // 设置偏移值,确保黑色部分不会向内移动
});
const Plane = new THREE.Mesh(geometry, material);
scene.add(Plane);
- displacementScale 位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)。如果没有设置位移贴图,则不会应用此值。默认值为1。
- displacementBias 位移贴图在网格顶点上的偏移量。如果没有设置位移贴图,则不会应用此值。默认值为0。
- flatShading 定义材质是否使用平面着色进行渲染。默认值为false。
- normalMap 用于创建法线贴图的纹理。RGB值会影响每个像素片段的曲面法线,并更改颜色照亮的方式。法线贴图不会改变曲面的实际形状,只会改变光照。
// 创建 TextureLoader 实例
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load(person);
const imgPng = textureLoader.load(imgPng);
// 4. 创建几何体并应用材质
const geometry = new THREE.PlaneGeometry( 5, 5, 256, 256 );
const material = new THREE.MeshNormalMaterial({
map: texture, // 漫反射贴图
normalMap: texture // 法线贴图
});
const Plane = new THREE.Mesh(geometry, material);
scene.add(Plane);
- normalMapType 法线贴图的类型。选项为THREE.TangentSpaceNormalMap(默认)和THREE.ObjectSpaceNormalMap。
- normalScale 法线贴图对材质的影响程度。典型范围是0-1。默认值是Vector2设置为(1,1)。
- wireframe 将几何体渲染为线框。默认值为false(即渲染为平滑着色)。
- wireframeLinewidth 控制线框宽度。默认值为1。由于OpenGL Core Profile与大多数平台上WebGL渲染器的限制,无论如何设置该值,线宽始终为1。