[GEiv]第七章:着色器 高效的GPU渲染方案

第七章:着色器

高效的GPU渲染方案

    本章介绍着色器的基本知识以及Geiv下对其提供的支持接口,并以“渐变高斯模糊”为线索进行实例的演示讲解。

[背景信息]

    [计算机中央处理器的局限性]

    在大学的“数字图像处理”课程中,老师讲解了高斯模糊的基本算法,并使用C#进行了基本实现。高斯模糊,简单地说,就是使用高斯权重模板对图像的每一个像素进行再计算、填充,以达到模糊的效果。

    在课程中,对于给定的模板与模糊度系数,对一副800X600的图像进行模糊处理,需要计算48万个像素点,尽管当时机房已经普及了酷睿系列CPU,但这个过程依旧耗时2~3秒。

    于是有这样的一个问题:在游戏中,我们经常看到画面进行模糊到清晰的动态转变,即使是次世代的GBA\SFC等游戏主机依然有这样的效果实现,而论硬件性能,我们的PC应该远远高于这些次世代游戏机,而2、3秒的运算结果已经明确告诉我,想要进行更为高效的模糊计算,显示地挨个计算像素点是不可能达到预期效率的,想要一秒钟完成60幅不同模糊度的图像计算,还要另寻他路。

    为什么计算性能普遍较低的游戏机却能实现高性能CPU都无法流畅做到的运算呢?笔者认为还是因为CPU的结构差异导致的,PC的任务种类多,过程复杂,需要复杂的指令集系统;但游戏机的CPU主要为图像而生,只需使用针对图像的少数精简指令系统即可。

    总而言之,为了保证CPU在复杂任务下的通用性,计算机的CPU并不擅长进行图形运算,并且在一些场合下,图形运算的效率相当低下。


    [图形处理器GPU]

    为了弥补CPU处理图形的缺陷,GPU便诞生了,GPU是针对图形运算而生的处理器,如今的主流游戏PC都会有一个高性能的GPU。具体的概念笔者就不在这里提了,相信搞计算机的都会对其了解一二。


    [在编程中使用GPU运算资源]

    在大多数开发场合下,无论是C还是Java,我们敲的代码都无疑地运行在CPU之上,那我们怎样才能显示地调用GPU的资源呢?在OPENGL中,除了常用的固定管线式编程外,还提供了更为灵活的功能,它允许开发者使用着色语言(GLSL,一种类C语言)编写名为“着色器”的程序,经编译运行于GPU之上并接管一部分GPU内置功能。


    [Opengl着色器简述]

    介于笔者履历有限,这里只做简单介绍,详细概念可以参考《Opengl着色语言》一书,它对着色器和GLSL有着非常详细的介绍。

    一个Opengl着色器(下简称着色器)由一个顶点着色器与片段着色器构成,它们负责的工作大部分是不同的,仅有少部分交集。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值