我们经常要实现绘制模型轮廓线的效果,这一节就介绍使用几何着色器来实现这个效果。
这一节的介绍是参考Philip Rideout 博客,下一节我会介绍这个博客复杂一点的效果实现步骤。
几何着色器最重要的一个特性就是我们可以获得当前图元的相邻顶点信息,以下为例:
其中的实线代表当前三角形本身的顶点,其中的虚线代表相邻的顶点信息。因此我们根据相邻点信息来判断当前线段是否处于轮廓线。
下面介绍根据三个点来求得法线,主要思想就是根据这三个顶点,计算两个向量,接着根据这两个向量法向量:
而其中的nz就可以用来判断是否在正面的依据。
主要步骤:
1. 判断当前面是否是正面(背面剔除不做处理)。如果是,转2.
2. 根据相邻面判断是否处于背面,如果是,转3;
3. 当前线段是轮廓,绘制轮廓线(可以通过控制直线宽度);
4. 绘制当前处理的三角形。
5. 在片段着色器中根据是否是轮廓线做判断,如果是轮廓线,则用直线颜色代替,否则使用卡通渲染来决定当前片段的颜色。
顶点着色器处理:
计算出在相机空间中的顶点和法向量。片段代码:
几何着色器处理:
1. 判断法线是否处于正面:
2. 计算轮廓线
3. 设置当前图元顶点信息
渲染效果图: