《Gpu Gems》《Gpu Pro》《Gpu Zen》系列读书笔记

前言

最近赶上春节放假,然而家里的电脑不太给力,不敢玩什么大游戏,刚好看到《This War of Mine》打折,其实游戏大概在16年左右就玩过一次了,不过当时还是个穷学生(虽然现在依然穷,但是毕竟可以买得起游戏了),也没有很强的版权意识,这次决定补一下票。另一个很重要的原因在于经过几年时间,游戏竟然还在不断更新,新增了战争中的孩子等内容,并且更新了两个DLC。

游戏主要是在战争中的人在一个简单的避难所中如何生存到战争结束,白天需要在避难所中建造,做饭,取水,加固避难所,与商人交易等等,夜晚时则需要到外面的废墟中搜索材料,食物,武器等。

在玩基本篇时,基本没有任何剧情,但是当你为了生存下去,不得不去偷,抢一个废弃小房子中的老人的私人物品时,他追着你不停地祈求,即使知道他只是一个NPC。作为一个画面党,这个画面不怎么样的横版游戏当年给了我极其深刻的印象。而几年后这次重玩,我也差点玩脱,开始的几个人都在找东西的过程中被打死,最后只剩下一个人的时候,邻居把小孩子寄养在这里,靠着一个大人一个小孩艰难地玩到通关。

此次DLC也是非常给力,讲述了两个非常感人的战争中的生存故事,分别是《最后的广播》和《父亲的承诺》。

简介

本篇blog简单记录了一下最近一两年一直在读的一系列书目。《Gpu Gems》1-3三部,《Gpu Pro》1-7七部,《Gpu Zen》一部。《Gpu Gems》三部是有中文版,而后面的几部都是英文原版。每一本中内容都是纷繁复杂,直接看其中的任何一本书可以说跳跃幅度极大,因为每一篇之间几乎没有联系。这一系列的总结浅墨大大已经在做了,给出了非常详细的单本书的关键内容提炼,从这个角度来看这一系列的书,个人认为是横向来说,每一部书都代表了当年最先进的图形学以及GPU相关的技术,可以看到当年GPU的能力,以及当年的渲染技术可以达到什么样的水平。

小弟不才,决定使用纵向的方式,针对每一项渲染技术,进行全系列书的总结,从这个角度来看,可以看到一项技术,近十五六年来的进化过程。比如阴影效果,在《Gpu Gems》的年代,还有使用Shadow Volume的方式进行阴影的渲染,而在《Gpu Pro》系列开始,Shadow Map成为了绝对的主流,阴影技术的研究方向也转向了如何优化Shadow Map,如PCF,CSM,进而如何优化PCF,CSM,SSSM等等。

本篇只是进行了一个技术的技术的简要总结,可能一句话或一小段话,甚至几个关键词。毕竟这一系列书,想要全看懂是不可能的,这辈子都不可能的,比如流体模拟等。还有一些与渲染关系较小的内容就更是一笔带过了,比如什么GPU通用计算《病毒特征匹配》等。不过,有些技术本人进行了实践,如AO体积光DecalReflection等等,但是也不能保证覆盖单项技术的全部实现。而后续的单项技术实践本人将陆续更新。

《Gpu Gems》《Gpu Pro》《Gpu Zen》分类整理

以下是各项技术的分类整理,除Multi Topic可能包含若干章节是很多技术整合分享的,其余绝大部分章节都是单向技术的总结。

Multi Topic:

《Gpu Pro1》Rendering Techniques in Call of Juarez: Bound in Blood:Deferred Shading,后处理流程,SSAO,Depth Fog,RainEffect。

《Gpu Pro1》Making it Large, Beautiful, Fast, and Consistent: Lessons Learned Developing Just Cause 2:超多光源处理方式,Soft Shadow,Character Self Shadow,Soft Particle,Jitter Bug,精度连续等问题,Cloud Shading,若干渲染,内存优化项。

《Gpu Pro3》CryENGINE 3: Three Years of Work in Review:CE3大量经验分享。移植到多平台的优化经验,只关注最影响性能的问题,不要做重复工作,如多个后处理相同的内容,多次Clear,分帧做一部分工作,但是需要注意负载均衡。一个字就是Share。一定做好性能预算,预算是不能超的,要让项目内所有人都明白这个底线问题。需要性能检测工具以及自动化测试性能的工具(超大规模团队300人工作室)。引擎使用Deferred Lighting,可以支持多种类型材质,HDR,Linear。后续各种CE3的技术,IBL,SSAO(SSDO,Bent Normal),Shadow(CSM,透明阴影),RLR(SSR),Deferred Decal,Deferred Skin,Screen Space Self Shadow,Soft Alpha Test,Post Processing(Camera & Object Motion Blur,Bokeh Dof)。

《Gpu Pro6》Next-Generation Rendering in Thief:Cube Map,SSR,IBR等多项技术结合的反射系统构建;Contact-Hardening Shadows区域光源软阴影;支持光照的粒子效果;基于Compute Shader的Postprocessing。

 

Rendering:

《Gpu Gems1》Deferred Shading in S.T.A.L.K.E.R.:打开了延迟渲染世界的大门,利用DX9 MRT特性将着色和对象数量分离,并给出了后处理AA,多材质处理等。

《Gpu Gems3》Deferred Shading in Tabula Rasa:对上一篇更深入地探讨了延迟渲染,最著名的延迟渲染分享之一,前向与延迟并存的流水线,多光源处理,双向光照模拟GI,Light Cookie,形状光源(盒式光照),全局及局部阴影图,GBuffer处理折射,边缘检测;优化方面,精度问题,模板掩码,动态分支,带宽及内存。

《Gpu Pro1》Parallelized Light Pre-Pass Rendering with the Cell Broadband Engine:Deferred Shading带宽较高,文中使用Pre-Pass计算,利用PS3硬件的Cell Broadband Engine硬件SPE和RSX,将部分计算并行。

《Gpu Pro4》Decoupled Deferred Shading on the GPU:主要是通过memoization cach,极力压缩计算量,以降低AA的消耗,使用对应DS无法MSAA的问题。stochastic rasterization。

《Gpu Pro4》Tiled Forward Shading:对比了Forward,Deferred,Tiled Deferred的实现以及优缺点,实现了Tiled Forward Shading,先分Tiled,渲染Pre-Z Pass,每个Tiled寻找min,max Z Bounds,每个tile分配光源,Shading。可以支持半透,MSAA以及多类材质,但是又有Tiled Deferred的优点,最后扩展研究了一下Clustered Shading。

《Gpu Pro4》Forward+: A Step Toward Film-Style Shading in Real Time:AMD的技术Demo,实现Forward+ Shading,Depth Prepass,Light Culling,Final Shading。通过DX11 Compute Shader实现分Tile的light Culling。将Forward+和基于Compute Shader的Tiled Deferred Shading对比。最后扩展One Bonce GI,2.5D Culling,超大量光源阴影计算等。

《Gpu Pro5》[Mobile] Deferred Rendering Techniques on Mobile Devices:Deferred Shading:GLES3.0(带扩展的GLES2.0),深度float pack到RGBA,重建世界坐标。Pre-Pass Lighting(Deferred Lighting):存储光照信息而非GBuffer,降低带宽与内存。Light Indexed Rendering:存储光Id与影响像素的映射,相比于前两种,可以使用硬件AA。

《Gpu Pro6》Real-Time Lighting via Light Linked List:常规Deferred Lighting需要深度,因而半透一般是通过后续的Forward Lighting实现,文中通过自定义Software Depth Test,影响当前屏幕像素点的Light Link List实现对半透对象的Deferred Lighting效果。

《Gpu Pro7》Clustered Shading: Assigning Lights Using Conservative Rasterization in DirectX 12:使用Compute Shader以及DX12保守光栅化,实现优化的分簇渲染,三维空间划分光,存储到Light-Linklist中,降低光与物体映射的消耗。

《Gpu Pro7》Fine Pruned Tiled Light Lists:一种优化的Tiled Shading,与传统的不同,通过两个pass,首先计算light在全屏的AABB进行粗略判断,然后逐Tiled精确判断,可以实现不规则光源的Tiled Shading,而且利用Compute Shader生成,再利用AMD的GCN架构上,将这个计算和ShadowMap并行,降低计算时间。用于《古墓丽影·崛起》。

《Gpu Pro7》Deferred Attribute Interpolation Shading:传统GBuffer内存太高,以至于MSAA基本不敢开,文中给出了一种方法,不保存GBuffer信息,而是保存三角形信息,再通过插值进行计算,降低Deferred的内存消耗。还可以把GI等低频光照单独计算降低着色消耗。

《Gpu Pro7》[Mobile] Physically Based Deferred Shading on Mobile:移动平台实现延迟物理渲染,利用Frame Buffer Fetch整合G-Buffer,Lighting,Tonemapping,降低带宽消耗。

《Gpu Pro7》Deferred Coarse Pixel Shading:延迟渲染最后全屏着色pixel瓶颈较高,文中给出了一种生成Gbuffer时额外生成ddx,ddy然后通过Compute Shader对NxN大小块计算找到变化不明显区域,使用低频着色,即几个像素计算一次,该方式同样适用于后处理。

 

GI:

《Gpu Gems2》High-Quality Global Illumination Rendering Using Rasterization:通过两遍的方式,使用GPU来对光线和物体求交,得到很好的GI效果,极大加速了离线渲染,但是还不能实时运行。

《Gpu Gems2》Global Illumination Using Progressive Refinement Radiosity:辐射度原理,逐步求精,半球投影可见性,四叉树细分,实现软阴影简介光照等效果。

《Gpu Gems3》Interactive Cinematic Relighting with Global Illumination:GPU重光照引擎,用于电影级光照,对传统的GBuffer扩展,支持多次反射的间接照明。

《Gpu Pro1》Fast, Stencil-Based Multiresolution Splatting for Indirect Illumination:VPL方式实现GI(光线反弹效果),使用ShadowMap可以精确实现但是不现实,通过Reflective Shadow Map近似模拟,但是有Fillrate的问题,文中给出了一种将需要计算的内容分成多个低分辨率的RT,通过Stencil优化,然后再upsample的方法。

《Gpu Pro2》Real-Time One-Bounce Indirect Illumination and Shadows using Ray Tracing:结合RSM,再将场景切分成Gird,Ray Tracing模拟光源单次Bonce效果。

《Gpu Pro2》Diffuse Global Illumination with Temporally Coherent Light Propagation Volumes:简要介绍RSM,结合RSM,Tracing实现可控性能的实时Diffuse GI,无Precompute。

《Gpu Pro3》Real-Time Near-Field Global Illumination Based on a Voxel Model:通过将worldspace pos渲染到Texture,进一步构建voxel信息,通过mipmap chain实现Hierarchy Ray Tracing。RSM。支持One Onece GI。

《Gpu Pro4》Progressive Screen-Space Multichannel Surface Voxelization:使用Voxel RayTracing实现GI效果,多帧之间步进的效果,相比于传统的GBuffer全屏信息的GI,可以实现不在屏幕内的物体的投射的GI效果。

《Gpu Pro4》Rasterized Voxel-Based Dynamic Global Illumination:需要Depth Normal重建坐标和法线,另外DX 11 struct buffer,对场景多角度光栅化,存储到3D体素buffer中,最后结合VPL实现Bonce GI效果。

《Gpu Pro6》Deferred Normalized Irradiance Probes:刺客信条4黑旗的GI技术,实现实时TOD,结合了实时和烘焙,仅sunlight影响GI,场景中摆放Probe,每3个小时的光计算GI,ShadowMap烘焙到一个CubeMap的每个面中,运行时插值计算,通过GPU烘焙极大降低了烘焙速度;World Ambient Occlusion。

《Gpu Pro6》Real-Time Global Illumination Using Slices:通过将场景切分成格子,用对齐的2D图片对应,存储场景的光照信息,可以模拟单次的光Bounce效果,限制比较大。

《Gpu Zen》Stable Indirect Illumination:通过deinterleaved texturing方式(棋盘格)优化Reflective Shadow Map,最终Cross Bilateral Filter,Upsample。单词Bonce GI效果。

 

Lightmap:

《Gpu Pro2》 Level-of-Detail and Streaming Optimized Irradiance Normal Mapping:常规Lightmap只能存储低频GI,但是高频的法线信息表现不出来,文中给出了一种将Lightmap作为输入,通过SH+Normal实现针对方向光的的更好的Lightmap效果。

 

AO:

《Gpu Gems1》Ambient Occlusion:AO正式在实时渲染中应用,基于离线光线追踪预计算,随机生成光线拒绝采样(Rejection Sampling),实时采样AO贴图。主要是计算某一点针对当前位置暴露的比例,仅适用于静态场景。

《Gpu Gems2》Dynamic Ambient Occlusion and Indirect Lighting:动态实现AO,三角形计算被遮挡权重,多次计算图元ShadowMap迭代可以近似达到AO的效果,可以获得动态AO以及间接光照效果。

《Gpu Gems3》High-Quality Ambient Occlusion:优化上篇的计算,对不连续出进行平滑,移除点尖,增加细节,使AO计算结果更加鲁棒,效果更好。

《Gpu Pro1》Screen-Space Directional Occlusion:SSAO的改良版,正常SSAO只是压暗了颜色,没有考虑光的方向,造成整体一团黑。而SSDO可以在SSAO的基础上考虑光方向的影响,可以在Indirect Diffuse中看出光的方向感。

《Gpu Pro2》Temporal Screen-Space Ambient Occlusion:TSSAO,Temporal技术,利用上一帧的Buffer,Reverse Reprojection,极大优化传统SSAO效率。

《Gpu Pro3》Screen-Space Bent Cones: A Practical Approach:SSAO,Bent Normal的进一步加强版本,可以更加接近蒙特卡洛积分,重要性采样得到的GI Diffuse以及IBL效果,而不是单纯的压暗。

《Gpu Zen》Scalable Adaptive SSAO:介绍了一套高中低配分级的AO系统,可以用于VR等。Deinterleaved rendering,Depth Mipmap Chain,Smart Blur。

《Gpu Zen》 Robust Screen Space Ambient Occlusion:在PS4上优化到1080P1ms的SSAO。1/4分辨率,存储camera space depth然后downsample,可以用16位精度。分离Bilateral Filter(虽然这个是不可分离的,但是不太影响结果,性能大大提升),1/4算完后不直接合并,而是upsample以获得更好的效果。

 

Shadow:

《Gpu Gems1》Efficient Shadow Volume Rendering:阴影体方式实现阴影,模板阴影技术,效率较低,文中主要处理了一些模板阴影的特殊角度情况,以及优化填充率等。

《Gpu Gems1》Shadow Map Antialiasing:优化的PCF采样,解决常规Shadow Map锯齿的问题,以及大分辨率解决不了的采样点平行于光源的问题,在采样时进行随机,计算靠近光源的百分比,多次比较阴影贴图的每个像素,求平均值,而非预Filter Shadow Map。

《Gpu Gems1》Omnidirectional Shadow Mapping:将Shadow Map扩展到点光源中,使用Cube渲染点光源Shadowmap,以及软阴影PCF。

《Gpu Gems1》Generating Soft Shadows Using Occlusion Interval Maps:遮挡区间映射制作模糊阴影(半影效果),在当时还没有什么好方法模拟,文中的方法也只适用于单光线的静态场景,而且有多重特殊情况失真,已经不太适用。

《Gpu Gems1》Perspective Shadow Maps: Care and Feeding:PSM主要是为了解决SM锯齿的问题,根据投影近大远小的规则,优化近处锯齿,但是有若干问题,文中给出了优化版本的PSM方法,包括优化过的视锥体,CubeMap,Biasing,Filter等。

《Gpu Gems2》Efficient Soft-Edged Shadows Using Pixel Shader Branching:用PCF实现软阴影的半影效果,蒙特卡洛方法随机采样。

《Gpu Gems3》Summed-Area Variance Shadow Maps:对比了SM,PCF的优缺点,简要介绍了VSM的另一种软阴影实现,并且剔除了SVSM的方法,优化了常规的VSM,极大降低了Light Bleeding的情况。

《Gpu Gems3》Parallel-Split Shadow Maps on Programmable GPUs:

  • 33
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值