[siggraph14]《命运》的装备系统

siggraph14, by bungie, 分享者是娜姐(Natalya Tatarchuk)和主3D美术shiek wang,一个华人。

sum

这里讲了装备系统(gear system),《命运》是面向两代主机的游戏,其装备复杂度和量是mmo级别的,如何灵活的去组合,最大限度的去重用制作量很大的装备并在不同机能平台上面达到良好的性能,bungie给出了非常有实践意义的分享。

技术目标

开篇bungie说了一个技术目标,非常喜欢这种思路的清晰。

  • 海量的装备
  • 可控的内存消耗
  • 强大可扩展的pipeline
  • 更多的共享,小的硬盘和下载包

    做mmo的人对这些点可以说是非常熟悉的挑战了。

装备级别的组合

一般我们做游戏的时候(大部分网游),是以一个比较粗的粒度来组合,头部+上衣+裤子等来组合成一个人。

bungie这里是连头盔这种都是组合出来的。

它是先分成 gear type:头部,armor,武器和ships(坐骑?)

然后每个type会分成一个个小部件(gear slot),如上图那样可以组合。

Gear slot geometry

gear type(比如头部)下面的小部件是gear slot(比如头盔上的眼镜),这些组合是美术离线组合的,玩家选择的粒度是gear type的级别,实时情况下不能自己定义slot级别(虽然理论上可以,但是这样一做很多下面的技术就不好起作用了)

offline部分有这几件事情,通过offline工具来做:

  • 选择是否要skinning,美术选择了是的话,pipeline会自动做好相应的工作
  • 自动的lod,美术会设定是用于ps4还是ps3,然后lod工具会做好各个级别lod的工作
    • 之前bungie有分享过关于lod的技术:http://www.gdcvault.com/play/1014343/Automated-Level-of-Detail-Generation
    • 它可以把一组geometry,通过lod,merge到一起,并且处理好skinning问题
    • 高低lod之间共享vertex buffer,index buffer会有不同
      • 这个没有放在实时去做,一个是比较费时间,一个是只有index buffer不同,多了一些东西出来没什么问题

gears slot texture

贴图的合并,为了降低drawcall,bungie会做贴图的合并工作。

  • 离线:

    • 会计算一个bit texture描述贴图如何合并在一起(但是不是真的合并)
    • 把geometry的uv根据新的合并贴图做一个矫正
  • 实时
    • 在load阶段会根据bit texture做贴图合并
    • 这里不离线做的原因主要是做了的话,就无法重用了

      做合并的时候,会考虑到material不同的shader type,不能合并的就不做。

      另外console上对于贴图的读写操作都非常的灵活,也是能高效的这么做的一个重要原因

换色

bungie这里做的相对简单,使用的灰色贴图,然后上色的办法来做:

  • 科幻题材,装备什么的走单色简洁路线,使得这些较简单的换色也就够了
  • 换色的算法,采用photoshop里的blend算法,也提供了较好的灵活性

    除了换色,还有detail texture和decal来增加丰富度。

渲染模型

在ppt后面还有lighting&material的技术部分,这里其实在之前已经讲过了,可以看这里的笔记。

http://blog.csdn.net/toughbro/article/details/13095361

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 23:35:06

[siggraph14]《命运》的装备系统的相关文章

Unity3D 装备系统学习Inventory Pro 2.1.2 总结

前言 写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理解Inventory Pro 2.1.2 这样的插件源码,你还是需有了一部分Unity3D的基础知识.但为什么说你有一定C#开发经验也是能看懂的呢?(有点绕),我想表达的意思是,Unity3D无非是一种技术或者工具,而装备系统是游戏逻辑的一种业务,其实如果侧重点在于业务,技术和工具不是那么重要,希望

2016年第9本:系统之美

花0.10元钱试用了7天的Amazon Unlimited计划(7天过后,自动改为每月12元),有些书还是不错的,很快就发现了这本<系统之美---决策者的系统思考>,整天被权总的大系统论洗脑,也得自己看看系统论的权威之作. 很多人只是机械地应对,专注于事件层面的响应,而并未触及问题产生的根源.很多对策并未抓住问题的本质,只是“治标不治本”的“症状缓解”,或者不全面地解决问题,导致“按下葫芦浮起瓢”,到处救火.应接不暇. 管理者所遇到的问题通常都不是彼此孤立的,而是相互影响.动态变化的,尤其是在

成长系统的设计方法:如何“挖坑”,又不让玩家反感

原文地址:http://bbs.gameres.com/thread_330212.html 游戏类型:  设计类型:[系统/框架/思路/玩法] 成长系统的设计方法 目录 成长系统的设计方法.....................................1 一.坑的使用方式.........................................4 1.时效性..............................................4 2.获取方式......

成长系统的设计方法

转自:http://www.gameres.com/330212.html 目录 成长系统的设计方法.....................................1 一.坑的使用方式.........................................4 1.时效性..............................................4 2.获取方式...........................................4 3.举例说明

你已经死了!聊聊《北斗无双》的成与败(转)

导语:<北斗无双>是一个充满争议的游戏系列,虽然游戏还原了许多漫画里的经典桥段,但和真正的“无双”相比,游戏中的不少设定都让玩家难以接受.虽震撼登台但惨淡收场的结局也让人唏嘘不已.让我们一起跟随RED的文字,重温<北斗无双>系列的成与败吧. <北斗无双>是第一部未以战争为题材的无双作品 Prologue “我が生涯に一片の悔ぃ无し” <真•北斗无双>的过场动画,以CG形式制作,相比前作确实花费了更多气力打磨 如果要在整部<北斗神拳>(北斗の拳)漫

游戏名称:《烽烟OL》

游戏类型:45度回合制RPG网页游戏 游戏版本:V1.3 服务器框架:Firefly Game Server Framework V1.2.3 客户端语言:AS3 服务器运行环境:CentOS 5.0+ 开源时间:2013年10月18日 <烽烟OL>V1.3版本新增系统:武斗场(竞技场).竞技场排名奖励.每日目标 <烽烟OL>V1.3版本系统共有:注册系统.登录系统.创建角色.查看个人信息.装备系统.强化-铸魂系统.强化-镶嵌系统.兵团系统.兵团-降兵训练.兵团-降兵布阵.技能系统

[Cocos2d-x/iOS源码]&lt;诸神的挑战&gt;三消新玩法

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 [源码下载] 代码引擎:cocos2d-x, Xcode[完美支持arm64,可直接发布AppS

赵青-《剑侠情缘网络版》开发回顾

<剑侠情缘网络版>开发回顾 2003 年的1月,我刚刚开发完<天王>项目,正在休息.总结和规划下一个项目.<天王>是我开发的众多项目中最满意的一个,虽然这篇文字主要是对<剑侠情缘网络版>(以下简称<剑网>)这个项目的回顾,但作为<天王>的项目经理和主程序,我还是想简单谈谈它.<天王>有几个第一:它是西山居第一个采用外购引擎来开发的游戏,第一个3D游戏,第一个动作类游戏,第一个被我们自己的开发人员所认同.并且愿意自发测试的游

小学期实践项目总结与暑假学习总结

大二下学期小学期实践我组按要求完成了网站的基本前后台搭建和数据库调用,并增添了部分新功能. 必要功能:1.检验已有帐号,登录功能 2.新闻信息的浏览 3.管理员对新闻的增删改查 4.分页功能 5.数据比对 附加功能: 1.公证申请 1.DAO public void addNews(String title,String contents ,String author,int types,int istop,String pic){ try{ con=MySqlDB.getConnection(