Extra:Variable Types
文章著作权归作者所有。转载请联系作者,并在文中注明出处,给出原文链接。
本系列原更新于作者的github博客,这里给出链接。
在我们使用Cg或者HLSL进行shader编写的过程中,常常涉及到一些变量类型的使用,其中数字类型有三种最基础的变量类型:float,half,fixed,由此延伸出的还有向量类型以及矩阵类型,如:float3,half4x4。虽然都是表示数字,但它们之间的差别还是应该清楚,而不是遇到数据就无脑地使用float。
float: high precision floating point. Generally 32 bits, just like float type in regular programming languages.half: medium precision floating point. Generally 16 bits, with a range of –60000 to +60000 and 3.3 decimal digits of precision.fixed: low precision fixed point. Generally 11 bits, with a range of –2.0 to +2.0 and 1/256th precision.
这是Unity官方的说明。可以看到,从精度上来说,三者的关系是float>half>fixed,而从占用的内存上则必然是相反的,这也就需要我们明智地选取数据类型。
- For colors and unit length vectors, use
fixed. - For others, use
halfif range and precision is fine; otherwise usefloat. - On mobile platforms, the key is to ensure as much as possible stays in low precision in the fragment shader. On most mobile GPUs, applying swizzles to low precision (fixed/lowp) types is costly; converting between fixed/lowp and higher precision types is quite costly as well.
同样,这是来自官方的建议。对于颜色和单位向量,使用fixed,这是因为1/256已经足以满足颜色的精度需求。其他情况下,在精度要求较低时使用half,否则使用float。在移动平台,尤其要注意float类型的使用,一是因为移动平台的精度要求更低,二是因为移动平台的内存更有限。在移动平台,还要注意,尽量避免swizzles操作以及高低精度类型的转换(fixed/half--float),这两种操作的代价都是比较昂贵的。对于大多数现代PC来说,float类型的内存占用是可以被接受的,float的精度相较于half也比较能满足精度的需求。
此外,还有一种关键字是uniform,它的作用是表示这个变量是全局可变变量。在着色器中使用这个变量时,这个变量会被添加到着色器的uniform变量列表中,在Cg/HLSL中,全局变量都是默认带uniform的,在Shaderlab中也是如此。因此我们可以在代码中使用uniform标记变量,但这通常是多余的。
Extra:Variable Types的更多相关文章
- 错误:variable `xxx' has initializer but incomplete type
错误:variable `xxx' has initializer but incomplete type 原因:xxx对应的类型没有找到,只把xxx声明了但是没给出定义.编译器无从确认你调用的构造函 ...
- 可变码率(英语:Variable bitrate,简称VBR)介绍
可变码率(英语:Variable bitrate,简称VBR)这是一个用来形容通信服务质量(QoS for Quality of Service)的术语.和该词相对应的词是固定码率或固定比特率,英文c ...
- 『PyTorch』第五弹_深入理解autograd_中:Variable梯度探究
查看非叶节点梯度的两种方法 在反向传播过程中非叶子节点的导数计算完之后即被清空.若想查看这些变量的梯度,有两种方法: 使用autograd.grad函数 使用hook autograd.grad和ho ...
- Openfire 代码部署报错: Variable references non-existent resource:${workspace_loc:openfire_src}
Variable references non-existent resource:${workspace_loc:openfire_src} -DopenfireHome=“${workspace_ ...
- TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()
Variable tensorflow中有两个关于variable的op,tf.Variable()与tf.get_variable()下面介绍这两个的区别 使用tf.Variable时,如果检测到命 ...
- 『PyTorch』第五弹_深入理解autograd_上:Variable属性方法
在PyTorch中计算图的特点可总结如下: autograd根据用户对variable的操作构建其计算图.对变量的操作抽象为Function. 对于那些不是任何函数(Function)的输出,由用户创 ...
- vue+postcss报错: variable '--primary-color' is undefined and used without a fallback
之前vue-cli3引入postcss的配置: https://www.cnblogs.com/XHappyness/p/7676680.html 发现这么一个问题,我再全局global.css中定义 ...
- MIP启发式算法:Variable neighborhood search
*本文主要记录和分享学习到的知识,算不上原创. *参考文章见链接. 本文主要讲述启发式算法中的变邻域搜索(Variable neighborhood search).变邻域搜索的特色在于邻域结构的可变 ...
- MIP启发式算法:Variable fixing heuristic
*本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...
随机推荐
- 钉钉企业内部H5微应用开发
企业内部H5微应用开发 分为 服务端API和前端API的开发,主要涉及到进入应用免登流程和JSAPI鉴权. JSAPI鉴权开发步骤: 1.创建H5微应用 登入钉钉开放平台(https://open-d ...
- 谁在使用GPU?
nvidia-smi命令可以查看GPU使用情况,但是只能看到占用每个GPU的进程ID.根据进程ID可以得到进程详情,进程详情中包括用户ID,根据用户ID可以获取用户名称,从而知道哪个用户在使用GPU. ...
- ios浏览器调试踩坑(1)----mescroll.js和vue-scroller
主要记录在ios浏览器出现触摸无限加载的情况 使用vue-scroller和mescroll.js/mescroll.vue先踩ios浏览器默认滑动会影响mescroll的方法调用. 首先给公共js加 ...
- IOS plist文件
转自:http://www.cnblogs.com/geraldzhang/archive/2011/08/24/2152121.html 在Mac OS X 的Cocoa ,NeXTSTEP 和GN ...
- [b0014] HDFS 常用JAVA 操作实战
目的: 学习用java进行的常用hdfs操作 参考: [b0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前 ...
- Django 练习班级管理系统三 -- 分页
在 user_manager 项目下创建一个 python package:utils,里面创建一个 page.py 文件 page.py 文件内容为: # 创建一个 PagerHelper 类 cl ...
- osi7层
- [PHP] 最简单的权限控制设计
假设url部分我们只有action和method , 某个控制器下的某个方法 , 比如:log/loginlog 查看日志下的登陆日志, action就是log , method就是loginlo ...
- modbus_tk模块
modbus_tk模块 通过modbus-RTU 读取地址,调用后返回反馈数值和故障信息. modbus_tk模块安装 pip install pymodbus_tk 下面代码功能:读取地址为0x42 ...
- 201871010134-周英杰《面向对象程序设计(java)》第十六周学习总结
项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...