暂时就那你来当封面吧,嘿嘿嘿
这大抵是一个以中国90年代背景的互动叙事类游戏,主要还是偏故事一点
当然在没有实际内容前这些都是瞎想
前记
假定你是一个手脚敏捷的小男孩,身后有一只壮硕的大狗在追你。你跑到楼梯口,这时应该上楼梯还是下楼梯?
“我觉得应该上楼,如果下楼的话,大狗可能和你跑得一样快。上楼的话,大狗庞大的身躯将成为劣势。不错,跑上楼你会比较吃力,但是大狗会更感到吃力”
— 《黑客与画家(Hackers and Painters: Big Ideas from the Computer Age)》
如同这个例子所示,对于大公司来说,他们就像大狗,在玩法游戏性,开发模式上探索的开销往往是吃不住的,而我们这种小独立游戏创作者就像小男孩,可以尽情尝试,因为我们失败得起,相比大公司,我们失败并不会损失太多。这种类型的游戏我也是第一次尝试,充满了好奇与期待,一切都是陌生的,所以这也算我的一个探索之路
《怪谈》最早的想法来源,是在《该村》做崩之后,暗暗叹息一个游戏的故事是多么的重要
当时的想法是做一个2D的,但是由于种种原因,被搁置了
在《Deliverance》弃坑后,从中学到了很多经验,例如:3D游戏工作量比2D小多了,画面惊艳、代入感还贼强
之后,在一天夜里,和原故事作者苏苏打完游戏,百无聊赖之际,聊出了《怪谈》系列的第一个游戏的设计
最早做的是可行性探索,摸一摸技术上的坑,踩一踩
- 人物建模(次时代模型)
- 服装建模(次时代模型)
- 场景建模(次时代模型)
- 服装动态模拟(引擎+插件)
- 人物面部动画(对话,神态)
- 美术设计(靠我强大的朋友们)
- 剧本(靠我强大的朋友们)
- 编程(这个没问题)
捣鼓了一波后,就让苏苏开动笔了,在漫长的等待后,拿到了第一版的故事。接下来,在黑手群了拉到了朋友们,虽然大家都是外行,但是依旧很热情地帮忙。
初期故事是很短的,对一个游戏来说当然是不够的
于是又是在一个夜里,找到了白告,两人一起商讨剧情,扩展出了一系列的设定,基本上把后期的内容给定下来了。再之后,花了一个晚上,把故事大纲给定下来了。白告则是换着笔法在细写在剧情(我见过最硬核的码字作者,只用手机的笔画输入)
大纲一定,感觉还像那么一回事儿,虽然不是很吸引人,但是说不定做出来很棒呢?
(这里就不放大纲了,免得剧透了游戏剧情)
2019年10月
于是我找到了负责场景建模方面的学习建模一个月的范同学,让他去解决头发问题。
我们的头发模型可能是做CG用的,全是一根根的,看起来非常真实,于是范同学决定用手拔!
拔了约莫一个上午后……
晚上,又继续拔,不过这个时候意外出现了
果然……在现在的工业化生产时代,传统的手工劳作的效率是非常落后的,于是我们开始寻找新的技术方案
一天后,我们的范同学突然宣告,头发已经拔好了,我们都惊讶他是否用了某种高科技辅助
范同学暗暗骂道,“这个后面的那一坨头发最离谱,那一坨中间还有一大堆头发,外面根本看不到,我把它删成了空心的窝窝头”
拔完后看起来差别不大,并最重要的是顶点数已经到了10万以下了
还没等我们缓过神来,很快就迎来了下一个难题……
正当信心满满导入unity时,发现头发导进去竟然长这样??
无比美丽的秀发变成了条状的面条,这是无论如何都不能忍受的。然而在我调尽各种shader,参数后依然没有把我心中的效果给做出来,甚至还去asset store上去买了个头发shader,但是结果依然不尽人意,啊啊啊,我都已经抓狂了,范同学也唉声连连,表示无可奈何
被逼无奈的我,决定从源头找问题,unity的漫反射贴图往往都是一个,而我们这个有两个贴图,一个是漫反射,一个是透明通道,然而unity用的是argb,就是说把透明通道直接加到漫反射贴图上。我开始想的是用PS把两张图合成一张,但是又想到有些参数不是那么好控制,于是决定自己写shader(多亏上个暑假学过一点图形学知识,接触过shader),但是发现有个更好用的东西,那就是shader graph,这不就是连连看吗?
大概就是随便连了下,随意修改了些参数
突然就有了种飘逸的感觉,get√
这个开始做的时候是真的没有头绪,之前也没有接触过,我第一个想法居然是用布料模拟来做,然后弄了半天发现弄不出来,想了想,要不就算了吧,反正这头发也不长。但是一想到其他游戏都实现了,我实现不了的话,多少有些挫败感。于是开始了我最拿手的—资料收集。google翻遍全网的资料,大概了解到如下几种方法:
- 类似布料的柔体物理模拟(一般是引擎自带的功能,u3d我就不去折腾了)
- 做动画的时候把头发动画一并加上(这个确实是好办法,做出来的效果也比较逼真(连续放着动画的话),但是想到我这个点和面数,做帧动画的话导出体积肯定非常大)
- 用骨骼动画/动态骨骼模拟(这个算是比较理想的了,貌似王者荣耀也是用的这种方案?性能消耗也蛮低的,但是不知道效果好不好)
- 其他方法来生成的头发可以有物理效果(NVIDIA的海飞丝技术Hairwork什么的,还是不去折腾了,我这头发挺好看的)
最后我去试了第三条,原计划如果失败就去用第二条。之后又去下载了Maya2019,大概看了下基础教学视频,加上以前有3dmax基础,于是上手挺快的,直接去学了骨骼、IK和蒙皮。之后就试着做了下:
往刘海上加了4根骨骼
加上很短的循环步行动画的效果(耳朵,嘴,眼睛还没贴贴图上去)
不得不说,效果还真不错。这里插一句,感觉西西(这个配角的名字)变鬼的时候,就可以直接把贴图删了,绝对像鬼 φ(>ω<*)
走了非常多的弯路,踩了很多人物、衣物、动画上的坑,大概摸索出一条正确的路了。接下来的计划是先完成场景建模,不知道11月能不能搞定,主要场景还是小镇和山,不过都已经找到了相关的素材,但是还是得手动改很多东西。
还有3天半期考试,虽然我还不知道老师都讲了些什么内容(课差不多都逃了),但是我一点都不慌,能过的!奥利给!!!
2019年11月
半期考试杀我,眨眼功夫过去了半个月,期间还帮了一个中国美术学院的小姐姐做毕设花了不少时间(她的那个游戏还蛮有创意的)
我相信这里绝对是大多数做此类游戏都会遇到的坑
对于角色的衣服动画大概分了三种
第一种,直接给人物穿衣服然后做蒙皮绑定,之后加上骨骼动画:
这种是最最普遍的办法,也是各类游戏用得最多最多的(图上的拉伸是因为裙子中间那部分的细节不够,以及蒙皮不够均衡,导致失真拉伸)
但是遇到裙子这类衣服时就会变成弟弟,你看,这特么还是裙子吗?变成喇叭裤了都
当然,这里可以拓扑一下,然后再重新绘制一下蒙皮权重,会看起来自然一些,但是依然会感觉特别劣质
第二种,加上人物动画,在动画物理引擎里烘焙后,然后导入游戏里:
特点是仿真程度MAX,效果最好,但是体积会比较大,通常做CG时用
此类动画一般是导出的abc格式(alembic),Unity官方的ADAM项目,有非常逼真的布料模拟和人物动画,实际上就是用的alembic动画
alembic动画在UE里支持挺好的,但是在Unity(2019.2)里需要导入package,并且有很多限制
上图的这个演示图是我将almbic通过序列转成fbx动画后导入unity的,效果还蛮棒的
但是容易在动画切换中出现“失真”感,比如说移动中突然停下来,这个时候衣服该这样动?理论上应该按照惯性继续往前一段距离,然后回摆,但是无论是动画切换或者过渡都无法实现这个效果,因为这类动画是之前就烘焙好了的,除非再单独烘焙个急停的动画,但是也不知道什么时候急停,所以不仅工作量巨大,而且效果不一定好,所以一般用在CG或者过场动画这种高度可控的场景
第三种,使用游戏物理引擎来动态实现布料模拟:
特点是方便,而且拥有比较真实的效果,虽然效果是肯定比不上第二种的,但是动态性极强,基本上任意动画都可以,任意状态的切换过渡,并且支持与环境结合,比如环境里面的风什么的,做出身临其境的感觉
大幅度动作过渡也比较自然(这里穿模是因为没有做腿部碰撞,因为我游戏里不会出现这种大幅度动作)
当然缺点也很明显,这个是需要使用CPU性能来进行计算的,并且也比较依赖游戏引擎
简单来说,游戏引擎中对布料的模拟,通常采用基于物理方法的质点-弹簧模型(Mass-Spring Model),大概就是用粒子来模拟一些物理效果,然后粒子绑定一定的蒙皮权重,做一个蒙皮动画的形式
(用之前那个做头发动态效果的绑骨骼来做也可以,不过只能做小短裙,对于这种长裙来说还是不适合(缺乏横向约束))
弄清和解决这些问题,翻遍了资料,大概用了一个周时间,我特么眼睛都要瞎了,差点放弃做长裙
踩了不少坑,布料碰撞模拟动画,衣服绑定到人物骨骼上,动画播放根结点不匹配,实时渲染动画穿模,混合形状动画的平滑过渡,人物动画与衣服动画匹配,动画间帧率不同的匹配,蒙皮权重不同裙子动画变形,一整套流程用了6个建模软件交替导入和操作,5种文件格式的互相转换和加工,这可能就是大多数游戏不会给人物穿长裙的原因
在物理引擎的渲染上也试过了多种方案,比如用全物理带褶皱的裙子,全物理的圆环状的套子,带蒙皮动画加部分物理的裙子,最后还是第三种效果最好,就是上面演示图的样子(一共做了6个版本,总共修改过70多个模型,吐血),这里提示一点,为了性能的考虑,模型精度不要太高(上图裙子从4000多个点,通过几个版本改动,改到了400多个点,最后用了大概200多个粒子)
降了非常多的比特率,终于压到了20M的视频,感谢素一同学帮忙配音
这个东西看似非常复杂,实际上现有的解决方案有很多。我这里是用的动态语音识别,文字识别匹配的话,对中文不是很友好(很早前github有个中文拼音的词库,不过我用了下好像不行,就没有去深究了),当然,如果要更好的效果的话,还是动捕吧
上面那个“坟头吟诗”演示可以说是总结了这两个月的工作了,呼~原以为我是程序,结果还是把美术工作都做完了
看着游戏角色从建模,到走路,再到能说话,就像看着自己的孩子长大一样开心。这下总算是有了讲故事的基础了,后期的工作会相对比较枯燥,但是难度并不是那么大了,基本上坑已经解决一半了。不得不说,骨骼动画+衣服布料物理模拟+头部动画,单实现一个非常简单,3个加起来,难度高了许多倍。这几天肝得有点多了,下个月进度稍微放缓点吧。
2019年12月
(基于POV技术的伪全息,手机拍不出效果,要人眼看)
经常被学校老师约谈,都是希望参加各种比赛项目,要不是去做AR就是去做VR,实际上我对AR、VR都不是很感兴趣,更喜欢全息技术一点,感觉这才是最贴近未来的方向,一旦技术成熟并普及化,AR、VR哪儿还有市场
正好之前有个方案,就直接在QQ上找团队老师,讲了一下我构思的人机交互式裸眼POV全息系统课题
- 效果:出现一个3D全息虚拟角色,会面朝用户,并能进行对话和交流
- 使用场景:商业展示、商业宣传、智能答疑
- 硬件:全息投影POV设备+信息处理终端(树莓派)+外接模块(广角摄像头、扬声器、麦克风、网卡、电源)
- 软件:数据传输WIfi/串口通信,UnityLWRP的渲染管线,次表面反射渲染皮肤,机器人ai接口(联网),语音转文字(讯飞),文字转语音(微软),语音转口型,情感识别(词法分析、语义分析器),口型表情渲染,动画渲染
老师听后也蛮感兴趣的,一边说硬件可以全报销,一边帮我联系身边的学长学姐们,希望能提供一些建议什么的。不过我琢磨着软件上问题倒是不大,关键还是硬件方面我太不熟悉了,这样搞下去心里也没有底……学长学姐也没帮上太多忙,不是戏谑地说这个东西太大了,就是对这方面一概不知…
好吧,那我还是先买设备吧。在逛遍淘宝后,基本上所有的店家都是不支持你二次开发的,他们不提供任何一个接口,我大概也猜到了,不过这构不成难题,不给我接口,那我就抓包吧,然后逆向分析,总能得出你的通信协议规则吧?想了一下,只要能实时显示,到时候再写个专门的适配程序就OK,只是不确定性能跟得上不…客服大抵也不懂技术,问一些参数方面的内容也是回答技术没给。想了想,先买个试试,不行抓紧时间退了。
设备到了之后,显示效果还蛮好的,就算是白天或者开灯,依旧能看清楚。但是略有失望的地方是,店家显然隐藏了太多不利的信息,比如说,所有格式都得转成专门的dat文件,一个普通的mp4文件,转码后体积大了不止10倍。用于操作设备的软件也是满满的bug,逆向之后,原本想优化一下他的转码算法,结果发现,所有内容都写在了一个类里,看到后面就不想看了……
“总之,还是解决问题吧”,我想,我开始了一系列的测试,但是发现网卡速率只有1MB/s,可是我流媒体24帧就算压缩后再转码体积每秒也有5MB,这可咋整?店家说的可以连接电脑来传输,开始我以为是能进行串口通讯,结果才知道,是把内存卡拔下来,插电脑上,把文件拷进去,再插回机器(好想打客服)。
“既然问题出现在硬件上,那就从硬件上解决吧”,我摇摇头,这可太难了。客服那边一点信息也不愿意多透露,我从他们给的说明书上,大概发现了一些线索,因为说明书截图的桌面上有一个“STM32H7单片机开发教程.pdf”,于是去找到了一些STM32H7单片机相关的东西,我开始想的是换个网卡,但是后来我感觉这个想法很危险,因为程序是已经烧录进单片机了的,如果换网卡,会不会出问题?我自己对单片机不是很了解,问了一下学校懂的同学,发现他们也不懂……想了下还是不动设备了,就这样退回去吧。
第一步就在硬件上卡死了,我直接放弃了这个课题,老师很惋惜,说要不然帮我再联系一下其他懂这方面的同学?我说算了,免得时间拖太久退不了货了。实际上我想的是其他同学应该解决不了这个问题,除非自己手动做一个这种设备,可惜我们学校应该没有这种人才。
2020年1月
这月主要还是对剧情大纲进行改动,预计下个月可以开始写剧本了。
开发的兴趣在本月基本上是耗尽了,不过游戏什么的也玩腻了,也不知道干什么,放假中的我就像被抽调了灵魂一样,懒洋洋地什么都不想做,是冬天的缘故吗?也不想出门,与亲戚聚在一起也找不到什么有意思的来玩,看起电影来只感觉很累,偶尔翻翻书,但也看不了多久。
2020年2月
为什么本月进展这么大?这要从一只蝙蝠说起……
本月主要解决场景问题。
最早的时候,只有一张漫反射贴图,可以说是完全没有用上HDRP管线渲染的内容。记得当我同学看过我的人物渲染效果后,摇摇头说人物做得就跟i社的游戏一样,油腻得发光……这时候我才意识到单参数控制各种材质属性是不行的,还是得用贴图。
之前一直在写剧情大纲也没时间弄,这下大纲终于写完了,这虽然不是一个太追求画面的游戏,不过动动手就能提高画质还是可以尝试一下的。去翻了一下官方的HDRP文档……好吧,怎么感觉一头雾水呢?还是去翻翻社区论坛吧。学习了一段时间后,大概掌握了一些技巧,便开始了尝试。
我这里是没有使用细节贴图,所以是一张纯白色的图代替,右下角是材质球预览效果
全身材质修改后的效果(弱光环境,可能有点暗):
这里我顺手把头发材质也改过了,之前用的shader graph去混合漫反射和透明贴图,这下我在PS里只留下了透明通道,漫反射颜色直接在材质里使用纯色(我估计原头发也是用xgen做的面片划分头发丝,如果是这样的话,就可以只留下透明贴图)
之后的话,人物衣服也打算重新做了,之前那个裙子的物理效果太耗CPU了,还得想办法改进。
开局一张图……说实话,我一开始完全不知道该用什么方式去建模这个房屋,如果按照我以前用3dmax的经验,肯定就是拉墙然后挤压出来,想起我以前建的比例丑得变形的建筑,我决定换个业内的方法。在了解到业内方法是花几万块去请个建模师或者外包后,我选择了放弃 (;へ:)。
好吧,还没有完全放弃呢。想了一下,既然我已经知道了整个建模流程,只是对流程中的各种操作都不熟悉,那么我分别找对给个流程熟悉的人来做,最后合并起来不就行了吗?
说做就做,我马上找到了学土木工程的同学帮忙,他最擅长的就是房屋结构与CAD出图。在语音交流讨论之后,他把我本子上的那张图,转成了下面的这张图
当然,这是修改过几版之后的最终图了
你可能想不到的是,CAD还可以将2D的设计图,转为3D的模型图
还能自动帮你盖房顶
我的天,这功能也太强了吧。
但是我试着在maya里面打开模型,发现全部是一块块的面,法线的正反面还挺随机的,想了想,还是得重新建模。
于是又找到了学习建模一个月的范同学。这次把需求降低了,只建墙体,不建内饰和门窗。我提供了贴图和房顶的模型。
有内味了,很像CS1.6的鬼子进村的地图
为什么会这么丑呢?因为我们还没把HDRP的功力发挥出来,剩下的就是贴图的工作了,模型这样就已经OK了
如果把Mask贴图、Normal贴图加上的话,渲染效果会提高60%,基本上能达到正常游戏的画面水平。但是在我研究Unity官方的死者之书项目和枫丹白露项目后,发现都用到了HDRP的Layered Lit,这是一个什么东西呢?一个可以通过LayerMask贴图或者节点颜色来分层渲染的材质,可以使一个物体的材质表面混合多张贴图,以此可以消除贴图的重复性,看起来更自然。
原本做的时候遇到了一些麻烦,国内没有搜到相关内容,国外也找不到教程,后来摸索一阵后,算是入门了。
有点像小学生的蜡笔涂色
渲染效果:
蹲厕我也是直接涂的,没有用任何贴图,只是两层的漫反射颜色不一样
请原谅这不羁的线条,我实在是用不来Maya(这里涂了三层,实际上只用了两层)
当然,如果能直接把贴图给做出来,那肯定是最好的办法,效果也会好得多。如果不想涂,也可以直接用LayerMask混合贴图来做简单的混合效果。
加上装饰、光、后处理后的效果
在2月中旬的时候,把主角屋子放场景里试了下,并没有很多违和感,但是当玩家用第一人称去走动时,视野就会有种狭窄的感觉。去查了一下资料,大概是说的第一人称游戏的比例都不能按照真实世界比例来,而是有所改变,这个需要结合视角的FOV来确定。
之后我又把房子改了比例,人物等着重做,改玩家比例后,NPC显得太矮了。
整个场景我也是想重做,虽然之前做场景花了不少功夫,有点不舍,于是我留了个备份,然后重新做,正好那个瀑布也很违和。
对着之前去拍的图片,按着比例重新设计整个地图,一边还得考虑剧情长度,光照方向。
花了大概有半个月,每天早上到晚上,算是肝完了。主要工作还是设计、找模型或者自己建模、改LOD、改贴图、放场景,调材质。
三组实拍参考与游戏设计
本月算是没那么鸽了,场景方面取得了不小的进展,下一步计划是继续写剧本的对话,有时间的话,继续完善场景。
三月起,学校开始上网课了,虽然不会很忙,但是我一定要在毕业前完成这款游戏啊啊啊啊啊啊啊啊!
后续记录