游戏编程里面有哪些十大经典编程算法或者很酷的算法

游戏编程里面有哪些经典或者很酷的算法?
查看: 1620|
评论: 0|原作者: Milo Yip|来自: 知乎
摘要: 我挑一些有趣的算法,希望尽量提及相关算法在游戏中的应用。1、Bresenham's line algorithm :经典的绘画直线算法,后来还可以稍作修改用于绘画圆弧,都不用三角函数或除数,只需用整数加法、减法和乘法 ...
  我挑一些有趣的算法,希望尽量提及相关算法在游戏中的应用。
  光栅化
Bresenham's line algorithm [1]:经典的绘画直线算法,后来还可以稍作修改用于绘画圆弧[2],都不用三角函数或除数,只需用整数加法、减法和乘法。
Perspective-Correct Texture Mapping [3]:透视正确的光栅化纹理贴图算法是1980才出现的。第一代Quake引擎引入后,才开始支持不垂直的墙、不水平的地面天花。
(图片来自维基百科)
Polygon Rasterization with Edge Function [4]:Bresenham算法如果用来画多边形,两个多边形的共边会被重绘。后来发明了使用简单的edge function去解决这个问题,而且适合并行的硬件实现。现在的GPU都是使用这个算法。
  全局光照
Precomputed Radiance Transfer (PRT) with Spherical Harmonics(SH)[5]:储存静态环境对于各个方向光源的漫反射数据,可以实现动态低频光源的全局光照效果。这种表示方式非常神奇。Halo 3也使用到这种技术[6]。
Screen-space Ambient Occlusion (SSAO)[7]:Crytek提出的首个屏幕空间环境光遮蔽算法,之后引来大量的研究及改进算法。也有用类似的概念去做近距离的反射,如SSDO[8]。
Light Propagation Volume (LPV)[9]:Crytek提出的首个动态全局光照算法,不需要预计算。但要在体积数据中计算传播,性能较慢,所以之后再优化成 Cascaded LPV [10]。
Voxel Cone Tracing [11]:也是不需要预计算的动态全局光照算法。把场景动态生成层阶式的体素数据(像mipmap那样的pre-filtering),从光源视角计算直接光照,然后逐像素追踪这组数据获取非直接光照。结果比LPV精确,也可以做到光泽反射(glossy reflection)。
Shadow Volume [12]:阴影体积是1977年发表的阴影技术,在屏幕空间光栅化阴影体积,可准确判断每个屏幕像素是否在阴影之内。可以处理平行光源和点光源的阴影。1991年[13]讲述如何用stencil buffer来实现此算法,适合在图形加速硬件(当时还没有所谓GPU)上使用。但很多人发现,如果摄像机在阴影体积内,就会出错。在年有多人发现一种解决方法,需要把John Carmack在2000年的电邮[14]中提及这个想法,后来成为2004年《毁灭战士3(Doom 3)》引擎的重要特徵,因他把这项技术发扬光大,即使他非首个发明人,此项技术通常被称为Carmack's Reverse。
Parallel Split Shadow Map (PSSM) [15][16] / Cascaded Shadow Map(CSM)[17]:虽然Shadow Volume很吸引,但它需要大量的内存频宽,而且通常不能实现软阴影。后来大部分游戏改为使用Shadow Map(阴影贴图),这更适合GPU,并且可以通过多次采样(Percentage Closer Filtering, PCF)来实现软阴影。然而,阴影贴图也有许多问题,例如远近景物都采用同一张纹理,就会令到近景的精度不足,出现锯齿。2006年香港中文大学的博士生Fan Zhang等人发表了一种 PSSM 算法 [15],为不同距离的场景渲染多张阴影贴图,在采样的时候按距离决定使用那一张。这个方法的变种CSM,在切割上和PSSM有点差异,被广泛使用于现时大部分游戏引擎中。
Variance Shadow Map(VSM)[18]:之前谈到用PCF做软阴影,它的坏处就是要做多次采样。那么可否把阴影贴图直接模糊化来实现软阴影?答案是否定的。但是在2006年有学者发表了VSM,它是一种用统计方式来逼近软阴影的效果。参考:如何推导方差阴影贴图(variance shadow map, VSM) ? - Milo Yip 的回答
  场景管理
Binary Space Partitioning(BSP)Portal renderingQuadtree、Octree:游戏场景管理的八叉树算法是怎样的? - Milo Yip 的回答Potential Visibility Set(PVS)Occlusion Culling by Software Rasterization
  动画/物理
Particle SystemSmoothed Particle Hydrodynamics(SPH)Curl NoiseDual Quaternion Skinning
  碰撞测试
Hyperplane separation theorem(或称separating axis theorem/SAT):凸形状相交测试的基本原理。在怎样判断平面上一个矩形和一个圆形是否有重叠? - Milo Yip 的回答中,其实背后也是使用了SAT。Gilbert-Johnson-Keerthi distance algorithm (GJK距离算法):计算两个凸形状的距离(可用于相交测试)Sweep and prune:用于broad phase碰撞检测,找出物体AABB是否相交。对于时空上连续的物体运动,算法最坏O(n^2)、最好O(n)。
  人工智能
MinimaxAlpha-Beta PruningA* path findingDijkstra's algorithmFinite-state machineBehavior Tree
  *欢迎分享好的算法。
  [1] Bresenham, Jack E. "Algorithm for computer control of a digital plotter." IBM Systems journal 4.1 (1965): 25-30.
  [2] Bresenham, Jack. "A linear algorithm for incremental digital display of circular arcs." Communications of the ACM 20.2 (1977): 100-106.
  [3] Catmull, Ed, and Alvy Ray Smith. "3-D transformations of images in scanline order." ACM SIGGRAPH Computer Graphics. Vol. 14. No. 3. ACM, 1980.
  [4] Pineda, Juan. "A parallel algorithm for polygon rasterization." ACM SIGGRAPH Computer Graphics. Vol. 22. No. 4. ACM, 1988.
  [5] Sloan, Peter-Pike, Jan Kautz, and John Snyder. "Precomputed radiance transfer for real-time rendering in dynamic, low-frequency lighting environments." ACM Transactions on Graphics (TOG). Vol. 21. No. 3. ACM, 2002.
  [6] Chen, Hao, and Xinguo Liu. "Lighting and material of Halo 3." ACM SIGGRAPH 2008 Games. ACM, 2008.
  [7] Mittring, Martin. "Finding next gen: Cryengine 2." ACM SIGGRAPH 2007 courses. ACM, 2007.
  [8] Ritschel, Tobias, Thorsten Grosch, and Hans-Peter Seidel. "Approximating dynamic global illumination in image space." Proceedings of the 2009 symposium on Interactive 3D graphics and games. ACM, 2009.
  [9] Kaplanyan, Anton. "Light propagation volumes in cryengine 3." ACM SIGGRAPH Courses 7 (2009): 2.
  [10] Kaplanyan, Anton, and Carsten Dachsbacher. "Cascaded light propagation volumes for real-time indirect illumination." Proceedings of the 2010 ACM SIGGRAPH symposium on Interactive 3D Graphics and Games. ACM, 2010.
  [11] Crassin, Cyril, et al. "Interactive indirect illumination using voxel cone tracing."Computer Graphics Forum. Vol. 30. No. 7. Blackwell Publishing Ltd, 2011.
  [12] Crow, Franklin C. "Shadow algorithms for computer graphics." ACM SIGGRAPH Computer Graphics. Vol. 11. No. 2. ACM, 1977.
  [13] Heidmann, Tim. "Real shadows, real time." Iris Universe 18 (1991): 28-31.
  [14] Carmack, John, "e-mail to Mark Kilgard on Shadow Volume", 23 May 2000.
  [15] Zhang, Fan, et al. "Parallel-split shadow maps for large-scale virtual environments." Proceedings of the 2006 ACM international conference on Virtual reality continuum and its applications. ACM, 2006.
  [16] Zhang, Fan, Hanqiu Sun, and Oskari Nyman. "Parallel-split shadow maps on programmable gpus." GPU Gems 3 (2007): 203-237. GPU Gems 3 - Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs
  [17] Dimitrov, Rouslan. "Cascaded shadow maps." Developer Documentation, NVIDIA Corp (2007).
  [18] Donnelly, William, and Andrew Lauritzen. "Variance shadow maps."Proceedings of the 2006 symposium on Interactive 3D graphics and games. ACM, 2006.
上一篇:下一篇:
月度热门文章
站长推荐 /3
泰斗社区勋章可以自主领取啦~
欢迎关注泰斗社区微信公众号~
(微信号:mptaidous)
学习VR?周末跟着VR老司机一起“撸”
在线客服(工作时间:9:00-22:00)
Copyright &&&&&&&Powered by&&&技术支持:&&库克出柜了,为世界带来了别样的风景,虽说情理之中,但却意料之外。你永远不能猜到下一秒会发生什么,而掌握一些算法会对我们的生活有不少帮助。算法对于我们今天的生活十分重要,它们在虚拟世界中无处不在,从金融机构到交友网站。那么问题来了,编程算法哪家强?51CTO帮你忙!小编为您梳理一些编程语言中较为流行的算法供您参考学习,希望这些算法能够在您的编程中能够提供一些有价值的帮助。
笔者好长时间没有更新博客了,一个原因是开发的项目所用到的技术都是老技术…笔者赞同他们建议在学校里将计算机基础打好,没有良好基础怎么能建大厦呢?…那么这么多排序算法,到底什么时候用什么样的算法呢?因为不同的排序方法适…咱们立刻进入本文章的主题,排序算法。众所周知,快速排序算法是排序算法中…那么现在,我就来彻底分析下此快速排序算法,希望能让读者真正理解此算法,…本文我们要讲的是堆排序算法。据我所知,要真正彻底认识一个算法,最好是去…本文由简单的字符串匹配算法开始,经Rabin-Karp算法,最后到KMP算法,教你…经过人工评估,HipHop算法挖掘出的社交圈有较强的社交内聚度,同时也满足算…罗马尼亚人爱跳舞,不仅体现在电影和节日中,你会发现舞蹈无处不在,即使是…算法PageRank是最著名的搜索引擎Google采用的一种算法策略,是根据每个网页…在介绍微博推荐算法之前,我们先聊一聊推荐系统和推荐算法。有这样一些问题…
谷歌搜索业务负责人艾米特?辛格哈尔(Amit Singhal)日前在Google+上发表…科学家现在已经可以检测和记录大脑中数百个神经元的活性,并不断进行技术开…Google官方博客宣布,将在Chrome浏览器中逐渐降低SHA-1证书的安全指示。但…Google在自己的官方博客发布公告,已经调整其搜索引擎算法,采用HTTPS加密…
在此之前的几年时间里,已经有很多开发者陆续使用了HTML5的部分技术,Firefox、...
Android Wear自上市以来褒贬不一,使得谷歌公司成为可移动穿戴设备领域的先驱,...
本书以实例教学为主线,循序渐进地介绍了Unity在游戏开发方面的不同功能。第1章...
本书是iOS 应用开发基础教程,内容翔实,语言生动。作者结合大量实例,循序渐进...}

我要回帖

更多关于 编程经典算法 的文章

更多推荐

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

点击添加站长微信