opengl shaderr 怎么实现lol 人物在草从的半隐效果

头像使用了为材质动态加载贴图。为了实现灰色效果,网上找了段着色器。
本文已收录于以下专栏:
相关文章推荐
原文链接:
/cg_ghost/archive//2268734.html
http://blog.k-res.net/ar...
原文地址:http://blog.csdn.net/poem_qianmo/article/details/
本篇文章中,我们学习了Unity Shader的基本写法框架,以...
高亮效果,使用Shader可以轻松实现
Shader代码
[cpp] view
说明继承机制最简单的方法是,利用一个经典的例子——几何形状。实际上,几何形状只有两种,即椭圆形(是圆形的)和多边形(具有一定数量的边)。圆是椭圆形的一种,它只有一个焦点。三角形、矩形和五边形都是多边形...
&OutLine/RedOutLine&
Properties
_Switch(&Value&,Range(0,1)) = 0
_MainTex(&Texture&,...
最近做一个装备的滚动条,需要将因为金钱不足不能购买的装备置灰,原来置灰是使用texture+shader,现在是使用sprite+shader,但是NGUI原有的sprite不具备添加sh...
上文中我们已经提供了方法将一个场景用微端的方式进行加载,其实主要是对场景模型进行加载,一般地形需要保留在level中,理论上其他所有资源都可以分割出去然后进行动态加载,我们在制作场景时免不了要对场景进...
自动生成材质及动态加载资源
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)因为平时上下班地铁上时间充裕(含泪),故习惯看一些东西或是总结平时遇到的一些问题。之前一直豆瓣上写,但是豆瓣手机编辑器图片插入有bug……打算移到知乎吧。仅是随笔,写得比较随意。&br&&br&----------&br&&br&Simon关于游戏特效的一个演讲,&a href=&/?target=https%3A//simonschreibt.de/gat/cool-stuff-with-textures/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&simonschreibt.de/gat/co&/span&&span class=&invisible&&ol-stuff-with-textures/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&,主要讲一些不是特别常见的使用纹理的例子。&br&&img data-rawheight=&1152& src=&/50/v2-a42ef87249ccb8ae1ae4d016c232ada1_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-a42ef87249ccb8ae1ae4d016c232ada1_r.png&&&br&&br&# 开场&br&&br&一开始Simon强调了下纹理数据其实就是一些bits,这些数据在直观的视觉表现上虽然是颜色,但其实里面到底存的是什么内容则完全没有限制,说白了纹理就是数据,从而引出后面的应用(这图实际是演讲最后放的twitter上一个哥们的例子):&br&&img data-rawheight=&1152& src=&/50/v2-4da7ebca84f17_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-4da7ebca84f17_r.png&&&br&&br&# Leafs&br&&br&第一个例子是叶子和地面接合的例子。把叶子摆放在场景,希望它们可以根据地形高度自动接合。&br&&img data-rawheight=&1152& src=&/50/v2-dafe898c92ccf66eac64a_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-dafe898c92ccf66eac64a_r.png&&&br&这当然就是靠高度图了。&br&&img data-rawheight=&1152& src=&/50/v2-e6ca519fc3dfc822bcfafc0d73c5e617_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-e6ca519fc3dfc822bcfafc0d73c5e617_r.png&&&br&作者游戏场景的高度范围为4000,8 bits的单通道精度明显不够,但UE的HDR纹理又不支持单通道。&br&&img data-rawheight=&1152& src=&/50/v2-a64ee6e05354e2deffcd63_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-a64ee6e05354e2deffcd63_r.png&&&br&为了避免浪费空间,同时又保持精度,作者想到拆分高度值到4个8 bits通道,由此只需要需要一张RGBA32纹理就可以:&br&&img data-rawheight=&1152& src=&/50/v2-6c9e1eceabd_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-6c9e1eceabd_r.png&&&br&&br&# Rains&br&&br&雨的话一种常见做法是靠粒子。作者则是使用自己制作的一个mesh,好处是只需要一个draw call,可控性也更强一点:&br&&img data-rawheight=&1152& src=&/50/v2-f603a066be7_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-f603a066be7_r.png&&&br&&br&为了让它们动起来,需要添加时间偏移和循环,比如每50秒一个循环:&br&&img data-rawheight=&1152& src=&/50/v2-5be37b9a796fcb61ee3e_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-5be37b9a796fcb61ee3e_r.png&&&br&&br&但这样所有的雨丝都在同一高度,所以要给每个雨丝各自的偏移。作者利用mesh的uv2信息,给每个雨丝存储了不同的偏移量:&br&&img data-rawheight=&1152& src=&/50/v2-9f2d4c3ecfd10becfb2e_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-9f2d4c3ecfd10becfb2e_r.png&&&br&&br&然后在材质里把偏移量加给时间变量,由此每个雨丝的位置就不同了。&br&&img data-rawheight=&1152& src=&/50/v2-4fa029d3b1d32fc8d196a_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-4fa029d3b1d32fc8d196a_r.png&&&br&&img data-rawheight=&1152& src=&/50/v2-0faacf39f23b_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-0faacf39f23b_r.png&&&br&&br&然后可以使用高度图检测雨丝是否碰到了任何表面,从而对雨丝进行偏移:&br&&img data-rawheight=&1152& src=&/50/v2-645d53dfb71f77cbf76cd9fc0bbf0a24_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-645d53dfb71f77cbf76cd9fc0bbf0a24_r.png&&&br&&br&# Smoke&br&&br&这部分是最有意思的。游戏里需要表现女人吸烟的效果,常见的做法是用粒子做,但作者游戏是VR,要求很强的交互性,特别是因为故事性需要时间可以暂停回退,这点比较麻烦。&br&&br&&img data-rawheight=&1152& src=&/50/v2-f0865dba72a_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-f0865dba72a_r.png&&&br&&br&作者还是使用网格的方法原始的网格如下,是一个非常标准的锥形网格:&br&&img data-rawheight=&1152& src=&/50/v2-c13a3ee12eae82b51cebc7_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-c13a3ee12eae82b51cebc7_r.png&&&br&核心在于玩转了一张噪声纹理:&br&&img data-rawheight=&1152& src=&/50/v2-dd30bcc7f44c4c3ad031b_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-dd30bcc7f44c4c3ad031b_r.png&&&br&&br&使用这张噪声纹理来做顶点动画,同时为了让上下端偏移有变,会乘以一个渐变值:&br&&img data-rawheight=&1152& src=&/50/v2-2a609f3bce_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-2a609f3bce_r.png&&&br&&br&颜色渲染是话就是渐变值乘以一张滚动的纹理:&br&&img data-rawheight=&1152& src=&/50/v2-206dedefeb7fcf2ea3b3c0_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-206dedefeb7fcf2ea3b3c0_r.png&&&br&&br&作者非常nice地提到实现中的关键细节,就是在偏移顶点的时候并不是使用乘法沿着法线方法乘以偏移量,而是使用在法线和偏移量之间使用加法,效果区别如下(小字的意思是说需要对噪声纹理采样的结果做一个值映射,从[0,1]映射到合适的范围):&br&&img data-rawheight=&1152& src=&/50/v2-727fb726abd7d56a17af6_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-727fb726abd7d56a17af6_r.png&&&br&&br&烟的基础渲染就是这些了。&br&&br&另一个重要的特性是,烟的跟随效果,在人物走动的时候,烟需要总体是朝上飘,并且总是跟随手的位置运动。如果基于整个网格做位置计算,就会很生硬,像绑在手上一个东西:&br&&img data-rawheight=&1152& src=&/50/v2-ae935bd5d776c08eba86e1a88b61794b_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-ae935bd5d776c08eba86e1a88b61794b_r.png&&&br&&br&对应的UE的材质节点如下:&br&&img data-rawheight=&1152& src=&/50/v2-bfc0cae6dbe642f49cda77d_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-bfc0cae6dbe642f49cda77d_r.png&&&br&&br&为了表现更自然的飘动跟随,作者想到一个更好的做法来改进。基本思想是越靠近低端的顶点,位置跟随程度越高,越往上的顶点,表现得越lazy:&br&&img data-rawheight=&1152& src=&/50/v2-9cf5da48ac2ef9e09763_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-9cf5da48ac2ef9e09763_r.png&&&br&&br&为了表现出来不同程度的lazy,每个顶点需要访问到不同时刻的烟头位置,为此作者把烟头位置烘焙到了一张位置纹理里,每个像素对应一帧位置:&br&&img data-rawheight=&1152& src=&/50/v2-27a63fe1e7b2b26d533c_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-27a63fe1e7b2b26d533c_r.png&&&br&&br&完整的位置纹理长这样,格式是HDR,不压缩,不滤波,从上到下从左到右依次记录了烟头的位置信息(用HDR格式是因为作者发现8 bits的精度效果不够):&br&&img data-rawheight=&1152& src=&/50/v2-7a4bb20e8b8b2de3d70aa9_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-7a4bb20e8b8b2de3d70aa9_r.png&&&br&&br&然后,烟网格需要知道若干相邻时间点的位置信息。作者首先提取当前需要的相邻位置数据到一张更小的纹理里,烟网格按照纹理坐标再对小纹理采样。这样越靠上面的顶点纹理坐标对应越老的位置信息,效果表现也就越lazy:&br&&img data-rawheight=&1152& src=&/50/v2-4e9e2b2618b7aeef8913f6afb9ea897e_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-4e9e2b2618b7aeef8913f6afb9ea897e_r.png&&&br&&br&下面的图从上到下lazy参数逐渐变大,可以看出越来越明显的飘动跟随效果:&br&&img data-rawheight=&1152& src=&/50/v2-e19be324bec176b1d5f0_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-e19be324bec176b1d5f0_r.png&&&br&&br&最后游戏里效果如下:&br&&img data-rawheight=&1152& src=&/50/v2-ad5cd7ccb1d9_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-ad5cd7ccb1d9_r.png&&&br&&br&这样一来游戏里时间随时暂停和回放也都没有问题了。Simon的博客里有具体UE里的材质包,实现细节可参照。&br&&br&# Liquad&br&&br&最后一个是渲染液体效果:&br&&img data-rawheight=&1152& src=&/50/v2-6c5fa2ce8ceef877e1fe09ce_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-6c5fa2ce8ceef877e1fe09ce_r.png&&&br&&br&作者一开始想到的方法是导出每一帧的网格,然后在播放的时候把除当前帧外的其他帧网格大小都缩放到0,这样一来只有当前帧网格可见。这种方法的问题很明显,就是网格数据量很大。更为悲催的是,Simon做完后同事告诉他,已经有工具可以实现这种功能,而且实现的更好,这个工具就是Alembic(相比于Simon实现的版本,它可能无法自由控制网格复杂度,表示怀疑→_→):&br&&img data-rawheight=&1152& src=&/50/v2-5fda1f14f71e80edffdfb08f_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-5fda1f14f71e80edffdfb08f_r.png&&&br&&br&后来作者想出了更省内存的方法,就是使用纹理才存储位置信息,如上。&br&&br&总体来讲,就是让所有帧共用同一个网格数据,然后把每一帧每个顶点的位置信息存储在一张位置纹理里:&br&&img data-rawheight=&1152& src=&/50/v2-f1f043dbad_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-f1f043dbad_r.png&&&br&&br&这种方法用到了Houdini来导出网格。因为每一帧的网格复杂度是不同的,比如动画刚开始的时候不需要很多的三角面片。Houdini有个(sort of)选项是maximum triangles,这样导出动画网格的时候,那些不需要这么多三角面的帧网格会把多余的三角片顶点设为0(以上是按照Simon的理解),于是就不可见了。&br&&br&和之前的烟动画不同,现在这张位置纹理需要存储每个顶点每一帧的位置。因此,这张纹理的水平方向存储了某一帧网格所有顶点的位置信息,而纵坐标则依次对应了不同帧的数据:&br&&img data-rawheight=&1152& src=&/50/v2-41e7acacb2_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-41e7acacb2_r.png&&&br&&br&下面显示了顶点的纹理坐标,可以看出每个三角面片的的每个顶点分别对应了一个像素:&br&&img data-rawheight=&1152& src=&/50/v2-702e0e8e_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-702e0e8e_r.png&&&br&&br&现在位置信息解决了,还有一个问题是法线信息现在都不对了,所以渲染的时候会出现硬边:&br&&img data-rawheight=&1152& src=&/50/v2-5c945aff7a0e0be3b43f56eef3917f99_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-5c945aff7a0e0be3b43f56eef3917f99_r.png&&&br&&br&作者的方法是,把法线信息也烘焙到这张纹理里。由于现在RGB通道已经用于存储了xyz位置信息,所以只剩下A一个通道给法线了:&br&&img data-rawheight=&1152& src=&/50/v2-5c3afdd28e4afb796fe5_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-5c3afdd28e4afb796fe5_r.png&&&br&&br&由于法线是单位向量,所以实际上只需要存储两个分量。为了存储这两个分量,作者把它们分别存储到了4 bits里,这样合起来就是8 bits了。当然这样合并后精度会下降,但作者说对于这个效果足够了:&br&&img data-rawheight=&1152& src=&/50/v2-bdb68c42e1c3cc453e226d_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-bdb68c42e1c3cc453e226d_r.png&&&br&&br&# Twitter Stuff&br&&br&Simon之前在Twitter上收集巧用纹理的例子,一个比较有意思的案例是做帧动画换装。这个例子是,有若干相同动作的帧动画,但需要不同样子的人物。如果每个人物的帧动画都单独做,那么就需要比较高分辨率的贴图,内存成倍增长。作者的方法是,单独做一张只包含帧动画的纹理,这张纹理存的不是颜色,而是uv坐标:&br&&img data-rawheight=&1152& src=&/50/v2-fceaed7d9fe3aad930aa7_b.png& data-rawwidth=&2048& class=&origin_image zh-lightbox-thumb& width=&2048& data-original=&/50/v2-fceaed7d9fe3aad930aa7_r.png&&&br&&br&然后再靠纹理坐标去采样一张atlas纹理得到颜色:&br&&img data-rawheight=&720& src=&/50/v2-0a7b5bce05eaba3e3ef04_b.png& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-0a7b5bce05eaba3e3ef04_r.png&&&br&&br&# 最后&br&&br&送上Simon的三句箴言:&br&&img data-rawheight=&720& src=&/50/v2-cb7400bcf57160ffd0e8c_b.png& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-cb7400bcf57160ffd0e8c_r.png&&
因为平时上下班地铁上时间充裕(含泪),故习惯看一些东西或是总结平时遇到的一些问题。之前一直豆瓣上写,但是豆瓣手机编辑器图片插入有bug……打算移到知乎吧。仅是随笔,写得比较随意。 ---------- Simon关于游戏特效的一个演讲,,…
&img src=&/50/v2-c7e9c6165fcfc9b9fbac58_b.jpg& data-rawwidth=&1131& data-rawheight=&707& class=&origin_image zh-lightbox-thumb& width=&1131& data-original=&/50/v2-c7e9c6165fcfc9b9fbac58_r.jpg&&&p&景深效果[3]是由于镜头焦距的不同导致镜头对不同距离的光的折射不同而出现的一种现象,在摄影中是种常见的艺术表达方式.&/p&&p&&br&&/p&&img data-rawheight=&326& src=&/v2-96f4ff7c533d389d523cddea4a62f2e6_b.jpg& data-rawwidth=&450& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&/v2-96f4ff7c533d389d523cddea4a62f2e6_r.jpg&&&p&在渲染领域为了模拟这种效果,出现了很多模拟方法[5].时至今日,斗转星移,今天我们来看看在游戏圈两大主流引擎的Post Process DoF是如何实现的.先来看看Unity官方写的PostProcess[7]:&/p&&p&&br&&/p&&img data-rawheight=&537& src=&/v2-66e5fffa74fcd_b.png& data-rawwidth=&966& class=&origin_image zh-lightbox-thumb& width=&966& data-original=&/v2-66e5fffa74fcd_r.png&&&p&Unity使用了基于物理镜头的参数来控制DoF,我们可以看到他的接口:&/p&&p&&br&&/p&&img data-rawheight=&113& src=&/v2-a6bd417f9863e_b.png& data-rawwidth=&498& class=&origin_image zh-lightbox-thumb& width=&498& data-original=&/v2-a6bd417f9863e_r.png&&&p&里面包含了焦距和光圈级数[1]的设置.从shader中可以看出,Unity算CoC[2]的公式是:&/p&&p&&br&&/p&&img data-rawheight=&66& src=&/v2-65e7fcb813cf2f_b.png& data-rawwidth=&231& class=&content_image& width=&231&&&p&并且使用了35mm全画幅相机的格式.但是Unity这个公式做了改变,加入了一个玄学值来计算最大CoC半径,所以这一点让我觉得&I can't understand math, I just get used to it.&.&/p&&p&接下来我们看看UnrealEngine 4(UE4[8]),它的DoF分了3种,分别是:&/p&&p&&br&&/p&&img data-rawheight=&221& src=&/v2-f30d94f21bd5bbca04e5dbd87c50cddf_b.png& data-rawwidth=&951& class=&origin_image zh-lightbox-thumb& width=&951& data-original=&/v2-f30d94f21bd5bbca04e5dbd87c50cddf_r.png&&&p&游戏内推荐使用Gaussian DoF, 同时也是最常规的一种做法.它计算CoC的公式是:&/p&&p&&br&&/p&&img data-rawheight=&52& src=&/v2-e51a2dd6a79_b.png& data-rawwidth=&210& class=&content_image& width=&210&&&p&它的用户接口是酱紫的:&/p&&p&&br&&/p&&img data-rawheight=&341& src=&/v2-629e6e723a7cd83cf2f05d_b.png& data-rawwidth=&445& class=&origin_image zh-lightbox-thumb& width=&445& data-original=&/v2-629e6e723a7cd83cf2f05d_r.png&&&p&除了提供一些基于物理的接口,同时也提供了一些方便美术调整的参数.顺便值得一提的是,UE4针对游戏中DoF常见的articfact,提供了一种解决方法.常规做法都会遇到下图的问题:&/p&&p&&br&&/p&&img data-rawheight=&270& src=&/v2-8dff8dc3d7a_b.png& data-rawwidth=&193& class=&content_image& width=&193&&&p&UE4使用了被称作Adaptive DoF的技术:&/p&&p&&br&&/p&&img data-rawheight=&259& src=&/v2-7eb756c308afc8f9cf8fd74_b.png& data-rawwidth=&168& class=&content_image& width=&168&&&p&近景的角色头周围的模糊artifact都消除了.对这个技术感兴趣可以参看UE4源码.&/p&&p&可以看到,即使是基于物理,目前仍然需要在公式中插入一些玄学值(基于经验)来达到可控可调的效果.所以实现一个完全基于物理的系统,是不是必要呢?不是每一个人都希望在控制游戏镜头前都先学一下摄影.&/p&&p&[1]&a href=&/?target=https%3A//en.wikipedia.org/wiki/F-number& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&f-number&i class=&icon-external&&&/i&&/a&&/p&&p&[2]&a href=&/?target=https%3A//en.wikipedia.org/wiki/Circle_of_confusion& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Circle of confusion&i class=&icon-external&&&/i&&/a&&/p&&p&[3]&a href=&/?target=https%3A//en.wikipedia.org/wiki/Depth_of_field%23Derivation_of_the_DOF_formulae& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Depth of field&i class=&icon-external&&&/i&&/a&&/p&&p&[4]&a href=&/?target=https%3A//en.wikipedia.org/wiki/Zeiss_formula& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Zeiss formula&i class=&icon-external&&&/i&&/a&&/p&&p&[5]&a href=&/?target=http%3A//developer./books/HTML/gpugems/gpugems_ch23.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Depth of Field: A Survey of Techniques&i class=&icon-external&&&/i&&/a&&/p&&p&[6]&a href=&/?target=https%3A//en.wikipedia.org/wiki/Focal_length& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Focal length&i class=&icon-external&&&/i&&/a&&/p&&p&[7]&a href=&/?target=https%3A///Unity-Technologies/PostProcessing/tree/v2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unity-Technologies,PostProcessing-Stack v2&i class=&icon-external&&&/i&&/a&&/p&&p&[8]&a href=&/?target=https%3A///latest/INT/Engine/Rendering/PostProcessEffects/DepthOfField/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UE4,Depth of Field&i class=&icon-external&&&/i&&/a&&/p&
景深效果[3]是由于镜头焦距的不同导致镜头对不同距离的光的折射不同而出现的一种现象,在摄影中是种常见的艺术表达方式. 在渲染领域为了模拟这种效果,出现了很多模拟方法[5].时至今日,斗转星移,今天我们来看看在游戏圈两大主流引擎的Post Process DoF是如何…
&img src=&/50/v2-faefb881cd_b.jpg& data-rawwidth=&992& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&992& data-original=&/50/v2-faefb881cd_r.jpg&&&p&(编注:这篇文章跟读者时互动的,你想看到渲染哪方面,留言告诉我。在写作会偏向你需要的Y(^_^)Y)&br&&/p&&p&&br&&/p&&p&为了保证通用性,我这里尽量不去以任何一种渲染器的习惯作为前提假设,而是尽量地用物理和常识来描述图像的组成元素。&/p&&blockquote&&b&渲染系列文章:&/b&&br&&a href=&/p/& class=&internal&&基于物理的渲染(一):什么是渲染?&/a&&/blockquote&&p&首先要强调一点就是,无论是几种相同和不同的光源产生的光,还是拆分成下面的组成部分,在合成环节把他们混合成最终灯光效果的时候,它们之间的混合方式只有一种:&b&相加! &/b&&/p&&p&光不应该也不能用其他的混合方式混合,用其他方式去混合灯光会造成能量失衡,导致最终画面光感不准确。&/p&&img data-rawheight=&720& src=&/50/v2-1d9de54f7b2b9e98c67704_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-1d9de54f7b2b9e98c67704_r.jpg&&&p&&br&&/p&&p&&b&按照光线在物体的不同位置交互,从原理和易操作性上来划分我们有下面几个组成部分:&/b&&/p&&p&&br&&/p&&p&&b&- 反射,包括漫反射,和高光反射。&/b&&/p&&p&&br&&/p&&p&&b&- 折射,包括模糊折射,和清晰折射。&/b&&/p&&p&&br&&/p&&p&&b&- 散射,包括无表面的散射,和次表面散射。&/b&&/p&&p&&br&&/p&&p&&b&- 自发光,包括产生光子的自发光,和不产生光子的自发光。&/b&&/p&&img data-rawheight=&853& src=&/50/v2-db777ef21e7f5f01e30fb_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-db777ef21e7f5f01e30fb_r.jpg&&&p&&br&&/p&&p&每个渲染器完成这些光照元素的方式都不完全一致,每个公司自己开发的Shader也有不同的处理方式,但是万变不离其宗,他们最终试图去描述的内涵都是一致的:&/p&&p&漫反射,高光反射,模糊折射和清晰折射的亮度加在一起的总和不超过入射进来的光线。为了保持能量守恒,一个属性的增强势必导致另外其他的属性减弱。&/p&&p&他们根据美学要求可以继续往下细分,比如ILM的高光就经常使用两个不同锐度的高光反射。&/p&&img data-rawheight=&636& src=&/50/v2-fb2a80172b84acabfbf44b00_b.jpg& data-rawwidth=&949& class=&origin_image zh-lightbox-thumb& width=&949& data-original=&/50/v2-fb2a80172b84acabfbf44b00_r.jpg&&&p&&br&&/p&&p&漫反射和高光反射在某些时候是无法区分的,它们本质上也是一样的光照原理。反射角很大的高光反射,范围可能会变得和漫反射一样大,在这种情况下他们可以互换。&/p&&p&但取决于渲染器的设计,用高光反射的功能实现漫反射的效果可能会导致渲染效率下降。&/p&&img data-rawheight=&508& src=&/50/v2-b20d0fb77da_b.jpg& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-b20d0fb77da_r.jpg&&&p&&br&&/p&&p&折射也是一样的道理,清晰折射是物体表面光滑,内部清澈的情况下会产生的效果。当物体表面变得粗糙,光线被表面上许多微小的切面折射到不同方向,宏观上看折射开始变得模糊。&/p&&p&如果物体内部开始变得浑浊,光线在内部便会开始与内部的杂质颗粒进行交互,宏观上产生了次表面散射现象。&/p&&p&杂质越大越密集,光线穿透材料的可能性就越低,我们看到的画面就越多被次表面散射层占据,折射层的含量就越少。&/p&&img data-rawheight=&533& src=&/50/v2-aed51d4f33bf4ce96ff3f04_b.jpg& data-rawwidth=&800& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/50/v2-aed51d4f33bf4ce96ff3f04_r.jpg&&&p&&br&&/p&&img data-rawheight=&288& src=&/50/v2-c4dc580b6ef666c5b8b040_b.jpg& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-c4dc580b6ef666c5b8b040_r.jpg&&&p&&br&&/p&&img data-rawheight=&636& src=&/50/v2-3ca4694d64fed1bd0dcf58be7a4692b7_b.jpg& data-rawwidth=&600& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/50/v2-3ca4694d64fed1bd0dcf58be7a4692b7_r.jpg&&&p&&br&&/p&&img data-rawheight=&480& src=&/50/v2-9b5edf06a1e7eaeed7a4abb_b.jpg& data-rawwidth=&852& class=&origin_image zh-lightbox-thumb& width=&852& data-original=&/50/v2-9b5edf06a1e7eaeed7a4abb_r.jpg&&&p&&br&&/p&&p&有些物体自身有发光性质,我们称作自发光。CG中的纯光源只是一个具有自发光性质但本身不被渲染的物体。火焰即有自发光,又包含可被渲染的介质。&/p&&p&在CG中,有些物体具有自发光性质,但是不产生光子照亮其他物体,这种物体通常被用来制作全景环境图供其他物体反射或折射。&/p&&p&如果一个场景中只有特效模拟的火焰一种发光物体,那这个火焰便会作为一个渲染物体,它产生的光子作为一个光源存在。在PBR的场景里,任何物体都可能会影响任何其他物体。&/p&&img data-rawheight=&371& src=&/50/v2-6bdb7ecb_b.jpg& data-rawwidth=&660& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&/50/v2-6bdb7ecb_r.jpg&&&p&&br&&/p&&p&一般我们也用不产生光子的自发光来渲染物体本身的固有色层,比如一张具有木纹的桌子,固有色层如决定单独输出,我们可以用这样的方式将它渲染出来。&/p&&p&在合成阶段它应该和漫反射层相乘得到具有固有色的漫反射层,高光反射保持和光源颜色一致。(导电的材料的高光反射也会继承材料本身的颜色,比如黄金等,高光颜色要和材料颜色一致。)&/p&&img data-rawheight=&1024& src=&/50/v2-597bc42cf08fa41948d72d_b.jpg& data-rawwidth=&1024& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/50/v2-597bc42cf08fa41948d72d_r.jpg&&&p&&br&&/p&&p&在&a href=&/p/& class=&internal&&前一篇文章&/a&说过,散射根据是否有一个明确表面的内部,我们会将他们分为无表面散射,和次表面散射。他们的计算原理差异不大,区别在于这一层光照存储在什么位置和怎么去使用他们。次表面散射将光照存储在物体的表面,无表面散射将光照存在连续的透光介质中(Participating media)。&/p&&img data-rawheight=&720& src=&/50/v2-803cedfa5805b09bbc61af_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-803cedfa5805b09bbc61af_r.jpg&&&p&&br&&/p&&p&散射层可以当作一个十分模糊的折射层,或者一个自发光层来看待(但是要保证能量守恒)。散射甚至可以用模糊的折射或者一个模糊的自发光层来粗略模拟。&/p&&p&比如比较薄的物体内部产生的瓷表面散射,和它模糊折射的光源差异不大。&/p&&p&一个爆炸的烟雾模拟在渲染的时候也可以把火做模糊处理,作为烟的自发光层加入到最终渲染里,这样可以很好地模拟多次计算的散射效果,而效率确是真实计算的上百倍之高。&/p&&img data-rawheight=&720& src=&/50/v2-7ca7db5de12e_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-7ca7db5de12e_r.jpg&&&p&&br&&/p&&p&散射和折射除了背光尤其明亮,过渡比较通透除外,通常很显著的效果是光在介质内部反弹的时候颜色会产生变化。&/p&&p&海水吸收红色光较多,所以光线到海底越深的位置剩下的光就越偏向蓝绿色。&/p&&p&燃烧产生的烟通常会吸收蓝色光,导致越厚的烟雾越会偏向橙黄色。&/p&&p&粒子十分细密(低于光波长)的烟雾反而会被留下蓝色光,比如香烟产生的烟雾,这种现象被称作Rayleigh Scattering,属于现实常见但渲染里不常见的效果,通常靠手动调整得到。&/p&&p&&br&&/p&&img data-rawheight=&640& src=&/50/v2-ddf71ec32c1f737f73bbde6d_b.jpg& data-rawwidth=&1024& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/50/v2-ddf71ec32c1f737f73bbde6d_r.jpg&&&p&&br&&/p&&img data-rawheight=&615& src=&/50/v2-eb480cf230_b.jpg& data-rawwidth=&820& class=&origin_image zh-lightbox-thumb& width=&820& data-original=&/50/v2-eb480cf230_r.jpg&&&p&&br&&/p&&p&一些表面纹理奇异的物体,通常因为有多层可以折射光线的薄膜所致,会产生彩虹色的反射或者折射。&/p&&p&肥皂泡上的彩虹色纹理就是最常见的例子。要想模拟这种纹理,我们需要深入到把光线分离成不同频率分别使用不同的折射率去折射的方法,但这种方法需要一些开发工作和更长的渲染时间,也不一定便于艺术家控制,所以大家也经常采用作假的方式去实现这种效果。&/p&&p&一个很普遍的方式就是通过把彩虹色的纹理根据物体上Fresnel数值映射到表面上来实现。但这些作假的方式不会适用所有范围,比如模拟光线在钻石内部的多次折射产生的昂贵彩虹色就无法实现。(钻石这种东西呢,该买就得买真的。)&/p&&p&&br&&/p&&img data-rawheight=&510& src=&/50/v2-a48df3c60aea19ba39109df_b.jpg& data-rawwidth=&900& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/50/v2-a48df3c60aea19ba39109df_r.jpg&&&p&&br&&/p&&img data-rawheight=&995& src=&/50/v2-25a212edffb37_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-25a212edffb37_r.jpg&&&p&&br&&/p&&img data-rawheight=&462& src=&/50/v2-37ae492980eee5e040ae2de6c35c82ec_b.jpg& data-rawwidth=&822& class=&origin_image zh-lightbox-thumb& width=&822& data-original=&/50/v2-37ae492980eee5e040ae2de6c35c82ec_r.jpg&&&p&&br&&/p&&p&&br&&/p&&p&&b&多次反弹光: 间接光照&/b&&/p&&p&上述的所有光照的分解元素,在PBR渲染器渲染的时候光线都会在各自的轨迹中反弹多次。&/p&&p&月球上物体的纯黑色阴影是因为没有大气产生的蓝天对地面产生多次光线反弹,相反我们也听说过城市高楼的玻璃板反光可以将路面上停泊的轿车面板烤热烧焦。我相信大家对这个概念都有所了解,所以我不过多说明。&/p&&p&&br&&/p&&p&在我们拆分光照元素的时候,通常也会把直接击中物体反弹到我们眼中的光叫做&b&直接光照&/b&。这个光照光影明确,在只考虑直接光照的世界里,常规的电影片场打光的方式都无法数字重现。(反光板,柔光布,黑旗等)&/p&&img data-rawheight=&505& src=&/50/v2-dce3b3acb81f6cedab735e17375adc75_b.jpg& data-rawwidth=&865& class=&origin_image zh-lightbox-thumb& width=&865& data-original=&/50/v2-dce3b3acb81f6cedab735e17375adc75_r.jpg&&&p&&br&&/p&&p&想要更好的重现现实世界中的光照,我们必须要考虑进除了第一次反弹之外的反弹轨迹。这些轨迹产生的光照我们称为&b&间接光照&/b&。&/p&&p&间接光照相比直接光照一般很弱,但是缺少这一层光照对真实感的建立会有很大损伤。&/p&&img data-rawheight=&1151& src=&/50/v2-d08fe43f8f9ae67275ba_b.jpg& data-rawwidth=&1280& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&/50/v2-d08fe43f8f9ae67275ba_r.jpg&&&p&&br&&/p&&img data-rawheight=&171& src=&/50/v2-7d1a67c3d80f5bb79e2e7d227cab0e30_b.jpg& data-rawwidth=&680& class=&origin_image zh-lightbox-thumb& width=&680& data-original=&/50/v2-7d1a67c3d80f5bb79e2e7d227cab0e30_r.jpg&&&p&&br&&/p&&p&为了提高速度,一般渲染器会把一条光照轨迹划分成反射光线,阴影光线等。这样归类的意义在于在每次反弹计算中,都会在场景许多新的位置产生新的反弹光线,它们可能包含反射的太阳光,折射的人工光,散射的火焰光等等许多不同种类的光线。&/p&&p&如果各种光线都相互有影响,很可能把已经很慢的渲染直接计算到无法停止的地步。为了提速,我们在计算漫反射的间接光照时一般不去考虑高光反射对它的影响。&/p&&p&这样的设计很显然在一些场合下是不够的,所以渲染器一般也会给你一些开关或者相应的编程接口让你允许集中不同光线之间的相互影响。&/p&&p&&b&毕竟,电影也是一门造假的艺术,当视觉上的差异不大时,我们没必要那样去纠结准确性。&/b&&/p&&p&&br&&/p&&p&我们可以看到,随着我们需求的增长,渲染器需要计算的光线数量越来越多。一个好的渲染器不仅应该提供给我们这些功能,也应该根据我们对艺术指导的需求和制作的流程,适当地削减和优化我们的渲染计算。&/p&&p&每个渲染器优化的侧重点都不同,作为渲染艺术家我们最好了解每个渲染器的优缺点,根据它们的特点去选择适应我们项目的渲染器。&/p&&p&&br&&/p&&p&&b&渲染器没有优劣之分,用渲染器的人有。&/b&&/p&&p&&br&&/p&&p&这篇文章有个神奇的功效,只要你转发到朋友圈爱情事业就会双收。有个读者通过转发得到了自己喜欢的钻石:&/p&&img data-rawheight=&225& src=&/v2-84ac81388fcd9e1da00fc3e3a614f4b2_b.jpg& data-rawwidth=&400& data-thumbnail=&/50/v2-84ac81388fcd9e1da00fc3e3a614f4b2_b.jpg& class=&content_image& width=&400&&&br&&br&&p&&i&本文作者信息:&/i&&/p&&p&&i&牛闯,现任伦敦工业光魔特效技术指导。&/i&&/p&&p&&i&正在以导演身份筹备独立电影过程中,有意向合作者请发信到个人邮箱联络。&/i&&/p&&p&&br&&/p&&p&&i&电影工作联络:&/i&&/p&&p&&i&LinkedIn: &a href=&/?target=http%3A///in/chuangniu& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/in/chuangn&/span&&span class=&invisible&&iu&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/i&&/p&&p&&i&Email: chuang.film+&/i&&/p&&p&&i&其他社交媒体:&/i&&/p&&p&&i&知乎: Ovs牛大夫&/i&&/p&&p&&i&Weibo: Ovs牛大夫&/i&&/p&&p&&i&Instagram: ovspianist&/i&&/p&&p&&br&&/p&&p&&i&本文来自“闯特效”公众号,转载请声明。&/i&&/p&
(编注:这篇文章跟读者时互动的,你想看到渲染哪方面,留言告诉我。在写作会偏向你需要的Y(^_^)Y) 为了保证通用性,我这里尽量不去以任何一种渲染器的习惯作为前提假设,而是尽量地用物理和常识来描述图像的组成元素。渲染系列文章:
&img src=&/50/v2-14152abd15cbf62ef081f92c_b.jpg& data-rawwidth=&1200& data-rawheight=&630& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&/50/v2-14152abd15cbf62ef081f92c_r.jpg&&&p&最近涉足一点移动开发,倒是刚上来就被OPENGL系的深度问题给恶心坏了。由于unity无法拿到移动平台上硬件做的z-buffer,所以大家常规做法就是自己去写个z-buffer。但是由于经过透视变换,透视本质上是不保持深度的线性变化的,结果很多利用深度的“奇技淫巧”在PC上用着没问题,在手机上就有毛病了。Nathan Reed[1]对这个问题做过一次深入研究,评测了几种缓解这个问题的方法。其中图示了集中Z值保存方法,可以直观看到精度的损失:&/p&&p&&br&&/p&&img src=&/50/v2-ec1e2abf85bec6d7acd3e8_b.png& data-rawwidth=&1092& data-rawheight=&537& class=&origin_image zh-lightbox-thumb& width=&1092& data-original=&/50/v2-ec1e2abf85bec6d7acd3e8_r.png&&&p&当使用整数值保存深度,已经可以看到z值在已经是在近剪裁面的精度比远剪裁面要高。&/p&&p&当我们把近剪裁面进一步缩小后,只是改变了距离相机位置附近的精度分布:&/p&&p&&br&&/p&&img src=&/50/v2-29e3b0bb911_b.png& data-rawwidth=&1097& data-rawheight=&899& class=&origin_image zh-lightbox-thumb& width=&1097& data-original=&/50/v2-29e3b0bb911_r.png&&&p&当我们把远剪裁面拉的更远,其实对整个深度分布影响不大:&/p&&p&&br&&/p&&img src=&/50/v2-85acb56f79cc504ed696bda556d089d9_b.png& data-rawwidth=&1107& data-rawheight=&553& class=&origin_image zh-lightbox-thumb& width=&1107& data-original=&/50/v2-85acb56f79cc504ed696bda556d089d9_r.png&&&p&接着我们再看看浮点数保存深度时候的分布:&/p&&p&&br&&/p&&img src=&/50/v2-551f047c8711677edd623_b.png& data-rawwidth=&1082& data-rawheight=&542& class=&origin_image zh-lightbox-thumb& width=&1082& data-original=&/50/v2-551f047c8711677edd623_r.png&&&p&主要还是近距离的精度达到不必要的高,远距离又太粗糙。&/p&&p&所以Eugene Lapidous[2], Matt Pettineo [3] 和 Brano Kemen[4]等人就想出了使用ReverseZ的方法保存精度:&/p&&p&&br&&/p&&img src=&/50/v2-a5c4f78dd27a73db18be0_b.png& data-rawwidth=&1069& data-rawheight=&551& class=&origin_image zh-lightbox-thumb& width=&1069& data-original=&/50/v2-a5c4f78dd27a73db18be0_r.png&&&p&对比之前已经有了翻天覆地的变化。你以为这是童话故事的happy ending? NO!&/p&&p&由于目前我在做移动平台的东西,所以我们看看GL系是有多么的非主流:&/p&&p&&br&&/p&&img src=&/50/v2-be384c7dcd_b.png& data-rawwidth=&1096& data-rawheight=&554& class=&origin_image zh-lightbox-thumb& width=&1096& data-original=&/50/v2-be384c7dcd_r.png&&&p&居然精度都集中在一个“中间距离”,这就是为什么unity里你如果自己写深度,调相机的far没啥变化,调near从0.1到1变化巨大。桌面级别的OPEN GL可以用 &u&&a href=&/?target=https%3A//www.opengl.org/registry/specs/ARB/clip_control.txt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ARB_clip_control&i class=&icon-external&&&/i&&/a&&/u& ,但是GLES就没啥招了,由于“贵系”使用[-1,1]保存透视变换后的z值,即便后来硬件帮你映射到[0,1]也无事于补。原因是透视变化里已经把数值玩坏。。。&/p&&p&所以我们就放弃GLES吧?&/p&&p&...&/p&&p&开个玩笑,换个方法,直接保存Z,不做透视变换,还是可以搞滴!&/p&&p&&br&&/p&&p&&br&&/p&&hr&&p&日更新:&a href=&/p/& class=&internal&&深度缓冲优化指南-后续&/a&&/p&&p&&br&&/p&&hr&&p&&br&&/p&&p&[1]Depth Precision Visualized, Nathan Reed, 2015&/p&&p&[2]Optimal depth buffer for low-cost graphics hardware, Eugene Lapidous,Guofang Jiao, HWWS '99 Proceedings of the ACM SIGGRAPH/EUROGRAPHICS workshop on Graphics hardwarePages 67-73 &/p&&p&[3]ATTACK OF THE DEPTH BUFFER, Matt Pettineo, 2010&/p&&p&[4]Maximizing Depth Buffer Range and Precision, Brano Kemen, 2012&/p&
最近涉足一点移动开发,倒是刚上来就被OPENGL系的深度问题给恶心坏了。由于unity无法拿到移动平台上硬件做的z-buffer,所以大家常规做法就是自己去写个z-buffer。但是由于经过透视变换,透视本质上是不保持深度的线性变化的,结果很多利用深度的“奇技淫巧”…
&img src=&/50/v2-b712e7157bcc6dcde31e2_b.png& data-rawwidth=&2880& data-rawheight=&1162& class=&origin_image zh-lightbox-thumb& width=&2880& data-original=&/50/v2-b712e7157bcc6dcde31e2_r.png&&&p&&b&说明&/b&:我在写作《全局光照技术》的时候,第一步做的工作就是对渲染相关的图形学论文进行分类整理,这样能使我对各种算法的类别,思想,使用的数学知识等有清晰的认识,以使该书的内容结构更加稳固,全面,能够覆盖从理论到实践,从基础原理到工业中的最佳实践,以及行业中最重要的那些趋势。当我第一次在&a href=&/?target=https%3A///item/8493.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&摩点的众筹&i class=&icon-external&&&/i&&/a&中展示该项工作的时候,很多朋友表示对其分类工作感兴趣,我承诺这个工作一定会公开。但是考虑到单纯一个分类对其他人可能并没有太大价值,比如每个分类的依据,涉及的理论等需要有简单的解释,才能更好的帮助别人,所以我本打算在书完成之后建一个论文索引网站,其功能不仅包含分类,还有对每个分类原理的基本说明,每个方法类别的基本描述,甚至包含专有名词的翻译,论文下载地址等。&/p&&p&但是,还是经常收到邮件等要求提前了解一下,所以这里先简单列出一些,等图书完成之后会考虑怎样以更好的方式让这个工作的价值最大化。&b&另一方面,主要是希望借此让大家一起讨论你认为这个网站应该具有什么样的形式和具有哪些功能更有实际意义,我的部分想法在留言中,欢迎大家献计献策。&/b&&/p&&p&目前仅包含光线/路径追踪(Ray/Path Tracing),光子映射(Photon Mapping)和梅特波利斯光照传输(Metropolis Light Transport)三个部分的内容,分类标题被加粗了,暂时没有精力做太多更细的整理。&/p&&p&&br&&/p&&p&&b&1 Ray/Path Tracing:&/b&&/p&&p&1979 An Improved Illumination Model for Shaded Display.pdf&/p&&p&1984 Distributed Ray Tracing.pdf&/p&&p&1986 The Rendering Equation.pdf&/p&&p&1995 Practical Ray Tracing.pdf&/p&&p&1995 The Reyes Image Rendering Architecture&/p&&p&1996 Rendering Large Scenes Using Parallel Ray Tracing.pdf&/p&&p&1998 Quasi-Monte Carlo Global Light Tracing with Infinite Number of Rays.pdf&/p&&p&1999 Monte-Carlo Global Illumination Methods State of the Art and New Developments.pdf&/p&&p&2001 State of the Art in Monte Carlo Ray Tracing.pdf&/p&&p&2002 Ray Tracing on Programmable Graphics Hardware.pdf&/p&&p&2003 Monte Carlo Ray Tracing.pdf&/p&&p&2003 Realtime Ray Tracing and its use for Interactive Global Illumination.pdf&/p&&p&2004 Real-time Ray Tracing and Interactive Global Illumination&/p&&p&2004 State of the Art in Monte Carlo Global Illumination.pdf&/p&&p&2007 Accelerating the bidirectional path tracing algorithm using a dedicated intersection processor&/p&&p&2007 Packet-based Whitted and Distribution Ray Tracing.pdf&/p&&p&2007 Photorealistic Image Rendering with Population Monte Carlo Energy Redistribution.pdf&/p&&p&2008 Interactive Ray Tracing with CUDA.pdf&/p&&p&2008 Ptex Per-Face Texture Mapping for production rendering&/p&&p&2008 Raytracing Prefiltered Occlusion for Aggregate Geometry&/p&&p&2008 Real-Time KD-Tree Construction on Graphics Hardware.pdf&/p&&p&2008 Real-time Path Planning in Dynamic Virtual Environments Using Multi-agent Navigation Graphs.pdf&/p&&p&2009 An Efficient GPU-based Approach for Interactive Global Illumination.pdf&/p&&p&2009 Hybrid Ray Tracing - Tracing Using GPU-Accelerated Image-Space Methods.pdf&/p&&p&2009 Sparse Voxel Octree Ray Tracing on the GPU.pdf&/p&&p&2010 Architecture Considerations for Tracing Incoherent Rays.pdf&/p&&p&2010 Combining Rasterization and Ray Tracing Techniques to Approximate Global Illumination in Real-Time&/p&&p&2010 Experiments with GPGPU based Path Tracing&/p&&p&2010 Path Regeneration for Interactive Path Tracing&/p&&p&2010 Path Tracing - A non-biased Solution to the Rendering Equation.pdf&/p&&p&2010 Recent developments in ray tracing for video games.pdf&/p&&p&2010 Spectral Light Transport Simulation using a Precision-based Ray Tracing Architecture.pdf&/p&&p&2011 A Divide-and-Conquer Algorithm for Simultaneous Photon Map Queries.pdf&/p&&p&2011 Accelerating Path Tracing by Eye-Path Reprojection.pdf&/p&&p&2011 Acceleration Methods for Ray Tracing based Global Illumination.pdf&/p&&p&2011 Performance Considerations When Using a Dedicated Ray Traversal Engine.pdf&/p&&p&2012 A Mobile Accelerator Architecture for Ray Tracing.pdf&/p&&p&2012 Importance Sampling Techniques for Path Tracing in Participating Media&/p&&p&2012 Improving Data Locality for Efficient In-Core Path Tracing.pdf&/p&&p&2012 Ray Tracing in Real-Time Games.pdf&/p&&p&2012 Real-Time Bidirectional Path Tracing via Rasterization.pdf&/p&&p&2012 The Brigade Renderer - A Path Tracer for Real-Time Games - 2012&/p&&p&2013 PantaRay - Fast Ray-traced Occlusion Caching of Massive Scenes.pdf&/p&&p&2013 Ray Tracing is the Future and ever will be.pdf&/p&&p&2014 A Bidirectional Path Tracing Method for Global Illumination Rendering on GPU&/p&&p&2014 Exploiting Local Orientation Similarity for Efficient Ray Traversal of Hair and Fur&/p&&p&2014 Multi-Hit Ray Traversal&/p&&p&2014 Ray tracing via GPU rasterization&/p&&p&2014 Realtime Path Tracing and Point Cloud Models.pdf&/p&&p&2015 Adaptive Rendering a posteriori methods&/p&&p&2015 An Evaluation of Multi-Hit Ray Traversal in a BVH Using Existing First-Hit/Any-Hit Kernels&/p&&p&2015 Efficient Implementation of Bi-directional Path Tracer on GPU&/p&&p&2015 Filtering Environment Illumination for Interactive Physically-Based Rendering in Mixed Reality.pdf&/p&&p&2015 Path tracing In RenderMan.pdf&/p&&p&2015 Real-Time High Quality Rendering.pdf&/p&&p&2015 The Path Tracing Revolution in the Movie Industry.pdf&/p&&p&2015 Unifying Points, Beams, and Paths in Volumetric Light Transport Simulation&/p&&p&2016 A Practical and Controllable Hair and Fur Model for Production Path Tracing&/p&&p&2016 Experiences with path space sampling algorithms in Manuka&/p&&p&2016 The Path to Path-Traced Movies&/p&&p&&br&&/p&&p&&b&1.1 Bidirectional path tracing:&/b&&/p&&p&1993 Bidirectional Path Tracing.pdf&/p&&p&1994 Bidirectional Estimators for Light Transport.pdf&/p&&p&2007 Accelerating the bidirectional path tracing algorithm using a dedicated intersection processor.pdf&/p&&p&Bidirectional Path Tracing Implementation using NVIDIA OptiX&/p&&p&&br&&/p&&p&&b&1.2 Denoising:&/b&&/p&&p&1987 Generating antialiased images at low sampling densities&/p&&p&2008 Multidimensional Adaptive Sampling and Reconstruction for Ray Tracing&/p&&p&2014 Sample-Based Manifold Filtering for Interactive Global Illumination and Depth of Field&/p&&p&2015 Path-space Motion Estimation and Decomposition for Robust Animation Filtering&/p&&p&2015 Recent Advances in Adaptive Sampling and Reconstruction for Monte Carlo Rendering&/p&&p&2016 Adaptive Image-Space Sampling for Gaze-Contingent Real-time Rendering&/p&&p&&br&&/p&&p&&b&1.2.1 interactive&/b&&/p&&p&2015 Specular Lobe-Aware Filtering and Upsampling for Interactive Indirect Illumination&/p&&p&&br&&/p&&p&&b&1.2.2 posteriori&/b&&/p&&p&&b&1.2.2.1 Filters using Auxiliary Features&/b&&/p&&p&2011 Implementation of Random Parameter Filtering&/p&&p&2011 On Filtering the Noise from the Random Parameters in Monte Carlo Rendering &/p&&p&2011 Temporal Light Field Reconstruction for Rendering Distribution Effects&/p&&p&2012 Reconstructing the Indirect Light Field for Global Illumination.pdf&/p&&p&2012 Robust Image Denoising using a Virtual Flash Image for Monte Carlo Ray Tracing&/p&&p&2012 SURE-based Optimization for Adaptive Sampling and Reconstruction&/p&&p&2012 SURE-based Optimization for Adaptive Sampling and Reconstruction.pptx&/p&&p&2013 Robust Denoising using Feature and Color Information&/p&&p&&br&&/p&&p&&b&1.2.2.2.First-order Regression&/b&&/p&&p&2014 Adaptive Rendering based on Weighted Local Regression&/p&&p&2015 Adaptive Rendering with Linear Predictions&/p&&p&2016 Adaptive Polynomial Rendering&/p&&p&2016 Nonlinearly Weighted First-order Regression for Denoising Monte Carlo Renderings&/p&&p&2016 Regularizing Image Reconstruction for Gradient-Domain Rendering with Feature Patches&/p&&p&&br&&/p&&p&&b&1.2.2.3 Image Space Denoising Filters&/b&&/p&&p&2005 Areview of image denoising algorithms, with a new one&/p&&p&2012 Adaptive Rendering with Non-Local Means Filtering&/p&&p&2013 Removing the Noise in Monte Carlo Rendering with General Image Denoising Algorithms&/p&&p&2014 Boosting Monte Carlo Rendering by Ray Histogram Fusion&/p&&p&&br&&/p&&p&&b&1.2.2.4 Multiscale filters&/b&&/p&&p&2009 Adaptive Wavelet Rendering&/p&&p&2011 Adaptive Sampling and Reconstruction using Greedy Error Minimization&/p&&p&2011 Adaptive Wavelet Rendering(slides)&/p&&p&2015 General and Robust Error Estimation and Reconstruction for Monte Carlo Rendering&/p&&p&&br&&/p&&p&&b&1.2.3 Priori&/b&&/p&&p&2009 Frequency Analysis and Sheared Reconstruction for Rendering Motion Blur&/p&&p&2011 A Frequency Analysis of Monte-Carlo and other Numerical Integration Schemes&/p&&p&2015 Fast 4D Sheared Filtering for Interactive Rendering of Distribution Effects&/p&&p&&br&&/p&&p&&b&1.3 Efficient&/b&&/p&&p&2005 An efficient and robust ray-box intersection algorithm&/p&&p&2005 Importance Resampling for Global Illumination&/p&&p&2005 Ray Tracing with Reduced-Precision Bounding Volume Hierarchies&/p&&p&2006 Geometric and Arithmetic Culling Methods for Entire Ray Packets&/p&&p&2007 Realtime Ray Tracing on GPU with BVH-based Packet Traversal&/p&&p&2007 Using SIMD Registers and Instructions to Enable Unstruction-Level Parallelism in Sorting Algorithms&/p&&p&2009 Faster Incoherent Rays- Multi-BVH Ray Stream Tracing&/p&&p&2009 Spatial Splits in Bounding Volume Hierarchies&/p&&p&2009 StreamRay-A-stream-filtering-architecture-for-coherent-ray-tracing&/p&&p&2013 Megakernels Considered Harmful/ Wavefront Path Tracing on GPUs&/p&&p&2013 Sorted Deferred Shading for Production Path Tracing.pdf&/p&&p&2014 Efficient GPU Screen-Space Ray Tracing.pdf&/p&&p&2015 Efficient Ray Tracing of Subdivision Surfaces using Tessellation Caching&/p&&p&2015 Reorder Buffer - An Energy-Efficient Multithreading Architecture for Hardware MIMD Ray Traversal.pdf&/p&&p&2015 Robust BVH Ray Traversal - revised&/p&&p&2016 A Multiview and Multilayer Approach for Interactive Ray Tracing&/p&&p&2016 Embree Ray Tracing Kernels/ Overview and New Features&/p&&p&2016 Local Shading Coherence Extraction for SIMD-Efficient Path Tracing on CPUs&/p&&p&2016 Parallel Spatial Splits in Bounding Volume Hierarchies&/p&&p&2016 Texture Space Caching and Reconstruction for Ray Tracing&/p&&p&&br&&/p&&p&&b&1.3.1 Combine&/b&&/p&&p&2009 Faster Incoherent Rays- Multi-BVH Ray Stream Tracing&/p&&p&2012 Combining Single and Packet Ray Tracing for Arbitrary Ray Distributions on the Intel?R MIC Architecture&/p&&p&2014 Dynamic Ray Stream Traversal&/p&&p&2015 Efficient ray tracing kernels for modern CPU architectures&/p&&p&&br&&/p&&p&&b&1.3.2 Ray Packet&/b&&/p&&p&&b&1.3.2.1 Breadth-first&/b&&/p&&p&86 Using Caching and Breadth-first Search to Speed Up Ray-Tracing&/p&&p&&br&&/p&&p&&b&1.3.2.1.1 ray queuing&/b&&/p&&p&10
Architecture Considerations for Tracing Incoherent Rays&/p&&p&97 Ren- dering complex scenes with memory-coherent ray tracing&/p&&p&&br&&/p&&p&&b&1.3.2.1.2 ray reordering/sorting&/b&&/p&&p&08 Adaptive Ray Packet Reordering&/p&&p&&br&&/p&&p&&b&1.3.2.1.3 ray stream filtering&/b&&/p&&p&07 SIMD Ray Stream Tracing - SIMD Ray Traversal with Generalized Ray Packets and On-the-fly Re-Ordering&/p&&p&08 Coherent Ray Tracing via Stream Filtering&/p&&p&&br&&/p&&p&&b&1.3.2.2 Depth-first&/b&&/p&&p&01 Interactive Rendering with Coherent Ray Tracing&/p&&p&07 Ray Tracing Deformable Scenes Using Dynamic Bounding Volume Hierarchies&/p&&p&08 Large Ray Packets for Real-time Whitted Ray Tracing&/p&&p&&br&&/p&&p&&b&1.3.3 Single Ray&/b&&/p&&p&08 Efficient SIMD Single-Ray Traversal using Multi-branching BVHs&/p&&p&08 Shallow Bounding Volume Hierarchies for Fast SIMD Ray Tracing of Incoherent Rays&/p&&p&09 Understanding the Efficiency of Ray Traversal on GPUs.pdf&/p&&p&13 Faster Incoherent Ray Traversal Using 8-Wide AVX Instructions&/p&&p&&br&&/p&&p&&b&1.4 Gradient Domain&/b&&/p&&p&03 Poisson Image Editing&/p&&p&06 Poisson Surface Reconstruction&/p&&p&08 Fourier Analysis of the 2D Screened Poisson Equation for Gradient Domain Problems&/p&&p&09 GradientShop/ A Gradient-Domain Optimization Framework for Image and Video Filtering&/p&&p&11
SSD/ Smooth Signed Distance Surface Reconstruction&/p&&p&13 Screened Poisson Surface Reconstruction&/p&&p&15 Gradient-Domain Bidirectional Path Tracing&/p&&p&15 Gradient-Domain Path Tracing.pdf&/p&&p&15 Gradient-Domain Path Tracing.pptx&/p&&p&15 Supplemental Material for Gradient-Domain Path Tracing&/p&&p&16 Temporal Gradient-Domain Path Tracing&/p&&p&&br&&/p&&p&&b&1.5 Hardware&/b&&/p&&p&10 OptiX - A General Purpose Ray Tracing Engine.pdf&/p&&p&12 Bidirectional Path Tracing Implementation using NVIDIA OptiX.pdf&/p&&p&13 Building Ray Tracing Applications with OptiX.pdf&/p&&p&14 Embree/ A Kernel Framework for Efficient CPU Ray Tracing&/p&&p&14 Ray tracing/ the future is now &/p&&p&&br&&/p&&p&&b&1.6 Hybird&/b&&/p&&p&09| A Hybrid GPU Rendering Pipeline for Alias-Free Hard Shadows.pdf&/p&&p&09| Fast Hard and Soft Shadow Generation on Complex Models using Selective Ray Tracing.pdf&/p&&p&09| Interactive Ray Tracing on the GPU and NVIRT Overview.pdf&/p&&p&10| A Hybrid Approach to Interactive Global Illumination and Soft Shadows.pdf&/p&&p&12| A hybrid GPU rasterized and ray traced rendering pipeline for real time rendering of per pixel effects&/p&&p&14| Ray-Traced Reflections in Real-Time Using Heuristic Based Hybrid Rendering.pdf&/p&&p&15| Hybrid Ray Traced Shadows&/p&&p&89| Hybird Shadow Testing Scheme for Ray Tracing.pdf&/p&&p&hybrid-rendering.pdf&/p&&p&luebke-nvidia-case-studies.pdf&/p&&p&&br&&/p&&p&&b&1.7 Mobile&/b&&/p&&p&2008 Parallel Path Tracing using Incoherent Path-Atom Binning&/p&&p&2010 Architecture Considerations for Tracing Incoherent Rays&/p&&p&2015 A Mobile Ray Tracing Engine with Hybrid Number Representations&/p&&p&2015 An Efficient Hybrid Ray Tracing and Rasterizer Architecture for Mobile GPU&/p&&p&2015 Latency Tolerance Techniques for Real-time Ray Tracing on Mobile Computing Platform&/p&&p&&br&&/p&&p&&b&1.8 Quasi-Monte Carlo&/b&&/p&&p&2007 Quasi-Monte Carlo Light Transport Simulation by Efficient Ray Tracing.pdf&/p&&p&2012 Quasi-Monte Carlo Image Synthesis in a Nutshell.pdf&/p&&p&Efficient Bidirectional Path Tracing by Randomized Quasi-Monte Carlo Integration&/p&&p&&br&&/p&&p&&b&1.9 Ray differentials&/b&&/p&&p&1999 Tracing ray differential.pdf&/p&&p&2000 Perturbation Methods for Interactive Specular Reflections&/p&&p&2000 Theory and Application of Specular Path Perturbation&/p&&p&2001 Path differentials and applications&/p&&p&2003 Ray Differentials and Multiresolution Geometry Caching for Distribution Ray Tracing in Complex Scenes&/p&&p&2005 A Frequency Analysis of Light Transport&/p&&p&2005 A Frequency Analysis of Light Transport.ppt&/p&&p&2006 Ray Tracing for the Movie ‘Cars’.pdf&/p&&p&2012 A Frequency Analysis of Light Transport from theory to implementation.pdf&/p&&p&2013 5D Covariance Tracing for Efficient Defocus and Motion Blur&/p&&p&2013 5D Covariance Tracing for Efficient Defocus and Motion Blur(slides)&/p&&p&2014 A Local Frequency Analysis of Light Scattering and Absorption&/p&&p&2014 Efficient Monte Carlo Rendering with Realistic Lenses&/p&&p&2014 Progressive Spectral Ray Differentials&/p&&p&2014 Spectral Ray Differentials&/p&&p&2016 Antialiasing Complex Global Illumination Effects in Path-space&/p&&p&Layered Light Field Reconstruction for Defocus Blur&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&2. Photon Mapping&/b&&/p&&p&00 A Practical Guide to Global Illumination using Photon Maps.pdf&/p&&p&03 Bias compensation for photon maps&/p&&p&03 Photon Mapping on Programmable Graphics Hardware.pdf&/p&&p&04 Realtime Caustics Using Distributed Photon Mapping.pdf&/p&&p&04 Simulating Photon Mapping for Real-time Applications.pdf&/p&&p&05 Photon Mapping Made Easy.pdf&/p&&p&05 Reordering for Cache Conscious Photon Mapping.pdf&/p&&p&06 - ltscourse - mcmc2 - kaplanyan - notes&/p&&p&06 Bias in Rendering.pdf&/p&&p&07 High Quality Rendering using Ray Tracing and Photon Mapping.pdf&/p&&p&07 SIMD Packet Techniques for Photon Mapping.pdf&/p&&p&08 Fast Final Gathering via Reverse Photon Mapping.pdf&/p&&p&09 Photon Mapping on the GPU.pdf&/p&&p&11 Accelerating Photon Mapping with Photon Flipping and Invalidity Photons.pdf&/p&&p&11 Interactive Ray-tracer Using Photon Mapping Technique.pdf&/p&&p&12 Historygrams- Enabling Interactive Global Illumination in Direct Volume Rendering using Photon Mapping.pdf&/p&&p&12 Photon Mapping in Pixar’s RenderMan&/p&&p&13 An Evaluation of the GAMA/StarPU Frameworks for Heterogeneous Platforms/ the Progressive Photon Mapping Algorithm.pdf&/p&&p&13 Photon Mapping based Simulation of Multi-Path Reflection Artifacts in Time-of-Flight Sensors.pdf&/p&&p&13 Understanding Photon Mapping.pdf&/p&&p&14 A Framework for Transient Rendering&/p&&p&15 Coherent photon mapping on the Intel MIC architecture.pdf&/p&&p&16 A survey of photon mapping state-of-the-art research and future challenges.pdf&/p&&p&17 Gradient-Domain Photon Density Estimation&/p&&p&86 Backward Ray Tracing.pdf&/p&&p&95 Importance driven path tracing using the photon map&/p&&p&96 Global Illumination using Photon Maps.pdf&/p&&p&96 Rendering caustics on non-Lambertian surfaces&/p&&p&Radiosity Using Photon Maps&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&2.1 Improve&/b&&/p&&p&02 A Particle-Path based Method for Monte Carlo Density Estimation.pdf&/p&&p&05 Diffusion based Photon Mapping&/p&&p&07 Photon Differentials.pdf&/p&&p&09 Interactive Global Photon Mapping.pdf&/p&&p&09 Into the Blue- Better Caustics through Photon Relaxation.pdf&/p&&p&10 Temporal Photon Differentials.pdf&/p&&p&12 Description and solution of an unreported intrinsic bias in photon mapping density estimation with constant kernel&/p&&p&14 Overestimation and underestimation biases in photon mapping with non-constant kernels&/p&&p&14 Photon Differential Splatting for Rendering Caustics&/p&&p&15 Anisotropic density estimation for photon mapping&/p&&p&&br&&/p&&p&&b&2.2 k-d tree&/b&&/p&&p&02 On Improving kd-trees for Ray Shooting&/p&&p&06 On building fast kd-Trees for Ray Tracing, and on doing that in O(N log N)&/p&&p&15 Building a Balanced k-d Tree in O(kn log n) Time&/p&&p&75 Multidimensional binary search trees used for associa- tive searching&/p&&p&pbasic&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&2.3 Participating Media&/b&&/p&&p&05 A Survey on Participating Media Rendering Techniques&/p&&p&05 Advanced Density Estimation Techniques for Global Illumination&/p&&p&05 Ray Maps for Global Illumination&/p&&p&05 Ray Maps for Global Illumination - slides&/p&&p&07 Rendering Translucent Materials Using Photon Diffusion&/p&&p&08 Efficient Monte Carlo Methods for Light Transport in Scattering Media.pdf&/p&&p&08 The Beam Radiance Estimate for Volumetric Photon Mapping&/p&&p&08 The Beam Radiance Estimate for Volumetric Photon Mapping-slides.pdf&/p&&p&10 Unbiased, Adaptive Stochastic Sampling for Rendering Inhomogeneous Participating Media&/p&&p&11 A Comprehensive Theory of Volumetric Radiance Estimation using Photon Points and Beams.pdf&/p&&p&11 A Programmable System for Artistic Volumetric Lighting&/p&&p&11 Progressive Expectation–Maximization for Hierarchical Volumetric Photon Mapping.pdf&/p&&p&11 Progressive Photon Beams.pdf&/p&&p&12
Importance Sampling Techniques for Path Tracing in Participating Media&/p&&p&13 Joint Importance Sampling of Low-Order Volumetric Scattering&/p&&p&13 Joint Importance Sampling of Low-order Volumetric Scattering.pptx&/p&&p&14 Robust light transport simulation in participating media&/p&&p&14 Unifying Points, Beams, and Paths in Volumetric Light Transport Simulation&/p&&p&16 On learning the visibility for joint importance sampling of low-order scattering&/p&&p&17 Beyond Points and Beams/ Higher-Dimensional Photon Samples for Volumetric Light Transport&/p&&p&17 Extended Path Integral Formulation for Volumetric Transport&/p&&p&17 Unbiased Light Transport Estimators for Inhomogeneous Participating Media&/p&&p&17 Unbiased Light Transport Estimators for Inhomogeneous Participating Media.pptx&/p&&p&98 Efficient Simulation of Light Transport in Scenes with Participating Media using Photon Maps&/p&&p&2014-upbp-notes&/p&&p&2014-upbp-poster.pdf&/p&&p&2014-upbp-slides.pptx&/p&&p&Efficient Ray Based Global Illumination Using Photon Maps&/p&&p&Efficient Simulation of Light Transport in Scenes with Participating Media&/p&&p&jarosz11comprehensive-slides.pdf&/p&&p&&br&&/p&&p&&b&2.3.1 Transmittance Estimate&/b&&/p&&p&10 Efficient Free Path Sampling in Inhomogeneous Media&/p&&p&11 Free Path Sampling in High Resolution Inhomogeneous Participating Media&/p&&p&13 Integral formulation of null-collision Monte Carlo algorithms&/p&&p&14 Comparative analysis of discrete and continuous absorption weighting estimators used in Monte Carlo simulations of radiative transport in turbid media&/p&&p&14 Residual Ratio Tracking for Estimating Attenuation in Participating Media&/p&&p&14 Residual Ratio Tracking for Estimating Attenuation in Participating Media.key&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&2.4 Progressive Photon Mapping&/b&&/p&&p&01 Progressive Photon Mapping on GPUs.pdf&/p&&p&05 Fast Final Gathering via Reverse Photon Mapping.pdf&/p&&p&08 Progressive Photon Mapping.pdf&/p&&p&09 Stochastic Progressive Photon Mapping&/p&&p&10 A Progressive Error Estimation Framework for Photon Density Estimation.pdf&/p&&p&10 Parallel Progressive Photon Mapping on GPUs.pdf&/p&&p&11 Improved Stochastic Progressive Photon Mapping with Metropolis Sampling.pdf&/p&&p&11 Progressive Photon Mapping A Probabilistic Approach.pdf&/p&&p&12 Progressive Photon Mapping Extensions.pdf&/p&&p&12 Stochastic Progressive Photon Mapping for Dynamic Scenes&/p&&p&12 Supplemental Material/ Adaptive Progressive Photon Mapping.pdf&/p&&p&13 Adaptive Progressive Photon Mapping&/p&&p&13 Progressive Photon Relaxation.pdf&/p&&p&14 Distributed Out-of-Core Stochastic Progressive Photon Mapping&/p&&p&APPM_SIGAsia2013.pptx&/p&&p&&br&&/p&&p&&b&2.4.1 Recursive&/b&&/p&&p&91 Using non-Stochastic terms to advantage in kernel-based estimation of integrated squared density derivatives&/p&&p&Nonparametric Functional Estimation Chapter 5&/p&&p&&br&&/p&&p&&b&2.5 Real-Time&/b&&/p&&p&02 Real Time Photon Mapping.pdf&/p&&p&04 Real-time Global Illumination by Simulating Photon Mapping.pdf&/p&&p&04 Realtime Realtime Caustics Using Caustics Using Distributed Photon Mapping.pdf&/p&&p&04 Simulating Photon Mapping for Real-time Applications.pdf&/p&&p&09 Hardware-Accelerated Global Illumination by Image Space Photon Mapping.pdf&/p&&p&10 Real-time Indirect Illumination Image Space Light Lattice Photon Mapping with Spherical Harmonics.pdf&/p&&p&11 Real-Time Photon Mapping on GPU.pdf&/p&&p&12 Real-Time GPU Photon Mapping.pdf&/p&&p&13 CloudLight- A system for amortizing indirect lighting in real-time rendering.pdf&/p&&p&13 Toward Practical Real-Time Photon Mapping- Efficient GPU Density Estimation.pdf&/p&&p&&br&&/p&&p&&b&2.6 State of the Art in Photon Density Estimation&/b&&/p&&p&08 Advanced Global Illumination Using Photon Mapping.pdf&/p&&p&12 Multiresolution Radiosity Caching for Global Illumination in Movies&/p&&p&12 State of the Art in Photon Density Estimation.pdf&/p&&p&13 State of the Art in Photon Density Estimation.pdf&/p&&p&13 Toward Practical Real-Time Photon Mapping- Efficient GPU Density Estimation &/p&&p&SIGGRAPH 2016 Sample Course Notes&/p&&p&&br&&/p&&p&&b&2.7 VCM/UPS&/b&&/p&&p&04 - ltscourse - vcm - georgiev - notes&/p&&p&11 Bidirectional Light Transport with Vertex Merging&/p&&p&11 Bidirectional Photon Mapping&/p&&p&12 A Path Space Extension for Robust Light Transport Simulation&/p&&p&12 Light Transport Simulation with Vertex Connection and Merging&/p&&p&12 Light Transport Simulation with Vertex Connection and Merging (supplemental document)&/p&&p&12 Light Transport Simulation with Vertex Connection and Merging.pptx&/p&&p&13 Combining Photon Mapping and Bidirectional Path Tracing.pdf&/p&&p&13 Path Space Regularization for Holistic and Robust Light Transport&/p&&p&13 Vertex Connection and Merging Combining photon mapping
and bidirectional path tracing&/p&&p&14 Combining Photon Mapping and Bidirectional Path Tracing&/p&&p&&br&&/p&&p&&b&3. Metropolis Light Transport&/b&&/p&&p&1973 Optimum Monte-Carlo sampling using Markov chains&/p&&p&1997 Metropolis Light Transport.pdf&/p&&p&1999 On The Start-Up Bias Problem Of Metropolis Sampling&/p&&p&2000 A Variance Analysis of the Metropolis Light Transport Algorithm&/p&&p&2005 Energy Redistribution Path Tracing.pdf&/p&&p&2005 Implementing Energy Redistribution Path Tracing.pdf&/p&&p&2007 Coherent Metropolis Light Transport with Multiple-Try Mutations&/p&&p&2016 A Spatial Target Function for Metropolis Photon Tracing&/p&&p&2016 Coherent Metropolis Light Transport on the GPU using Speculative Mutations&/p&&p&&br&&/p&&p&&b&3.1 Gradient-Domain&/b&&/p&&p&2013 Gradient-Domain Metropolis Light Transport.pdf&/p&&p&2013 Gradient-Domain Metropolis Light Transport(pptx).pdf&/p&&p&2014 Improved Sampling for Gradient-Domain Metropolis Light Transport&/p&&p&2015 Anisotropic Gaussian Mutations for Metropolis Light Transport through Hessian-Hamiltonian Dynamics&/p&&p&2015 Anisotropic Gaussian Mutations for Metropolis Light Transport through Hessian-Hamiltonian Dynamics.key&/p&&p&2015 Anisotropic Gaussian Mutations for Metropolis Light Transport through Hessian-Hamiltonian Dynamics.pptx&/p&&p&&br&&/p&&p&&b&3.2 Inverse Path Sampling&/b&&/p&&p&1995 Reversible jump Markov chain Monte Carlo computation and Bayesian model determination&/p&&p&2015 Informed Choices in Parimary Sample Space&/p&&p&2016 Improving Global Exploration of MCMC Light Transport Simulation&/p&&p&2017 Charted Metropolis Light Transport&/p&&p&2017 Charted Metropolis Light Transport-1&/p&&p&2017 Fusing State Spaces for Markov Chain Monte Carlo Rendering&/p&&p&2017 Reversible Jump Metropolis Light Transport using Inverse Mappings&/p&&p&&br&&/p&&p&&b&3.3 Mainfold Exploration&/b&&/p&&p&2012 Manifold Exploration (Expanded Technical Report)&/p&&p&2012 Manifold Exploration/ A Markov Chain Monte Carlo Technique for Rendering Scenes with Difficult Specular Transport&/p&&p&2013 Light Transport on Path-Space Manifolds&/p&&p&2014 Hero Wavelength Spectral Sampling&/p&&p&2014 HSLT_slides.pptx&/p&&p&2014 The Natural-Constraint Representation of the Path Space for Efficient Light Transport Simulation&/p&&p&2014 The Natural-Constraint Representation of the Path Space for Efficient Light Transport Simulation_supplementary.pdf&/p&&p&2015 Improved Half Vector Space Light Transport&/p&&p&2015 Improved half vector space light transport_talk&/p&&p&2015 Manifold Next Event Estimation.pdf&/p&&p&2015 Manifold next event estimation(slides)&/p&&p&2016 Estimating Local Beckmann Roughness for Complex BSDFs&/p&&p&2016 Path Space Markov Chain Monte Carlo Methods in Computer Graphics&/p&&p&&br&&/p&&p&&b&3.4 PSSMLT&/b&&/p&&p&2001 Simple and Robust Mutation Strategy for Metropolis Light Transport Algorithm&/p&&p&2002 A Simple and Robust Mutation Strategy for the Metropolis Light Transport Algorithm&/p&&p&2014 Multiplexed Metropolis Light Transport&/p&&p&2014 Multiplexed Metropolis Light Transport_slides.pdf&/p&&p&&br&&/p&&p&&b&3.4.1 Simulated Tempering&/b&&/p&&p&1992 Simulated tempering- a new Monte Carlo scheme&/p&&p&1995 Annealing Markov Chain Monte Carlo with Applications to Ancestral Inference&/p&&p&2001 Extended Ensemble Monte Carlo&/p&&p&&br&&/p&&p&&b&3.5 VCM/UPS/MLT&/b&&/p&&p&2011 Robust Adaptive Photon Tracing using Photon Path Visibility&/p&&p&2016 Robust Light Transport Simulation via Metropolised Bidirectional Estimators&/p&&p&&/p&
说明:我在写作《全局光照技术》的时候,第一步做的工作就是对渲染相关的图形学论文进行分类整理,这样能使我对各种算法的类别,思想,使用的数学知识等有清晰的认识,以使该书的内容结构更加稳固,全面,能够覆盖从理论到实践,从基础原理到工业中的最佳实…
&img src=&/50/v2-f113022abca9d1d58a9f33_b.png& data-rawwidth=&1911& data-rawheight=&883& class=&origin_image zh-lightbox-thumb& width=&1911& data-original=&/50/v2-f113022abca9d1d58a9f33_r.png&&&h2&&b&0x00 前言&/b&&/h2&&p&在今年6月的Unite Europe 2017大会上 Unity 的CTO Joachim Ante演示了未来Unity新的编程特性——C# Job系统,它提供了编写多线程代码的一种既简单又安全的方法。Joachim通过一个大规模群落行为仿真的演示,向我们展现了最新的Job系统是如何充分利用CPU多核架构的优势来提升性能的。&/p&&p&但是吸引我的并非是C# Job如何利用多线程实现性能的提升,相反,吸引我的是如何在现在还没有C# Job系统的Unity中实现类似的效果。&br&&/p&&img src=&/v2-8ec00ef43e51efaac50d_b.jpg& data-rawwidth=&631& data-rawheight=&318& data-thumbnail=&/v2-8ec00ef43e51efaac50d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&631& data-original=&/v2-8ec00ef43e51efaac50d_r.gif&&&p&在Ante的session中,他的演示主要是利用多核CPU提高计算效率来实现大群体行为。那么我就来演示一下,如何利用GPU来实现类似的目标吧。利用GPU做一些非渲染的计算也被称为GPGPU——General-purpose computing on graphics processing units,图形处理器通用计算。&/p&&p&&br&&/p&&h2&&b&0x01 CPU的限制&/b&&/h2&&p&为何Joachim 要用这种大规模群落行为的仿真来宣传Unity的新系统呢?&/p&&p&其实相对来说复杂的并非逻辑,这里的关键词是“大规模”——在他的演示中,实现了20,000个boid的群体效果,而更牛逼的是帧率保持在了40fps上下。&/p&&p&事实上自然界中的这种群体行为并不罕见,例如大规模的鸟群,大规模的鱼群。&br&&/p&&img src=&/v2-e7cab0d48c34c234b54d61ea17b0c229_b.jpg& data-rawwidth=&1600& data-rawheight=&1000& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&/v2-e7cab0d48c34c234b54d61ea17b0c229_r.jpg&&&p&在搜集资料的时候,我还发现了一位优秀的水下摄影师、加利福尼亚海湾海洋计划总监octavio aburto的个人网站上的一些让人惊叹的作品。&br&&/p&&img src=&/v2-c500c495e87bdc6b69c337_b.jpg& data-rawwidth=&1920& data-rawheight=&1278& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-c500c495e87bdc6b69c337_r.jpg&&&p&图片来自&u&&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Octavio Aburto&i class=&icon-external&&&/i&&/a&&/u& &/p&&img src=&/v2-5cfa0e5f1eb7_b.jpg& data-rawwidth=&1500& data-rawheight=&998& class=&origin_image zh-lightbox-thumb& width=&1500& data-original=&/v2-5cfa0e5f1eb7_r.jpg&&&p&图片来自&u&&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Octavio Aburto&i class=&icon-external&&&/i&&/a&&/u&&br&而要在计算机上模拟出这种自然界的现象,乍看上去似乎十分复杂,但实际上却并非如此。&br&查阅资料,可以发现早在1986年就由&u&&a href=&/?target=https%3A///cwr/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Craig Reynolds&i class=&icon-external&&&/i&&/a&&/u&提出了一个逻辑简单,而效果很赞的群体仿真模型——而作为这个群体内的个体的专有名词&b&boid&/b&(bird-oid object,类鸟物)也是他提出的。&/p&&p&简单来说,一个群体内的个体包括3种基本的行为:&/p&&ul&&li&&b&Separation&/b&:顾名思义,该个体用来规避周围个体的行为。&/li&&/ul&&img src=&/v2-7bcf71d22ea490ee3f61e9f_b.jpg& data-rawwidth=&217& data-rawheight=&145& class=&content_image& width=&217&&&p&&br&&/p&&ul&&li&&b&Alignment&/b&:作为一个群体,要有一个大致统一的前进方向。因此作为群体中的某个个体,可以根据自己周围的同伴的前进方向获取一个前进方向。&/li&&/ul&&img src=&/v2-bdc735ea28e0fdef1866f7_b.jpg& data-rawwidth=&217& data-rawheight=&145& class=&content_image& width=&217&&&p&&br&&/p&&ul&&li&&b&Cohesion&/b&:同样,作为一个群体肯定要有一个向心力。否则队伍四散奔走就不好玩了,因此每个个体就可以根据自己周围同伴的位置信息获取一个向中心聚拢的方向。&/li&&/ul&&img src=&/v2-02ee9e5a3ea6d0589475fa_b.jpg& data-rawwidth=&217& data-rawheight=&145& class=&content_image& width=&217&&&p&&br&&/p&&p&以上三种行为需要同时加以考虑,才有可能模拟出一个接近真实的效果。&/p&&div class=&highl}

我要回帖

更多关于 shader实现漫反射效果 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信