当前位置: 首页 > 编程日记 > 正文

Tessellation (曲面细分) Displacement Mapping (贴图置换)

DirectX 11 Tessellation (曲面细分)—什么是 Tessellation (曲面细分) ?

它为什么可以起到如此关键的数据?

随着近期人们对 DirectX 11 的议论纷纷,你可能已经听说了有关 DirectX 11 最大新特性 Tessellation (曲面细分) 的大量介绍。作为一个概念。 Tessellation (曲面细分) 非常直截了当,就是处理一个多边形分成诸多小碎片。

可是为什么这种处理方式可以备受瞩目呢?

它是怎样帮助提升游戏画质的呢?本文中,我们将分析 Tessellation (曲面细分) 之所以可以为 PC 3D 图形带来深刻变革的原因,并阐释一下 NVIDIA® GeForce® GTX 400 系列 GPU 怎样提供突破性的 Tessellation (曲面细分) 性能。

从本质上来讲, Tessellation (曲面细分) 是一种将多边形分解成更加细小的碎片以提升几何逼真度的方法。

比如,假设处理一个正方形并将其沿对角线切开,那么实际上就是将这一正方形“曲面细分”成为两个三角形。就其本身而言, Tessellation (曲面细分) 并不能提升半点逼真度。

比如,在游戏中。一个正方形被渲染成为两个三角形还是两千个三角形都是无关紧要的。

仅仅有在使用新三角形来描写叙述新信息时, Tessellation (曲面细分) 才干提升逼真度。

Triangle MappingDisplacement Mapping
当一个置换贴图 (左) 应用到平面上时,所生成的表面 (右) 就会表现出置换贴图中所编码的高度信息。

运用新三角形最简单、最流行的方式就是有“ Displacement Mapping (贴图置换) ”之称的技术。置换的贴图就是一个存储高度信息的纹理。当应用到某一表面上时,该贴图让这一表面的顶点可以依据高度信息调高或调低。 比如,使用一块大理石板,图形艺术家可以通过“置换”顶点的方法打造雕刻效果。还有一种流行技术是将置换的贴图应用到地形上,以雕琢出弹坑、峡谷以及山峰。

正如 Tessellation (曲面细分) 一样。 Displacement Mapping (贴图置换) 已经存在非常长一段时间了。可是直到近期,它才真正流行起来。

究其原因,是由于想要让 Displacement Mapping (贴图置换) 有效。表面必须由大量顶点构成才行。以大理石雕刻为例。假设大理石块由八个顶点构成。那么在它们之间便没有可以生成龙形浮雕的相对置换量了。仅仅有在基础网格中具备足够多的顶点用以描绘新形状时才可以生成仔细的浮雕。

从本质上来讲, Displacement Mapping (贴图置换) 须要 Tessellation (曲面细分) 。反之亦然。

随着 DirectX 11 的问世。 Tessellation (曲面细分) 与 Displacement Mapping (贴图置换) 最终实现了珠联璧合。广大开发商已经增加到这一阵营其中。

像《Alien vs. Predator》以及《地铁2033》这种流行游戏均採用了 Tessellation (曲面细分) 来生成外观平滑的模型,而开发商Valve公司与 id Software 已经完毕了一些前景看好的工作,将这些技术应用到其现有的游戏人物身上。

Coarse Model
当一个粗糙的模型 (左) 经过 Tessellation (曲面细分) 处理后,就会生成平滑的模型 (中间)。当应用了贴图置换之后 (右)。游戏人物便接近电影般的逼真度了。 © Kenneth Scott、id Software版权全部。2008

由于DirectX 11 Tessellation (曲面细分) 流水线是可编程的。因此可以用它来解决大量图形问题。让我们来看一看四个实例。

完美凹凸贴图

Model Comparision

从本质上来讲,Displacement Mapping (贴图置换) 可被用作现有凹凸贴图技术的暂时替代技术。比如法线贴图等当前的技术通过更佳的像素渲染,可以创造出凹凸表面的假象。全部这些技术都仅仅在特定情况下有效,而且在其起效时并非全都那么逼真。以下以凹凸贴图中较为先进的视差遮蔽贴图为例进行说明。

尽管它可以生成重叠的几何假象,可是它仅仅能在平面上以及物体内部起作用 (见上图)。真正的 Displacement Mapping (贴图置换) 不存在这些问题,可以从全部视角生成精确的结果。

更加平滑的人物

Smoothing Character
无需艺术家手工输入,PN-Triangles 可实现游戏人物的自己主动平滑。几何与光照逼真度均可以得到提升。

细化算法是 Tessellation (曲面细分) 的还有一个自然搭档。细化算法可处理粗糙模型,借助于 Tessellation (曲面细分) 。该算法可创建外观更加平滑的模型。PN-Triangles (也称作N-patches) 就是一个流行的实例。PN-Triangles算法可以将低分辨率模型转化为弯曲表面,该表面然后可以被又一次绘制成由“高精曲面细分”的三角形所组成的网格。在当今游戏中,我们觉得理所当然的大量视觉假象都可以借助此类算法来消除。这些视觉假象包含人物关节处呈现块状图案、汽车轮子呈多边形外观以及面部特征粗糙。比如,《Stalker: Call of Pripyat》中就使用了 PN-Triangles 来生成外表更平滑、更自然的人物。

无缝的精细度

在具有大型、开放式环境的游戏其中。用户可能会注意到,远处的物体常常会时而出现、时而消失无。这是由于游戏引擎正在不同精细度 (LOD) 之间进行切换,以限制几何工作负荷。由于须要为同一模型或环境保存多个版本号的数据。所以直到那个时候,都还没有一种简单的方法可以连续改变精细度。

动态 Tessellation (曲面细分) 通过即时改变精细度。攻克了这一问题。比如。当远处的建筑物首次映入眼帘时,或许仅使用10个三角形来渲染它。随着用户视野的拉近,该建筑物的显著特征開始浮现,很多其它三角形则被用来描绘窗子和屋顶等细节。当你最终到达门口时,单单旧式铜质门把手一项就动用了一千个三角形来进行渲染;Displacement Mapping (贴图置换) 仔细地雕刻出了每一道凹槽。

由于消除了动态 Tessellation (曲面细分) 对象的时隐时现。因此游戏环境如今可以扩展至差点儿无限的几何精细度。

收放自如的艺术品

对开发商来说, Tessellation (曲面细分) 大幅提升了其内容创作流水线的效率。

在描写叙述其使用 Tessellation (曲面细分) 的动机时。Valve 公司的 Jason Mitchell 表示:“我们对可以编辑游戏内容这一点非常感兴趣,由于这样就让我们可以实现缩放了。

也就是说。我们想要仅仅制作一次模型,然后便可以将其提升至电影画质…反之。我们想要可以自然地减少游戏内容的画质,以满足在特定系统上实现实时渲染的须要。

”这种仅创建一次模型便可在各种平台上使用的能力意味着缩短了开发时间。对PC游戏玩家来说,这意味着在其GPU上可以实现最高的图像画质。

GeForce® GTX 400 GPU(图形处理器)怎样处理 Tessellation (曲面细分)

传统的GPU(图形处理器)设计採用单个几何引擎来运行 Tessellation (曲面细分) 任务。这个方案是相似早期的GPU设计,此类设计均使用利用单个像素流水线来运行像素着色。

在认识到像素流水线是怎样从一个单元发展为多个并行单元以及这一进展是怎样在3D逼真度方面大放异彩之后,我们便从一開始就设计了自己的并行 Tessellation (曲面细分) 架构。

GeForce® GTX 400 GPU (图形处理器) 拥有最多15个 Tessellation (曲面细分) 单元,每个单元都具备针对顶点拾取、 Tessellation (曲面细分) 以及坐标变换的专用硬件。

它们利用4个并行光栅引擎来进行运算,这些引擎可将新近曲面细分的三角形转换成精细像素流以便用于着色。这样一来, Tessellation (曲面细分) 的性能便实现了巨大突破。持久性能达每秒16亿三角形以上。与最快的同类产品相比,GeForce® GTX 480 的速度最高可达7.8倍。

这一数据由独立站点Bjorn3D所測得。

结语

经过多年的重复试验, Tessellation (曲面细分) 最终在PC上获得了成功。

《地铁 2033》等优秀游戏已经展现了 Tessellation (曲面细分) 的潜力。最终, Tessellation (曲面细分) 将成为同像素着色一样关键、一样不可缺少的技术。

由于意识到了 Tessellation (曲面细分) 的重要性。NVIDIA® 公司从一開始便打造并行 Tessellation (曲面细分) 架构,推动这一进程。

成果就是 GeForce® GTX 400 系列 GPU (图形处理器)—几何逼真度与 Tessellation (曲面细分) 性能的真正突破。

转载于:https://www.cnblogs.com/gcczhongduan/p/5271230.html

相关文章:

java 第12课

/*Java是面向对象的程序设计语言.面向对象的思想是将客观事物都作为实体,而对象通过实体抽象得到.所谓实体抽象,就是对实体的某些特征进行概括,使其数字化、符号化;比如:李四同学,就是一个实体,我们关心他的这些特征:姓名、性别、年龄、身高、体重等特征,就会有李四、男、21、1…

鸽巢原理(The Pigeonhole Principle)(抽屉原理)

简单形式&#xff1a;若n1个物体放进n个盒子&#xff0c;那么至少有一个盒子包含两个或更多的物体。 应用&#xff1a;给定m个整数A1,A2,...,Am,存在整数k和l&#xff0c; 0 < k < l < m,使得Ak1 Ak2 &#xff0b; ... Al能够被m整除。即在A1&#xff0c;A2&…

oracle10g删除asm组,Oracle 10G RAC 删除已有节点

如果现在在RAC集群中有三个节点c1、c2、c3&#xff1a;如果想要卸载c3节点。1、在c1或者c2上删除c3实例运行dbca然后选择Oracle Real Application Clusters database选择Instance Management选择Delete an instance选择实例&#xff0c;填写用户名密码&#xff0c;Next选择c3: …

嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化

一.内存管理基本知识 1.S3C2440最多会用到两级页表&#xff1a;以段的方式进行转换时只用到一级页表&#xff0c;以页的方式进行转换时用到两级页表。页的大小有三种&#xff1a;大页&#xff08;64KB&#xff09;&#xff0c;小页&#xff08;4KB&#xff09;&#xff0c;极小…

C# 最快的逐一打印斐波那契结果数列的算法

用这种方法就无需将数列中的每一个元素都计算一遍了&#xff01; 说多无谓&#xff0c;直接上代码吧&#xff01; private void button5_Click(object sender, EventArgs e) { FiBoNaQi f new FiBoNaQi(); f.numberToCount (Int16)numericUpDown1.Value; f.DoFiB…

WSS 代码执行的权限提升

WSS 代码执行的权限提升 概述: WSS 默认使用身份模拟执行代码&#xff0c;也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问。在大多数情况下&#xff0c;这种机制能够准确并严格地控制了标准权限的用户他对特定网站资源和敏感数据的访问&#xff0c;这也…

Oracle数据库联邦,使用联邦数据库将oracle表迁移到DB2(9.7)中的脚本说明

由于兄弟项目组要测试&#xff0c;需要将oracle中的表迁移到db2中&#xff0c;操作步骤如下&#xff1a;#1 在windows数据库中建联邦数据库服务器\用户映射connect to sampleCREATE WRAPPER DRDA LIBRARY db2drda.dll;--创建DB2包装器CREATE WRAPPER NET8 LIBRARY db2net8.dll;…

HDU 5047 Sawtooth 高精度

题意&#xff1a; 给出一个\(n(0 \leq n \leq 10^{12})\)&#xff0c;问\(n\)个\(M\)形的折线最多可以把平面分成几部分。 分析&#xff1a; 很容易猜出来这种公式一定的关于\(n\)的一个二次多项式。 不妨设\(f(n)an^2bnc\)。 结合样例我们可以列出\(3\)个方程&#xff1a;\(f(…

poj1129Channel Allocation

http://poj.org/problem?id1129 四色定理 最多有四色 从1到四搜 View Code 1 #include <iostream>2 #include<cstdio>3 #include<cstring>4 #include<stdlib.h>5 using namespace std;6 int n,w[100][100],co[100],mi,flag;7 void dfs(int x,int v)…

WCF 第二章 契约

在原子和金钱世界中&#xff0c;契约是两个或多个组织以一个已知的价格提供商品和服务的合同。在比特和服务的世界中&#xff0c;契约有类似的功能:它是两个或多个组织之间确定消息交换和消息条款及条件的合同。 契约是由服务终结点发送或接收的消息的描述。每一个终结点都由AB…

织梦 新建 php arclist,织梦arclist按照自定义字段来调用相关文章

织梦arclist按照自定义字段来调用相关文章&#xff0c;这对于想要在首页调用某个自定义字段的文章的同学来讲&#xff0c;非常不错&#xff0c;接下来看教程打开 include aglibrclist.lib.php 找到&#xff1a;//时间限制(用于调用最近热门文章、热门评论之类)&#xff0c;这里…

提高php编程效率的小结

1.如果将类的方法定义为&#xff1a;static,它的执行效率将提升为近4倍 2.php中数组的元素调用&#xff0c;使用关联数组优于索引数组 3.使用each快于print. 4.尽量使用foreach()替代for(). 5.销毁那些不用的变量尤其是大数组&#xff0c;如&#xff1a;unset().以便释放内存 6…

摄像机的几个重要的技术指标

(1)清晰度 清晰度是一个摄像机的最重要指标&#xff0c;在监控系统中对图像的清晰度有很高的要求&#xff0c;如在交通监控中,对车辆要能看清车牌号码&#xff0c;对行人要能看清脸部特征&#xff0c;如果这些都看不清楚&#xff0c;那么监控将失去意义。线数的多少决定着清晰度…

Docker容器入门-基本命令的使用

目前容器技术使用相当广泛 不会或者没有使用过容器感觉都不像是个搞技术的 所以&#xff0c;我也就docker相关内容做一个整理 只有不断的学习&#xff0c;才能保持自己的竞争力 什么是容器&#xff1f; 容器是一种轻量级、可移植、自包含的软件打包技术&#xff0c;使应用程序可…

卸载linux系统装win,如何在计算机上删除 Linux 并安装 Windows

多个 IDE 驱动器Device Boot Start End Blocks Id System/dev/hda1 * 1 500 4016218 83 Linux native (IDE hard drive 1, partition 1)/dev/hda2 501 522 176715 82 Linux swap (IDE hard drive 1, partition 2)/dev/hdb1 1 500 4016218 83 Linux native (IDE hard drive 2, p…

卡尔曼滤波— Constant Velocity Model

假设你开车进入隧道&#xff0c;GPS信号丢失&#xff0c;现在我们要确定汽车在隧道内的位置。汽车的绝对速度可以通过车轮转速计算得到&#xff0c;汽车朝向可以通过yaw rate sensor(A yaw-rate sensor is a gyroscopic device that measures a vehicle’s angular velocity ar…

优化实战:不要随便将字段折腾来折腾去的

到新公司先看了看数据库的性能&#xff0c;查看一个存储占用的CPU巨多&#xff0c;而且执行次数也特别多&#xff0c;打开一看&#xff1a;alterPROCEDURE[dbo].[IPLogInsert]IPchar(15) 255.255.255.255ASBEGINSETNOCOUNT ON; declarecurrIdintdeclaretodaydatetime--SET cur…

SQL SERVER 架构管理

架构特点&#xff1a; 架构是数据库级的安全对象&#xff0c;是数据库中表、视图、存储过程等对象的容器&#xff0c;是形成单个命名空间的数据库实体的集合&#xff0c;一个架构只能有一个拥有者。 将所有权与架构分离的意义&#xff1a; ①架构所有权和架构范围内的安全对象可…

linux 端口 流量统计,Linux下如何对端口流量进行统计

在不修改源代码的情况下对程序暴露端口流量进行监控统计&#xff0c;可以利用Linux中自带的Iptable添加简单的规则让其起到端口流量统计的作用。但是需要注意的是在服务器重启、Iptable服务重启的时候统计数据会被重置清零。添加需要统计的端口1、输入监控下面示例是监控目标端…

如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)

前言 iOS9系统下 为了我司APP的兼容性问题 特意把手上的iOS Mac XCode都升级到了最新的beta版 然后发现iOS9的多任务管理器风格大变 变成了下面这种样子 我忽然想起来之前的文章提到我最爱的UI控件iCarousel要实现类似这种效果其实是很简单的 一时兴起就花时间试验了一下 效果还…

linux并发控制之自旋锁

自旋锁是一种对临界资源进行互斥访问的典型手段&#xff0c;其名来源于它的工作方式。通俗的讲&#xff0c;自旋锁就是一个变量&#xff0c;该变量把一个临界区标记为“我当前在运行&#xff0c;请等待”或者标记为“我当前不在运行&#xff0c;可以被使用”&#xff0c; 如果A…

半透明遮罩层覆盖整个可视区域

我们经常会遇到点击一个按钮弹出一个对话框和一个变暗的遮罩层&#xff0c;简单的写法只能让遮罩层覆盖浏览器的大小&#xff0c;那么怎么让遮罩层覆盖全部区域呢&#xff1f; css代码如下&#xff1a; 1 html,body {2 height: 100%;3 margin: 0;4 padding: 0;5 }6…

观察内核linux行为,Linux 学习:基于proc观察Linux行为

内容简介本篇博文的主要内容是通过/proc文件&#xff0c;对Linux系统管理有一个初步的认识。在Linux中&#xff0c;proc文件系统提供了一套在用户态检查内核状态和系统特征的机制。proc文件系统将进程的地址空间、系统的硬件信息、系统相关机制(中断、I/O)等内容全部设置为虚拟…

对数据库表中的某一字段去重分组排序

1、问题背景 某数据库t_tab_ab中有两个字段a和b&#xff0c;例如以下所看到的&#xff1a; 查询前&#xff1a; 查询后&#xff1a; a b a b 1 2 1 2 1 3 2 3 1 4 …

设置应用图标badge(徽章)

// 图标右上角的数字[UIApplication sharedApplication].applicationIconBadgeNumber msgCount result.status result.follower; 转载于:https://www.cnblogs.com/pretty-guy/articles/4106529.html

hdu - 1087 - Super Jumping! Jumping! Jumping!

题意&#xff1a;求最大升序和。 题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1087 ——>>设d[i]表示以第i个数为终点的最大升序和&#xff0c;然后从第1个数到第i-1个数为终点的最大升序和进行检查&#xff0c;向后递推即可。 #include <iostrea…

linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制

导读在学习tensorflow的过程中&#xff0c;有很多小伙伴反映读取数据这一块很难理解。确实这一块官方的教程比较简略&#xff0c;网上也找不到什么合适的学习材料。今天这篇文章就以图片的形式&#xff0c;用最简单的语言&#xff0c;为大家详细解释一下tensorflow的数据读取机…

安卓真机测试安装时报错

在将程序发布到手机上时提示该错误&#xff1a; INSTALL_FAILED_INSUFFICIENT_STORAGE 手机内存满了...删除程序... 就可以安装了转载于:https://www.cnblogs.com/H-K-Home/p/5279819.html

C#学习笔记——捕获当前屏幕

编程思路&#xff08;API 编程&#xff09;&#xff1a; 先调用 GetForegroundWindow 获取当前活动程序窗口句柄&#xff0c;然后调用 GetWindowDC 获取窗口的设备句柄&#xff08;或 GetDC 函数&#xff09;&#xff0c;调用 BitBlt 位图传输函数将位图拷贝到兼容的设备场景中…

Exception loading sessions from persistent storage

严重: Exception loading sessions from persistent storage java.io.EOFException 删除Tomcat里面的work/Catalina/localhost下的内容即可解决 Tomcat在启动时出现如下异常问题&#xff1a; 严重: IOException while loading persisted sessions: java.io.EOFException严重: E…