着色器的一般结构:

Shader "MyShader/MyShaderName" {Properties {// ... properties here ...}SubShader {// ... subshader for graphics hardware A ...Pass {// ... pass commands ...}// ... more passes if needed ...}SubShader {// ... subshader for graphics hardware B ...}// ... Optional fallback ...FallBack "VertexLit"
}

Shader

Shader命令包含了字符串组成的着色器的名称,这个名字可以用“/”字符细分模拟一个文件夹结构,着色器的名称应该是唯一的

Subshader

一个Shader可以存在一个或多个SubShader,主要是用来为不同的GPU实现着色器功能,所有的SubShader应该使用不同的技术对每个体系结构,实现与现在相似的功能.ShaderLab翻译的代码着色器自动到其他架构,但在某些情况下着色器的功能在移动架构不理想或丢失一些输入。

pass

每个SubShader由若干个pass组成。每个Pass代表了顶点的执行和片段代码的着色器的材质渲染同一个对象。为了性能你可以通过尽可能少数量的pass。

CGPROGRAM.............ENDCG

这个指令定义了再ShaderLab中使用的着色器语言。Unity可以使用CG和GLSL的着色器语言,CG语言是被推荐的,被实施了不同的体系结构的几个优化步骤。

Simple Shader

定点和片段着色器的不同是在渲染管道的开发过程。顶点着色器可以定义为着色器程序修改场景的几何形状,使3d投影,相关片段着色器渲染窗口,定义每个像素的颜色。片段和顶点着色器可以提供更多的功能在新的显卡,如移动顶点位置为每个像素或存储更多的数据。

Shader "Custom/SolidColor" {SubShader {Pass {CGPROGRAM#pragma vertex vert#pragma fragment fragfloat4 vert(float4 v:POSITION) : SV_POSITION {return mul (UNITY_MATRIX_MVP, v);}fixed4 frag() : SV_Target {return fixed4(1.0,0.0,0.0,1.0);}ENDCG}}
}

Pragma vertex vert

顶点着色器是一个着色器程序修改场景的几何形状,它执行在场景中的每个点,输出坐标投影,颜色,纹理和其他数据传递到片段着色器。指令 #pragma vertex [function name]用来定义顶点方法的名称。

Pragma fragment frag

片段着色器是一个着色器程序更改图像的属性在渲染窗口。它执行在每个像素,输出信息的像素的颜色。指令 #pragma fragment [function name]用来定义片段方法的名称。

float4 vert(float4 v:POSITION) : SV_POSITION

这句定义了顶点的方法,变量v包含了顶点的值,这个方法被场景渲染中的每个顶点调用。返回的值为顶点在屏幕中的位置的float4变量。使用四个浮点值用来在SV_POSITION中存储在一个2D窗口中的坐标位置。因为预计的几何投影是在齐次坐标,使用两个值的像素屏幕(x,y),一个值为深度(z),和一个其次坐标的值(z)。你可以将齐次坐标转换成3D坐标。但是你将会失去在未来获得的3D位置顶点的能力。同样你可以删除(z)值,但是你将会失去最终渲染时执行深度测试的能力。齐次坐标用于几乎所有的GPU。删除变量的顶点着色器输出着色器不代表任何的代码优化。反而会使代码变得不通用,并且变得更加难以理解。

return mul(UNITY_MATRIX_MVP,v);

这是顶点方法的核心功能,将3D坐标投影到2D窗口,这个过程包括了乘以3D位置矩阵Model-View-Projection (模型到视窗的投影矩阵)。

fixed4 frag() : COLOR

这一句定义了frag方法,这是使用的片段着色器作为其主要功能。这个片段方法没有输入的参数。和输出被定义为一个颜色值定义在一个fixed4变量包含RGBA(红,绿,蓝,α)的颜色。可以使用颜色作为可视化的一个浮点数变量,甚至传递信息在顶点着色器与片段着色器之间。然而COLOR变量是固定值0和1之间,所以希望改变COLOR变量中的值

return fixed4(1.0,0.0,0.0,1.0)

片段着色器的核心功能,为每个像素处理的片段着色器定义了红色。

转载于:https://www.cnblogs.com/OrangeZhang/p/5009895.html

Unity cg vertex and fragment shaders(二)相关推荐

  1. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Unity超基础学习笔记(二)

    Unity超基础学习笔记(二) 1. 基本数据类型的扩展 之前在K12中学习了一些基本的数据类型,实际上C#支持更多的数据类型.如下: 注意无符号整型数和有符号整型数的表示范围,例如: int 能表示 ...

  3. Unity C# 网络学习(十二)——Protobuf生成协议

    Unity C# 网络学习(十二)--Protobuf生成协议 一.安装 去Protobuf官网下载对应操作系统的protoc,用于将.proto文件生成对应语言的协议语言文件 由于我使用的是C#所以 ...

  4. 【OpenGL】理解VAO、VBO、EBO和 shader中vertex、fragment交互。

    1:首先了解GPU和渲染管道工作原理. 2:解释VAO.VBO.EBO 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 元 ...

  5. Unity编译器拓展学习总结(二):各个平台菜单栏拓展

    Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前情参考:Unity编译器拓展学习总结(一):常用工具API 文章目录 Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前言 菜单栏拓展 ...

  6. Unity 中用 Vertex Fragment Shader 实现 surface shader 中的 Diffuse 和 Decal

    自己体验了以后发现surface shader确实是隐藏了好多好多的内部实现呀,像我没有考虑的多光源,阴影,衰减等问题,在surface shader中都是被隐藏实现好了的,而且还是多平台适配的,Ve ...

  7. Vertex and Fragment Shader

    Semantics语义词: 定义:GPU工作时,数据通常暂存在寄存器,那么在Cg中,语义词就指定了输入/输出数据和图形硬件寄存器之间的映射关系. 原理:根据输入语义,图形处理器从某个寄存器取数据:然后 ...

  8. 【Unity Shader实例】 水体WaterEffect(二) 用贴图和uv动画模拟水效

    Unity Shader实现简单水体效果 效果展示 原理 用贴图和uv动画模拟水效实现"假"水. 设计 找一张水波的贴图,处理它的uv值,让贴图流动起来.这样就用静态纹理和uv动画 ...

  9. Unity 动态编辑Terrain地形(二)地势

    如果理解了HeightMap,对一块地形某一块区域的地势更改将会是一件很容易的事,但由于需要实现跨多块地图,四块地图之间的修改就会比较麻烦.从这一篇开始的几篇文章,会逐步完善一个地形编辑工具类Terr ...

最新文章

  1. Linux 常用命令九 tar
  2. Python全栈(第一部分)day2
  3. psql where里有自定义函数慢_使用gplearn自定义特征自动生成模块
  4. 组件局域网中的无集线器、Windows XP、Windows 7、Windows 8的对等网
  5. vue 修改模板{{}}标签_vue-admin-template模板添加tagsview
  6. Java中super与this
  7. reduce 数据倾斜_Spark(四十)数据倾斜解决方案之将reduce join转换
  8. python钓鱼网站_学习笔记6.0 Django入门创建一个钓鱼网站
  9. python 生成器装饰器_对Python生成器、装饰器、递归的使用详解
  10. 【英语天天读】Develop Your Own Helping Rituals
  11. 《快速开发》通过Maven创建WebService项目Hello World!
  12. 使用Ionic3创建原生app系统入门
  13. OC中常见的Signal错误
  14. BXP无盘Windows XP系统好处(转)
  15. python实现截图转文字功能
  16. MySQL - 唯一索引
  17. ccy 朴素版(顺序搜索)19ms
  18. 路由器设置DMZ步骤
  19. 使用gdal的ogr创建shapefile文件(c++)
  20. 软件架构设计(一)——软件架构风格

热门文章

  1. Plugin 框架 开发实录
  2. python判断一个数是否是质数
  3. python的requests模块功能_python-Requests模块的使用
  4. 七重定位是什么意思_手机后缀名Note、Mix、Mate代表什么意思?现在终于明白了...
  5. Keyerror ‘acc‘ KeyError: ‘val_acc‘解决方法
  6. Polkadot 0.9.2版本正式发布,对平行链启动至关重要
  7. 安徽破获以虚拟数字货币增值为幌子网络传销案,涉案逾2亿元
  8. SAP License:SAP会计凭证抬头的字段状态控制
  9. SAP License:CO相关知识点
  10. 基于逻辑回归算法模型搭建思路