unity官方文档关于geometry shader的内容等同于没有,这也是因为unity的开发者基本面向的是移动平台开发,所以这种SM4.0的特性基本都不会被开发者考虑。但是本着与时俱进的精神(虽然现在已经不早了)还是研究一下以备不时之需。
在开始unity geometry shader之前,通过DX10的龙书,简单的了解了一下geometry shader的原理。然后看了一个GS的billboard例子,觉得大同小异。
首先要知道,GS和VS以及FS的区别。
在dx9的渲染管线中,可编程的shader只有顶点着色器和片段着色器两种,在我们进行shader编写的时候,可以知道顶点着色器的输出就是片段着色器的输入。但是在dx10的渲染管线开始,增加了一个几何着色器。几何着色器在渲染管线中位于顶点着色器和片段着色器之间,准确的是紧挨着顶点着色器,所以在某些方面,几何着色器的操作和顶点着色器有相似性,一些原来在顶点着色器中的计算完全可以转移到几何着色器中进行,但并不建议那么做。
其次,几何着色器是可选的,和顶点片段着色器不同。我们在shader编写的时候必须要有两个shader,顶点着色器用于坐标变换,片段着色器返回颜色。但是几何着色器呢?它的输入顶点着色器的输出,输出不是片段着色器的输入。输入是图元,输出也是图元。
但是有人会疑惑,在之前的vs和fs编写时,顶点着色器的输出即片段着色器的输入是一个顶点信息的数组啊。
图元是渲染对象在顶点着色器之后,光栅化之前的一种状态。简单的来说,就是点或者线段或者三角形。
经过这些简单的了解,很多人就大概能猜到几何着色器可以用来做什么了,比如曲面细分,比如lowpoly。上面说到的billboard也可以,不过billboard可以在脚本和顶点shader中同样可以实现,暂时还没有比较过三者之间的效率以及适用范围。
原文:http://www.cnblogs.com/jaffhan/p/7565178.html