[Unity3D]Shader学习笔记之图像编程接口与着色语言

原创 2016年08月29日 21:51:39

图像编程接口

  如果开发者直接访问CPU、寄存器、显存等硬件设备将会是一件非常麻烦的事情,为了方便使用在这些硬件的基础上实现了一层抽象,这就是图像编程接口
  OpenGL和DirectX就是这些图像编程接口,这些接口用于渲染二维或三维图形。这些接口架起了上层应用程序和底层GPU的沟通桥梁。
  一个应用程序向这些接口发送渲染命令,而这些接口会依次向显卡驱动(Graphics driver)发送渲染命令也称为Draw Call,这些显卡驱动是真正知道如何和GPU通信的角色,它们把OpenGL或者DirectX的函数调用翻译成GPU能够识别的语言,同时它们也负责把相关数据转换成GPU所支持的格式。显卡驱动就好比是显卡的操作系统。
  一个显卡除了有图像处理单元GPU之外,还拥有自己的内存,这个内存通常被称为显存(Video Random Access Memory, VRAM)。GPU可以在显存中存储任何数据,但对与渲染来说一些数据类型是必须的,例如用于屏幕显示的图像缓冲、深度缓冲等。
  图像编程接口一个显卡制作商为了让他们的显卡可以同时和OpenGL和DirectX合作,就必须提供支持OpenGL和DirectX接口的显卡驱动。

这里写图片描述

着色语言

  着色语言(Shading language)是专门用于编写着色器的,常见的着色器语言有:

  • DirectX的HLSL(High Level Shading Language)
  • OpenGL的GLSL(OpenGL Shading Language)
  • NVIDIA的Cg(C for Graphic)。

  HLSL、GLSL、Cg都是“高级(High Language)”语言,但这种高级是相对于汇编来说的,而不是像C#相对与C的高级那样。这些语言会被编译成与机器无关的汇编语言,也被称为中间语言(Intermediate Language, IL),这些语言再交给显卡驱动来翻译成真正的机器语言,即GPU可以识别的语言。
  GLSL的有点在于它的跨平台性。由于OpenGL没有提供着色器编译器,而是由显卡驱动来完成其编译工作,所以只要显卡驱动支持对GLSL的编译它就可以运行,即GLSL是依赖硬件的,而非操作系统层级的。
  相对于HLSL,是有微软控制着色器的编译,就算使用不同的硬件,同一个着色器的编译结果也是一样的(前提是版本相同)。先也因此支持的平台相对比较有限,几乎都是微软自己的产品,这是应为在其他平台上没有可以编译HLSL的编译器。
  Cg是真正意义上的跨平台。它会根据平台的不同,编译成相应的中间语言。Cg语言可以无缝移植成HLSL代码,缺点是无法发挥出OpenGL的最新特性。

这里写图片描述

版权声明:本文为博主原创文章,转载请注明 http://blog.csdn.net/u012741077

着色语言(Shader Language)

摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”   In the last y...
  • OnafioO
  • OnafioO
  • 2014年09月01日 17:51
  • 3626

【Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 & 第一个Shader的书写

作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Unity中创建和使...
  • zhmxy555
  • zhmxy555
  • 2014年11月03日 02:24
  • 60559

【Unity3D Shader编程】之十二 可编程Shader初步 & 漫反射可编程Shader的实现

从这篇文章开始, Shader系列博文将继续开始更新。且在这次重启,这个系列文章会更多专注于实际Shader的书写,力求推出更多具有特色和实用性的Shader,概念性的东西在原则上上是不会再多讲的。 ...
  • zhmxy555
  • zhmxy555
  • 2016年03月06日 11:23
  • 14595

写在Shader前, unity数字图像处理 上

2016.8.4参考:  http://lolikitty.pix.net/  http://blog.csdn.net/u010019717 注意:  不是Shader  代码1、 调整图片的饱和度...
  • u010019717
  • u010019717
  • 2016年08月08日 22:15
  • 2058

【Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

本篇文章中,我们学习了Unity Shader的基本写法框架,以及学习了Shader中Properties(属性)的详细写法,光照、材质与颜色的具体写法。写了6个Shader作为本文Shader讲解的...
  • zhmxy555
  • zhmxy555
  • 2014年11月09日 23:24
  • 45714

Unity3D代码及效率优化总结

http://www.jianshu.com/p/1a2b5d045077 最简单的优化建议: 1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一...
  • sgnyyy
  • sgnyyy
  • 2016年05月29日 17:25
  • 1504

Shader 逐顶点和逐像素光照

转自:http://blog.csdn.net/pizi0475/article/details/6968070 逐顶点光照 所谓逐顶点光照,简单地说就是在vetext shader中...
  • tuanxuan123
  • tuanxuan123
  • 2015年06月08日 19:37
  • 504

传统渲染管线与可编程Shader着色器

传统渲染管线与可编程Shader着色器   1.GUP的问世      上世纪的绝大多数显示加速芯片都不能称之为完整意义上的GPU,因为它们仅仅只有像素填充和纹理贴图的基本功能。而NVIDIA公司在1...
  • u011473031
  • u011473031
  • 2015年06月17日 15:27
  • 1143

颜色渲染器Shader对象

概述 颜色渲染Shader对象在对于我们处理图形特效的时候是非常有用的.在Android Api中关于颜色渲染的几个重要的类: Shader,BitmapShader,ComposeShader,L...
  • AnElse
  • AnElse
  • 2016年03月10日 00:17
  • 359

【Unity3D Shader编程】之八 Unity5新版Shader模板源码解析&径向模糊屏幕特效的实现

概要:本文对Unity5中全新的三种Shader模板的源码进行了解析,然后还讲解了运动模糊屏幕特效的实现方法。 Unity5和之前的书写模式有了一定的改变。Unity5时代的Shader Refere...
  • zhmxy555
  • zhmxy555
  • 2015年10月25日 20:26
  • 28963
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Unity3D]Shader学习笔记之图像编程接口与着色语言
举报原因:
原因补充:

(最多只允许输入30个字)