WWDC 奖学金获得者郑昊天:从 App 到游戏,软件开发就像堆积木
太平洋夏令时间 6 月 22 日上午 10 点,也就是北京时间 6 月 23 日凌晨 1 点,一年一度的苹果全球开发者大会就要正式拉开序幕。今年因为全球疫情,WWDC20 将采用网络直播的形式举行。
在此之前, WWDC20 Swift 学生挑战赛获奖名单揭晓。包括 23 名中国内地学生在内的全球 350 名学生获此殊荣,毕业于中南大学、即将前往美国东北大学攻读硕士的郑昊天正是其中一员。
认识郑昊天
郑昊天,2014 年到 2018 年就读于中南大学计算机科学与技术专业,今年下半年将会前往美国东北大学就读信息系统专业的研究生。目前是一名独立开发者,偶尔也会做一些 Digital Art 方向的内容。
▲ 郑昊天
早在 2018 年,郑昊天就获得了 WWDC 奖学金,并在 GitHub 上开源了当年的作品。他在 App Store 上独立发表过的 app 有《Contributions For Github》《Epoch Core》《Artwall》和《Age Clock》 。目前在开发一款手机太空设计游戏,本次获奖的 Playground 作品是一个名为《Shader Node》的着色器编辑 app。
《Shader Node 》是一款教育向的着色器编辑 app。着色器是一种负责计算机图形渲染的程序类型。在游戏开发,机器学习,影视后期中都有极大的作用,而 《Shader Node》 利用 SpriteKit、SwiftUI、UIKit Dynamics 等苹果官方框架构建了一个基于节点拖拽的可视化编程环境,从而让原本抽象的着色器编程变为直观的连线操作,不但是对于初学者很好的启蒙,更能基于 iPad 强大的处理性能和传感器输入变为创意编程的起步设备。
▲ 《Shader Node》
在问到何时与 iOS 开发结缘时,郑昊天表示,14 年正值创业热潮,高中毕业后的他暑假被拉入几位学长创办的 O2O 公司打杂,也因此在里面目睹了 iOS 软件的开发流程。这种从无到有的体验让他感到十分神奇,于是在进入大学之后购买了 iOS 开发的教程书籍开始自学。
一开始,他编写的 iOS 软件是一步步根据教程做出来的简单记事本软件,功能简陋到只能在一个固定的面板上记录也没有多媒体输入的功能。但对于当时的他来说,能在自己的 iPhone 上安装一个自己命名的软件并给他人展示本身就已经非常有成就感。
到后来,他逐渐明白这种成就感是因为当大部分人都只将 iPhone 作为电子消费产品使用别人开发好的软件,而他可以根据自己的需求编写自定义的功能改造自己的 iPhone。这种创造而非消费的能力不断激励着他进一步学习 iOS 开发中的各种框架,也让他最终成为了一名以个人名义发布软件的独立开发者。
WWDC20 展望
WWDC20 马上就要开始, 在我们问他到对于苹果新的 iOS/ iPadOS / macOS 有何期待时,郑昊天表示,希望 iOS 能添加对剪贴板的权限限制,并提供多条目剪贴板的 API;而且能够开放壁纸设定相关的 API,能让开发者们使用 SpriteKit 创建自己的动态壁纸。
聊到苹果的 Swift 开发语言,郑昊天表示,对于他来说,Swift 替代 Objective-C 已经是板上钉钉的事情,Swift 的优点也在逐渐展现出来,包括其安全,跨平台的愿景,同时苹果也在围绕 Swift 生态提供了极具吸引力的工具链和框架,包括 Playground,Combine,SwiftUI 等,这些都是传统 Objective-C 语言所无法享受到的。
游戏与软件开发
目前,郑昊天在正开发一款名为《Epoch》的太空游戏。这是一款基于过程生成算法实时拓展宇宙的射击游戏,每颗星球都可以登陆并进行互动。
郑昊天表示,他 16 年初着手开发这款游戏时,受到了同年发售备受期待最终却「暴死」的无人深空《No Man‘s Sky》的影响。对于他来说,过程生成算法的美妙之处在于通过程序化的方式去生成可能游戏美术专家都没有想到的场景,不但可以从简单的随机数中发展为无限的可能,也让他这个建模苦手躲避了一部分游戏开发会遇到的瓶颈。
▲ 《Epoch》早期开发截图
当然有无人深空的前车之鉴,也因为他自身理念的不同,《Epoch》最终还是会有一个像样的剧情,这部分会在完成基础的 Gameplay 开发之后寻求专业人士的帮助,因此 《Epoch》更多的是《No Man’s Sky》和《Freelancer》这两款游戏的合体,满足了他同时对无限星空和太空歌剧的幻想。
《Epoch》也是郑昊天目前所开发的作品中难度最大的一个。在郑昊天看来,游戏开发和独立软件开发最大的不同在于,游戏开发涉及到的知识体系相当广泛,而且相互关联,导致开发者很难用以往的设计模式来进行管理。
拿堆积木来比喻,当代软件开发可能类似于拿已有的积木(API)互相拼接就行,并不会太去关心内部的构造,而游戏开发则类似于在拼接积木的同时还要铺装各类走线和管道,打通各个积木的内部结构,必要的时候还需要自己建造奇奇怪怪的转换头(Wrapper)来保证游戏能流畅运行。
具体来说,只在《 Epoch》的星球渲染部分,就涉及到了众多不同领域的技巧,包括基于 QuadTree 的地形生成,基于 SDF 和 Ray-marching 的体积云渲染,以及基于 Precompute Lookup Table 的大气渲染,这些组件不仅要从头开始,而且要保证互相兼容不会出现视觉错误,是一件很难的事情,经常会有兼顾不到的地方。
个人生活
关于日常获得灵感的方式,郑昊天主要是在 Feedly 上订阅了很多博客和产品更新,譬如 Android Develoepr 的 Blog 更新,这样的好处是上游有什么新的特性他可以在第一时间获知,并决定是否可以第一时间使用到。除此之外,他还喜欢逛 Product Hunt 和 HackerNews,有感兴趣的 SDK 或者工具发布会拿 Raindrop 收藏起来。
▲ Raindrop 收藏内容截图
郑昊天最常用的硬件是一台 15 英寸的 MacBook Pro 。「这台笔记本算是 Daily Driver,包揽了大部分的工作,好处在于常年已经习惯的键盘和触控盘手感,目前的笔记本市场他还没有发现有可以替代 MacBook 触控版的存在。」他说道。
而聊到他最喜欢的软件产品与游戏这个问题。他思考良久后表示,如果是抛去对「产品/游戏/App」的限定,他最喜欢的是一种生产这些数字产品的生活方式———Hundred Rabbits。Hundred Rabbits 是他很喜欢的艺术家 Devine Lu Linvega 和他的伴侣 Rekka Bellum 创办的工作室。这个工作室生产各种游戏和软件,从音乐编程到相机滤镜到科幻游戏无所不包,每一件都有他们独特的审美。但最让人羡艳的是他们的工作室就是一艘船,而他们的生活就是旅居在海上。
▲ 图片来自:hundred Rabbits
最后,郑昊天聊到了日常自己的工作习惯,他表示目前他算是小镇待业青年的状态。因为准备留学花了一年时间得以在家做些自己喜欢的小软件。他习惯在工作的时候听音乐,因此在服务器端跑着一个 YouTube 电台直播程序;喜欢在工作中做验证原型,因为这样能让他不断地对项目保留热情;还有就是喜欢花些时间在自己的博客上面,虽然偶尔会发些技术实现文,但更多时间是记录自己的生活。