【转】简述47种Shader Map的渲染原理与制作方法
技术综合 6060 105
实名

通过了实名认证的内容创造者

发布于 2018-2-12 17:38:20

您需要 登录 才可以下载或查看,没有账号?注册

x
原贴地址:https://zhuanlan.zhihu.com/p/27339998

在Shader中会使用各种不同图参与渲染,所以简单地总结下各种图的渲染原理、制作方法,最后面几种是程序生成图。
1.         Albedo
2.         Diffuse(Photographic)
1.jpg
从上图可以看出来,Albedo是去掉Diffuse的光照和阴影生成的,而在pbr工作流下必须要用Albedo。转换方法:How to Make an Albedo Texture from a Diffuse Texture

3.         Alpha Map
注意:jpg没有alpha通道,png也没有alpha通道,显示的alpha是根据rgb计算的灰度作为alpha使用。另外安卓平台ETC1也没有alpha通道。

4.         Bump Map
5.         Height Map
基于高度的潮湿地面
2.jpg

6.         Normal Map
Bump Map是凹凸贴图,常用的有两种:一种是Emboss Bump Map(浮雕凹凸贴图,使用的Height Map),另一种是Dot3 Bump Map(点乘凹凸贴图,使用的是Normal Map)

7.         Mask Map
Mask用途比较多,常用来标识不同物体,比如标识建筑上反光的窗户、地面的积水、皮肤上汗水等。


8.         Light Map


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
最常用于地形渲染,单独一张control 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
半条命首先引入的光照贴图方式,具体参考:Radiosity Normal Map,另外抵抗:人类陨落也有使用这种方法:抵抗中的光照


36.     Cavity Map
缝隙图存储的是比普通AO更小的AO信息,主要用于表现裂缝。制作方法参考:缝隙图笔记


37.     Curvature Map
曲率图和缝隙图不同的是它主要用于表现边缘、凹凸等效果,用于耳朵、眉骨、鼻子渲染效果会很好,利用DDX/DDY或fwidth也可以动态计算曲率。


38.     Anisotropic Map
有些物体的光照会呈现各向异性,比如头发、金属等,下图是三种头发渲染的方式(环形、kajiya、Scheuermann)都用到各向异性的贴图用于高光偏移。


39.     Derivative Map
这是由顽皮狗大神Morten Mikkelsen首先提出法线图的衍生方式(Bump Mapping Unparametrized Surfaces on the GPU),因为用法线图一般在切线空间用于光照计算,而这种方法则不需要切线空间的参与,效率和效果都会更好,不用法线图,而是表面梯度图,和高度梯度图是不同的。不过这文章读起来挺心累的,最好参考Jim Blinn大神的凹凸贴图原理


40.     Foam Map
泡沫贴图、浪花贴图用于水面超过一定值时泡沫会和水面颜色混合,水面顶点越高泡沫透明度越大。


41.     Caustics Map
水纹贴图:因为水面起伏、焦散导致水底某些地方会比周围更亮,可以用Projector渲染水纹,也可以参考GPU Gems的反向计算折射光线来采样太阳环境图的方法(Rendering Water Caustics),还有一个制作水纹的工具(水纹生成器+Unity Demo)


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中读取上一帧水面高度纹理,在当前帧继续波动,这可以用于交互式水渲染,不过顶点纹理拾取是比较耗费资源的操作,不需要交互的水面是用不到的,对于海战类型的游戏会比较有用。








本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
Zh_Jason  发表于 2018-2-13 09:23:46  
2#
资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
使用道具
1路轨1  发表于 2018-2-13 09:45:04  
3#
666
回复 收起回复
使用道具
44897lojji  发表于 2018-2-16 09:00:09  
4#
感谢楼主分享,楼主辛苦了。
回复 收起回复
使用道具
ggx  发表于 2018-3-8 20:03:39  
5#
学习一下理论知识
回复 收起回复
使用道具
luyouxiang  发表于 2018-3-26 08:17:08  
6#
学习一下理论知识,感谢.
回复 收起回复
使用道具
傲世轻物  发表于 2018-3-31 12:38:51  
7#

感谢楼主分享,楼主辛苦了
回复 收起回复
使用道具
万年小学生  发表于 2018-5-23 14:34:48  
8#
感谢分享
回复 收起回复
使用道具
^ε~隨èの風  发表于 2018-10-15 21:28:17  
9#

感谢楼主分享,楼主辛苦了。
回复 收起回复
使用道具
白雲╄悠悠  发表于 2018-10-16 09:47:34  
10#

带你赚币带你飞,元素里面有正妹
回复 收起回复
使用道具
qq_马卡龙_WRh  发表于 2018-10-16 11:21:45  
11#
厉害厉害厉害
回复 收起回复
使用道具
lj502427266  发表于 2018-10-16 16:35:25  
12#
回复 收起回复
使用道具
湖蓝色熊猫  发表于 2018-10-16 16:47:07  
13#
学习一下理论知识
回复 收起回复
使用道具
楼亦竹  发表于 2018-10-16 18:58:01  
14#
膜拜神贴
回复 收起回复
使用道具
迷路的小星扬  发表于 2018-10-16 22:09:45  
15#
66666666
回复 收起回复
使用道具
dsglxq  发表于 2018-10-17 10:19:55  
16#
感谢分享!!!
回复 收起回复
使用道具
hejiesong123  发表于 2018-10-17 10:43:47  
17#
感谢分享!!!
回复 收起回复
使用道具
缘丶妙不可言  发表于 2018-10-17 13:07:09  
18#
本帖最后由 缘丶妙不可言 于 2023-2-6 11:44 编辑

资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
使用道具
miao  发表于 2018-10-18 21:32:46  
19#
不错的资源
回复 收起回复
使用道具
檀茫  发表于 2018-10-18 22:35:32  
20#
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表