shader学习笔记(二)

GPU 编程语言

shader language 的发展方向是设计出在便捷方便性方面可以和C++、JAVA相比的高级语言,让GPU变成更加灵活可控,同时利用图形硬件的并行性,提高算法的效率。

有三总语言可以编写

HLSL (High Level Shading Language )

GLSL (OpenGL Shading Language)

CG  (C for Graphic)

OpenGL 简介

GLSL (OpenGL Shading Language)

OpenGL(Open Graphics Libary)是一个定义了跨编程语言,跨平台的编程接口规格的专业图形程序接口,它用于三维二维图像,是一个功能强大,调用方便的底层图形库,OpenGL 是恒业领域中最为广泛接纳的2d/3d图形API,其自诞生至今已经催生了各种计算机平台及设备上的数千优秀应用程序,它独立于视窗操作系统或者其他操作系统的, 亦是网络透明的,在包裹CAD,内容创作,能源,娱乐,游戏开发,制造商,制药业及虚拟现实等行业领域中,OpenGL是个与硬件无关的软件接口,可以在不同的平台如WIndows,Unix,Linux,MacOS,OS/2之间进行移植,因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。

OpenGL的发展一直处于一种迟缓的态势,每次版本的提高新增的技术不反很少,大多只是对其中部分作出修改和完善,1992年7月,SGI公司发布了OpenGL1.0版本,随后义与微软公司共同开发了Windows NT版本的OpenGL ,从而使一些原来必须在高档图形工作站上运行的大兴3D图形处理软件也看恶意在微机上运用,1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能,其中包括改进打印机支持,在增强源文件中包裹OpenGL的调用,顶点数组的新特性,提高顶点位置,法线,颜色,色彩指数,纹理坐标,多边形边缘标示的传输速度,引用了新的纹理特性等等OpenGL1.5 又新增了“OpenGl Shading Language” ,该语言是 "OpenGL 2.0"的底核,用于着色对象,顶点着色以及片段着色技术的扩展功能。

DirectX 简介

  DirectX,(Direct eXtension ,简称 DX) 是由微软公司创建的多媒体编程接口。由C++编程语言实行,遵循COM,被广泛使用WIN,XBOX, 电子游戏开发,并且只能支持这些平台,足心版本为DX12 ,创建在最新的Win10系统,DirectX 是这样一组技术:它们皆在使基于Windows的计算机成为运行和显示具有丰富多媒体元素的应用程序的理想平台,DirectX包括安全和性能更新程序,以及许多涵盖所有技术的新功能,应用程序可以通过使用DirectX Api来访问这些新功能。

   DirectX加强3D和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低了用于安装已经设置硬件的复杂度,从字面意义上说,Direct就是直接的意思,而后面的X则代表了很多的意思,从这点上可以看出DirectX的出现就是为了为众多软件提供直接服务的。

    举例来说,以前在DOS下的玩家游戏时,并不是安装上就可以玩了,他们往往首先要设置声卡的品牌和型号,然后还设置IRQ,I/O DMA如果哪项设置的不对,那么游戏声音就发不出来,这部分设置不仅让玩家伤透脑筋,对游戏开发者来说更为头疼,为了让游戏能够正确运行,开发和必须在游戏制作之初,把市面上所有对声卡硬件数据都收集过来,然后根据不同的API来写不同的应用驱动程序,这对于游戏制作公司来说,是很难完成的,所以在当时多媒体游戏公司很少,微软正是看到了这个问题,为众厂家推出了一个共同的应用程序接口   DirectX。只要游戏依照DirectX 来开发的,不管显卡,声卡型号如何,统统都能玩,而且还能发出比较好的性能,当然前提是使用的显卡,声卡驱动程序必须支持DriectX才行

CG 简介

GLSL (OpenGL Shading Language)

CG  (C for Graphic)

cg语言(C for Graphic) 是为GPU编程设计的高级着色器语言,cg极为保留C语言的大部分语意,并让开发者从硬件细节中解脱出来,CG同事也有一个高级语言的其他好处,如代码的易重用性,可读性得到提高,编译器代码优化,CG是个可被OpenGL和DIrcet3D广泛支持的图形处理器编译语言,CG语言和DircetX 并不是同一层次的语言,而是两者的上册,CG语言是运行在OpenGl和DircetX标准顶点和像素着色的基础上的,CG由NVIDIA(英伟达)公司和微软公司相互协作在标准硬件光照语言和语义上达成了一致的开发,所以,GLSL和CG其实是同一种语言

      GLSL与HLSL分别基于OpenGL和DircetX 的接口,两者不能混用,事实上OpenGl和DIrcetX一直是冤家对头,争斗良久,OpenGl在其长期发展中积累下的用户群体庞大,这些用户选择学习GLSL学习,GLSL继承了OpenGL良好的移植性,一度在unix等操作系统上独领风骚,但GLSL的语言体系自成一家,微软的GLSL移植性较差,在win平台上可所谓一家独大,这一点在很大程度上限制了HLSL的推广和发展,但是HLSL用于DX游戏领域却深入人心。

总结 unity shader就是用CG语言编写,CG就是在微软的DX和OpenGl基础上的高级语言,这样unity的平台发布种类就会很多,android,ios,windows,MacOS,xbox,web,等等

可以在编辑器点击一个 shader文件看到这里显示出来

你可能感兴趣的:(shader学习笔记(二))