GameDesign 板


LINE

粉丝团文章连结: https://www.facebook.com/life.is.kuso.game/posts/278181642573356 这个做法是看完GPU Pro7这本书的心得,在此要先感谢作者Anton Kai Michels跟Peter Sikachev。 这次要介绍的是古墓奇兵:崛起(Rise of the Tomb Raider)中的雪地 做法,有玩这游戏的人可能会注意到,雪景做得还不错。这系列的文章 将分成上、中、下三篇,上篇会先讲解如何做出脚踏下的深度,中篇则 会介绍周围隆起的雪堆计算方式,来让场景显得更真实,下篇则会说明 雪地的脚印痕迹如何随时间恢复。 用於古墓奇兵的雪地做法,是一种被称为延迟变形(deferred deformation) 的新技术,地形变形在实时渲染中,一直是个已知的未解决问题,以往 的解法呈现的细节不够让人觉得真实。而延迟变形则提供了一个有扩充 性、低记忆体、又可精细到公分等级的解决方案,并且在任何地形都能 呈现任意数量的变形,其细节不只能呈现走过的凹陷,甚至能呈现边缘 被影响所造成的隆起,以及根据条件决定是否慢慢回填凹陷。 提到雪景, 蝙蝠侠:阿卡汉始源(Batman: Arkham Origins)的效果其 实很不错(注一),不过其雪景只发生在平面的地形,在此就不详谈,由 於GPU在DirectX 11中的硬体支援,这种技术基本上利用渲染流程中去 处理,因此能做出非常准确的变形,可是却无法用在任意地形上,且只 会有凹陷而不会有边缘的隆起。 (https://cdn-images-1.medium.com/max/1200/1*w539g2-wHVmSLvc-hd4K2Q.png
在解说技术之前,需要先说明会用到的一些名词,列举如下: 雪地高度(snow height):  要变形的雪地的垂直座标(通常为vertex.z) 变形点(deformation points):  会造成变形的物件的3D座标位置 脚高度(foot height):  变形点的垂直座标(通常为point.z) 拖曳凹陷(trail depression):  拖曳痕迹的一部分,为雪地高度下踩下的部分 拖曳隆起(trail elevation):  沿着拖曳痕迹产生的小凸起,当推开雪时应该自然产生的效果 变形高度映射(deformation heightmap):  一张用来储存变形的贴图,32bit,1024*1024 凹陷深度(depression depth):  (雪地高地-脚高度)的绝对值 变形着色器(deformation shader):  将变形输出到变形高度映射的着色器 填充着色器(fill shader):  用来计算在暴风雪中回填拖曳痕迹的着色器 雪地着色器(snow shader):  用於变形的雪的材质的着色器 想像一下原本的地形网格上,有一层雪的网格(mesh),然後有不定数 量的动态物件造成雪地变形,而要渲染雪的变形时,我们必须先得知 动态物件、雪跟地形之间的高度关系,所以必须先利用从正上方俯视 的方式,将这两层网格分别渲染到两个高度映射来得知高度,然後再 将动态物件渲染到一个变形高度映射,取得其在雪跟地形之间的逼近 值(clamp),当渲染雪的变形的时後,再从做好的变形高度映射取样, 来取代雪原本的顶点与法线(normal)。 (作法的思路) (https://cdn-images-1.medium.com/max/1200/1*tal2N7TYFrmzW-X6r7XonQ.png
而这个简单的做法有两个缺点,一是必须先从鸟勘视角渲染一次来做 出两张高度映射,二是每个动态物件需要一个绘图指令(draw call), 解决的方式就是接下来要介绍的延迟变形。 延迟变形的思路,第一个就是不用先做一次雪网格的高度映射,而是 在雪的渲染流程中,去取用雪网格的顶点位置即是其高度,第二个是 变形的逼近值在被取样时才计算,而非渲染时。所以精确的变形计算 是在渲染雪的时後,才称之为延迟变形。重点是要将雪的高度从雪的 顶点着色器(vertex shader),传到雪的像素着色器(pixel shader), 以计算每个像素的法线。其演算法如下: (延迟变形演算法概要) (https://cdn-images-1.medium.com/max/1200/1*M_xzTuHTQsm_BikvLawAqw.png
延迟变形演算法中的一个重点就是:把变形当成一个二次曲线(quadratic curve)。藉由近似动态物件形状的点,去计算其变形高度。算法如下:  变形高度 = 点高度+ (到点的距离)平方 × 美术缩放值 这些变形点会被放到一个全域缓冲(buffer),而每个变形着色器则会 被分配到变形点周围32像素平方的区域(1.64 m平方),然後利用原子 级同步最小值(atomic minimum)计算,输出受影响的像素的变形高度 。由於可能有不同的动态物件去影响到同一个高度映射中的像素,所 以原子级同步取最小值是必须的。因为在DirectX 11中能够做这种运 算的只有unordered access view(UAV),其形态是32-bit integer, 因此变形高度映射的型态也必须是R32_UINT。 注一:如果对蝙蝠侠的做法有兴趣,可以参考GDC的资料 (http://www.gdcvault.com/play/1020177/Deformable-Snow-Rendering-in-Batman) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.86.176
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1468941917.A.3D8.html
1F:推 hinenak: 07/20 00:03
2F:推 riveranb: 推,好文 07/20 08:23
3F:推 wangm4a1: 推 07/25 03:01







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP