前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3.1 Shader Language 原理第 3 章 Shader Language

3.1 Shader Language 原理第 3 章 Shader Language

作者头像
代码咖啡
发布2018-08-28 10:31:46
8450
发布2018-08-28 10:31:46
举报
文章被收录于专栏:程序员叨叨叨

文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至简书平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

第 3 章 Shader Language

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 programfragment program 进行具 体论述,后对 GLSLHLSLCg 进行比较。

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展示了可编程图形渲染管线。

图 8 可编程图形渲染管线

对比上一章图 3 中的 GPU 渲染管线,可以看出,顶点着色器控制顶点坐标 转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:Vertex program 负责顶点坐标变换;Fragment program 负责像素颜色计算;前者的输出是后者的输入。

图 9展示了现阶段可编程图形硬件的输入\输出。输入寄存器存放输入的图元信息;输出寄存器存放处理后的图元信息;纹理 buffer 存放纹理数据,目前大多数的可编程图形硬件只支持片段处理器处理纹理;从外部宿主程序输入的常量放在常量寄存器中;临时寄存器存放着色程序在执行过程中产生的临时数据。

图 9 可编程图形硬件输入\输出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 3 章 Shader Language
    • 3.1 Shader Language 原理
    相关产品与服务
    GPU 云服务器
    GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档