- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【DD游戏编程】学习笔记二十五:法线映射NormalMapping
【D3D11游戏编程】学习笔记二十五:法线映射(Normal Mapping)1. 为什么使用法线映射?在开始正式讨论法线映射之前,先来看下以下两张图片:这两张依然是之前一篇文章中用到的仙剑五前传中两张截图,两图中显示的为同一地点,不同的观察角度。在左边的图中,根据纹理图,它给人一种很粗糙的岩石壁的感觉,但右边图中却出现了强烈的高光反射。这显然是有点相互矛盾的,因为强烈的全反射只有在表面比较光滑的表面上才会出现,而从左图中来看,它应该是凹凸不平的。造成这种现象的原因很简单:纹理的使用给我们带来了像素级别上的物体表面的细节,而模型本身是由有限个顶点组成的,这样在像素着色器中,经过插值计算得到的各像素的法线是平滑过渡的,而不再是各像素本身应该有的法线值。这样平滑过渡的法线在经过光照计算后,就很容易造成这种比较明显的高光反射现象。要修正这种现象,根本问题在于修改像素的法线值,使其与真实法线趋于一致,这样在光照计算后将会得到与实际逼近的结果。要实现这种效果,有两种方法:一种是增加模型的细节,即顶点个数,这样就可以为模型表面指定更多的法线,而不再是在像素着色阶段依赖简单的插值计算得到,以得到更加真实的效果。这种方法是可行的,但有一个缺陷,更多的顶点意味着更大的计算量,因为在顶点着色器中,每个顶点都要经过各自的各种矩阵变换。因此这种方法能够提供的细节程度是有限的,一般不足以满足我们的要求。另一种效率非常高而且效果很好的方法,即这篇文章的主题:Normal Mapping。2. 法线贴图及其数据格式在Normal Mapping技术中,需要使到到一张纹理。与普通纹理不同的是,这张纹理中的每个像素(texel)存放的并不是颜色值,而是法线,因此也称之为法线贴图(Normal Map)。我们知道,纹理的使用给基于顶点的几何模型带来了像素级别上的细节,同样,法线贴图的使用,使用我们能够得到模型表面在像素级别上的法线值,这样的法线值是直接通知读取纹理获得的,而不再是经过插值得到,因此可以根据现实需求由美工们灵活设定,以获得想要的逼真效果。在数据存放格式上,法线贴图与普通贴图并无差别,依然是RGB格式或者RGBA格式。只是这里的R、G、B、A不再是颜色的不同分量,而是三维法线向量的各分量。R、G、B分别代表法向量的X、Y、Z分量,如果是RGBA格式,则一般可以用A分量来存放高度信息。这个高度信息也是非常有用的,在很多地方需要与法线值配对使用,比如Parallax Mapping(后面介绍)。这里我们主要来关注RGB分量。一般情况下各分量占8个位(无符号),因此取值区间位于[0, 255]。但在实际情况下,经过归一化的法线向量,总长度为1,因此各分量都位于[-1, 1]之间。因此要想使用8位来存放,需要把[-1, 1]范围映射到[0, 255]之间。方法其实很简单,令x为[-1, 1]中任意值,通过y = (x + 1) /2 * 255,即得到了位于[0, 255]之间的y。相反,对于从贴图中读取到的y值,我们可以通过反向变换:x = 2*y / 255 - 1,得到我们想要的范围区间内的值。在HLSL中,通过内置函数 Sample(与之前读取纹理的函数一样),我们可以直接得到位于[0, 1]之间的数据,因此我们只需要进行2*x - 1的变换即可。如下所示:[cpp]view plaincopyprint?normal = g_normalMap.Sample(samplerTex, pin.tex).rgb; //Get normal from the normal mapnormal = 2 * normal - 1; //From [0,1] to [-1,1]normal = g_normalMap.Sample(samplerTex, pin.tex).rgb;//Get normal from the normal mapnormal = 2 * normal - 1;//From [0,1] to [-1,1]3. 切线空间到世界空间通过Sample函数,我们得到了任意像素上对应的法线值,下一步就可以利用这个法线来进行光照计算了。但实际上,这时得到的法线是不能直接用于光照计算的,而需要先进行相应的空间变换。这就是上一节中提到的“切线空间”的用途了。在上面提到的法线贴图中,里面所存放的法线值正是位于切线空间内,而场景中所提供的光源位于世界空间。要想进行正确的光照计算,需要把光源和法线转换到同一个空间中进行,要么统一位于切线空间,要么统一位于世界空间。(这里我们统一在世界空间进行光照计算)关于在切线空间定义法线的目的,在这里我再进行一下补充。如果对切线空间还不是很理解,按我的经验,可以这样来理解,即把切线空间类比为3D世界中的局部空间。之所
您可能关注的文档
- 《Linux网络服务》设计书.doc
- 《EDA技术》实验书.doc
- 《PHOTOSHOP图像处理》标准张艳.doc
- 《PHOTOSHOP图像处理》标准电视专业.doc
- 《Photoshop》标准《AUTOCAD》标准.doc
- 《photoshop后期修图》标准.doc
- 《MATLAB语言与滤波器设计》实验书.doc
- 《Ps》设计说明书及要求.doc
- 《ERP原理与应用专科必修》月期末试题及答案.doc
- 《VisualFoxpro》综合复习.doc
- 【兔惊喜】Java语言程序设计实验七第七章文件与数据流二.doc
- 【兔惊喜】Java语言程序设计实验九第八章Swing图形用户界面程序设计实验任务三.doc
- 【兔惊喜】Java语言程序设计实验六第七章文件与数据流一.doc
- 【兔惊喜】Java语言程序设计实验八第八章Swing图形用户界面程序设计实验任务一.doc
- 【兔惊喜】Java语言程序设计实验十第八章Swing图形用户界面程序设计实验任务四.doc
- 【分享】预算员必看如何算工程量.doc
- 【创新设计】届高考总复习鲁科版配套规范限时训练:课时海水中的元素.doc
- 【创新设计】届高考历史三轮考前体系全通关高考题型特色专练题型十主题型材料解析题.doc
- 【创新设计】高中数学第二章概率章末质量评估北师大版选修.doc
- 【ERP复习】第一部分ERP理论及形成.doc
最近下载
- 食堂用餐协议书范本(2025版).docx VIP
- 中建八局《质量标准化系列做法(主体结构工程)》2022年.pptx VIP
- TD_T 1021-2009县级土地利用总体规划制图规范.pdf VIP
- 粤人版英语五年级下册Review1 Reading and writing 课件.pptx VIP
- 离散数学崔艳荣习题答案.docx VIP
- 人教版八年级体育与健康:学会与他人交往 (2).pptx VIP
- 《水力发电》课件.pptx VIP
- 企业工会助推企业高质量发展.docx VIP
- GB50974-2014 消防给水及消火栓系统技术规范.pdf VIP
- 新风系统入门培训资料.ppt VIP
文档评论(0)