前端技术
书法字体动画
Emeritus字体是一种受传统Blackletter和Fraktur设计启发的黑体字型。其书法形式为微妙而富有表现力的动画概念奠定了基础。我们首先将每个字母解构为核心形状,仔细剥离终端以创建干净的、可动画化的形式。
接下来,每个形状都通过微妙的旋转和缩放进行单独动画处理。使用GSAP的drawSVG功能,我们为与字母终端路径相连的遮罩路径设置动画,以有机的方式展现它们。其结果是标题和页脚文本呈现出既有趣又优雅的动画效果,为首页和关于页面增添了动态节奏,同时与周围的WebGL元素相得益彰。
|
|
|
|
裁剪路径动画
菱形图案在网站中创造了统一的视觉线索。您会在斜切、页面过渡、按钮和微妙的交互触控中看到它们。通过SVG裁剪路径赋予生命,这些几何形式提供了一种简单而有效的方式来分层内容并将整个设计联系在一起。
基于滚动的时序动画
其余页面使用GSAP时间线动画,与ScrollTrigger紧密配合,实现流畅的滚动同步播放。SplitText动画增添了动态的排版动效,而固定元素和微妙的视差(鼠标)效果则引入了深度和层次感。
WebGL技术
设置与系统
每个WebGL场景都在一个单一的画布上运行,我们使用观察器将其在各个部分之间移动。这种方法不是为每个场景创建新的渲染器,而是保持轻量级和无缝体验。
技术栈很直接:Three.js用于核心功能,pmndrs/postprocessing用于后期处理,n8ao用于环境光遮蔽通道。
此外,使用detect-gpu根据用户设备调整渲染,从而在低性能设备上保持流畅体验,同时在高性能机器上呈现更佳效果。
渲染与视觉方向
这次我没有编写任何自定义着色器😄。所有内容都使用Three.js出色的物理材质。挑战在于尽可能接近3D设计师提供的Octane渲染参考,然后我尝试直接在WebGL中尽可能接近地复制。
没有烘焙——整个想法是保持实时和动态,以便我们可以随时调整灯光。我们使用场景中的灯光来塑造氛围,然后添加环境贴图以带来那些通常只有在静态渲染中才能期望的真实反射和柔和照明。这样一切都保持灵活,我们可以实时调整,而不是被烘焙纹理锁定。
协作与迭代
由于每个场景都需要自己的氛围,我们使用Tweakpane GUI,让设计团队可以实时调整。所有内容都是可调整的,颜色、灯光、材质、变换等。由于配置可以导出和导入,我们可以在不接触代码的情况下来回传递预设。这形成了一个非常好的工作流程:更快的迭代、更多的创意控制,无需来回沟通。
前端后端架构
前端专用后端
我们使用Vue/Nuxt构建了强大的基础,并创建了一个前端专用后端API层,简化了前端应用程序中的数据使用。BFF API层充当外部服务和前端之间的中介,在数据到达客户端组件之前进行聚合和规范化。这种方法减少了UI的复杂性,最大限度地减少了冗余请求,并确保了跨不同页面的更一致的数据流,最终实现了更流畅的用户体验和更清晰、更可扩展的代码库。
内容管理
对于内容管理,我们实施了Storyblok,这是一个无头CMS,使非技术团队成员能够管理和更新内容而无需接触代码库。Storyblok的可视化编辑器和基于组件的结构与我们的Vue/Nuxt设置完美配合,实现了动态内容交付和快速迭代,同时保持了开发和内容操作之间的清晰分离。
托管
我们将网站托管在Vercel上,利用其与现代前端框架的无缝集成及其快速的全球CDN来高效交付资源。这种托管选择允许自动化部署、预览环境和即时回滚,从而简化了我们的发布过程并提高了可靠性。