欢迎光临散文网 会员登陆 & 注册

【技术美术百人计划】曲面细分与几何着色器

2023-06-23 16:17 作者:柴郡笔记  | 我要投稿

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



曲面细分着色器

将一条直线进行细分,无限逼近这条曲线

可以用来制作海浪,雪地,雪地里出现的脚印,可以和置换贴图来结合,真正改变物体形状,边缘会有非常强的凹凸感

为什么不用复杂模型,而用曲面细分着色器?

它可以根据距离或者一些规则来动态调整模型的复杂度,带来更好的性能


几何着色器

主要来进行一些几何的绘制

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


执行顺序

顶点--->曲面细分---->几何----->片元

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再回顾一遍各个参数的作用

image.png



与置换贴图的结合

image.png


GS(几何着色器)的输入与输出

1.输入为图元(三角形,矩形,线等)根据图元的不同,shader中会出现对应不同数量的顶点

2.输出同样为图元,一个或多个,需要自己从顶点构建,顺序很重要,同时需要定义最大输出的顶点数


几何着色器 Demo演示

基于三角形构建一个草地,从简单的生成三角形开始,涉及Triangle Stream的使用,基于切线空间的顶点操作以及与曲面细分shader的联合使用, 同时可以说一下曲面细分参数的确定方式(基于distance, edge)

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

简单的几何着色器
利用GPU实现无尽草地的实时渲染




【技术美术百人计划】曲面细分与几何着色器的评论 (共 条)

分享到微博请遵守国家法律