ThreeJs-04详解材质与纹理
一.matcap材质
这个材质不会受到光照影响,但是如果图片本身有光就可以一直渲染这个图片本来的样子,用来将一个图片纹理渲染到物体上的材质



代码实现
加载模型后,开启纹理渲染,并把它的材质变为这个材质,并且贴上纹理图

二.Lambert材质
Lambert网格材质是Three.js中最基本和常用的材质之一。本文将详细介绍Lambert网格材质的定义、特点、应用以及使用方法。

简单来说就是这个材质当你设置好各种贴图之后 实现凹凸不平地面等是比较好的
设置好Lambert材质后,打一个光进来,会发现是漫反射哑光的反射类似于

三.phong材质
PHONG材质是Three.js中常用的一种材质,它是一种基于Phong光照模型的材质,可以用于实现高光和阴影效果。Phong光照模型是一种基于漫反射、镜面反射和环境反射的光照模型,可以用于模拟真实物体的光照效果。
比如涂了漆面的木材,光滑的材质

设置为phone材质,在设置高光颜色就可以形成对点光源的反射

设置好环境贴图后

代码操作
创建光源,把一个平面设置成phone材质

添加环境贴图

光滑的反射就出来了

1.实现玻璃水晶效果

加载模型,设置环境光,把这个模型改为phone材质,并且设置两个折射率

envmap是环境贴图


如果想要折射效果还需要把环境贴图改为折射球形,上下不一样注意

当把上面的反射变为折射后,这里的反射率也变为了折射率


四.基础材质详解
1.标准网格材质
在 Three.js 中,MeshBasicMaterial 是一个用于创建基本材质的类。它能够让您快速创建不需要光照效果的几何体,并且配置非常简单,可以使用颜色、透明度和纹理等属性来自定义材质。MeshBasicMaterial 在 Three.js 中非常重要,因为它是创建简单3D图形的常用材质之一,而且渲染速度很快,能够让您的应用程序保持流畅的交互体验。如果您想要创建更复杂的3D图形,了解 MeshBasicMaterial 是非常有用的,因为它是其他更复杂材质的基础。
注意:标准网格材质需要设定环境贴图
这里做一个记录,系统性的介绍一下各种贴图的作用,在之前的材质也有各种贴图,但是标准是最齐全的能够达到漫反射也能镜反射
加载一个剑的模型


先上环境贴图

粗糙度为1,漫反射

粗糙度为0,镜反射

金属度为0

金属度为1

还原默认,先贴上贴图

金属度贴图和金属度是一个相乘的关系,越大就越金属
法线贴图实现凹凸不平的效果

凹凸贴图同理,两个只能设置一个
置换贴图可以让顶点有一个起伏的效果,上面是看起来,这个是真起来

粗糙度贴图可以让其光滑

注意:真实环境只需要导入进来就是这个样子,不需要一个一个贴图,只是有时候改可以了解

代码实现

创建环境贴图,背景一定要添加

2.物理网格材质

物理材质就是能够在刚才标准材质的基础上新增更多的功能
透光率


当粗糙度为0,很光滑的时候就完全透明了

厚度



折射率,反射率

衰减颜色,距离

衰减距离越小,就越快到达衰减颜色

偏红色
注意:衰减颜色最好都设置1以下不要整的

厚度贴图
呈现一个不均匀的厚度



清漆效果与清漆透明度

单纯设置一个清漆强度为1后

清漆光滑度,1漫反射,0镜反射

map就是通过纹理决定哪些地方要清漆哪些地方不要

中间光滑,周围不清漆

注意此时应该粗糙度为1,到时候纹理会乘以粗糙度,如果为0始终 都是光滑


法线贴图




3. 布料织物材料光泽效果

创建一个物理材质球体

设置光泽及颜色后


光泽粗糙程度

设置纹理贴图


4.肥皂泡、油滴、蝴蝶翅膀等薄膜的虹彩效应
反射出各种颜色的材质

这种效果实际是有两层组成,外面一层负责反射折射
创建一个基本球体,有粗糙度,透明度,还有一层厚度


设置彩虹色,反射率和彩虹色折射率


薄膜厚度范围
默认

设置薄膜厚度贴图


5.清除物体_几何体_材质_纹理保证性能和内存不泄漏
比如这里不断创建一个随机材质,随机几何体的物体,不断回调自身

此时cpu使用率和内存大小都在不断增加,到一定程度就会网页崩溃

要优化这种情况就是
每一帧渲染完毕,render.render就是渲染的语句,就去清除掉物体几何体等

6.巧用物理发光属性打造逼真IPHONE产品
在很多建模软件直接导出来给到3D导入会发现有些属性发光等会缺失,这是因为两者有些内容并不兼用,所以这个时候通常是加载到three的编辑器里面,进行编辑之后,满意之后再导出到three里面进行模型加载
刚加载进来

找到屏幕材质,设置好之后导出


加载进来就行了

7.修改模型光泽效果打造逼真室内场景

刚导入进来

设置光泽光泽颜色

毛绒效果,法线贴图

控制角度
如果让用户随意去转动很容易穿帮

首先设置起始位置
可以添加轨道控制器来辅助查看

设置相机初始位置,以及一开始看向的角度,x轴是横向看多宽,y是看多高,要设置lookat一开始看的角度还得配合控制器








垂直的最小角度是网上旋转,最大角度是往下旋转


水平左右的角度

ThreeJs-04详解材质与纹理的更多相关文章
- 一文详解 OpenGL ES 纹理颜色混合
在OpenGL中绘制的时候,有时候想使新画的颜色和已经有的颜色按照一定的方式进行混合.例如:想使物体拥有半透明的效果,或者绘制叠加光亮的效果,这时候就需要用到OpenGLES混合. 如上图所示,为石头 ...
- ThreeJS系列1_CinematicCameraJS插件详解
ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...
- Windows XP硬盘安装Ubuntu 12.04双系统图文详解
Windows XP硬盘安装Ubuntu 12.04双系统图文详解 Ubuntu 12.04 LTS版本于2012年4月26日发布,趁着五一放假,赶紧在自己的Windows XP的电脑上安装下Ubun ...
- iOS回顾笔记(04) -- UIScrollView的基本使用详解
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- ubuntu14.04 server ftp 服务安装配置详解
ubuntu14.04 server ftp 服务安装配置详解 cheungmine 2016-01-27 http://wiki.ubuntu.com.cn/Vsftpd 0 安装好vsftpd服务 ...
- Ubuntu 系统安装详解 19.04最新版本
Ubuntu 19.04版本系统安装详解 1 .镜像的下载 推荐 阿里云镜像下载 2.安装 1.1.新建虚拟机 注意硬件的兼容性问题 当前只有5.x可以用,其他兼容各位可以尝试下,我也都试过,但只有5 ...
- 什么是渲染目标(render target)&& 渲染到纹理(Render To Texture, RTT)详解
渲染到纹理(Render To Texture, RTT)详解 RTT是现在很多特效里面都会用到的一项很基本的技术,实现起来很简单,也很重要.但是让人不解的是网上搜索了半天只找到很少的文章说这个事儿, ...
- Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...
随机推荐
- 加入 Flutter Engage,Pick 您的专属 Dash 形象!
Flutter Engage 活动精彩来袭 对 Flutter 团队的开发者们来说,交流的重要性不言而喻,和您一样,我们也希望开发者们能够在不同的情境下进行互动分享.于是我们为您准备了一场特别的线上活 ...
- 《Vue.js 设计与实现》读书笔记 - 第12章、组件的实现原理
第12章.组件的实现原理 12.1 渲染组件 在渲染器内部的实现看,一个组件是一个特殊类型的虚拟 DOM 节点.之前在 patch 我们判断了 VNode 的 type 值来处理,现在来处理类型为对象 ...
- c++线程--快速上手
线程创建 头文件#include thread 是在 C++11 标准中引入的. C++11 标准引入了对多线程编程的标准化支持,其中包括了线程的创建.管理和同步机制. 头文件提供了基本的线程支持库, ...
- /proc/pids/io
rchar:代表自进程启动以来所读取的总字符数,包括通过缓存或直接读取的字符.单位是字节(bytes). wchar:代表自进程启动以来所写入的总字符数,包括通过缓存或直接写入的字符.单位是字节(by ...
- 什么是变量污染? let、const、var的区别?
变量污染就是全局变量滥用,造成报错,覆盖等问题:简单讲就是使用了相同的标识符声明了全局变量,var关键字声明相同的变量名会覆盖,let.const重复声明相同的变量名会直接报错: var 可以声明提升 ...
- Linux新建用户无法登陆系统的解决方案
前言 出现这个问题的原因,就是大家没有从基础开始学Linux,导致很多基础操作不会使用,遇到问题反而用搜索引擎搜索,得到一堆相似的答案,你就信了,因为重复就是权威.而你不清楚的是,这个答案是无数人复制 ...
- Kubernetes上安装nacos
k8s配置 --- apiVersion: apps/v1 kind: Deployment metadata: name: nacos namespace: com spec: selector: ...
- 远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法
当我们远程连接服务器时,有时候会出现以下提示,从而导致我们无法成功连接服务器,如下所述: 原因: 远程桌面使用的是"凭据安全支持提供程序协议 (CredSSP) ",这个协议在未修 ...
- 记录一个opencv的imread方法无法读取成功的问题,【设计到visual studio和静态库(lib)匹配的问题】
一.为什么会遇到这个问题 公司需要对多图进行拼接,经过多番查找发现了OpenStitching这个库.可以实现多图拼接.在python段尝试了之后感觉效果不错,所以使用Visual Studio进行C ...
- Mysql数据库笔记整理
数据库-理论基础 1.什么是数据库? 数据:描述事物的符号记录,可以是数字.文字.图形.图像.声音.语言等,数据有多种形式,它们都可以经过数字化后存入计算机. 数据库:存储数据的仓库,是长期存放在计算 ...