在Shader中会使用各种不同图参与渲染,所以简单地总结下各种图的渲染原理、制作方法,最后面几种是程序生成图。
1. Albedo
2. Diffuse(Photographic)
3. Alpha Map
注意:jpg没有alpha通道,png也没有alpha通道,显示的alpha是根据rgb计算的灰度作为alpha使用。另外安卓平台ETC1也没有alpha通道。
4. Bump Map
5. Height Map
基于高度的潮湿地面
6. Normal Map
Bump Map是凹凸贴图,常用的有两种:一种是Emboss Bump Map(浮雕凹凸贴图,使用的Height Map),另一种是Dot3 Bump Map(点乘凹凸贴图,使用的是Normal Map)
7. Mask Map
Mask用途比较多,常用来标识不同物体,比如标识建筑上反光的窗户、地面的积水、皮肤上汗水等。
9. Lut
Lut(查找表lookup table)可以用于优化复杂光照的渲染,比如lambert blinn-phong可以把(NL,NH)作为uv坐标,将光照计算存储在一张贴图中,这样渲染时复杂的计算过程就优化为纹理采样了。另外皮肤、毛发之类复杂计算都可以用此方法优化。
10. Emission Map
如果要表现更好的效果,自发光还要配合HDR/ToneMap/Bloom。
11. Metallic Map/Roughness
12. Specular Map/ Smoothness
高光工作流可以不受限于PBR,能做非真实渲染,而金属工作流则对入门者更友好,限制在物理渲染的框架中,不至于渲染的太糟,当然金属工作流也可以做风格化的渲染。如果是用Substance Painter或者Marmoset Toolbag制作,这两种方式都支持导出的。
13. Gloss Map
14. Smothness Map
15. Roughness Map
光泽贴图和高光贴图是不同的,它类似平滑贴图/粗糙贴图,表示物体表面的平滑粗糙程度,而高光贴图存储的是高光的强度,金属贴图存储的是金属度。
16. pbr(sbsar)
17. Ramp Map
Ramp Map常用于卡通渲染,可以用于手工调节漫反、高光、阴影等,但是这比较依赖美术画图的功力,道理简单,渲染的好看却不容易。
18. Detail Map(Albedo Emission Specular Normal 等)
Detail Map主要解决相机靠近模型时贴图精度不足的问题,比如地面、皮肤、树木等等靠近看会很模糊,用一张尺度更小的坑坑洼洼的图来增加细节。左上是模糊的地面,右上是细节图,最下面是增加细节后的地面。
19. Gradient Map(用于Color Gradient颜色分级、颜色校正等)
20. Jitter Map/Sparke Map/Glitter Map
这种闪烁的噪点主要用于沙子、雪等渲染,主要用于表现颗粒感。这可以用噪声图来用于渲染,也可以用函数生成,一般类似frac(a*sin+b)这样形式,可以搭配WorldPos、ViewPos、Time来组合成函数。
21. Noise Map
Noise有很多种:白噪声、蓝噪声、perlin噪声、simplex噪声、Voronoi噪声。另外**个噪声图编辑器: numberflow
22. Splatting Map
最常用于地形渲染,单独一张co**ol texture作为多层贴图的混合系数,既可以用于颜色混合,也可以用于法线混合。
23. Lens Map(Rain/Snow/Freeze/Glare/Flare/Flash/Gleam/starburst)
做镜头效果会需要很多类似雨滴、雪花、脏迹、冰冻、炫光、星星等贴图。比如下面镜头雨滴。
24. CubeMap
Arm公司做的Ice Cave把CubeMap用在反射、折射、阴影,效果很赞( ice cave)
25. MatCap Map
Matcap的原理将法线转换view坐标系,取XY作为UV采样一张贴图,原理如下图
对于场景色调比较统一、不要求精准光照的情况,这是种运行效率非常高的渲染方式。
26. 3D Texture
3d纹理最常用于体渲染,比如云、高度雾等。Unity不支持3d纹理的文件格式,但是支持动态创建Texture3D,这样可以自己保存为asset格式或者自定义格式,在运行时转换为Texture3D。因为体渲染比较常用的方式是raymatching,步进次数少效果很难表现出来,在移动端效率比较低。图来HorizonZeroDawn
27. Translucency Map(Thickness Map、反向AO、单散射)
主要用于半透明物体,比如阔叶植被、玉等
28. Ambient Occlusion Map
AO的计算方法是从顶点的半球发出射线,检测射线是否与网格相交,下图的遮挡值是5/7。 图来源
因为AO图噪点较多,即使增加射线的数量效果也不是很好,而体遮挡法能很好解决这个问题。AO如果作为后处理的话,SSVO、SSDO是比较流行的方法。
29. DUDV Map
DuDv图看上去像蚯蚓爬过的法线图,一般用RG两个通道存储数据,是根据法线求导后再模糊处理存储的数据,类似与Parallax Map的用途,它也用于扭曲,比如下图用于扭曲水面倒影。
30. Flow Map
Flow map存储的是向量场数据,可以用于控制水面UV,比如下图石头周围一圈一圈水纹,制作工具有很多,比如 flowmap制作工具
31. Ripple Map
常用于雨滴水纹、物体落入水中的水纹等,可以算是flowmap的一种。
32. Distort Map
扭曲图比较常用于半透物体,用于扭曲背景。比如下图冰块。
33. Displacement Map
34. Vector Displacement Map
这两种图常用镶嵌,不过Displacement Map相当于高度图,而Vector Displacement Map存储的是三维向量,可以更好地细分模型。比如用地面蘑菇、地衣、耳朵等。
35. Radiosity Normal Map
36. Cavity Map
缝隙图存储的是比普通AO更小的AO信息,主要用于表现裂缝。制作方法参考: 缝隙图笔记
37. Curvature Map
曲率图和缝隙图不同的是它主要用于表现边缘、凹凸等效果,用于耳朵、眉骨、鼻子渲染效果会很好,利用DDX/DDY或fwidth也可以动态计算曲率。
38. Anisotropic Map
有些物体的光照会呈现各向异性,比如头发、金属等,下图是三种头发渲染的方式(环形、kajiya、Scheuermann)都用到各向异性的贴图用于高光偏移。
39. Derivative Map
40. Foam Map
泡沫贴图、浪花贴图用于水面超过一定值时泡沫会和水面颜色混合,水面顶点越高泡沫透明度越大
41. Caustics Map
42.Bent Normal Map (经大神 王滕昊提醒补充加上)
Bent Normal 常用于离线AO渲染中,是对原始法线修改后的向量,考虑周围遮挡情况使其指向光线传入的主方向,如下图Bend Normal 比原始法线偏右。用于光照计算或者环境光采样用Bend Normal在模型边缘处会得到更好的AO和光照效果。
43. Depth Map
44. Camera Depth Map
45. Camera Depth Normal Map
相机深度图可以用于渲染水、雾、扫描、半透物体等,这里有个不错文章有关深度法线图的: 深度与法线图
46. Grab Pass Texture
GrabPass可以用于热浪扭曲、半透冰块、冲击波等需要背景用于渲染的情况,在移动端效率不高,不要求动态背景时可以用Cubemap来代替。
47. Vertex Texture Fetch
在Vertex Shader中读取上一帧水面高度纹理,在当前帧继续波动,这可以用于交互式水渲染,不过顶点纹理拾取是比较耗费资源的操作,不需要交互的水面是用不到的,对于海战类型的游戏会比较有用。
|