three.js材质与shader
material: MeshPhongMaterial()
diffuse 漫射颜色,默认初始化为0xffffff
emissive 自发光(荧光)颜色 默认初始化为0x000000,实体颜色不受其他灯光的影响
specular 高光色,默认初始化为0x111111 灰色,材质发光区域的颜色,比如设置为漫射颜色,亮度加大,材质更像金属,设置为灰色,材质更像塑料,默认是灰色。
shininess 高光的强度 默认是30,数值越大,高光呈现出一个亮点
metal 是否是金属
wrapAround 是否遮罩
wrapRGB new THREE.vector3() 通过设置wrapRGB的数值,根据上面注释中的公式,对材质颜色进行线性混合
map 普通贴图,默认为null
lightMap 光照贴图,默认为null
bumpMap 凹凸贴图, 默认为null
normalMap 法线贴图 法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。就视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。
specularMap 高光贴图
alphaMap 通透度贴图
envMap 环境贴图
reflectivity 反射率,默认为1
refractionRatio 折射率,默认为0.98
fog 雾效,默认开启
1.为什么要用Lightmapping?
简单来说就是实时灯光计算十分耗时,随着光源越多会倍增计算耗时。使用Lightmap模拟灯光带来的效果,便不用去计算灯光,会带来性能上的大大提升。当然你不用灯光效果也是没问题的,具体还是看项目需求。最简单的直接在3dmas或maya里面烘培完贴图顶点色也行。
shading 着色方式, 默认是THREE.SmoothShading,还有NoShdaing = 0/THREE.FlatShading = 1
着色方式
绝大多数的3D物体是由多边形(polygon)所构成的,它们都必须经过某些着色处理的手续,才不会以线结构(wireframe)的方式显示。这些着色处理方式有差到好,依次主要分为FlatShading、GouraudShading、PhoneShading、ScanlineRenderer、Ray-Traced。
FlatShading(平面着色)
也叫做“恒量着色”,平面着色是最简单也是最快速的着色方法,每个多边形都会被指定一个单一且没有变化的颜色。这种方法虽然会产生出不真实的效果,不过它非常适用于快速成像及其它要求速度重于细致度的场合,如:生成预览动画。
GouraudShading(高洛德着色/高氏着色)
这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式。它可对3D模型各顶点的颜色进行平滑、融合处理,将每个多边形上的每个点赋以一组色调值,同时将多边形着上较为顺滑的渐变色,使其外观具有更强烈的实时感和立体动感,不过其着色速度比平面着色慢得多。
PhoneShading(补色着色)
首先,找出每个多边形顶点,然后根据内插值的方法,算出顶点间算连线上像素的光影值,接着再次运用线性的插值处理,算出其他所有像素高氏着色在取样计算时,只顾及每个多边形顶点的光影效果,而补色着色却会把所有的点都计算进去。
ScanlineRenderer(扫描线着色)
这是3ds Max的默认渲染方式,它是一种基于一组连续水平线的着色方式,由于它渲染速度较快,一般被使用在预览场景中。
Ray-Traced(光线跟踪着色)
光线跟踪是真实按照物理照射光线的入射路径投射在物体上,最终反射回摄象机所得到每一个像素的真实值的着色算法,由于它计算精确,所得到的图象效果优质,因此制作CG一定要使用该选项。
Radiosity(辐射着色)
这是一种类似光线跟踪的特效。它通过制定在场景中光线的来源并且根据物体的位置和反射情况来计算从观察者到光源的整个路径上的光影效果。在这条线路上,光线受到不同物体的相互影响,如:反射、吸收、折射等情况都被计算在内。
wireframe 是否以线框方式渲染几何体
wireframeLinewidth 线框宽度
wireframeLinecap sting ‘round’/’butt’/’square’ 线框端点样式
wireframeLinejoin 线框的线段边角的类型
lineCap 属性指定线段如何结束。只有绘制较宽线段时,它才有效。这个属性的合法值如下表所示。默认值是:”round”。
值 含义
“butt” 这个默认值指定了线段应该没有线帽。线条的末点是平直的而且和线条的方向正交,这条线段在其端点之外没有扩展。
“round” 这个值指定了线段应该带有一个半圆形的线帽,半圆的直径等于线段的宽度,并且线段在端点之外扩展了线段宽度的一半。
“square” 这个值表示线段应该带有一个矩形线帽。这个值和 “butt” 一样,但是线段扩展了自己的宽度的一半。
lineJoin 属性设置或返回所创建边角的类型,当两条线交汇时。
注释:值 “miter” 受 miterLimit 属性的影响。
默认值: round 值 描述 bevel 创建斜角。 round 创建圆角。 miter 默认。创建尖角。
skinning 定义材质是否使用蒙皮,默认初始化为false
morphTargets 定义材质是否设定目标变形动画,默认为false
morpNormals 定义是否反转法线,默认为false
.mtl文件解析
.mtl文件是材质库文件,描述的是物体的材质信息,ASCII储存,任何文本编辑器都能打开。一个.mtl文件可以包含一个或者多个材质的定义,对于每个材质都有其颜色,纹理和反射贴图的描述,应用于物体的表面和顶点。
Ka rgb 材质颜色光照-环境反射
Kd rgb 材质颜色光照-漫反射
Ks rgb 材质颜色光照-镜反射
Kf rgb 材质颜色光照-滤光透射