Unity -Shader精讲(三)Unity Shader中属性类型介绍如何使用属性
2018-02-02 21:50
656 查看
属性类型介绍
使用属性
一个Properties的属性类型对应一个SubShader的属性类型 不使用的可以不定义
类型区别 : float、half和fixed类型的区别
以下是前三章所有的代码
// 颜色类型 _Color("_Color",Color) = (1,1,1,1) // 四维向量类型 X Y Z W _Vector("_Vector",Vector) = (1,2,3,4) // 整数类型 _Int("_Int",Int) = 100 // 小数类型 默认值不加F shader里面没有double类型 _Float("Float",Float)=12.3 // 范围类型 从哪个范围到哪个范围 这里设置的范围是1-100 默认值是50 可以取到1和100 _Range("Range",Range(1,100))=50 // 指定图片 类型 如果{}里指定图片了会显示图片的颜色 如果没有指定图片会显示为设置的纯色 这里为white _2D("Texture",2D) = "white"{} // 立方体纹理 立方体贴图 _Cube("_Cube",Cube) = "white"{} // 3D 纹理 没用过 知道有这东西就行 _3D("Texure",3D) = "White"{}
使用属性
// 使用属性需要先定义 // 语法: 类型 名字 这里的名字需要和属性里面的一致 // 不需要附默认值 会按 Properties 里面的来 // 结尾需要带 ; 号 float4 _Color; float4 _Vector; float _Int; float _Float; float _Range; sampler2D _2D; samplerCube _Cube; sampler3D _3D;
一个Properties的属性类型对应一个SubShader的属性类型 不使用的可以不定义
类型区别 : float、half和fixed类型的区别
float4 可以使用 float half fixed 代替 还有 float3 float2 float 分别代表里面有几个值 主要看是要怎么用 比如 float4 可以存储值 也可以存储向量 也可以使用float3存储向量 这里的float 的使用主要是看你想存储几个值 和 怎么用 在任何使用float的地方都可以使用 half和fixed 代替 比如 half3 half2 fixed3 fixed2 float和half的的区别: 在于范围 精度 不同的精度可以节省不同的内存 优化时候想起 值 二进制 位 范围 float 32 -2147483648 到 2147483647 half 16 -6万 到 +6万 fixed 11 -2 到 +2 总结: 一般颜色都使用fixed 存储 位置使用float存储 half使用的较少
以下是前三章所有的代码
// 这里指定shader的名字,不要求跟文件名保持一致 /后面 代表shader的显示等级 // 语法 Shader"这里写名字" 固定写法 Shader"myshader/myshader01"{ // Properties里写属性 (固定写法) Properties{ // 第一个 _color 代表属性的名字 是自定义的 // ("_color",Color) 里面的字符串是在Inspector面板显示的名字 是自定义的 // ("_color",Color) , 后面的Color代表定义的属性 是固定的 // =(1,1,1,1) 这个()里面设置默认值 R G B A // 颜色类型 _Color("_Color",Color) = (1,1,1,1) // 四维向量类型 X Y Z W _Vector("_Vector",Vector) = (1,2,3,4) // 整数类型 _Int("_Int",Int) = 100 // 小数类型 默认值不加F shader里面没有double类型 _Float("_Float",Float)=12.3 // 范围类型 从哪个范围到哪个范围 这里设置的范围是1-100 默认值是50 可以取到1和100 _Range("_Range",Range(1,100))=50 // 指定图片 类型 如果{}里指定图片了会显示图片的颜色 如果没有指定图片会显示为设置的纯色 这里为white _2D("_Texture",2D) = "white"{} // 立方体纹理 立方体贴图 _Cube("_Cube",Cube) = "white"{} // 3D 纹理 没用过 知道有这东西就行 _3D("_Texure",3D) = "White"{} } // SubShader 可以有很多个 里面编写的是渲染的代码 利用属性编写一些 控制 渲染出来的效果 // 为什么创建多个SubShader 因为不同的SubShader可以实现不同的效果 在不同的显卡上运行时需要 // 比如不同的显卡对应不同的SubShader 好一点的对应 一个SubShader 差一点的对应一个SubShader // 1. 显卡运行效果时,从第一个SubShader开始,如果里面的效果都可以实现,那么就使用第一个SubShader // 2. 如果这个SubShader满足不了这个显卡的需求,它会自动跳到下一个 如果没有可以实现的会 // 3. 调用 Fallback"VertexLit" 默认的 // 一般第一个SubShader是显示效果最好的 第二个比第一个次一点 以此类推 这样会增加shader的适应能力 SubShader{ // SubShader 里面必须有一个 Pass块 也可以有多个 // 一个Pass块代表一个方法 Pass{ // 在这里编写Shader代码 CGPROGRAM // 使用CG语言编写shader代码 // 使用属性需要先定义 // 语法: 类型 名字 这里的名字需要和属性里面的一致 // 不需要附默认值 会按 Properties 里面的来 // 结尾需要带 ; 号 float4 _Color; // float4 可以使用 float half fixed 代替 // 还有 float3 float2 float 分别代表里面有几个值 // 主要看是要怎么用 比如 float4 可以存储值 也可以存储向量 也可以使用float3存储向量 // 这里的float 的使用主要是看你想存储几个值 和 怎么用 // 在任何使用float的地方都可以使用 half和fixed 代替 比如 half3 half2 fixed3 fixed2 // float和half的的区别: 在于范围 精度 不同的精度可以节省不同的内存 优化时候想起 // 值 二进制 位 范围 // float 32 -2147483648 到 2147483647 // half 16 -6万 到 +6万 // fixed 11 -2 到 +2 // 一般颜色都使用fixed 存储 位置使用float存储 half使用的较少 float4 _Vector; float _Int; float _Float; float _Range; sampler2D _2D; samplerCube _Cube; sampler3D _3D; ENDCG } } // 上面的SubShader都不执行的时候 执行Fallback // Fallback用来指定一个已经存在了的Shader Fallback"VertexLit" }
相关文章推荐
- 条形码类型介绍以及如何使用LEADTOOLS Barcodes
- 急!delphi中variant能否和object类型转换。实例:在使用getpropvalue(range,'属性')时提示类型有错,如何解决?!!
- 条形码类型介绍以及如何使用LEADTOOLS Barcodes
- 交换机Vlan介绍 以太网端口链路类型介绍 交换机trunk属性使用介绍 数据配置步骤
- CArray使用简单介绍,如何添加标准数据类型,和自定义的类,或者自定义数据类型
- 如何使用反射确定一个属性是否实现了IList接口,如何确定元素量为空的集合的元素类型。
- 使用Javascript和prototype.js框架创建类型及其相关的prototype属性的简单介绍
- 解析如何使用反射调用类型成员 方法,字段,属性
- python 7-6 如何使用描述符对实例属性做类型检查,分别实现set,方法,在set内使用isinstance做类型检查
- 在Struts中使用JavaBean和List(多行数据)类型属性
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- 如何实际使用强类型Dataset(键盘再也不需要敲入表名和字段名了)
- 如何把动态的用户控件转换成合适的类型并设置其属性
- 介绍如何使用Connection对象连接数据库
- Struts的ActionForm中不同类型属性的使用方法总结
- 在Struts中使用JavaBean和List(多行数据)类型属性
- 如何使用CTabCtrl来实现多页面属性对话框?
- 如何使用 @ OutputCache 指令的 VaryByCustom 属性来缓存不同版本的页面(二)
- 使用DetailsView的数据插入功能时,如何初始化参数,如何取得新纪录的主键(主键类型为uniqueidentifier)