摘抄自《GPU Programming And Cg Language Primer 1rd Edition》 中文名《GPU编程与CG语言之阳春白雪下里巴人》

Shader language目前有3种主流语言:基于OpenGL的GLSL(OpenGL Shading Language,也称为GLslang),基于Direct3D的HLSL(High Level Shading Language),还有NVIDIA公司的Cg (C for Graphic)语言。
  GLSL与HLSL分别提基于OpenGL和Direct3D的接口,两者不能混用,事实上OpenGL和Direct3D一直都是冤家对头,曹操和刘备还有一段和平共处的甜美时光,但OpenGL和Direct3D各自的东家则从来都是争斗不休。争斗良久,既然没有分出胜负,那么必然是两败俱伤的局面。
首先ATI系列显卡对OpenGL扩展支持不够,例如我在使用OSG(Open Scene Graphic)开源图形引擎时,由于该引擎完全基于OpenGL,导致其上编写的3D仿真程序在较老的显卡上常常出现纹理无法显示的问题。其次GLSL 的语法体系自成一家,而HLSL和Cg语言的语法基本相同,这就意味着,只要学习HLSL和Cg中的任何一种,就等同于学习了两种语言。不过OpenGL 毕竟图形API的曾经领袖,通常介绍OpenGL都会附加上一句“事实上的工业标准”,所以在其长期发展中积累下的用户群庞大,这些用户当然会选择 GLSL学习。此外,GLSL继承了OpenGL的良好移植性,一度在unix等操作系统上独领风骚(已是曾经的往事)。
  微软的HLSL移植性较差,在windows平台上可谓一家独大,可一出自己的院子(还好院子够大),就是落地凤凰不如鸡。这一点在很大程度上限制了 HLSL的推广和发展。目前HLSL多半都是用于游戏领域。我可以负责任的断言,在Shader language领域,HLSL可以凭借微软的老本成为割据一方的诸侯,但,决不可能成为君临天下的霸主。这和微软现在的局面很像,就是一个被带刺鲜花簇拥着的大财主,富贵已极,寸步难行。
  上面两个大佬打的很热烈,在这种情况下可以用一句俗话来形容,“鹬蚌相争,渔翁得利”。NVIDIA是现在当之无愧的显卡之王(尤其在AMD兼并ATI之后),是GPU编程理论的奠基者,GeForce系列显卡早已深入人心,它推出的Cg语言已经取得了巨大的成功,生生形成了三足鼎立之势。NVIDIA公司深通广告之道,目前最流行的GPU编程精粹一书就出自该公司,书中不但介绍了大量的GPU前沿知识,最重要的是大部分都用Cg语言实现。凭借该系列的书籍,NVIDIA不光确定了在青年学子间的学术地位,而且成功的推广了Cg语言。我本人就是使用Cg语言进行研发,基于如下理由:

  其一,Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。 Cg语言和OpenGL、DirectX并不是同一层次的语言,而是OpenGL和DirectX的上层,即,Cg程序是运行在OpenGL和 DirectX标准顶点和像素着色的基础上的;
  其二,Cg语言是Microsoft和NVIDIA相互协作在标准硬件光照语言的语法和语义上达成了一致,文献[1]在1.3.1节的标题就是 “Microsoft and NVIDIA’s Collaboration to Develop Cg and HLSL”,所以,HLSL和Cg其实是同一种语言(参见Cg教程_可编程实时图形权威指南29页的致谢部分)。很多时候,你会发现用HLSL写的代码可以直接当中Cg代码使用。也就是说,cg基于知识联盟(Microsoft和NVIDIA),且拥有跨平台性,选择cg语言是大势所趋。有心的读者,可以注意市面上当前的GPU编程方面的书籍,大都是基于CG语言的。(附:Microsoft和NVIDIA联手推出Cg,应该是一种经济和技术上的双赢,通过这种方式联手打击GLSL)
  此外,Cg,即C for graphics,用于图形的C语言,这其实说明了当时设计人员的一个初衷,就是“让基于图形硬件的编程变得和C语言编程一样方便,自由”。正如C++和 Java的语法是基于C的,cg语言本身也是基于C语言的。如果您使用过C、C++、Java其中任意一个,那么Cg的语法也是比较容易掌握的。Cg语言极力保留了C语言的大部分语义,力图让开发人员从硬件细节中解脱出来,Cg同时拥有高级语言的好处,如代码的易重用性,可读性提高等。使用cg还可以实现动画驱动、通用计算(排序、查找)等功能。
在曾经的一段时间中有一种流言:NVIDIA将要抛弃Cg语言。并且在网上关于Cg、GLSL、HLSL的优劣讨论中,Cg的跨平台性也受到过广泛的质疑。我在2007年12月参加朱幼虹老师OSG培训班时,他曾专门对Cg、GLSL、HLSL进行了比较,说道:尽管目前还有一些关于Cg和GLSL之间的争议,不过主流的3D图形厂家都开始支持Cg语言。市场经济的选择可以说明一切,时间可以明辨真伪,到2009年末,Cg语言不但没有被抛弃,而且越来越受欢迎。

GLSL vs HLSL vs Cg相关推荐

  1. OpenGL, GLSL, DirectX, HLSL中的矩阵存储形式

    (原文地址:http://alvincc-tech.blogspot.com/2010/10/opengl-glsl-directx-hlsl.html) OpenGL, GLSL, DirectX, ...

  2. GLSL到HLSL参考

    GLSL到HLSL参考 2017年2月8日 11分钟阅读 贡献者 当您将图形架构从OpenGL ES 2.0移植到Direct3D 11以创建通用Windows平台(UWP)游戏时,可以将OpenGL ...

  3. GLSL转换HLSL

    基本类型转换 (GLSL -> HLSL)highp vec4 -> float4 mediump vec4 -> half4 lowp vec4 -> fixed4highp ...

  4. HLSL CG 与glsl着色器编译及其原理

    导言:公司旧的渲染引擎用的结构无语了,要写一个渲染特效现在Unity 用shaderlab实现调试好,Unity插件导出GLTF格式(shader等已经包含在材质信息中),然后再导到自研引擎(用的OP ...

  5. Unity Shader PostProcessing - 11 - Depth Fog/Height Fog - 雾效/深度雾效/高度雾/深度+高度雾

    文章目录 观察生活中的雾 Scenario 1 - Pure Depth Fog - 纯深度雾 提取有用信息 Scenario 2 - Height Fog - 带高度的雾 提取有用信息 Scenar ...

  6. 1.Shader初识

    找了下网上适合入门shader的教材 https://blog.csdn.net/u014732824/article/details/102959342 https://www.zhihu.com/ ...

  7. 实时渲染学习(二)GPU渲染管线与可编程着色器

    写在最开始: 参考博文:[<Real-Time Rendering 3rd> 提炼总结](三) 第三章 · GPU渲染管线与可编程着色器 注意区分图形渲染管线和GPU渲染管线.图形渲染管线 ...

  8. Unity3D学习笔记3——Unity Shader的初步使用

    文章目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. ...

  9. 漫谈图形引擎中的材质系统

    通用材质系统介绍 材质系统是一个实时渲染引擎非常重要的部分,它使得开发者能够非常便捷地设计出具有真实感的场景和角色.一个好的材质系统可以提高引擎的易用性,并可以方便的扩展渲染效果,来提升渲染质量和效率 ...

最新文章

  1. Microbiome:掠食性粘细菌通过调节土壤微生物群落来控制黄瓜枯萎病
  2. Asp.net单点登录解决方案
  3. 青龙面板node-onebot 教程
  4. winrar压缩文件但是排除指定目录
  5. Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考...
  6. 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类
  7. vs2010 代码混淆 代码加密
  8. 酒精测试仪检定设备设计与验证
  9. orm框架设计、分析与开发
  10. 181.超过经理收入的员工
  11. gis地图数据获取91卫图免费获取方法
  12. 如何选择关键词以及关键词分析优化
  13. 如何撤回 Gmail 已发送的邮件
  14. 开弓没有回头箭,遭遇跳槽四大后悔事件,怎么办?
  15. Shell中如何删除首行和尾行
  16. 女性三围--表单只能输入数字和英文输入下的逗号
  17. 通过物理地址查计算机,别人知道我查电脑的物理地址,怎么处理
  18. motion_primitive_library导航源码阅读笔记
  19. java学习第二周周记
  20. c++ bitset类用法

热门文章

  1. 游戏美术都受到了什么绘画风格的影响
  2. ABB机械臂和RobotStudio编程简介
  3. 10亿数据找出前100大的数据(网易大数据面试算法题)
  4. zigbee以太网网关方案
  5. Flutter PopupMenuButton
  6. eft join 是left outer join的区别
  7. 计算机二级基础知识点全部讲解,计算机二级基础知识点整理
  8. 使用windows自带的局域网连接传输文件
  9. FIBOS入坑指南——本地开发环境搭建
  10. TI高精度实验室ADC系列培训视频 第3章和第4章 ADC噪声分析