在 Three.js 中,Material
(材质)用于定义物体的外观。常见的材质包括 基本材质、光照材质、物理材质、特殊材质 等。
1️⃣ MeshBasicMaterial(基础材质)
- 不会受光照影响,颜色始终保持不变。
- 适用于 UI 元素、贴图展示、HUD、透明物体 等。
const material = new THREE.MeshBasicMaterial({
color: 0xff0000, // 纯红色
wireframe: true // 线框模式
});
📌 特点:
✅ 颜色始终不变,不受光照影响。
✅ 适合绘制 线框、标识物、无光照模型。
2️⃣ MeshStandardMaterial(标准材质 - PBR 渲染)
- 支持光照,可以实现 金属感、粗糙度、法线贴图 等效果。
- 适用于 现实材质(金属、塑料、木头等)。
const material = new THREE.MeshStandardMaterial({
color: 0x00ff00, // 绿色
roughness: 0.5, // 0 = 光滑, 1 = 粗糙
metalness: 0.8, // 0 = 非金属, 1 = 金属
});
📌 特点:
✅ 受光照影响,适用于 PBR(基于物理的渲染)。
✅ 需要光源,否则物体可能看不见。
3️⃣ MeshPhysicalMaterial(物理材质 - 高级 PBR)
- 比
MeshStandardMaterial
更真实,支持 透明度、折射、发光 等。 - 适用于 玻璃、钻石、水等材质。
const material = new THREE.MeshPhysicalMaterial({
color: 0xabcdef,
roughness: 0.2, // 光滑程度
metalness: 0.9, // 金属度
clearcoat: 1.0, // 透明涂层(0~1)
transmission: 0.9, // 透光度(0 = 不透明,1 = 完全透明)
});
📌 特点:
✅ 适合高光泽、透明度、玻璃等效果。
✅ 比 MeshStandardMaterial
更真实,但计算更复杂。
4️⃣ MeshLambertMaterial(朗伯材质 - 适用于漫反射)
- 受光照影响,适合 非金属表面(木头、石头等)。
- 计算速度较快,适用于低性能设备。
const material = new THREE.MeshLambertMaterial({
color: 0xff9900,
});
📌 特点:
✅ 计算快,适合大场景、多物体。
✅ 适用于漫反射材质(无金属感)。
❌ 不支持高光反射,看起来较“朴素”。
5️⃣ MeshPhongMaterial(冯氏材质 - 适用于光滑材质)
- 支持高光反射,适用于 塑料、瓷器、光滑物体。
- 比
MeshLambertMaterial
更真实,但比MeshStandardMaterial
计算更快。
const material = new THREE.MeshPhongMaterial({
color: 0x0000ff, // 蓝色
shininess: 100, // 反射强度
specular: 0xffffff // 高光颜色
});
📌 特点:
✅ 适合光滑表面,如 瓷器、塑料、金属。
✅ 支持高光反射,比 MeshLambertMaterial
更逼真。
❌ 不适用于 PBR 渲染(不如 MeshStandardMaterial
真实)。
6️⃣ MeshToonMaterial(卡通材质 - 漫画风格)
- 适用于 卡通风格、Cel Shading 渲染。
const material = new THREE.MeshToonMaterial({
color: 0x00ff00
});
📌 特点:
✅ 适用于 卡通风、动漫风 渲染。
✅ 计算较快,适合风格化游戏。
📌 特殊材质
7️⃣ PointsMaterial(粒子材质)
- 适用于 粒子系统(雪、雨、星空等)。
const material = new THREE.PointsMaterial({
color: 0xffffff,
size: 0.1
});
8️⃣ LineBasicMaterial(线条材质)
- 适用于 绘制线条(如辅助线、网格等)。
const material = new THREE.LineBasicMaterial({ color: 0xff0000 });
🎯 选材指南
材质类型 | 适用场景 | 受光照影响 | 备注 |
MeshBasicMaterial | 纯色、贴图、UI | ❌ 否 | 不受光照影响 |
MeshLambertMaterial | 木头、布料、石头 | ✅ 是 | 低性能设备适用 |
MeshPhongMaterial | 瓷器、塑料、光滑表面 | ✅ 是 | 有高光反射 |
MeshStandardMaterial | 真实感材质(PBR) | ✅ 是 | 支持粗糙度、金属度 |
MeshPhysicalMaterial | 玻璃、水、透明材质 | ✅ 是 | 计算最真实 |
MeshToonMaterial | 卡通风格 | ✅ 是 | 类似动漫渲染 |
PointsMaterial | 粒子系统(雪、雨、星星) | ❌ 否 | 适用于粒子效果 |
LineBasicMaterial | 线条、网格 | ❌ 否 | 适用于辅助线 |
🎯 总结
- 不受光照:用
MeshBasicMaterial
。 - 真实感材质(PBR):用
MeshStandardMaterial
或MeshPhysicalMaterial
。 - 低计算成本(适合大场景):用
MeshLambertMaterial
。 - 带反射高光:用
MeshPhongMaterial
。 - 卡通风格:用
MeshToonMaterial
。 - 粒子、线条:用
PointsMaterial
或LineBasicMaterial
。
如果你要创建 现代 3D 场景,建议用:
MeshStandardMaterial
(最常用,适合 PBR 渲染)。MeshPhysicalMaterial
(高级 PBR,适合玻璃、水)。MeshPhongMaterial
(适合光滑表面)。
这样可以获得更真实的渲染效果!🚀