文章目录
前言
这一期的内容偏向风格化了。
一、MatCap材质
1、一些ben的内容
MatCap全名叫做Material Capture(材质捕捉),最开始是在Zbrush上应用的。
将光源,材质信息离线烘焙成一张材质球放在贴图上,渲染时候直接拿来用,通过计算将MatCap的纹理信息映射到模型上。
球体贴图是把球面纹理映射到网格上,去模拟反射的效果
这个是我们在第十集的时候做的matcap
- 注意法线是在世界空间下的
但是有个bug在这,当我们看向别处的时候,这里会出现转移的问题
- 问题的原因是它不会随着摄像机角度的改变而旋转(ben讲的那个视口空间和摄像机空间什么的我记得应该是一种东西,不知道为什么又变成不同的了,是不是翻译问题)
所以我们会使用以下的方式
- 这种做法的原理我翻到了一篇文章
满足这两种要求的解决方案是不仅从法线而且从视图方向构造UV坐标。在视图空间中,这个方向非常容易获得。由于照相机位于此空间的原点,因此指向顶点的矢量与其视图空间位置相同。我们只需要对其进行规范化,使其不在纹理中的单位圆之外进行采样。因为我们在混合之后进行归一化,所以我们只需要对两个方向向量求和就可以了。由于矩阵向量积是分布的,我们甚至可以混合对象空间中已经存在的位置和正态,然后仅将混合的向量转换为视图空间。这将使修改后的着色器多出一行。我还添加了一个混合因子()来调整每种材质的视图方向的影响,但在大多数情况下,将其硬编码为0.5可以获得良好的结果。_ViewDirBlend
效果:
2、关于matcap的一些其他了解
因为ben对于这一块的解释和原理并不多,而matcap确实是比较常用和好用的东西。
所以我自己又去搞了点拓展的看看。
MatCap 是一种巧妙且不真实的方式,通过将照明设置和材质属性的各个方面编码到单个纹理中来模拟这些交互。
然后我看到了这一篇文章
怎么制作matcap
二、经纬投射(LonglatUV)
LonglatUV,这个之前是做过案例的,配合反射向量那一节食用更香。
推一个我自己常用的poly haven
LonglatUV实际上做的操作:
三、创建cube maps
cube maps:
由多张纹理组合而成的纹理
unity制作过程:
- 首先可以选择在引擎里面用正方形截图,分布截取以下的方向的图片并且按照顺序排列
- 然后可以选择把图片导入unity,导入格式如下所示
- Convolution type(卷积类型)这个是确定mipmap计算方式的,如果是none类型,就是按照我们最常见的mipmap计算,如果是镜面反射,就是使用调整粗糙或者平滑度来调整mipmap,比如说最光滑用的是mipmap 0 等级等等
- FixedUp Edge ,这个是打开接缝,这代表正方形每条边都会连起来
ue制作过程:
比起unity,ue的是有一些困难在里面的
官方文档
When using the NVIDIA Texture Tools plug-in for Photoshop那个插件网站
图片要这个样子排
- 原因是dds和directx都默认了y轴式朝上的,而ue是z轴向上的
- 导出来的格式一定要是dds(要安装NVDIA那个插件)
这么设置然后导出,就可以了
四、室内着色器
1、基础方块
*本节内容有点酷的
我们想要利用贴图让一个立方体看起来像是里面有内容。
-
第一步:把uv原点移动到中心
一开始的uv长这样
- -2和-1是为了垂直翻转我们的uv
-
然后和我们的摄像机向量结合起来,值得注意的是,摄像机向量是世界坐标系下的,而uv是切线空间下的,所以要对摄像机向量做空间转化
摄像机向量是物体上的点到镜头的向量,不要搞混了
- 按着这个连
- 具体的数学推导等我看一下书
2、利用噪音虚拟化室内
要制作一栋大楼可以这个样子:
但是问题是很明显的,比如这个上面的太重复了,一眼就看出来了。
我们利用随机数,尝试让1/2/3/4面作为后墙,可能效果会很好
所以最开始我们需要创造一个随机数:
unity的其实是差不多的,没有细看了
3、内装着色器
首先我们把这个内容打包乘一个材质函数
- 注意有两个输出,两个输入
- 在unity里面创建子图就ok,也可以打包材质函数
- 这一步主要就是蒙版套蒙版,不难理解
4、一些改进
在制作的过程中,我们会发现着栋大楼的顶端映射的并不是地面,而是和侧面一样用的是正侧面,所以我们会想办法结合物体空间改进这个大楼
如图所示的两个地方是对比我们之前给出的内装着色器变化的地方,除此之外输入的向量也由2变成了3,因为要区分上下前后左右
- 主要思想就是,保证上下两个面是不变的,前后左右可以变
五、卡通着色器
卡通着色三要素:颜色,高光,外边线
1、颜色
Unity
PS里的纹理映射:
创造一张这个样子的纹理映射图
把 srgb 、mipmap关掉,并且设置压缩格式为未压缩的(RGB24),打包格式(wrap mode)为clamp
- 如图所示
UE
先把着色模型设置为无光照
然后和unity差不多的连接思路
- 但是ue的光照也叫做:Atmosphere Sun Light Vector,这个可以替换.但是实际上我没有找到这个节点,而是另外一个
2、外边线
第一种算法:
-
这个是蒙版,可以看到,只有周围是黑色的 -
然后设置了一个阈值,高于0.15的都是白色,低于0.15的都是黑色,与之前得到的颜色相乘就得到了一个外边线 -
unity的长这样
-
有一个很大的问题是只有圆型物体才是有效的,比如这个方体就有很明显的问题
第二种方式:
非常简单粗暴,模型复制黏贴,把一个模型稍微扩大并且面反向,并且打开背面剔除,这种做法我不喜欢,太贵了。
第三种方式:
在深度缓存区域找到边缘过滤器,把那些跨度跳跃很大的区域涂成黑色的。
我准备把NPR渲染放在后面捋一下,这一块有很多东西我还想深入学习的
3、高光算法
布林冯模型是老朋友了!
第一种:Blinn
思路是测量光源和人眼到法向量的角度,离得近的反射光强
第二种:Phong
phong的模型在外围有溢出光的感觉,更加真实
然后调整系数并且与之前的相混合就可以
unity的算法差不多
一些感想
在查询matcap有关的资料的时候,有人说如果想更多的了解可以多看看GPU Pro系列的。
然后我在网上一查发现有大佬已经做过这本书的笔记记录了,而且很详细。那是2018年的文章,我翻到评论区,有人在问会出pdf版本吗,然后那个作者回答说会出的。
我再往下翻了一下,然后看到了致敬。我才记起来,是毛星云啊。
勉励一下自己,来日继续努力。
这个系列算得上是比较基础的,我下一次做的话可能会想去复刻一些比较复杂的着色器,当然我也有可能先去过一下houdini,或者其他的一些TA向的。
好就这样。