
笔记17 曲面细分与几何着色器
曲面细分:Tessellation; 几何:Geometry
曲面细分着色器的应用
- 海浪、雪地脚印等
- 与置换贴图的结合
曲面细分着色器可以根据距离或者其他规则,动态调整模型的复杂度,带来更好的性能。
几何着色器的应用
- 几何动画
- 草地等(与曲面细分着色器结合)
着色器执行顺序:读书笔记01《Unity Shader入门精要》 中的 GPU流水线
TESS 曲面细分
组成
曲面细分着色器由 Hull Shader(细分控制着色器),Tessellation Primitive Generator 和 Domain Shader(细分计算着色器)组成。
- Hull Shader 用来定义一些细分的参数,比如在每一条边上如何细分,然后内部三角形如何细分。
- Tessellation Primitive Generator 不可编程不可控制。
- Domain Shader 把中心空间转换到我们要用的空间
输入与输出
- 输入: Patch,可以看成是多个顶点的集合,包含每个顶点的属性,可以指定一个Patch包含的顶点数以及自己的属性
- 功能: 将图元细分(可以是三角形,矩形等)
- 输出: 细分后的顶点
流程
- HULL Shader
1.决定细分的数量 (设定Tessellation factor以及lnside Tessellation factor)
2.对输入的 Patch 参数进行改变 (如果需要) - Tessellation Primitive Generation
进行细分操作 - Domain Shader
对细分后的点进行处理,从重心空间 (Barycentric coordinate system) 转换到屏幕空间
HULL Shader 各参数解析
- Tessellation Factor 决定将一条边分成几部分。有 equal_spacing, fractional_even_spacing, fractional_odd_spacing
- Inner Tessellation Factor 分出内部的三角形/矩形
Demo 演示
(视频 08:00 开始,简单讲解了代码,略)
GS 几何着色器
输入与输出
- 输入为图元(三角形,矩形,线等)根据图元的不同,shader中会出现对应不同数量的顶点
- 输出同样为图元,一个或多个,需要自己从顶点构建,顺序很重要同时需要定义最大输出的顶点数
Demo 演示
基于三角形构建草地(视频 18:23 开始,略)
Oops!
看到评论区有人说视频讲得太表面了,建议看看 https://roystan.net/articles/grass-shader/ 。
-作业-
根据今天课程内容,使用曲面细分和几何着色器做一些有意思的demo
想做麦田,先贴张游戏截图在这
- 标题: 笔记17 曲面细分与几何着色器
- 作者: 铁名_IronName
- 创建于 : 2026-03-25 19:16:12
- 更新于 : 2026-03-31 14:44:27
- 链接: https://blog.ironname.top/2026/BRPlan/笔记17-技术美术百人计划/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论