木匣子

Web/Game/Programming/Life etc.

后疫情之中国行

Plan

大流行(Pandemic)结束之后,我和 LP 就一直盼望着找个时间带四岁的曦仔回中国去见见从未某面的亲人。直到今年三月份我们才敲定行程,买了好六月份的机票,并请了一个月的年假。

曦仔两岁的时候就办好了护照,但是一直没能如愿出行。去年圣诞节的时候我们一家人和朋友相约去了新西兰,领略了自然风光的上限。发现曦仔对三个多小时飞行也没有很排斥。但这次他要面对的是九个半小时的飞行时间。去程是白天,于是我们早早准备了各种可以让他在飞机上打发时间的小玩意。

Melbourne -> Xiamen

由于是国际旅行,需要提前三小时值机,从家里到机场还得要将近一个小时的车程。于是我们起了大早,提上早已打包好的行李。预订好的计程车[1]准点在家门口等着我们。曦仔还没完全睡醒,含着睡意被我们抱到车上,然后直奔机场。 到机场值机托运行李、安检出关,简单吃了点东西后,曦仔在候机室完全清醒。他最喜欢盯着窗外看机场的地勤车辆运送货物。

飞机上的九个多小时非常顺利。刷了一半的大黄蜂电影,曦仔并不是很感兴趣。还好提前在 Youtube 上下载了他平时爱看的视频,可以离线观看。曦仔尤其挑食,飞机餐里面只有面包符合他的胃口。吃完午餐,大概是因为无聊,曦仔就睡了一觉。醒来后又刷了一半的蜘蛛侠动画版,但是过于暴力,看一会就关了。转而专心地玩他放在包包里的各种小玩具。LP 则是带了一本叫「Powerful」的书,在飞机上刷掉了三分之一。 我几乎不记得自己做了些什么,好像除了陪曦仔玩之外,就只是看着窗外发呆。而曦仔对窗外的美景没什么兴趣,也许是因为个子小,所以看不到窗外的东西吧,飞机对他来说只是普通的交通工具。

Arrival

快五年没有回来了,飞机抵达厦门上空的时候,我发现厦门岛的外围多出了大片大片的楼房,我甚至有些认不出这个城市。飞机落地的时候天色已黑,由于是六月这个最特殊的日子,我们的航班不幸被海关要求登机安检,耽搁了一个小时才让出仓。我甚至听到有些转机的乘客开始国骂,瞬间缓解了我的乡愁。曦仔的爷爷奶奶早早在机场等候我们,一出关就迎了上来,上下打量着这个只在视频里见过的小怪兽,抢着要抱孙儿,差点把关口给堵住了。几句寒暄后老爸开着他的老卡罗拉,带着我们晃悠悠地驶出厦门岛。可以看出来他对这个离家不到六十公里的城市路况相当不熟悉。

到家后,老妈端出早已准备好的杨梅——我早已念叨很久,在墨尔本很难尝到的水果,这一次我一定要吃个够。老爸老妈则是不停的对着曦仔虚寒问暖,曦仔还有些怕生,似乎对爷爷奶奶的概念仍未从看了四年的 FaceTime 视频中解放出来。

Loss

由于假期时间充裕,我们没有特别的安排。原来的计划是先在家里住上几天后就去 LP 的家乡,看望一下她多年不见的年迈的奶奶。没想到一早刚出门,处理完手机业务,就接到噩耗——奶奶因为感染新冠持续发烧没有挺过来,就在昨夜过世了,而葬礼安排在两天后。LP 已经有近六年没有回国了。奶奶年事已高,又患上了阿尔茨海默症,但我觉得她应该没有忘记 LP,是在等她回来送她,一直等到这一天才走的吧。

我们安排了酒店,两天后我带着 LP 和曦仔,开着老爸的老卡罗拉,驱车前往奶奶的葬礼。这条路只有两个小时,我开过几次,前两次是红事,印象深刻,而这次则是白事。高速还算好开,但是到了城区,我就零乱了。电动摩托车横冲直撞毫无章法,汽车变道不打灯,各种姿势夹塞,环岛不让行。中间险些出了事故,直叫我大开眼界。到了酒店后我还捏了一把冷汗,心想之后还是打车吧。在墨尔本练就的车技在中国三四线小城市完全不好使了。

农村的葬礼非常喧闹,奶奶八十又九,大家说是喜丧。村里的人大大小小都来吃席,然后亲人们穿上了白卦围成一圈。哭队阿姨们在中间拿着麦克风替我们传递对奶奶的哀痛之情。做完法事之后,天色已黑,其他人渐渐散去。至亲们还要移步去参加另一场仪式,将一座座彩色纸片做成的房子、车子、高档家具,提前烧到彼岸,供奶奶享用。

次日给奶奶送葬,亲人老小排着长龙跟着乐队,将奶奶送至村口。大家披着白卦,顶着夏天的燥热,知了也参与了BGM。曦仔不愿意自己走,一路上我们俩轮流抱着。到村口我们就停了下来,然后长辈们将奶奶运到车上,送至火葬场。曦仔一路上都在问太奶奶哪里去了,直到他把之前看的「悲伤」一书中,兔子奶奶去世的情节联系起来,他似乎也明白了什么。

Home Village

在这快节奏的生活里,似乎没有时间留给人们悲伤,年轻人都在快步向前看。回家后休息了一天,我们便继续自己的行程。这次回来,还安排曦仔去参观了一下我的出生地——那是在南靖土楼群里某不知名村庄偏隅的一座圆楼,楼里已经没有多少住户,父母辈都已经外出打工落户,年轻一辈更是不可能回来,而剩下的老人也一个个离开。石地板缝里长满了杂草,井边全是青苔,井水已经发黑得不再有鲤鱼在里面探出头来。曦仔一进楼里便自来熟,绕着走廊连着跑了三四圈。老妈说他非常像我小时候的身影。

随后我们走到附近一座有幸被规划入景区的土楼,这里有很多旅客进进出出,充满了商业气息。但是并没有我记忆中的大人们平日里生活时的「烟火气」。老妈随手买了一包野生山杨梅,是我最喜欢的那种酸酸的味道,于是我一口气把它们全部吃掉了。

Injury

从老家回来后,LP 忽然觉得身体不舒服,有点低烧。果不其然如预想中的那样又阳了,大概是在奶奶的葬礼上被传染的。还好回国前补了一针新冠预苗,症状没有很严重,在家休养了两三天就好了。

倒是可怜的曦仔有一天玩得太兴奋,晚上回家后不肯洗澡,在卫生间蹦蹦跳跳,摔到了后脑勺。曦仔哇地大哭,LP 手一摸看到全是血,吓得一时半会不知道该怎么办。老爸老妈赶紧打了急救电话,把曦仔抱到楼下去等救护车。我安抚了老婆后,连鞋子都没有穿,急忙赶了上去。救护车等了十多分钟左右才来,曦仔此时有点虚弱的样子,被奶奶紧紧地抱着。在车上医生简单做了包扎,记录了情况。送到医院时已经过了二十分钟了。医生留下老妈和曦仔在创口缝合室,老爸在前台挂号,我和 LP 在外头只听见凄惨的哭声,只希望他没有大事。

缝合出来后,我看到曦仔的头发被剃了一片,三厘米线的创口上缝了两针。医生说一会还要拍 CT,观察一下有没有脑损伤。但是曦仔现在情绪激动,不愿意躺在 CT 仪器旁边的床上。我们一边紧张害怕,一边安抚他的情绪。可能是困,他一会就在他最喜欢听的小星星的睡眠音乐下镇定下来了,然后 LP 抱着他完成了扫描。现在快凌晨一点了,医生看了扫描结果说没有明显的内伤。四十八小时内需要密切观察,如果有呕吐、昏迷之类的症状需要警惕。两天换一次药,一周后可以拆线。头两天全家人都提心吊胆着,几乎没什么休息,轮流照看曦仔。他一稍稍翻身我就会醒来查看一下,怕他碰着伤口,或者包扎伤口的纱布掉下来。

Mouth ulcer

第二天下午的时候,曦仔突然说牙疼,一点东西也不吃。但是我们看了半天没看出什么问题。于是带他去楼下牙科诊所检查。可是曦仔非常不配合,根本不愿意张嘴。经过一小时各种协商和安抚,终于愿意让牙科医生把绵签放进他的嘴里。最后我们发现他的臼齿旁边溃疡了。医生说儿童口腔溃疡不建议用药,让他自己好就行。

第三天凌晨,过了四十八小时,大家悬着的心才稍微放了一下。但是好景不长,早上醒来的时候发现曦仔开始发烧了。曦仔发烧还是挺常见的,这四年下来我们都很有经验了。还好我们随身带了退烧药,按照医生以前嘱咐的方法,超过 38.5 度后给一定剂量退烧,用药间隔需要 6 小时以上,剩下的就靠他的免疫系统,自己能好。

Covid

陆陆续续吃了四次药,我心想该不会伤口感染了吧?还是去医院检查一下比较放心。于是跟老妈抱着他去附近的儿童医院。医院人满为患,排了一个小时的队才轮到我们。接诊的是一个年长的女医生。我说曦仔发烧了,她二话没说让曦仔张嘴,然后一把把压舌板伸进曦仔嘴里,还没等我来得及跟她解释曦仔还有口腔溃疡,要轻点。她又拿着压舌板在曦仔嘴里一阵鼓捣,说“哪里呀,没看到呀”。曦仔疼得直哭。女医生见状啥也没说,填了下表让我们去抽血……我非常生气,一边安抚曦仔,一边往外走。我不理解为什么要抽血,因为在澳洲这四年曦仔生病带他去看医生从来就没有让我们抽血。曦仔听到抽血两个字哭得更厉害了,说要回家。于是我决定把他带回去静一静,顺便自己给他做个抗原检测。这一测,果然他也阳了。那么发烧的原因也找着了,悬着的心便放了下来。曦仔除了发烧没有其它症状,吃了两天退烧药就恢复了。

Clinic

等待拆线期间,曦仔去换了三次药。看诊体验非常不友好。有一次换药,女医生把他晾在护理室,跑去应付其它事了。另一个老医生让我们在等待期间自己把贴在曦仔头上的创可贴撕下来。这个创可贴是他们上次换药的时候贴上去的,虽然比急诊那天给的包裹式的要方便,不容易掉。但是我们完全没办法简单地将它拿下来同时不弄哭曦仔。曦仔很害怕,一害怕就挣扎。我们费了好大劲才把创可贴弄下来。然后女医生回来了,说了句,你们别自己来啊,我用热毛巾给它敷一下就好取了……

下一次换药的时候,这家诊所没有开门。他们的营业时间似乎非常随意,也许是夏天的白天天太热了,也许是因为这天是周末没什么病人。诊所门上没有留任何信息,有几个访客也是过来看了一眼,然后摇摇头就走开了。于是我们打车去了别处的一个诊所,曦仔见到陌生医生更加害怕,这时上来两个医生,一个抓住他,另一个赶紧撕创可贴然后上药。抓着他的那个中年女医生可凶了,看曦仔一直哭,吓唬他再哭要拿针头扎他。曦仔哭得更凶了。我听了很生气,医生怎么能这样对小孩说话!

最后一次是拆线。我们为了避免曦仔再被医生折腾,提前在家里用热毛巾软磨硬泡、连哄带骗地帮曦仔把创可贴小心翼翼揭了下来。然后才带他去看诊。医生说曦仔恢复得不错,于是我们的心也都安了一点。希望曦仔经过这次教训懂事一点,别再只会哼唱 Five Little Monkeys 却全然不知道背后的教育意义。

Five little monkeys jumping on the bed
One fell off and bumped his head
Mama called the doctor and the doctor said
"No more monkeys jumping on the bed!"

Mess-up

经过这一事件,原本计划好的行程完全打乱了。原计划一家子去外公外婆家玩,因为路途遥远,需要坐动车和飞机,最后变成我留在家里照看曦仔,LP 自己回娘家。不过曦仔在先前太奶奶的葬礼上已经见过所有人了。不过也正是因为这样,曦仔反而有更多的时间陪伴在爷爷奶奶身边,爷爷奶奶可开心了。我们只能等下次回来中国再带他去找外公外婆玩了。

原本计划约见的好多朋友也没见上,不过我们还是抽空跟各路小伙伴打了照面。

AIGC

自从三月份 ChatGPT 爆火之后,我发现国内开始关注 AI 的人也变多了。这次回来我特地跟各个行业的朋友聊 AIGC。有学院的老师,艺术专业的师生已经开始拥抱 AI,「打不过就学习驾驭它」。有报社的记者,偶尔用 AI 来润色稿件,「自己有渠道使用,但防着或者限制下属使用」。有创业的朋友,使用 MidJourney 生成的艺术作品来协助工业设计,「出图非常快」。有游戏行业的前同事,使用 AI 来协助编写一些工具代码,「极大地提高了工作效率」。看着这片被禁止使用 ChatGPT 的地方,大家还是想尽一切办法学习使用 AI,真的是一件非常神奇的事。

老爸快六十了,搞了二十多年的平面设计。我给他演示了一下 Stable Diffusion 生成图像。看后他震惊不已,感觉已经跟不上时代了。但他想着如果能学会这东西,再干十几年不成问题。

War?

此行顺带的一个担心就是台海战争。与不同的朋友聊起对台战争的看法,年轻的一代比较乐观,认为如果打起来,一定会赢,甚至语言里带些自负。而老一辈大多却非常不看好这一可能发生的战争,甚至认为根本不会发生战争,「政府只是吓唬吓唬人,转移大家对经济和就业压力的注意力」。

台湾是我很想去旅行的一个目的地,我希望不久的将来看到她的时候,她还是民主,自由的。

Xiamen -> Melbourne

一转眼四个多星期过去了。在回程的飞机上,我感到十分满足。虽然深夜的飞机餐让我有点食物过敏了,LP 说我的嘴唇肿得像香肠,但是我觉得并没有那么严重。空乘给了我一些冰块和药膏,简单处理一下就消肿了。

抵达墨尔本机场的时候,我们遇到一个十二岁的小女生,她一个人出国留学。这是她第一次到英语国家,需要转机但是完全不知道流程。我们带她一起入关,寻找了下一个航班的值机点。然后我们一起简单吃了个午饭。她没看价格,点了一共三十多刀的东西,之后从她母亲的电话里第一次知道了汇率这个东西后,她惊讶地看着这份巨贵的并不好吃的沙拉,直呼想要回家。由于她的航班还有好几个小时,我们留她在值机的地方,道别后直接打车回家了。我们没有问这个小妹妹的名字,她也没有要留我们的联系方式,希望她学业顺利。

阴天下着小雨,一路上稀松的车辆,没有什么高楼,没有人挤人,没有令人喘不过气燥热。想必是昨夜在飞机上没睡好,LP 和曦仔一上车就又坠入了梦香。


  1. 在维州,交通规则允许计程车接送儿童的时候不使用安全坐椅,而 Uber 则没有这个特权。所以我们只好使用计程车,不过计程车的车费稍微贵一些。 ↩︎

我的 Covid 经历

2020年中,坐标墨尔本,夫妻两人全职工作,娃刚满一周岁,工作日接送早教中心。在起初的一年多的严格封城下,如果没有开看世界各地的疫情短报,我甚至玩笑般地怀疑这个病毒是不是真的存在,毕竟也没有亲眼见症身边有谁被感染或者隔离。

2021年,看着曲线平缓,甚至一度有数周没有新增。感觉完全解封有了盼头,但是随即年底出现了新变种 Delta 和 Omicron 曲线激增。中间有三个月连早教中心都关闭了。娃两岁多,受疫情影响,我们俩都换了全职远程工作,但是在家带娃还是非常有挑战。身边开始有同事和朋友接连中招,多数是轻症,还有同事家里的老人因 Covid 离世。

2022年年初,维州政府放出了解封路线,随着大范围疫苗接种率接近95%,各种营业场所陆续开放。我完成了三针疫苗接种,老婆两针,娃不满五岁,无法接种。但曲线已经从早期最高一二十例,变成了日常五六千例。早教中心已经开放,但是老婆一开始还是拒绝把娃送去。因为在妈妈圈偶尔听闻有早教中心出现病例。经过一断时间的观察思考以及挣扎,还是决定开始每日接送。

2022年上半年,早教中心还算顺利,期间如果娃有轻微感冒症状,只需要在家使用 RAT 抗原自测,15分钟出结果。如果是阴性且没有流感迹象是可以继续接送。期间早教中心有邮件通知园期出现密接,但得益于园期的卫生工作做得挺好,大家都没有大碍。

2022年年中,政府解除了口罩令。终于可以自由呼吸了,在商场超市看到了久违的谈笑风生。久居家中的人开始呼朋唤友出来玩。于是我们一家人约了另一家小伙伴去乐高世界玩,期间妈妈们跑去一个封闭影院看了 4D 乐高短片,随后两家人一起在餐厅吃了晚餐。

两天后对方妈妈发来通知说自己阳了,然后老婆也觉得喉咙不适。这时候娃已经在早教中心,于是我开着车带着老婆去附近的 PCR 核酸检测点做了个筛查。凌晨三点老婆忐忑不安收到结果,她的短信内容很长:阳性 + 一堆后续注意事项,而我只有短短一行:结果为阴性。

隔日早上我查询了一下政府的 Covid 专题网站,里面提到了家庭密接的情况,以及能否将孩子接送早教中心的事项。答案是很明确的,只要父母方有一人当天是阴性,且孩子也是阴性,是可以接送的。于是接下来的每一天,除了家里做好隔离以外,每天早上都做了 RAT 抗原自测阴性后,就把娃送去早教并告知检测结果以及做好卫生工作。

第一天,老婆低烧 + 肌肉酸疼,简单请了个假,然后吃了点 Panadol 止痛药便于安稳休息。中午还收到政府人员的慰问电话,询问是否需要到隔离酒店免费住宿。但两人商量后还是觉得自己在家隔离比较舒服,也方便照顾。比较头疼的是晚上的需要隔离分开睡,但是娃坚持要跟妈妈一起,死活不肯跟我睡沙发,只能听天由命。老婆第二天已经好转,只剩下感冒症状,卧床刷了一天剧。第三天已经无聊到拿起电脑开始工作了,第五天感觉好了,但是 RAT 自测还是阳,只不过 T 线开始变浅。

接下来三天是小长假周末,因为不用接送娃,所以我也没有自测。从朋友家了解的情况是只有妈妈阳性,而爸爸和孩子一直阴性,现在妈妈已经转阴了,他们又可以带娃出去解闷。

可能有点松解,周末放松了警惕,结果周二的时候我开始嗓子不舒服,果然 RAT 自测阳了!好消息是老婆这时候自测转阴了。娃一直是阴,于是隔离和接送的任务倒置过来。我的症状也不重,第一天晚上稍微头晕,吃了止痛药然后就睡了。之后的几天只是感觉嗓子里有点东西。过完第二星期我也转阴了,但是嗓子里的东西持续了五天才完全消失,我一度以为是不是什么后遗症。

完事后我发了个朋友圈,记录一下最近的情况,说隔离给我的影响比得 Covid 还要严重,然后在国内老父亲的呵斥下删 (si) 除 (mi) 了。(可能老人家觉得我不到百来人的朋友圈影响力比卫健委还大吧 :doge: )

以上就是一位轻症患者的 Covid 流水。

Ref: https://www.v2ex.com/t/862622

创建自签名 SSL 证书

疫情仍然在继续,但是维州已经开始恢复生机。我大概又歇了小半年,除了工作时间,下班之余几乎没有碰与技术相关的东西。同时由于近来关注了太多社会新闻,反而让自己陷入了政治性抑郁。刷推的时候刷到一个无聊的放置类手游竟随手下载来玩了一个星期,也算放空一下自己,转移注意力,好重振旗鼓。 回顾了一下半年多以前开发的 Axidraw Web,有不少可以分享的点东西,准备挑几个记录一下。

AxiDraw 是一个双电机的二维绘图仪。可以将 SVG 绘制到纸面上。在研究完它的底层串口协议后,我尝试用 javascript 实现了一个能在网页上运行的 Web 小程序,能通过 WebUSB API 与 AxiDraw 单片机直接进行通讯,同时实现了 SVG 的绘制功能。

WebUSB

在开发 Axidraw Web 的时候,由于 WebUSB API 需要在安全的浏览器环境下(Secure Contexts)才能使用。在较早的 Chrome 浏览器上(version 83 之前),localhost 是否属于 Secure Contexts 尚未确定。而这类 API 默认只对 https://localhost 开放。在我写这篇文章的时候,文档中已经明确将 localhost 定义为安全环境。如果在开发环境中使用了较老的浏览器或者其它的自定域名,还是需要自行提供 TLS 支持。主要工作就是提供一个自签名证书,然后在 web server 中使用:

import express from 'express';
import https from 'https';
import fs from 'fs';

const app = express();
app.use(express.static('dist'));

const options = {};

try {
  options.key = fs.readFileSync('server/cert/dev.key');
  options.cert = fs.readFileSync('server/cert/dev.crt');
} catch (e) {
  console.error('Please create and install the SSL cert first.');
  process.exit(1);
}

const server = https.createServer(options, app).listen(8443);

写在 2021 年末

又过了没写博客的一年。曦仔已经两岁半了,这一年真是喜忧参半。然而疫情还是一眼望不到头。

家庭

一年前,休了一年半产假的 LP 重新回到工作岗位。这回如愿的换了个工作,离开了她在澳洲的第一个雇主。曦仔也开始了 Childcare 之旅,而我已经经历了大半年的远程办公(Working from home)。

虽然远程办公让我有更多的时间休息,免于通勤的奔波,不过这也是曦仔夜惊症(Night terror)非常严重的时期。他的睡眠不再像一岁的时候那样安稳。每天深夜都要哭闹数次,且处于非清醒状态。夜晚我们只好轮流值守,不过多半时间曦仔只要妈妈的怀抱。于是到了白天我们拖着疲惫的身驱把他送去日托,然后投入工作。而这样的情况持续了八九个月,直到最近才有所好转。这大概也是工作休息之余我再没有精力书写博客的原因。

在 macOS 上使用 eGPU 的体验

前阵子在处理动森二维码的服装预览模型的时候,玩了一下 Blender。于是又勾起了我小时候玩 3D Max 的回忆。于是好想给手上这台 Macbook Pro 2016 配个显卡,深入学习一下 3D 建模。

于是在网络上搜索了好一阵,发现可以使用 eGPU(外置显卡坞)将独立显卡接到 Macbook 上使用。苹果的官网有一篇文章介绍了目前各个版本的系统支持的 eGPU 以及显卡的情况。

仔细看了一圈下来,发现由于历史原因近几年新出的 Macbook 并不支持 nvidia 显卡。看来是没法享受最近要发布的 RTX 3080 系列,只能选择 AMD 显卡。经过简单的预算,最终选择了 Razer Core XAMD RX 5700 XT 来体验一番。

给 Apollo-Link 打补丁 II

继上回给 Apollo Link 打补丁过去了几个月,本想翻看一下之前的那个 Pull Request 是否已经被 Merge,结果没想到原来的 Apollo Link 库已经被弃用了。新版的 Apollo Link 被重构后集成到了 @apollo/client 包中。不过并没有修复前面 PR 提到的问题。更糟糕的是之前使用的打补丁的方式无法起作用了。新的 selectHttpOptionsAndBody() 函数被专门放置到一个独立的 module 文件中。并且在提供的 cjs bundle 里,它直接被 createHttpLink 函数引用。所以之前的替换方法没办法在函数被引用前进行「狸猫换太子」。

那么是否有其它成本比较低的方式进行补救?于是我简单的搜索了一下 Webpack 的官方文档,很快找到了一个叫 NormalModuleReplacementPlugin 的内置插件。使用它可以非常方便地替换指定的模块文件。

new webpack.NormalModuleReplacementPlugin(
  resourceRegExp,
  newResource
);

动森二维码生成器:服装类(后篇)

前篇写到动森二维码生成器的二维码划分规则以及预览模型的 UV 贴图。根据我的设想,接下来我要在 Aseprite 画板上将这个模型渲染出来,并将用户绘制的图案通过 UV 贴图的方式绘制到模型上。而目前我所拥有的东西只有:调整过 UV 贴图坐标的 6 个衣服模型、在 Aseprite 读取和写入像素的 Lua API,还有记忆中模糊的图形学知识。本文简单记录一下我当时的思路,以及遇到的一些细节问题,如果对实现有兴趣,可以直接访问 Github 上的该项目

动森二维码生成器:服装类(前篇)

在开发动森二维码生成器的时候,对于服装类设计的生成,一开始我并没有很好的想法。游戏中对贴图的是分块绘制的,并且有一个动态模型可以展示衣服绘制的效果。对比同类工具 Animal Crossing Pattern Tool(下称 ACPT),他们也提供了 3D 模型用于展示贴图效果。但要如何在 Aseprite 中实现展示 3D 模型,我并不是很有把握,毕竟这是一款用于绘制 2D 像素图的工具。另外如何给贴图分块,也需要深入分析。本文先记录一下贴图的划分,之后再写一篇分析 3D 模型的渲染。

动森二维码生成器 for Aseprite

最近翻到一本不错的像素书:由 Nostarch Press 出版的 Make Your Own Pixel Art。Nostrach Press 专门出版极客类的书籍,里面有很多看到标题就有兴趣读下去的书,非常适合我。

而这本 Make Your Own Pixel Art 的作者 Janeifer 拥有 30 年的像素画经验,在书中非常系统地讲解了像素画入门的各个方面,还提供了不错的练习素材。并且书中使用的编辑器正是我非常喜欢的 Aseprite。正好最近时间比较多,就又拿起来画板和鼠标瞎画点东西。

而更让我惊喜的是,这款买了很久的小而专业的像素绘画软件,居然支持自己编写插件。从 Aseprite v1.2.10-beta2 版本开始,作者引入了 Lua 语言来扩展编辑器,允许用户编写一些定制化的功能

于是我开始琢磨着用它做点什么。正好最近在玩动物森友会,游戏里允许玩家自己创做像素风格的图案用来装饰各种物品、衣服、地面。另外,新版的 Animal Crossing: New Horizons 可以通过手机 App 扫描早期版本的 Animal Crossing: New Leaf (下称 ACNL) 玩家绘制的图案的二维码,导入这些现存的图案。

但要知道,不像 3DS 上的 ACNL 可以使用双屏 + 画笔来做画。在 Nintendo Switch 上使用手柄做画有多难受,可想而知。虽然基础画板只有 32 x 32 像素,但是切换颜色、工具等操作,实再不如在电脑上作画来得舒服。我想,如果能直接在 Aseprite 这种专业软件中作画,然后直接生成二维码,再传送到游戏里使用,岂不是非常方便。

动森图鉴+开发笔记

这两个月受到疫情影响,从四月中开始在家办公,四月底开始降薪,并且到五月初的这两个多星期进入了做三休四的节奏,每周强制休二天年假,不知何时是头。

由于在家工作,有更多的时间做自己想做的事。为了给自己减压,于是入了动物之森 Switch 版开始捡树枝。玩了几个星期发现其实自己并不是很喜欢联机,硬是把一个休闲社交游戏玩成了单机游戏。

不过动森的探索性还是挺强的,光是收集小动物就可以折腾很久。而且游戏时间与现实同步,每过一个月就会有新的物种出现。有时候需要查一下攻略才知道最近新出了啥动物。

在网上浏览这些攻略的时候就想,为啥大家都把数据做成表格的形式,非常不直观,不如做成像游戏中的图鉴,还可以加上自己的改进。例如其它网站上对鱼的影子的描述,只是用文字写着 “Smallest (1)”、“Small (2)”…“Latest (6)” 这样让人摸不着头脑的表述。