林夏的指尖在数位板上划出流畅的弧线,屏幕里的机甲关节正以0.3毫米的精度转动,钛合金材质的反光在渲染窗口里流淌,像融化的银。他盯着模型腰部的装甲缝隙,忽然皱起眉——第七根液压管的角度比设计图偏差了0.5度,在现实里或许微不足道,但在《星际防线》的引擎里,这会导致机甲转身时出现穿模bug。
“林哥,甲方又改需求了!”实习生阿ken举着平板电脑冲过来,荧光绿的电竞椅在地板上划出刺耳的声响,“他们说要给机甲加条披风,还要会随风飘动,说是‘增加英雄气概’。”
林夏的鼠标在“保存”键上悬了三秒。他调出物理引擎参数,把披风的布料密度从0.8调到0.6:“用三层网格叠加,外层做粒子特效,模拟破风时的撕裂感。”他忽然指着屏幕里机甲的膝盖,“这里的磨损纹理再加深两度,英雄不是完美的,得有点伤痕。”
阿ken的眼睛瞪得像建模里的球体:“可设计图里没说要加磨损啊!”
“游戏里的机甲刚打完仗,”林夏往数位板上喷了点防滑剂,“你见过哪个从战场上下来的英雄,铠甲还锃亮得像新买的?”他想起上周去军事博物馆,看见退役坦克的履带缝里还卡着沙砾,锈迹在阳光下泛着红褐色的光,比任何cg动画都更有力量。
上午十点,建模室的玻璃门被推开,产品总监的鳄鱼皮公文包在金属地板上拖出钝响。他把一叠设计图摔在林夏桌上,咖啡渍在“机甲武器系统”几个字上晕开,像片丑陋的墨云。
“《星际防线》的测试反馈出来了,”总监的指甲在平板电脑上戳得噼啪响,“玩家说机甲的炮口太假,没有后坐力的震动效果,今晚必须改完!”
林夏调出炮口发射的动画,粒子特效在屏幕上炸开刺眼的白光,确实干净得像块透明的玻璃。“需要加烟幕和热浪扭曲,”他往炮口模型里加了个噪波控制器,“发射后0.5秒出现硝烟,用体积雾模拟扩散,再让炮管轻微形变两帧,像真的被后坐力震到。”
总监的鼻孔里喷出股粗气:“我不管你用什么控制器,明天早上我要看到能让玩家尖叫的效果。”他转身时,公文包带勾住了林夏的电源线,主机发出刺耳的警报声,屏幕里的机甲突然变成了扭曲的色块,像被揉皱的锡纸。
“林哥!医疗模拟器的心脏模型崩了!”美工小雅举着鼠标喊,她的粉色键盘上还贴着hello kitty贴纸,“儿科医生说我们做的心脏跳动幅度太大,会误导实习生!”
林夏踩着阿ken的电竞椅滑过去,屏幕里的心脏正以夸张的幅度搏动,主动脉像条疯狂扭动的蛇。“真人的心脏跳动,收缩期和舒张期的间隔是0.8秒,”他调出生物力学数据,“你们把时间轴拉得太长,还加了弹性形变,当然像卡通片。”
穿白大褂的儿科医生推了推眼镜,镜片后的眼睛里带着焦虑:“很多实习生是第一次接触人体模型,太假会影响他们的判断。”她忽然从口袋里掏出颗心脏模型教具,塑料表面的血管纹理模糊得像团毛线,“但这个又太简单,学生们看不出瓣膜的工作原理。”
林夏接过教具,在手里转了个圈:“我们做个半写实的。”他往模型里导入真实的心脏ct数据,“保留80%的解剖结构,把瓣膜开合的动作放慢三倍,用不同颜色标注血流方向,但去掉那些会让新手 confusion 的神经细节。”
医生的指尖在屏幕上轻轻点着:“这里,二尖瓣的腱索,能不能做得像琴弦?实习生们总记不住它们的作用,说像团乱麻。”
林夏笑了。他用贝塞尔曲线重新勾勒腱索,让它们在心脏收缩时绷紧,舒张时松弛,像被拨动的琴弦:“现在像不像小提琴的弦?它们的作用就是拉住瓣膜,不让血液倒流,就像琴弦控制音高。”
医生的眼睛亮起来,像看到了清晰的病灶:“这样他们肯定能记住!上周有个实习生,就因为分不清腱索和乳头肌,差点在模拟手术里出错……”
中午在员工餐厅吃饭时,林夏的手机震了震。母亲发来段视频,父亲正举着他去年回家时买的3d打印花瓶,往里面插野菊花,陶土色的花瓣在打印纹路里颤巍巍的,像群怕冷的蝴蝶。“你爸说这个花瓶打印得太规整,”母亲的声音裹着厨房的油烟味,“不如村口老陶匠做的,说上面的指纹才是最好看的花纹。”
林夏扒了口饭,看见视频里花瓶的内壁确实光滑得像块玻璃。“下周回去给您打印个新的,”他对着屏幕说,“这次加些手工捏制的纹理,像老陶匠的手印。”他想起父亲退休前是木匠,刨花在他脚边堆成小山,刨子划过木头的声音里,藏着比任何参数都更精准的尺度。
“林哥,古风游戏的榫卯结构建不出来!”阿ken举着本《营造法式》跑过来,书页折角处的斗拱插图被画得乱七八糟,“这个‘十字抱厦’的节点,怎么拼都有缝隙,甲方说要做到严丝合缝!”
林夏翻开书,指尖划过插图里的榫头:“用布尔运算不行,得建五个独立模型,再用父子层级绑定。”他在电脑上演示,“你看这个卯眼,深度要比榫头长0.2毫米,现实里要留伸缩缝,虚拟世界也得尊重物理规律。”