Diablo(暗黑破坏神)的特效实现
http://candycat1992.github.io/2016/06/25/diablo/
视频:GDC 2013
Diablo(暗黑破坏神),暴雪出品。演讲者是暴雪TA,额最后的QA环节听出来代码不是他写的(恩什么ps、vs他看起来也完全不知道,“I have no idea, haha”)……看来暴雪TA负责是的设计shader和特效,但代码还是另外由人来写的。
Simon在他的文章里详细分析了翅膀特效的实现,他当时没看到这个演讲所以很多靠猜很不容易……
“Blend Add” Shading
传统的additive(左边)太亮了,blend(中间)缺少bloom效果,所以他们选择右边这种。
他们所说的Blend Add实际就是把各个颜色或透明通道相乘以后又乘以了2进行加亮。
Blend One OneMinusSrcAlpha // Blend Add
Texture Multiplication Shader
下面的公式就是所有特效使用的基本公式,简单来说就是在普通的乘法后又乘以2。
下面他举了很多例子。先从最简单的开始。下面是两张非常简单的纹理,只考虑alpha通道,因此rgb现在都是白色。TEX1和TEX2是两张相同的纹理,但是按照不同的速率滚动,乘起来之后就可以得到右边的效果。看起来像云。
下面再添加一张纹理,TEX2现在是缩放成0.5,TEX3是放大成2.0,然后按不同速率滚动,得到更加复杂的类似云层飘逸的效果。
下面是再添加一张texture(其实只是第二张,前三张本质是一张纹理,只是uv不同),这张纹理定义了particle的基本区域,然后乘起来(注意这里没有乘以2,因为只是想作为mask)得到一个基本的particle渲染效果。
下面是把7个这样的particle叠在一起的效果,就很有圆状的动态效果了。
他指出很多特效都是靠这种方法,然后举了一些实际的例子。例如下面的幽灵毒药效果,TEX1不动,TEX2不断向上滚动,把17个这样的particle叠加起来就得到了右侧的效果。
再比如下面的火焰特效。
以及下面的冰冻拖尾特效。拖尾的动作还是依靠改变particle网格动画得到的,但每个particle的渲染是使用了这种方法。
下面这个特效也是仅靠两张texture来实现的。
下面这张图是上面那个特效的实现细节。TEX1是一个不动的纹理,TEX2不停滚动,然后整个特效再依靠12个particle的运动来实现。
同上,还有一些更复杂的例子。这个火焰只使用了23个particle。
上面的特效,这种方法来用于渲染一些伪体积渲染。例如下面的烟雾,只用了60个particle。
下面这张图是真正的网格。
下面的地火也是,只用了28个particle,和一些滚动的纹理。
这种方法大大节省了particle的数目,从而减少了overdraw,在作者看来这是一个huge win!oh yeah!这种方法的瓶颈其实是在memory上,而不是shader计算上。每个particle多用了大概两张texture,但减少了很多overdraw。
QA环节有一个人问,为什么要把alpha和rgb分开,和在一起可以吗?除了一些内容创建的原因,他更倾向于分开,因此这样每张texture都比较小,texture load的时间就比较快。
Diablo(暗黑破坏神)的特效实现相关推荐
- 事后分析:暴雪的暗黑破坏神 II【翻译】
原文章地址: Postmortem: Blizzard's Diablo II 文章阅读大约需要5-10分钟,了解暗黑破坏神II开发背后的故事. 正文: 暗黑破坏神发布后,我们花了大约三个月的时间来为 ...
- 大型计算机 水冷,思聪排第二 2015年20大水冷定制机排名
12015年20大定制主机排名 很快,2015已经悄悄的从每个人的回忆中溜走,在这一年中,本站曝光了很多的MOD定制水冷主机,那么今日我们几十款定制水冷机以排名的形式展现给每一个网友. 当然,这20大 ...
- 转一个游戏里用到的英文单词
Account[ә'kaunt]账号 action['ækʃәn]脚本 AI[ai]abbr. 人工智能 algorithm['ælgәriðәm]算法 Alias['eiliәs]锯齿 alpha ...
- Blizzard Something
暴雪巨头精彩语录: "对于我们父母和更上一辈的人来说,[制作游戏]几乎不能算是一份工作!"――Max Schaefer "让我们回到工作室坚持下去的动力是制作伟大游戏作品 ...
- pandas模块使用介绍
pandas模块使用介绍 1.pandas简介 pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型 ...
- 越狱Season 1-Episode 6: Riots, Drills and the Devil: Part 1
Season 1, Episode 6: Riots, Drills and the Devil: Part 1 - Diamond: Just a few more rides. 就再多玩几次吧 O ...
- Blizzard(暴雪)公司的历史
星际争霸>(starcraft)在游戏圈内可以说是大名鼎鼎,如雷贯耳.但是制作<星际争霸>的暴雪公司(blizzard)则远远不如它的产品有名.而实际上,暴雪公司已经成为游戏产业的一 ...
- 上周版面人气及综合利用率排名 2011-11-13
1 Job 毕业生找工作 2 Talking 谈天说地 3 Picture 贴图秀 4 Frie ...
- Blizzard(暴雪)公司的发迹史
<星际争霸>(starcraft)在游戏圈内可以说是大名鼎鼎,如雷贯耳.但是制作<星际争霸>的暴雪公司(blizzard)则远远不如它的产品有名.而实际上,暴雪公司已经成为游戏 ...
- 顶尖游戏公司介绍---暴雪
暴雪公司主页 http://www.blizzard.com/ 1991 Silicon & Synapse公司成立,同时发展RPM游戏 * 成立后Allen Adham为公司总裁 ...
最新文章
- nginx 部署antd_design_pro
- AAAI 2022接收论文列表发布,1349篇论文都在这了!
- uc浏览器为什么安装在c盘_你肯定不知道为什么Windows上面的软件都想把自己安装在C盘...
- codeforces Labyrinth
- 看不见的战斗——阿里云护航世界杯直播容灾实践
- mysql读取自增值失败_MySQL添加自增列失败
- Count Primes
- 精美绝伦的KShong GHOST Windows7-Pro 2010幸福版
- wms仓库管理系统中条形码管理的两大优势
- Java中获取时间戳
- 添加打印机,错误为0x0000011b
- 程序员教你玩转电脑手机
- Shaderlab 玻璃效果
- 【内网穿透笔记】FTP映射出现227 Entering Passive Mode错误命令原因及解决方法
- esp8266 nvs应用
- 2020中国大学生程序设计竞赛(CCPC) - 网络选拔赛 1005 Lunch (杭电 6892)
- 计算机老是跳出usb设备无法识别,电脑一直弹出无法识别的USB设备的解决办法
- 基于Django的博客BBS项目
- 得分(Score,ACM/ICPC Seoul 2005,UVa1585)
- [GWCTF 2019]枯燥的抽奖 1——php_mt_seed
热门文章
- 调用NMAP批量扫描IP端口
- php redis事务,Redis中事务的使用详解
- Centos8安装软加密狗
- android简易计算,android实现简易计算器
- Comarin香豆素标记金纳米团簇|Ce6二氢卟吩标记金纳米团簇|红色荧光的水溶性金纳米团簇(T-Au NCs)
- 查看电脑ip,关闭电脑,远程重启关闭等电脑命令大全
- (五)比赛中的CV算法(上)cv基础知识和opencv的api
- 留言赠书|AI圣经,这本书YYDS
- 个人知识管理系统 mysql_个人知识管理系统Version1.0开发记录(12)
- CLAHE算法实现图像增强「AI工程论」