Unity Geometry Shader实现

Posted JaffHan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Geometry Shader实现相关的知识,希望对你有一定的参考价值。

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中同样可以实现,暂时还没有比较过三者之间的效率以及适用范围。

 

以上是关于Unity Geometry Shader实现的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D的Shader基本结构—子着色器SubShader

这是用两个shader来实现,球的shader跟两个胶囊体

osg中使用geometry shader方式

Geometry shader总结

Unity Shader——Shader实现大海的波涛效果

Unity 之 后处理实现界面灰度效果(PostProcessing实现 | Shader实现)