Unity3D Computer Shader 实例讲解
来源:互联网 发布:hadoop需要java基础吗 编辑:程序博客网 时间:2024/06/06 23:19
前端时间 做一个unity内部的视频录制工具,每帧需要对图片进行处理,因为图片是逐像素处理,这里的运算量比较大;我就利用GPU运算数据速度快的特性对图像进行处理。
Unity3D Computer Shader 是unity的GPU运算的方式之一,computershader在网上的资料偏少,下面我将对computershader的研究发布。
1.CPU与ComputerShader之间的数据交互
● ComputeShader到底是什么
简单来说,ComputeShader就是一段运行在GPU上的程序,这段程序并不需要用来处理网格数据或者是纹理数据的,它是工作在OpenGL或者DirectX的内存空间中的(不像OpenCL那样拥有自己的内存空间),它们可以输出缓冲数据或者纹理并且在多个执行的线程间共享内存。
●打破常规的ComputeShader
自从DirectX 10对底层ALU的开放之后,怎样让shader变得更加灵活就一直是业界孜孜不倦的探索的重要方向。尽管开放式的指令环境使得其灵活度达到了一个前所未有的高度,但图形指令本身毕竟存在着诸多限制,比如无法使用树结构,所有指令都必须严格套用汇至三角形和贴图映射的格式来完成,串行线程模式使得像素线程间的数据共享也极为困难而且开销极大等等。简单地说,传统格式的shader已经无法满足业界更加灵活和高效的需求了。
● ComputeShader的局限
ComputeShader打破了shader指令与几何之间的必然联系并因此丢失了一些便利的功能如自动对应LOD等,所有涉及Z值的操作比如阴面隐去(HSR)类操作和常规抗锯齿采样等功能也将受到影响。
2. 现在unity只支持DirectX11的computeshader,如果等到了OpenGL4.3,苹果mac用户也能用他们了。也就是说现在只能用于windows平台
● ComputeShader采用HLSL语言编写
语言网址:http://blog.csdn.net/u011926277/article/details/51458577
GPU为什么这么快
1)由于GPU具有高并行结构(highlyparallel structure),所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率。
2)图1 GPUVS CPU展示了GPU和CPU在结构上的差异,CPU大部分面积为控制器和寄存器,与之相比,GPU拥有更多的ALU(ArithmeticLogic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。
3)CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,而GPU具有多个处理器核,在一个时刻可以并行处理多个数据。
GPU采用流式并行计算模式,可对每个数据进行独立的并行计算,所谓“对数据进行独立计算”,即,流内任意元素的计算不依赖于其它同类型数据,例如,计算一个顶点的世界位置坐标,不依赖于其他顶点的位置。而所谓“并行计算”是指“多个数据可以同时被使用,多个数据并行运算的时间和1个数据单独执行的时间是一样的”。
网址:http://m.blog.csdn.net/article/details?id=3817400
http://blog.csdn.net/baidu_26153715/article/details/45752349
- Unity3D Computer Shader 实例讲解
- Unity3D Shader_vertex and fragment shader实例(一)
- Unity3d Shader
- unity3d shader
- Unity3D shader
- Unity3D Shader
- Unity3D -- Shader
- Unity3D: Shader
- Unity3D Shader
- Computer shader in practice.
- Unity3D之Shader:Shader介绍
- Unity3d shader -- fixed function shader
- [Unity3D]控制输入系统 - Input 类实例讲解
- Unity3D中的shader基础知识
- Unity3D中Shader
- Unity3D shader脚本
- Shader in Unity3d
- Unity3D中的shader基础知识
- ubuntu使用vim编译第一个C程序
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
- 使用Python进行并发编程
- 欢迎使用CSDN-markdown编辑器
- JS中undefined,null,NaN的区别
- Unity3D Computer Shader 实例讲解
- thinking in java 阅读笔记 第七章 多形性
- python取得当前星期几
- Web安全资料汇总
- 探索Javascript异步编程
- 记一款bug管理系统(bugdone.cn)的开发过程(1) -- 为什么要开发一款bug开发系统
- python+数据过滤、清理、转换
- HBuilder 使用教程
- git 学习之用ssh将本地与github相连接