Skip to content
在KlayGE中的延迟渲染(二)里,Deferred Lighting的3个阶段都已经得到解释,本篇将讲解如何更快地计算lighting pass。 Light volume 在Deferred Rendering中,表示一个光源最简单的方法就是一个全屏的四边形。它能让G-Buffer的每一个pixel都参与计算,在pixel shader中才过滤掉多余的像素。虽然可以保证结果正确,但毕竟多余计算太多,效率不高。这里常用的一个优化就是用一个凸的几何形状来表示光源。该几何 形状覆盖的pixel才计算该光源对它的贡献。显而易见的是,spot light用圆锥,point light用球或者立方体,directional light和ambient light用全屏四边形。下图画了一个spot light的volume: 这样的几何体类似于古老的shado ...
HPG2010上有一篇Parallel SAH k-D Tree Construction,论文和代码都公开了,分别在 http://denovo.cs.illinois.edu/Pubs/10-hpg-parkd.pdf https://github.com/bchoi/ParKD 看结果还不错,32线程可以到8倍的速度提升。
在有些设备上只有float没有double,比如前几代GPU、部分移动设备等。当非得用到double精度的时候该怎么办? 我记得去年在某个地方见到过用2个float模拟double的作法,经过一番玩命地搜索,得来全不费功夫,就在CUDA SDK的Mandelbrot例子里找到了2个float模拟double乘法的函数。甚至,GTX280上的double也是类似的方法模拟出来的,所以慢的惊人,只有float八分之一的速度。(EDIT: Mandelbrot在GTX480上,float和double都可以到60-70 fps,模拟的话只有20-30 fps,Fermi的double速度上去了) 先show一下模拟乘法的函数dsmul: // This function multiplies DS numbers A and B to yield the DS product C. __device__ inline void dsmu ...
在KlayGE中的延迟渲染(一)里,我们推出了lighting pass里的计算,本篇将讲解G-Buffer阶段和Shading pass阶段。 G-Buffer分配 在Deferred Rendering的框架中,不管是Deferred Shading还是Deferred Lighting,G-Buffer的分配都是非常关键的。上一篇得出的lighting pass公式如下: [latex]float4(1, 1, 1, (\mathbf{n} \cdot \mathbf{h_n})^{\alpha} F(c_{spec}, \mathbf{l_{cn}},\mathbf{h_n})) \times \mathbf{c}_{lightn} (\mathbf{n} \cdot \mathbf{l_{cn}})[/latex] 从公式可以看出,在light pass里需要的量有n,h,alpha,cspec,lc。因为h = (v + lc) / 2(见游戏中基于物理的渲染系列文章),而lc = normalize(l - p)(l是光源位 ...
老早就想写这篇了,但一直没空,现在抽个空写写吧。 Motivation 编译期字符串Hash的想法源于一个常见做法,字符串比较。比如在KlayGE的effect系统中,有很多if ("cull_mode" == state_name)这样的比较。加速这个操作的方法之一就是hash。但是如果改成if (0x8F1E5E5F == state_name_hash)又非常不直观。如果能有一个编译期的hash方法,先称之为CT_HASH,就可以if(CT_HASH("cull_mode") == state_name_hash),既保证直观,又保证开发效率。 尝试 要在编译期做事情首先都会想到template,但是C++的template没法提供字符串的操作,就算boost::mpl::string,也必须把一个一个字符分开塞给它才行,就像这样: boost::mpl::string<'c', 'u', 'l', ...
Here is a quick summary of it’s features : - Create countless different explosions. Each explosion is randomized and all important parameters can be changed - Exports to PNG complete with an alpha channel. No more black backgrounds and additive blending for your explosions anymore. The result texture inlcudes a full alpha channel - Different texture sizes (from 256×256 up to 4096×4096, depending on wether your graphics card can manage that) - Different grid sizes for setting the number of animation frames on a texture (4×4, 8×8, 16×16) - Use your own particle textures. Either use the in ...
KlayGE中的延迟渲染系列文章将讲述在KlayGE 3.11的Deferred Rendering例子中使用的延迟渲染方法,由5篇文章组成。 Deferred Lighting的框架 KlayGE 3.11的例子已经从Deferred Shading改成了更节省带宽的Deferred Lighting。这里先对Deferred Lighting作一个简要的介绍,并假设读者已经了解了Deferred Shading。 Deferred Lighting的渲染架构可以分为三个阶段: G-Buffer的生成 for each light { Lighting pass } Shading pass 与Deferred Shading不同的是,shading(也就是和材质相关)的计算仅仅发生在最后一个阶段。所以,G-Buffer中需要保存的信息得到极大地减小,甚至不再需要MRT。 Lighting pass Lighting pass ...
前几天,Intel放出了众多渲染的文章和代码,主要是为了表现Sandy Bridge的能力,包括Cloth,Onloaded shadow map,crowd simulation,smoke,Adaptive Volumetric Shadow Maps,volumetric fluid simulation等,还有原先放出来过的Deferred Rendering。AVX指令集挺好,极大地扩展了SSE的能力,有机会我会在Softart里面试试看。 但是在那些demo之中,我还发现了一个极其惨不忍睹的海洋渲染,链接在http://software.intel.com/en-us/articles/ocean-fog-demo-page/,想挑战自己生理极限的可以下载一个运行看看。只要继承显卡就能跑...在这里我就贴一张截图罢了。连续动画其实更明显,可以看到他的悲催网格分布: artifact众多,水面 ...
刚找到一个好东西:http://www.ir-ltd.net/infinite-3d-head-scan-released/。可以下载一个3D扫描生成的人头数据,而且是Creative Commons Attribution 3.0 Unported License协议的,只要提到原出处就可以任意使用! http://www.ir-ltd.net/uploads/Infinite_Scan_Ver0.1.rar (80 MB’s) Object file and textures. http://www.ir-ltd.net/uploads/Infinite_Scan_Displacements_Ver0.1.rar (65 MB’s) Displacements Maps. http://www.ir-ltd.net/uploads/Infinite_Ztl.rar (70 MB’s) Stripped down basic, 7 Subdivision Level ZBrush file. 再贴一些用它生成的渲染图:
昨天发了招募贴之后大家响应积极,非常感谢!发邮件给我的朋友们我已经给予回复,如有遗漏者请提醒我一下。