学习100个Unity Shader (18) --- 几何着色器(Geometry Shader)

文章目录

概述

  1. vertex shader --> [geometry shader] --> fragment shader。[]: 可选阶段。
  2. 输入图元 ---> geometry shader ---> 其他图元

编写格式

c 复制代码
[maxcertexcount(N)]
void ShaderName (PrimitiveType InputVertexType InputName[NumElements], 
inout StreamOutputObjectVertexType) OutputName){// 几何着色器具体实现}

几何着色器每次输出的顶点个数都可能不同,[maxvertexcount(N)]用来指定几何着色器单次调用所输出的顶点数量最大值,输出点=1,输出线=2,输出三角形=3。
PrimitiveType图元类型:

图元类型
point 输入图元拓扑类型为点列表
line 输入图元拓扑类型为线列表或线条带
triangle 输入的图元拓扑类型为三角形列表或三角形带
lineadj 输入的图元拓扑类型为线条列表/带及其邻接图元
triangleadj 输入的图元为三角形列表/带及其邻接图元

StreamOutputObjectVertexType 输出流类型

输出流类型
PointStream 一系列顶点所定义的点列表
LineStream 一系列顶点所定义的线条带
TriangleStream 一系列顶点所定义的三角形带

举例

c 复制代码
//The data structure from the application to the vertex shader.
struct a2v  
{  
    float4 vertex : POSITION;  
    float2 uv : TEXCOORD0;  
};  

//The data structure from the vertex shader to the geometry shader.
struct v2g  
{  
    float4 vertex : POSITION;  
    float2 uv : TEXCOORD0;  
};

//The data structure from the geometry shader to the fragment shader.
struct g2f
{  
    float4 vertex : SV_POSITION;  
    float2 uv : TEXCOORD0;
}; 
[maxvertexcount(3)]  
void geom(triangle v2g input[3], inout TriangleStream<g2f> outStream)  
{  
      g2f o;
      for(int i = 0; i < 3; i++)  
      {  
            o.vertex = UnityObjectToClipPos(input[i].vertex);  
            o.uv = input[i].uv;  
            outStream.Append(o);  //Append函数用来将几何着色器的输出数据追加到一个现有的流中。   
      }  
      outStream.RestartStrip();  //输出流是三角,重置输出流
}

应用举例(用预制体球的每个顶点画一个立方体)

参考

Unity几何着色器详解
GITHUB-GeometryShaderCookbook

相关推荐
在路上看风景8 小时前
4.5 顶点和片元
unity
在路上看风景20 小时前
31. Unity 异步加载的底层细节
unity
天人合一peng21 小时前
Unity中做表头时像work中整个调整宽窄
unity
小李也疯狂1 天前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的1 天前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y1 天前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤1 天前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里1 天前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎
泡泡茶壶ᐇ1 天前
Unity游戏开发入门指南:从零开始理解游戏引擎核心概念
unity·游戏引擎
YigAin1 天前
Unity中的Lock,到底在锁什么,什么时候该用?
unity