游戏开发论坛

 找回密码
 立即注册
搜索
查看: 33085|回复: 23

着色语言(Shader Language),以及HLSL VS GLSL VS CG

[复制链接]

5

主题

14

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2009-11-23 19:29:00 | 显示全部楼层 |阅读模式
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”


    In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I can’t think of any reason NOT to use CG.

    shader language,称为着色语言,shade在英语是阴影、颜色深浅的意思,Wikipedia上对shader language的解释为“The job of a surface shading procedure is to choose a color for each pixel on a surface, incorporating any variations in color of the surface itself and the effects of lights that shine on the surface(Marc Olano)”,即,shader language基于物体本身属性和光照条件,计算每个像素的颜色值。


    实际上这种解释具有明显的时代局限性,在GPU编程发展的早期,shader language的提出目标是加强对图形处理算法的控制,所以对该语言的定义亦针对于此。但随着技术的进步,目前的shader language早已经用于通用计算研究。


    shader language被定位为高级语言,如,GLSL的全称是“High Level Shading Language”,Cg语言的全称为“C for Graphic”,并且这两种shader language的语法设计非常类似于C语言。不过高级语言的一个重要特性是“独立于硬件”,在这一方面shader language暂时还做不到,shader language完全依赖于GPU构架,这一特征在现阶段是非常明显的!任意一种shader language都必须基于图形硬件,所以GPU编程技术的发展本质上还是图形硬件的发展。在shader language存在之前,展示基于图形硬件的编程能力只能靠低级的汇编语言。
    目前,shader language的发展方向是设计出在便捷性方面可以和C++\JAVA相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法的效率”。Shader language目前主要有3种语言:基于OpenGL的GLSL,基于Direct3D的HLSL,还有NVIDIA公司的Cg 语言。
    本章的目的是阐述shader language的基本原理和运行流程,首先从硬件的角度对Programmable Vertex Processor(可编程顶点处理器,又称为顶点着色器)和 Programmable Fragment Processor(可编程片断处理器,又称为片断着色器)的作用进行阐述,然后在此基础上对vertex program和fragment program进行具体论述,最后对GLSL、HLSL和Cg进行比较。


3.1 Shader Language原理


    使用shader language编写的程序称之为shader program(着色程序)。着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。为了清楚的解释顶点着色和片断着色的含义,我们首先从阐述GPU上的两个组件:Programmable Vertex Processor(可编程顶点处理器,又称为顶点着色器)和 Programmable Fragment Processor(可编程片断处理器,又称为片断着色器)。文献[2]第1.2.4节中论述到:
    The vertex and Fragment processing broken out into programmable units. The Programmable vertex processor is the hardware unit that runs your Cg Vertex programs, whereas the programmable fragment processor is the unit that runs your Cg fragment programs.
    这段话的含义是:顶点和片段处理器被分离成可编程单元,可编程顶点处理器是一个硬件单元,可以运行顶点程序,而可编程片段处理器则是一个可以运行片段程序的单元。
顶点和片段处理器都拥有非常强大的并行计算能力,并且非常擅长于矩阵(不高于4阶)计算,片段处理器还可以高速查询纹理信息(目前顶点处理器还不行,这是顶点处理器的一个发展方向)。
如上所述,顶点程序运行在顶点处理器上,片段程序运行在片段处理器上,哪么它们究竟控制了GPU渲染的哪个过程。图 8展示了可编程图形渲染管线。


    对比上一章图 3。中的GPU渲染管线,可以看出,顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:Vertex program负责顶点坐标变换;Fragment program负责像素颜色计算;前者的输出是后者的输入。
    图 9展示了现阶段可编程图形硬件的输入\输出。输入寄存器存放输入的图元信息;输出寄存器存放处理后的图元信息;纹理buffer存放纹理数据,目前大多数的可编程图形硬件只支持片段处理器处理纹理;从外部宿主程序输入的常量放在常量寄存器中;临时寄存器存放着色程序在执行过程中产生的临时数据。



3.2 Vertex Shader Program


    Vertex shader program(顶点着色程序)和Fragment shader program(片断着色程序)分别被Programmable Vertex Processor(可编程顶点处理器)和 Programmable Fragment Processo(可编程片断处理器)所执行。
    顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。
图 10展示了在顶点着色器和像素着色器的数据处理流程。在应用程序中设定的图元信息(顶点位置坐标、颜色、纹理坐标等)传递到vertex buffer中;纹理信息传递到texture buffer中。其中虚线表示目前还没有实现的数据传递。当前的顶点程序还不能处理纹理信息,纹理信息只能在片断程序中读入。
顶点着色程序与片断着色程序通常是同时存在,相互配合,前者的输出作为后者的输入。不过,也可以只有顶点着色程序。如果只有顶点着色程序,那么只对输入的顶点进行操作,而顶点内部的点则按照硬件默认的方式自动插值。例如,输入一个三角面片,顶点着色程序对其进行phong光照计算,只计算三个顶点的光照颜色,而三角面片内部点的颜色按照硬件默认的算法(Gourand明暗处理或者快速phong明暗处理)进行插值,如果图形硬件比较先进,默认的处理算法较好(快速phong明暗处理),则效果也会较好;如果图形硬件使用Gourand明暗处理算法,则会出现马赫带效应(条带化)。
而片断着色程序是对每个片断进行独立的颜色计算,并且算法由自己编写,不但可控性好,而且可以达到更好的效果。
    由于GPU对数据进行并行处理,所以每个数据都会执行一次shader程序程序。即,每个顶点数据都会执行一次顶点程序;每个片段都会执行一次片段程序。



3.3 Fragment Shader Program


    片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。
片段着色程序还有一个突出的特点是:拥有检索纹理的能力。对于GPU而言,纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等,就必须使用到片段着色程序。让顶点着色器也拥有检索纹理的能力,是目前的一个研究方向。
    附:什么是片断?片断和像素有什么不一样?所谓片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的。


3.4 CG VS GLSL VS HLSL


    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语言不但没有被抛弃,而且越来越受欢迎。


    我在OGRE官方论坛上,搜索过有关使用Cg和GLSL的讨论帖子,套用其中一个帖子的结尾语来结束本章:
    In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I can’t think of any reason NOT to use CG.





59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-11-23 21:54:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

呃,简直是误导啊....
Gg和hlsl都是一样的,不同的是运行库,不是语言本身

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-11-24 01:52:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

ATI显卡对opengl+Cg的支持非常糟糕,只支持通用扩展

5

主题

14

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2009-11-24 09:40:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

二楼的,这个帖子不知道误导了什么?你说“Gg和hlsl都是一样的,不同的是运行库,不是语言本身”。这是对的。但是文中也是这个意思,请你看下面的这句话:
  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),且拥有跨平台性

5

主题

14

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2009-11-24 09:42:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

还有三楼的,拜托好不好,ATI的显卡是对OpenGL的支持不好,而shader language以图形API为基础,所以你说的“ATI显卡对opengl+Cg的支持非常糟糕,只支持通用扩展”,这句话是不对的。应该是ATI对openGL的支持非常糟糕。
难道ATI显卡对opengl+GLSL的支持就好了吗?我在使用OSG开源图形引擎的时候,差一点的ATI显卡都无法显示纹理。

227

主题

1793

帖子

1866

积分

金牌会员

Rank: 6Rank: 6

积分
1866
发表于 2009-11-24 14:40:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

明显ATI显卡对opengl+GLSL的支持远远好于对opengl+Cg的支持
来看看我写的代码吧:http://bbs.gameres.com/showthread.asp?threadid=138293

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-11-24 16:16:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

我说两句。
To Exp1924:你那个例子说明不了什么问题。究竟是海面用glsl写的shader,还是光影是的。如果就例子而言,
我觉得,你做的这个海面远远没有OGRE用cg语言写的shader程序好。此外,“明显ATI显卡对opengl+GLSL的支持远远好于对opengl+Cg的支持”,有什么证据说明这点。
我在CSDN上看到关于glsl,hlsl和cg得讨论是这样说的,给出原帖的地址:http://topic.csdn.net/t/20060827/10/4978473.html
楼主mynetpc(大头头不大)2006-08-27 10:57:49 在 专题开发/技术/项目 / 游戏开发 提问
GLSL   CG   HLSL,   该选择哪个?哪个最快?哪个跨平台能力最强?
问题点数:10、回复次数:21
Top


1 楼d16(弟十六)回复于 2006-08-28 07:51:48 得分 10建议你看看《OpenGL   Shading   Language   2nd》这本书的第21章,写的非常清楚,网上有电子版。
Top

2 楼cywater2000(如果)回复于 2006-08-28 19:39:40 得分 0 d3d   +   hlsl   
  OpenGL   +   CG
Top

3 楼mynetpc(大头头不大)回复于 2006-08-29 21:27:04 得分 0 GLSL   如何?
Top

4 楼mynetpc(大头头不大)回复于 2006-08-31 09:09:28 得分 0 顶   
  OpenGL   Shading   Language   2nd   谁可以发我一份?   
  neediss@gmail.com
Top

5 楼soilwork()回复于 2006-08-31 12:42:39 得分 0 Cg跨平台能力最强   
  glsl好像只能在opengl上用
Top

6 楼cywater2000(如果)回复于 2006-08-31 19:01:39 得分 0 GLSL的地位比较尴尬,写gl的人通常都用cg
Top

7 楼wudt(3D大盗葛来飞)回复于 2006-09-01 10:34:53 得分 0 看了回复真的有点晕!   
  TO   :soilwork   你有什么根据说CG跨平台能力最强?在任何平台上,都要装NV的CG编译器,GLSL只要装好最新的驱动程序就ok了(但我得承认,在linux下装驱动是挺麻烦的!这似乎是另外的问题),至少我是这样的,我用glew,更省事了!   
  TO   :cywater2000   GLSL真的尴尬吗?   那我上gpgpu上,用GLSL的怎么比CG多多了,难道你说的是国内?   NV好象自己都准备放弃CG了!而且GLSL更加接近底层吧!   
  
Top

8 楼soilwork()回复于 2006-09-02 13:27:14 得分 0 to   wudt:   
  cg程序几乎可以不用修改的同时在opengl和directx里用   
  而且和hlsl可以共享很多资源   
  似乎编译好的程序不需要装什么cg编译器就可以跑吧~~   
  NV会放弃Cg??   
  虽然glsl是openGL上的标准着色语言   
  但当glsl出现的时候,Cg实际上已经在openGL平台上广泛应用了   
  你看看GPU   Gems系列和ShaderX系列中,用glsl写的程序并不多   
  GLSL更接近底层??   
  一般情况下,无论HLSL,CG,glsl都需要在运行时进行编译成机器语言吧~~   
  你要接近底层,汇编自然是首选   
   
  ps:其实这种讨论没多大意义   
  精通一门,学其他的也不难,shader程序算法才是关键
Top

9 楼cywater2000(如果)回复于 2006-09-02 19:10:30 得分 0 同意楼上的
Top

10 楼wudt(3D大盗葛来飞)回复于 2006-09-03 09:45:38 得分 0 嗯,确实没什么意义!楼主可以结帖了!shader程序算法才是关键!同意!   
   
  但讨论一下,无伤大雅吧!   
   
  cg程序几乎可以不用修改的同时在opengl和directx里用!   
  几乎可以,也就是说不是绝对不用改吧!   
  我现在写程序,尽量争取不用修改,就可以在win和linux下面跑,只要重新编译一遍,不用改源代码,所以GUI选用了QT(一般的例子就用freeglut了)   
  opengl和directx是API,不是平台哦,我理解的平台是只win、linux/unix、Mac这些OS才是平台   
   
  似乎编译好的程序不需要装什么cg编译器就可以跑吧~~   
  这是针对程序员而言的。你不编程序当然不用编译器!就好像你运行C++的程序当然不用装C++编译器   
  如果针对用户而言,难道你不用装CG运行库?或者给用户的时候不给用户CG.DLL这些库?   
  GLSL就不用装这些什么dll吧,只要你要求用户把显卡的最新驱动装好,这点不过分吧!   
   
  NV会放弃Cg??   
  Maybe,不是不可能,看看吧!   
   
  你看看GPU   Gems系列和ShaderX系列中,用glsl写的程序并不多   
  GPU   Gems系列里面的作者,好像NV的比较多吧,而且CG出来比glsl早点,这个一点也不奇怪!ShaderX系列不了解情况,不发言了....   
   
  GLSL更接近底层??   
  GLSL早先的低层着色器,不知道你看过没有,是不是很接近汇编语言呢?   
   
   
  
Top

11 楼mynetpc(大头头不大)回复于 2006-09-05 09:26:19 得分 0 再顶一下   
  从开发的便捷性考虑   
  我会尽量不选择DX,而GLSL我的X300再glew后才能启用,驱动的不明白   
  CG似乎开发比较顺畅,GPGPU上的例子其实CG更多一点   
  “GPU   Gems系列里面的作者,好像NV的比较多吧”那是nV出的,当然全是NV的了   
  期待更客观的回答
Top

12 楼anachronism(飘仙)回复于 2006-10-19 16:49:36 得分 0 DX+GLSL,   OpenGL+HLSL,   DX&OpenGL+cg
Top

13 楼honeyhuang11(小黄)回复于 2006-12-01 15:17:24 得分 0 是个好问题,有个问题再请教一下,openGL+HLSL能够跑在Linux下吗?   OpenGL+cg能跑在Linux下吗?   有cg的so吗?   如果要开发Windows&Linux跨平台的程序,应该如何选择呢?
Top

14 楼limiteee(无限电)回复于 2006-12-04 17:38:57 得分 0 游戏都是客户玩的,客户都使用windows的,所以linux无视,建议用d3d+HLSL   
   
  如果你把d3d+HLSL搞精通了,其他的想搞精通也不是什么难事   
   
  所以楼主要做的不是看哪个更强,而是哪个更适合
Top

15 楼cywater2000(如果)回复于 2006-12-04 20:32:23 得分 0 楼上,谁告诉你“客户都使用windows的”?   
  更何况楼主问了“哪个跨平台能力最强?”的   
   
  另外,如果楼主是开发console   game的呢?
Top

16 楼limiteee(无限电)回复于 2006-12-05 09:52:58 得分 0 哪有那么多如果,我只知道,我认识的人、我见过的人,都用windows,即便是平时嘴上总说ms的东西部好,linux好的人,平时还是用windows
Top

17 楼cywater2000(如果)回复于 2006-12-05 20:20:16 得分 0 知道什么叫console   game么?   
   
  最后再重复一句:楼主问了“哪个跨平台能力最强?”   
  
Top

18 楼macrod(自然醒)回复于 2006-12-08 21:35:19 得分 0 开发   console   的跨平台就没意义了
Top

19 楼macrod(自然醒)回复于 2006-12-19 20:07:29 得分 0 Cg   的跨平台能力很强

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-11-24 16:35:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

我刚才又认真的看了楼主的原帖,楼主的帖子是摘除书“GPU Programming And Cg Language Primer 1rd Edition”,上面有这么一句话:
    我在OGRE官方论坛上,搜索过有关使用Cg和GLSL的讨论帖子,套用其中一个帖子的结尾语来结束本章:
    In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I can’t think of any reason NOT to use CG.
于是我到OGRE的官方论坛上去搜索证据,果然让我找到了。帖子的地址是:
http://www.ogre3d.org/forums/viewtopic.php?f=1&t=48781

这里面讲了glsl VS hlsl VS cg。不是咱们迷信国外人,但是OGRE是世界排名第一的开源图形引擎,其官方论坛中不少都是大牛,这里面的讨论帖子是有一定的参考价值的。请看从该帖子中摘录的两句话:

1:It is highly unlikely you will notice a performance difference between shader languages, so I would suggest you learn CG. The benefit of only having to write/maintain ONE shader for both DirectX and OpenGL is why CG is king in my book.

In the past (pre CG 2.0) there were some minor limitations on CG (running out of registers) which forced me to write a couple things in HLSL. But since 2.0 all those problems seem to have been solved. In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I cant think of any reason NOT to use CG.

2:If you decide to write native GLSL you'll find that not all video card drivers are equal when it comes to compiling the GLSL code down to assembly for the video card. The ATI cards especially have some annoying bugs and missing features. Some other cards just do not support very high revisions of the GLSL language (some Intel chipsets). You might end up managing shader code for each of these hardware configs, which is tedious and annoying.

The good news is that you can use Nvidia's Cg compiler to compile your GLSL code into code targeted for the hardware beforehand. The bad news is that Cg might not produce the most optimized code for complex effects. If you're going to do that though, and you're not going to even use OpenGL directly, just use Cg shader code!

Anyway, since you're asking these types of questions I hardly think you need to worry about which shader language is faster/more effective. Just use Cg.

oz01同学,我刚才去看了你引为自豪的那个飞行模拟游戏,你是用opengl+glsl写的?我很佩服你这种学习精神,不过我猜测,你还是一个学生。因为目前国内的公司基本都是用DX+cg和dx+hlsl得组合,并且使用这样组合通常都是底层图形引擎的设计者;大部分的图形工作者是使用图形引擎开发,开源的有OGRE,OSG和IRRLICT等。

  游戏行业首要注重的是跨平台性,不是单单指操作系统,还指不同年代的显卡。所以通常都会使用cg的(这是事实,尤其在国外),不信你可以下载siggraph08年星际的开发人员写的一篇文章。glsl的地位非常尴尬,在仿真中用的比较多,但也被cg占据了半壁江山。
  说这么多,只是感觉你不是太虚心,在你自豪的那个帖子中,说人家是“乱喷”,我不知道是不是如此,但是不喜欢你的作风。我们做学术的,或者专业人士要讲证据。我列出了我的证据,你拿出你的证据,谁说的对,说有理,大家都清楚。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-11-24 17:48:00 | 显示全部楼层

Re: Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

windRain_ly: Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

二楼的,这个帖子不知道误导了什么?你说“Gg和hlsl都是一样的,不同的是运行库,不是语言本身”。这是对的...


windRain_l兄是lz马甲还是作者?

原文引用了很多Cg tutorial中的内容,相信作者也应该知道cg和hlsl在语言层面上其实是一样的。
文中先说hlsl移植性较差,又说Cg可以被OpenGL和Direct3D广泛支持,前后两段的逻辑就是矛盾的。单看shader,给你一段代码你能说这是用hlsl写的还是用Cg写的?把Cg和hlsl进行比较是没有意义的。

不要把runtime和语言混为一谈,技术文章要求的就是精确,特别是这种给初学者看的文章,会让人以为hlsl和cg是完全不同的语言,这还不算误导??

ps: “In the last year I have never had to write a single HLSL/GLSL shader. Bottom line, I can’t think of any reason NOT to use CG.”

不要盲目迷信老外,能说出这样的话来,也够无知了。。。。。

5

主题

14

帖子

29

积分

注册会员

Rank: 2

积分
29
 楼主| 发表于 2009-11-24 18:19:00 | 显示全部楼层

Re: 着色语言(Shader Language),以及HLSL VS GLSL VS CG

clayman兄,我觉得你的观点失之偏颇。
我们按照abelard_zheng的说法来,好吧,摆论据讲道理。abelard_zheng不是我的马甲,我发的贴,自己应战就是了。
你说“文中先说hlsl移植性较差,又说Cg可以被OpenGL和Direct3D广泛支持,前后两段的逻辑就是矛盾的。”这句话矛盾,究竟矛盾在什么地方?hlsl的移植性难道不差吗?cg难道不能被那两种API广泛支持吗?
  cg与HLSL在语法上很类似,但是底层则不相同。
你说将cg和HLSL进行比较没有意义?那我请问:
                         当初NVIDIA和MICRO为什么要创造CG语言?现在的GPU精粹一书中,为什么又使用CG语言?

  还有,abelard_zheng将国外论坛的讨论摆出来,原本就是一种认真负责的态度,这是学术讨论,当然要提出各种观点。虽然不盲信国外的说法,但是我们无法否认,无论是CG还是GLSL,还是HLSL都是国外人创造的,他们使用的时间长,资料多。难道引用他们的说法有什么不对吗?又有何无知之处?还望楼上的指教一二。

  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-5 13:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表