代码修改shader Properties uniform变量
2.4 Shader的数据接口:属性和 uniform变量
如果我们想设定一个特定的值到Shader,即为了在实例化Shader为Material时,可以通过为属性赋值达到创建具体对象的目的,我们需要在Properties块中定义自己所需要的属性。
2.4.1在Properties块中定义属性
我们能够定义如下这些属性:
- Properties{
- _MyTexture("Texture (RGB)", 2D) = "white"{ }//图片形式的属性
- _MyColor("Color of Object",Color) = (1,1,1,1)//颜色属性
- _MyCube("Environment map",Cube) = "white"{}//3D贴图,需要6张图片
- _MyVector("Vector",vector) = (1, 1, 1, 1) //4个元素的向量
- _MyFloat("Float Value",float)=1.0//浮点小数
- _MyRange("Another type of float",range(-13,14))=1.0//限定范围的浮点数
- }
2.4.2通过图形界面操作属性
在如图2.1Properties块中定义了这些属性之后,我们可以在编译器中通过图形界面来给它们赋值,
所示。
2.4.3 通过脚本操控属性
除了图形界面之外,还能够通过脚本来读取和写入我们定义的属性。下面是个C#脚本对属性的读取操作:
- public Material mat;
- public Texture myPic;
- public Color purple;
- public Cubemap cube;
- public Vector4 vec;
- public float val_1;
- public float val_2;
- void Update(){
- //对在Shader中定义的属性进行设置
- mat.SetTexture("_MyTexture",myPic);
- mat.SetColor("_MyColor",purple);
- mat.SetTexture("_MyCube", cube);
- mat.SetVector("_MyVector",vec);
- mat.SetFloat("_MyFloat",val_1);
- mat.SetFloat("_MyRange", val_2);
- //对在Shader中定义的属性进行读取
- myPic = mat.GetTexture("_MyTexture");
- purple =mat.GetColor("_MyColor");
- cube = (Cubemap)mat.GetTexture("_MyCube");
- vec = mat.GetVector("_MyVector");
- val_1 = mat.GetFloat("_MyFloat");
- val_2 = mat.GetFloat("_MyRange");
- }
cube属性是3D贴图,是Texture
2D贴图的子类,range属性则是一种限制了范围的float类型,本质和float一样。如果我们在脚本中进行操作的属性在Shader中并不存在,那么Unity只会将此操作忽略,而不会报错。
2.4.4矩阵: 不能在属性块定义的变量
矩阵口前是不能在Properties块中定义的,我们必须首先在Shader中声明它,然后通过脚本来进行读取和写入。下面是在Shader中对一个矩阵的声明:
- uniformfloat4x4 myMatrix;
下面是在脚本中对该矩阵的读取和写入。
- mat.SetMatrix("myMatrix",matrix);
- matrix = mat.GetMatrix("myMatrix");
2.4.5 在Cg代码中使用属性
除了Unity的固定管线因为有其特定语法之外,在Properties块中定义的属性必须在代码中再声明一次才能被使用。它们在Cg代码中的声明方式如下:
- sampler2D _MyTexture;
- float4 _MyColor;
- samplerCUBE _MyCube;
- float4 _MyVector;
- float _MyFloat;
- float _MyRange;
除了上而提到的这些类型的变量外,还可以使用half4、fixed4和half、fixed,这两种类型的变量在空间上比float4和float分别减少一半和又一半,因此在精度问题不是很突兀的情况下可以使用它们来略微提高性能。
代码修改shader Properties uniform变量的更多相关文章
- u-boot移植(十三)---代码修改---裁剪及环境变量 一
一.内核裁剪 内核的裁剪首先就是修改我们的配置文件,即 include/configs/jz2440.h 文件,里面定义的很多宏,我们也许用不上的就要去掉. /* * (C) Copyright 20 ...
- u-boot移植(十三)---代码修改---裁剪及环境变量 二
一.错误处理 上一节遇到一个错误: print一下: 发现我们在jz2440.h中静态写的网络参数都没有写进去. dm9000 address not set. dm9000的地址未设置. 这里对应两 ...
- shader三种变量类型(uniform,attribute和varying)
uniform变量在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用.(相当于一个被vertex和fragment shader共享的全局变量) ...
- OpenGL红宝书例子2.2 uniform变量的使用
1. 简单介绍一下OpenGL可编程渲染管线的流程 顶点着色 --> 细分着色 --> 几何着色 --> 片元着色 --> 计算着色 一般我们主要参与的阶段是顶点着色和片元着色 ...
- OpenGL编程逐步深入(五)Uniform 变量
准备知识 在这个教程中我们会遇到一种新的Shader变量类型,即uniform变量.attribute(属性)变量和uniform变量的不同之处在于attribute 变量中包含顶点的具体数据,当每次 ...
- CSharpGL(33)使用uniform块来优化对uniform变量的读写
CSharpGL(33)使用uniform块来优化对uniform变量的读写 +BIT祝威+悄悄在此留下版了个权的信息说: Uniform块 如果shader程序变得比较复杂,那么其中用到的unifo ...
- SharePoint开发 - 使用Session(代码修改webconfig)
博客地址 http://blog.csdn.net/foxdave SharePoint启用Session可以使用Powershell,戳这里:可以修改webconfig. 本篇叙述的重点是通过fea ...
- u-boot移植(十二)---代码修改---支持DM9000网卡
一.准备工作 1.1 原理图 CONFIG_DM9000_BASE 片选信号是接在nGCS4引脚,若要确定网卡的基地址,则要根据片选信号的接口去确定. 在三星2440的DATASHEET中memory ...
- Spring在代码中获取properties文件属性
这里介绍两种在代码中获取properties文件属性的方法. 使用@Value注解获取properties文件属性: 1.因为在下面要用到Spring的<util />配置,所以,首先要在 ...
随机推荐
- 为什么说Python是一门动态语言--Python的魅力
动态语言的定义:动态编程语言是高级程序设计语言的一个类别.在计算机科学领域已被广泛应用.它是一类在执行时能够改变其结构的语言:比如新的函数.对象.甚至代码能够被引进.已有的函数能够被删除或是其它结构上 ...
- 【转载】基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...
- Linux 设备和模块的分类
概念:在Linux系统中,所有设备都被映射成 [设备文件] 来处理,设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作. 一.设备类型 整理自:(相当不错,建议有时间看下原文) <第一章 ...
- [egret+pomelo]实时游戏杂记(4)
了解了前后端的通信,下面就可以开始自己的业务逻辑了,首先玩家输入名称,选择角色后进入游戏世界. 服务端的demo中已经提供了一些简单的角色信息和属性,数据地址位于 game-server/config ...
- 20145239 杜文超 实验四 Android开发基础
20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...
- ubuntu tomcat 配置及使用细节
1.改端口号(两个) vi server.xml 一个是http协议端口 <Connector port="8091" protocol="HTTP/1.1&qu ...
- matlab的调试
MATLAB(1)——基本调试方法(Debug) 链接:http://www.cnblogs.com/xingshansi/articles/6477185.html 前言 之前经 ...
- 使用C++模拟C#的委托机制
1. [代码][C/C++]代码 //Event.h #ifndef _EVENT_H_#define _EVENT_H_class EmptyObject {};template<typen ...
- 【详解】苹果AppStore审核被拒,原因终逃不过这些!
近日,相信很多开发者都留意到了: 苹果针对应用标题的审核确有明显的变严趋势!我们在<惊!苹果再次加强审核力度,众App纷纷止步应用标题>中也对该现象进行了详细的分析,并给出了相应的解决方案 ...
- LoadRunner监控图表与配置(三)对系统与网络资源进行监控
1.Windows可监控的性能计数器 2.UNIX可监控的性能计数器 3.性能计数器信息说明 Windows 性能对象 计数器 数值说明 System %Total Processor Time 系统 ...
