第六章处理Shader-Read.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章处理Shader-Read.doc

第六章 处理Shader 6.0概览 现在基本图像引擎已经被启动并且运行了,你暂时可以把注意力放在shader开发。正如上一章提及的,在XNA中一切事物在shader的帮助下被渲染,即便当你使用 SpriteBatch 类或者 SimpleEffect 类模仿固定功能行为,不直接和shader交互的时候。本章遍历从零编写shader的整个过程,然后你学习所有关于vertex buffer、vertex shader 处理过程,以及pixel shader最终如何在屏幕上产生像素。如果你已经是一个shader专家,你很可能想跳过本章或者仅仅快速浏览。但是因为下面几章都依赖于shader的基本知识,所以我想确保所有人在同一水准上。 因为在XNA中shader是如此重要,如果你还没有牢固的shader知识,你的确应该尝试遵循本章的所有步骤。本章的设计方式是为了让你亲自遵循每一个独立步,在本章结尾你将编写你的第一个shader,你应该知道一切是如何从开始到完成的。然后你将为下几章做准备,并且你能容易地编写自己的shader。 在开始下几章炫酷的normal mapping effect或者post screen shader之前,你首先必须学会基础。shader不仅仅用于高质量的特效,也取代非常简单的渲染过程,这些处理曾经被用在固定功能管道的渲染。在学习了一点儿shader和图形卡发展的历史之后,你将经历创建一个简单shader的过程,只要渲染一个带有每像素镜面反射光的简单3D模型,然后把shader导入到你的游戏引擎。你将用来创建shader、甚至在你开始把更多代码放进引擎前测试shader的主要工具,是来自于Nvidia的FX Composer,它是一个快速创建自己的shader的好工具。 Shader Overview 固定功能意味着GPU开发者已经安排了一种固定方式来转换顶点(显示卡能够TL,意思是能transform 和 light vertices)并且以预编程的方式直接在GPU硬件上输出像素。改变这种行为是不可能;你只能enable和disable某种特性。对于早期游戏这样相当好,因为GPU硬件做了大量的工作,保证CPU自由安排其他任务,并且GPU比CPU渲染3D数据快很多,因为GPU正是为了渲染多边形而被深度优化过的。如果你听说过“Direct3D 7.0 capable graphic cards”,这正是它所能做的;早期的显示卡有一个相似的行为,不过在Direct3D 5.0以及之前直接在硬件级的带有执行buffer之类的GPU上编程真的很困难。在1999年左右Nvidia GeForce系列图形卡问世的时候,Direct3D 7.0 简化了这个渲染过程。现在一次性渲染带有多重纹理的多边形成为了可能,使用纹理压缩让显存适应容纳更多的纹理,直接在显存中使用vertex buffer来提高执行效能。 历史History 即使是在Direct3D 7.0中取得这些巨大进步之后,游戏们看起来并没有太大的不同,它们只是运行得更快,也许有更多的多边形,并且利用纹理压缩和多重纹理的特效来展现更多的纹理,以及混合它们。真正的革命随着DirectX 8和DirectX 9而到来。DirectX 8最终删除了DirectDraw组件,并且被引入了vertex shader、pixel shaders和许多特效——bump mapping凸凹映射,自定义纹理映射等等……但是它只支持Shader Model 1.0,由于众多的API改变了,在一开始并不对用户很友好,并且编写汇编shaders 不是一件轻松的事。 DirectX 9添加了对HLSL的支持(High Level Shader Language高级着色语言,你将在本章中学习到),伴随着即将到来的图形卡的新特性,比如HDR渲染(high dynamic range)和多渲染目标,它允许像deferred shading延迟明暗处理的technique技法。 DirectX 9非常流行,许多开发者都从OpenGL转移到DirectX,这正是因为OpenGL在一开始不能恰当的支持shader,以及OpenGL 2.0 标准直到被认可走了太长的路。其对于shader的扩展模式也比使用Direct3D的shader 类更为逊色,并且直到花了很长时间OpenGL中才有更好的结构可用。 Direct3D 10也再一次大大领先于OpenGL,支持Shader Model 4.0和geometry shader至今已经有一年多了,OpenGL有大量的追赶工作要做。Direct3D 10目前只能工作在Windows Vista,不过你仍然可以在XP中使用OpenGL的扩展来做某些Shader Mo

文档评论(0)

ailuojue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档