http://www.cnblogs.com/taotaobujue/articles/2781371.html

视差映射贴图(Parallax Mapping)

● 传统纹理贴图的弊端

纹理贴图大家都明白,就是往建好的3D模型上“贴”一些二维的画面,让人物显得更真实一些,比如常见的砖墙、凹凸不平的地面等,这些如果全部用三角形来实现的话,那么模型就会非常复杂,GPU将会不堪重负,但如果用“一张已经画好砖纹的纸”贴上去的话,那么渲染起来就会轻松好多。

但是这么做也有很大的缺点,贴图毕竟是2D的,如果在游戏中换个角度看的话,很容易就会发现墙面没有任何立体感,砖纹看上去非常假!为了让2D贴图看上去也有3D立体效果,就诞生了多种贴图技术,比如凹凸贴图、法线贴图、位移贴图、视察映射贴图等。

● 凹凸贴图

凹凸贴图技术简单说起来是一种在3D场景中模拟粗糙表面的技术,将带有深度变化的凹凸材质贴图赋予3D物体,经过光线渲染处理后,这个物体的表面就会呈现出凹凸不平的感觉,而无需改变物体的几何结构或增加额外的点面。例如,把一张碎石的贴图赋予一个平面,经过处理后这个平面就会变成一片铺满碎石、高低不平的荒原。当然,使用凹凸贴图产生的凹凸效果其光影的方向角度是不会改变的,而且不可能产生物理上的起伏效果。


凹凸贴图的墙壁效果,注意看边缘其实没有任何凹槽

凹凸贴图在今天看来已经是老的不能再老的一种技术了,虽然能够获得凹凸的效果,但是凹凸的程度非常受限制,基本上只能做出一些简单的浮雕效果来。这种技术通常用在一些观察视角变化很小的情况上,例如地面,墙壁,远处的一些模型等等,如果角度稍微一大,你就会发现那些凹坑其实是根本不存在的。

● 法线贴图

法线贴图就是把一个表面的凹凸情况用每个点的法线向量记录下来,在贴图的时候根据法线贴图做光影的变换,从而实现凹凸效果。

法线贴图比起凹凸贴图而言,能够实现的效果更好了,相对的就是运算量更大了,需要大量的纹理材质,每个象素的光照情况都需要计算这个点的法线向量和光照情况的夹角计算该点的亮度和颜色。为了节约GPU资源,ATI曾开发了3DC+纹理压缩技术,这对于法线贴图有莫大的帮助。

当然,法线贴图技术同样不是完美的,它也有着自己的不足,凹凸贴图没有能够解决的切向效果问题肯定是仍然不能够得到解决。此外,就是法线贴图技术不能够解决解决更大的凹凸情况的效果。大家如果去观察的话,法线贴图效果能实现的通常是一些内凹或者外凸不是很严重的表面效果。

● 视差映射贴图

为了解决法线贴图在处理较深内凹之时不能够达到的弊端,诞生了新的视差映射贴图技术。该技术其实称之为视差遮蔽贴图似乎更容易理解一些,因为它会对纹理的坐标做变换,一些凸出的纹理会遮蔽到其他的纹理,这样就会看起来具备更好的凹凸的感觉了。


ATI X1000 Demo中就包含了视察映射技术

正如我们在上图看到的情况一样,地面上的石块的凹凸感觉非常好,前面的石块已经对后面的石块进行了局部的遮蔽。虽然这个Demo中的砖块依然很假,但砖块之间凹凸的效果已经得到了完美体现,非常遗憾的是,没有任何一款DX9游戏使用过这种视差贴图技术。

● 直到DX10时代才大量使用视差映射贴图技术

视差贴图技术的实现原理,其实和法线贴图是一样的,都是根据法线贴图进行的处理,所以我们可以把它当作是法线贴图的一种衍生技术。视差贴图技术的实现是和硬件没有必然联系的,这个技术概念的诞生其实也非常早,只是未能得到大量使用,这是因为视差贴图技术的运算量要比法线贴图大了不少,原来的显示芯片因为性能有限基本都运行不了。


狂野西部DX10版本首次使用了视差映射贴图


《孤岛危机》中的石块和地面都使用了视察映射贴图

最早使用视差映射贴图技术的游戏叫做《狂野西部》,首批DX10游戏之一,DX9版本不支持。由于DX10显卡都采用了统一渲染架构,可以方便的集中利用Shader资源,来渲染出复杂的特效。再加上有全新的几何着色器辅助,因此特效的运用方面可以更加灵活,游戏开发商可以很容易的自定义一些特效渲染方式,所以将先进的技术都安置在DX10模式之中也是无可厚非。

转自:http://hi.baidu.com/moogle85/item/1677af72e0881143ef1e53b6

3D游戏图形技术解析(7)——视差映射贴图(Parallax Mapping)【转】的更多相关文章

  1. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)

    在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...

  2. 介绍用C#和VS2015开发基于Unity架构的2D、3D游戏的技术

    [Unity]13.3 Realtime GI示例 摘要: 分类:Unity.C#.VS2015 创建日期:2016-04-19 一.简介 使用简单示例而不是使用实际示例的好处是能让你快速理解光照贴图 ...

  3. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  4. 【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)

    Lighting和Shading(2)镜面反射的控制和模拟次级表面散射技术 http://www.4gamer.net/games/216/G021678/20140703095/index_2.ht ...

  5. [转]显卡帝揭秘3D游戏画质特效

    显卡帝揭秘3D游戏画质特效 近几年来,大量采用最新技术制作的大型3D游戏让大部分玩家都享受到了前所未有的游戏画质体验,同时在显卡硬件方面的技术革新也日新月异.对于经常玩游戏的玩家来说,可能对游戏画质提 ...

  6. Android 3D游戏开发

    OpenGL ES(OpenGL Embedded System) Android 3D游戏开发技术宝典:OpenGL ES 2.0(android 3d游戏开发技术宝典 -opengl es 2.0 ...

  7. 3D游戏常用技巧Normal Mapping (法线贴图)原理解析——高级篇

    1.概述 上一篇博客,3D游戏常用技巧Normal Mapping (法线贴图)原理解析——基础篇,讲了法线贴图的基本概念和使用方法.而法线贴图和一般的纹理贴图一样,都需要进行压缩,也需要生成mipm ...

  8. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  9. OpenGL核心之视差映射

    笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑.畅销书作者;已出版书籍:<手把手教你¯的纹理坐标偏移T3来对fragment的纹理坐标进行位移.你能够看到随着深度 ...

随机推荐

  1. layui文件单文件和多文件的上传、预览以及删除和修改

    活不多说,直接上代码 单文件上传 1.HTML <blockquote class="layui-elem-quote layui-quote-nm" style=" ...

  2. redis之(十二)redis数据的持久化

    [一]redis的数据为什么要持久化 --->redis的存取数据性能高,是由于将所有数据都存储在内存中.当redis重启的时候,存储在内存中的数据就容易丢失. --->把redis作为数 ...

  3. CentOS7.5删除旧的内核

    [root@localhost ~]# uname -r3.10.0-862.3.2.el7.x86_64 [root@localhost ~]# rpm -qa | grep kernelkerne ...

  4. PHP7 微信支付回调失败 解决

    升级完PHP7 发现微信支付回调失败.原来是 $GLOBALS['HTTP_RAW_POST_DATA'];没有定义的问题.php7 移除了这个全局变量. 问题代码如下: 微信API :WxPay.A ...

  5. react native 调用Android原生方法

    来源:https://www.youtube.com/watch?v=WmJpHHmOKM8 教程:https://www.youtube.com/watch?v=GiUo88TGebs Breaki ...

  6. windows 10 的开始菜单里面图标右击弹不出选项菜单了

    组策略的问题 win + r => gpedit.msc 计算机配置->管理模板>“开始”菜单和任务栏>在“开始”菜单中禁用上下文菜单  改为“已禁用”

  7. pytho中pickle、json模块

    pickle & json 模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四 ...

  8. 转:攻击JavaWeb应用[7]-Server篇[1]

    转:http://static.hx99.net/static/drops/tips-604.html 攻击JavaWeb应用[7]-Server篇[1] 园长 · 2013/09/22 15:39 ...

  9. 【C语言期末实训】学生学籍管理系统

    目录: 一,设计要求 ,总体要求: ,具体功能: 二,设计框架 三,程序代码 ,声明函数和头文件 ,声明结构体 ,声明全局变量 ,主体启动函数 ,主菜单函数 ,创建学生档案函数 ,编辑学生档案函数 , ...

  10. 【剑指offer】9、斐波拉契数列

    面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long ...