当前位置: 首页 > backend >正文

【threejs】每天一个小案例讲解:常见材质

  代码仓

GitHub - TiffanyHoo/three_practices: Learning three.js together!

可自行clone,无需安装依赖,直接liver-server运行/直接打开chapter01中的html文件

运行效果图

知识要点

1. MeshBasicMaterial(基础网格材质)

• 特点:不响应光照,仅显示颜色或纹理,性能消耗低。

• 适用场景:静态背景、2D界面元素、不需要光影效果的模型(如线框模型)。

• 关键参数:

◦ color:设置基础颜色(如0xff0000为红色)。

◦ wireframe:是否以线框模式显示(true/false)。

2. MeshStandardMaterial(标准网格材质)

r71版本开始引入

• 特点:基于物理渲染(PBR),支持金属度、粗糙度等物理属性,响应环境光和直射光,效果更真实。

• 适用场景:大多数需要真实光影效果的模型(如金属、石材、塑料等)。

• 关键参数:

◦ metalness:金属度(0为非金属,1为金属)。

◦ roughness:粗糙度(0为光滑,1为粗糙)。

◦ map:纹理贴图(如木纹、石纹)。

3. MeshPhongMaterial(冯氏材质)

• 特点:经典光照模型,高光效果明显,计算速度比标准材质快,但真实感稍弱。

• 适用场景:需要高光效果的非金属物体(如车漆、光滑塑料)。

• 关键参数:

◦ specular:高光颜色。

◦ shininess:高光强度(值越大,高光点越小越亮)。

4. MeshLambertMaterial(兰伯特材质)

• 特点:响应光照,但无高光效果,表面呈哑光质感,光线均匀漫反射。

• 适用场景:布料、纸张、泥土等无光泽物体。

• 关键参数:

◦ color:基础颜色,受光照影响会变化。

5. SpriteMaterial(精灵材质)

• 特点:用于2D精灵对象(始终面向相机),常作为粒子效果或广告牌。

• 适用场景:烟雾、火焰、草丛等需要快速渲染的2D元素。

• 关键参数:

◦ map:精灵纹理(如火焰贴图)。

◦ sizeAttenuation:是否随距离缩放大小(true/false)。

6. ShaderMaterial(着色器材质)

• 特点:自定义GLSL着色器代码,灵活性极高,可实现复杂视觉效果(如动态流体、发光效果)。

• 适用场景:特效、动画、个性化渲染需求。

• 使用要点:需编写vertexShader(顶点着色器)和fragmentShader(片元着色器),并通过uniforms传递参数。

材质选择建议

• 追求真实感:优先用MeshStandardMaterial(PBR)。

• 性能优先或无光照需求:用MeshBasicMaterial或MeshLambertMaterial。

• 快速实现高光效果:选MeshPhongMaterial。

• 2D粒子或广告牌:用SpriteMaterial。

• 自定义特效:使用ShaderMaterial。

核心运行代码

// create a frame
var frameGeometry = new THREE.BoxGeometry(4, 4, 4);
var frameMaterial = new THREE.MeshBasicMaterial({color: 0xff0000, wireframe: true});
var frame = new THREE.Mesh(frameGeometry, frameMaterial);// position the frame
frame.position.x = 10;
frame.position.y = 2;
frame.position.z = 0;// add the frame to the scene
scene.add(frame);

参考官网:https://threejs.org/docs/#api/en/materials

http://www.xdnf.cn/news/13853.html

相关文章:

  • oracle 23ai json简单使用
  • reactive() 和 toRef()
  • 微服务架构中的 Kafka:异步通信与服务解耦(四)
  • 《哈希算法》题集
  • 最新Transformer模型及深度学习前沿技术应用
  • python学习---dayday2
  • 使用文件的基本操作和文件内容读写操作实现三个功能
  • 中间件是微服务架构的支撑工具,微服务是中间件的应用场景之一。
  • 基于PHP的图书商城(vue版)
  • 拨码开关(DIP Switch)原理、参数、选型与应用指南
  • Linux x86_64架构下的四级分页机制详解
  • Cordova移动应用对云端服务器数据库的跨域访问
  • 图像处理与机器学习项目:特征提取、PCA与分类器评估
  • AI基础知识(07):基于 PyTorch 的手写体识别案例手册
  • 一篇文章理解js闭包和作用于原理
  • 【消息队列】——如何使用Actor模型解决并发问题
  • 基于springboot视频及游戏管理系统+源码+文档
  • Python图像处理基础(六)
  • 域名证书自动更新-acme通用版
  • 网络编程之Modbus与HTTP
  • MySQL中InnoDB存储引擎底层原理与MySQL日志机制深入解析
  • 【在线五子棋对战】五、前端扫盲:html css javascript ajax jquery websocket
  • 应用案例丨一键测量300+工件,QM系列闪测仪批量检测
  • 多模态大语言模型arxiv论文略读(119)
  • 爱普生FC-135R晶振在广域网LoRa设备中的应用
  • 达梦数据库中无效触发器的排查与解决方案指南
  • Java Lambda 表达式与 Stream API 全解析:从基础到进阶
  • 短剧小程序开发:开启碎片化娱乐新视界
  • 第 4 篇:线性回归——机器学习“开山第一斧”,用一条直线洞见AI本质
  • 机器学习-黑马笔记