【技术美术百人计划】曲面细分与几何着色器
讲实话这节课听得确实有点痛苦,因为关于这两个着色器我们更需要学的是一些基础的知识,课程上讲的东西,感觉更偏向于给一个懂曲面细分着色器和几何着色器看几个案例。总之还是先记下知识点,找找其他教程吧。
曲面细分着色器

将一条直线进行细分,无限逼近这条曲线
可以用来制作海浪,雪地,雪地里出现的脚印,可以和置换贴图来结合,真正改变物体形状,边缘会有非常强的凹凸感
为什么不用复杂模型,而用曲面细分着色器?
它可以根据距离或者一些规则来动态调整模型的复杂度,带来更好的性能
几何着色器

主要来进行一些几何的绘制
可以用来做一些简单的几何动画,可以用来做类似于爆破破碎的效果,也可以草自己定义草是怎么画的,然后和曲面细分着色器结合,这样就可以有一个动态调整密度的草地,远的地方稀疏一些,近的地方密一点
执行顺序

顶点--->曲面细分---->几何----->片元
Hull Shader主要作用是用来定义一些细分的参数,比如每条边上如何细分和内部三角形如何细分
Domain Shader它的空间在重心空间,我们需要把这个重心空间转换到我们要用的空间.
TESS(几何着色器)的输入与输出
输入:Patch,可以看作多个顶点的集合,包含每个顶点的属性,可以指定一个Patch包含的顶点数以及自己的属性。
功能:将图元细分
输出:细分后的顶点
TESS(几何着色器)的流程
HullShader:决定细分的数量,并对输入的Patch参数进行改变(如果需要)
Tessellation Primitive Generation:进行细分操作
Domain Shader:对细分后的顶点进行处理,从重心空间转换到屏幕空间
Hull Shader参数解析
TessellationFactor:决定将一条边分为几部分
equal_Spacing:等距分割
fractional_even_spacing:向上取最近整数,n-2的等长部分,两边的小数部分
fractional_odd_spacing:向上取最近奇数,n-2的等长部分,两边的小数部分


曲面细分Demo演示
将一个Quad细分
体现具体的使用方法,通过一个quad可以看出不同数值对细分的 影响(之后可以使用在草地中),基于shader再回顾一遍各个参数的作用

与置换贴图的结合

GS(几何着色器)的输入与输出
1.输入为图元(三角形,矩形,线等)根据图元的不同,shader中会出现对应不同数量的顶点
2.输出同样为图元,一个或多个,需要自己从顶点构建,顺序很重要,同时需要定义最大输出的顶点数
几何着色器 Demo演示
基于三角形构建一个草地,从简单的生成三角形开始,涉及Triangle Stream的使用,基于切线空间的顶点操作以及与曲面细分shader的联合使用, 同时可以说一下曲面细分参数的确定方式(基于distance, edge)

Unity Shader学习:Geometry Shader(几何着色器)


