在Shader中会使用各种不同图参与渲染,所以简单地总结下各种图的渲染原理、制作方法,最后面几种是程序生成图。

1. Albedo

2. Diffuse(Photographic)

从上图可以看出来,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

基于高度的潮湿地面

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中读取上一帧水面高度纹理,在当前帧继续波动,这可以用于交互式水渲染,不过顶点

纹理拾取是比较耗费资源的操作,不需要交互的水面是用不到的,对于海战类型的游戏会比较有用。

 
 

来自 <https://zhuanlan.zhihu.com/p/27339998>

 
 

(转)简述47种Shader Map的渲染原理与制作方法的更多相关文章

  1. map集合修改其中元素 去除Map集合中所有具有相同值的元素 Properties长久保存的流操作 两种用map记录单词或字母个数的方法

    package com.swift.lianxi; import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

  2. 【C#多线程】2.线程池简述+两种传统的异步模式

    线程池简述+两种传统的异步编程模式 1.线程池简述 首先我们要明确一点,编程中讲的线程与平时我们形容CPU几核几线程中的线程是不一样的,CPU线程是指逻辑处理器,比如4核8线程,讲的是这个cpu有8个 ...

  3. [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)

    Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...

  4. react渲染原理深度解析

    https://mp.weixin.qq.com/s/aM-SkTsQrgruuf5wy3xVmQ   原文件地址 [第1392期]React从渲染原理到性能优化(二)-- 更新渲染 黄琼 前端早读课 ...

  5. 【Web动画】CSS3 3D 行星运转 && 浏览器渲染原理

    承接上一篇:[CSS3进阶]酷炫的3D旋转透视 . 最近入坑 Web 动画,所以把自己的学习过程记录一下分享给大家. CSS3 3D 行星运转 demo 页面请戳:Demo.(建议使用Chrome打开 ...

  6. Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. java里面获取map的key和value的方法

    获取map的key和value的方法分为两种形式: map.keySet():先获取map的key,然后根据key获取对应的value: map..entrySet():同时查询map的key和val ...

  8. 两种常用的jquery事件加载的方法 的区别

    两种常用的jquery事件加载的方法   $(function(){});  window.onload=function(){}  第一个呢,是在DOM结构渲染完成以后调用的,这时候网页中一些资源还 ...

  9. Map<String, String>循环遍历的方法

    Map<String, String>循环遍历的方法 Map<String, String>循环遍历的方法 Map<String, String>循环遍历的方法 下 ...

随机推荐

  1. vue中a的href写法

    注意点:href前面要加“:”或者v-bind: 2.字符串要用单引号“ ’ ”包住 加上了冒号是为了动态绑定数据,等号后面可以写变量. 如果不使用冒号,等号后面就可以写字符串等原始类型数据.这是就无 ...

  2. 02-第一个iOS程序-开发步骤

    打开Xcode 选择项目模板 Single View Application是最适合初学者的模板 设置项目属性 运行程序 不管怎样,先运行第一个iOS程序看看效果先(用快捷键Command + R 也 ...

  3. js/jquery 禁用点击事件

    前言 工作中经常遇到这种情况:验证邮箱页面的重新发送需要在3分钟后才可以点击触发请求,所以在这之前需要禁用他的点击. 网上查了后有以下几种实现方法 1.css禁用鼠标点击事件 .disabled { ...

  4. c++stl应用入门

    在这篇中,我会讲几个简单易懂且比较常用的stl函数,这些函数在noip系列考试中往往被允许使用(既然让用我们自然不用手码了...) (末尾有惊喜!) 1.sort 绝大部分刚入门的oier第一个接触的 ...

  5. ABAP术语-Call Transaction

    Call Transaction 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/15/1039270.html A data transfe ...

  6. 因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目

    因为之前完全没有接触过Spring,所以准备先把spring实战看完再落实项目

  7. mysql 使用 FIND_IN_SET 来查询数据

    mysql中find_in_set函数很有意思,它的功能是查找以英文逗号隔开的值,我们可以将数据存储类似为1,2,3,4格式.今天我们就来看看在thinkphp中怎样正确地使用find_in_set函 ...

  8. 配置Struts2及Struts2访问servlet api的方式

    Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...

  9. web前端总结面试问题<经常遇到的手写代码>

    冒泡排序 var arr = [5,8,3,6,9] for(var i=0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if( ...

  10. Docker(二):Hello World

    Docker 安装 这里以CentOS7 为例,其他安装教程可以自行通过其他路径了解. Docker 运行在CentOS7 上要求,系统为64位.系统内核版本为3.10以上. Docker 运行在 C ...