Shaders(读书笔记4 --- Real-Time rendering)

摘要:
公共shadercore是一个API,支持unifiedshader是一个GPU功能。编译后的着色器存储为文本字符串,并通过驱动程序传递给GPU汇编语言。在其他步骤中,它被转换为真正的机器语言,这允许不同的硬件兼容性。

1. vertex,pixel以及geometry shaders共享一个programming model,即common-shader core,在GPU架构中的unified shader可以和这个core很好的契合。

common-shader core是API,支持unified shader是GPU的特性。

2. shaders是用类C的语言如HLSL,Cg,GLSL等编写的,程序被编译为不依赖于机器的assembly language,即intermediate language(IL)中间语言。编译完的shader存储成文本字符串通过driver传给GPU

assembly language(汇编语言)在另外的步骤中(通常在driver中)被转换为真正的机器语言,这就允许不同的硬件的兼容性。这个assembly language可以看作是定义了一个虚拟机,这个虚拟机是一个有着各种寄存器类型和数据源,用一系列指令变成的处理器。

2.1 大部分graphics操作都是在短矢量上完成的,所以处理器有4-way SIMD(single-instruction multiple-data)能力 每个寄存器包含了四个独立值。

32-bit单精度浮点标量和矢量以及32-bit整型数是基本数据类型,其中浮点矢量可以包含像位置(xyzw)、法线、矩阵行、颜色(rgba)或者纹理坐标(uvwq). 聚合数据类型也支持,如结构体、数组和矩阵。还支持swizzling,即任何矢量部分的复制,也就是说,矢量的任何部分都可以被任意重新排序或者复制。同样,masking(仅适用部分矢量元素)也支持

2.2 一个drall call会激活graphics API去画一组primitives,graphics pipeline由此开始执行。

2.3 每个可编程shader stage都有两个输入,uniform inputvarying input

uniform input在一个draw call中一直保持值不变,但是可能会在不同的draw call之间改变值。 texture是一种特殊的uniform input,以前可以看作是用到一个surface的颜色图片,现在可以看作是一个大的数据矩阵

varying input在shader处理的每个vertex或者pixel中都不同。

2.4 虽然shader的输入有很多种,但是shader的输出被严格限制了,这是shader和其他在通用处理器上执行的程序不同的地方

Shaders(读书笔记4 --- Real-Time rendering)第1张

2.5 底层的虚拟机给不同种类的输入和输出提供了特殊寄存器。

uniform input是存储在constant registers/buffers,因为他们的内容是不变的

可用的常量寄存器数量比varying input寄存器数量得多,因为varying inputs和outputs都需要分别存放在每个vertex/pixel,而uniform inputs只需要保持一次并重用在所有的vertices/pixels。

2.6 虚拟机也有通用temporary registers,用于scratch space(暂存空间)。 all types of registers can be array-indexed using integer values in temporary registers.

2.7 GPU上执行最快的操作是标量和向量乘加以及它们的混合操作,如乘加、内积,其他的操作,如倒数,平方根,sine,cosine,幂运算以及对数运算,一般更耗时间,但是还算快的。

纹理操作也是有效率的,但是它的performance可能会被一些因素限制,如耗费在等待某个结果的时间 shading language开放了大部分的普通运算,如加法和乘法,剩下的运算是用intrinsic函数,如atan(),dot(),log()等,还有负责运算如矢量归一化,矩阵转置等。

2.8 flow control

flow control(流程控制)是指用分支指令来改变代码执行流程,如if case等。 shader支持两种类型的flow control: static flow control, dynamic flow control

static flow control是基于uniform input的值,而dynamic flow control是基于varying input的值

免责声明:文章转载自《Shaders(读书笔记4 --- Real-Time rendering)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS for Android地图控件的5大常见操作2017.10.21 Java中的数据源与连接池技术下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(七)WebGIS中栅格、矢量图层设计之栅格、矢量图层的本质

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.何为栅格数据,何为矢量数据? 在GIS中,对于数据格式的分类,我们一般会将其分为栅格数据和矢量数据两种类型。栅格数据是将空间看做离散的像元,由二维数组或者其他数据组织方式来进行表达。矢量数据恰恰相反,它将空间看成是连续的,用...

Unity3D教程宝典之Shader篇

教程目录基础讲:Shader学习方法基础讲:基础知识特别讲:常见问题解答特别讲:CG函数第一讲: Shader总篇第二讲: Fixed Function Shader 第三讲: Vertex&Fragment Shader基础 第四讲: 制作一个美丽的地球第五讲:LOGO闪光效果 第六讲:TexGen第七讲:流程图第八讲:Why CG?第九讲:R...

[原] OpenGL ES 学习笔记 (一)

1.OpenGL ES 的坐标系在屏幕上的分布 OpenGL ES 的坐标系{x, y, z} 通过图片的三维坐标系可以知道: - 它是一个三维坐标系 {x, y, z} - 三维坐标中心在正方体的几何中心 {0, 0, 0} - 整个坐标系是 [0, 1] 的点,也就是说 OpenGL 中只支持 0 ~ 1 的点 (这里所讲的 0 和 1 ,最好理...

Unity3d Shader

Unity3d Shader 预览Surface Shader主要用来实现光照相关处理,可能更简洁。Vertex and Fragment Shader如果不与光照交互, 则可以用这个shader,更录活fixed function shaders固定shader主要用于老旧卡ShaderLab不管写哪种shader,最终通过shaderLab实现,其组织结...

webgl学习笔记一-绘图单点

写在前面   WebGl(全称:Web Graphics Library : web图形库) 是基于OpenGL ES 2.0的3D绘图协议。   WebGL完美地解决了现有的Web交互式三维动画的两个问题:第一,它通过HTML脚本本身实现Web交互式三维动画的制作,无需任何浏览器插件支持;第二,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、...

【BIM】BIMFACE中创建矢量文本[上篇]

背景 在三维模型产品的设计中,针对空间的管理存在这样一个普遍的需求,那就是在三维模型中,将模型所代表的空间通过附加文本的方式来展示其所代表的实际位置或功能,之前尝试过若干方式,比如直接在建模的时候,将文本以构件的方式建在模型里,其优点是展示效果好、位置可控、放大后不失真,但是缺少灵活性,一旦加入到模型中,相当于焊死在上面;另一种方式则是通过Canvas绘制...