欢迎来到我的作品网站!

Welcome to my portfolio

我的头像

吴波

吉林艺术学院在校生

游戏技术美术 Technical Artist / Game TA

我是一名正在入门 UE5 技术美术方向的新人,目前在专注学习水体渲染与 Shader 编写。从 Gerstner 波形、材质节点到 HLSL 基础,我都在系统地一步步深入,同时也在学习如何用性能分析工具审视渲染开销。虽然目前经验尚浅,但我对实时渲染有浓厚的兴趣和持续钻研的耐心,习惯带着问题做 Demo、在实践里验证理解。希望能从基础扎实的方向出发,逐步成长为能独立解决问题、让画面好看又跑得动的技术美术。

精选作品

探索实时渲染、Shader与性能优化的技术实践

Shader 渲染与优化

探索实时渲染、性能优化与视觉效果的技术实践

项目创建时间二零二六年九月

风格化玻璃与魔法水晶材质探索

Stylized Glass & Crystal

项目概述

这是我脱离教程、在 UE5 材质编辑器中从零手搓的第一个 Shader 作品。初衷很明确:不满足于"照着截图连节点",而是从基础写实玻璃做起,通过引入 Fresnel 与自发光驱动,逐步进阶到赛博/魔法风格的水晶效果,完整走通一个材质从原理到表现的推导过程。

核心技术实现

基础玻璃阶段采用 Translucent 混合模式,折射率设为 1.5(真实玻璃的 IOR),通过 Refraction 输入扭曲背景像素。

水晶进阶阶段的核心逻辑是:菲涅尔节点输出随视角衰减的系数——中心正视时趋近于 0,边缘掠射视角趋近于 1。我以该系数驱动自发光强度并乘以霓虹青/紫配色,得到"边缘锐利发光、中心完全透明"的晶体效果,同时用菲涅尔乘以常量直接控制不透明度,一系数两用,节点拓扑极简。

性能与攻坚

攻坚中首先排除 UE5 Substrate 材质系统导致的"半透明选项丢失"——查阅资料后确认 Substrate 默认接管混合模式,关闭后恢复。

更关键的是半透明模式下 SceneDepth 不可用的管线冲突:我没有用报错提示的绕行方案盲目堆砌节点,而是选择最小拓扑规避深度读取,在保持视觉表现的前提下将材质指令数压到最低,GPU 消耗极小。

HLSL Unity Gerstner Wave Caustics
玻璃材质节点图
玻璃 · 材质节点
玻璃材质最终效果图
玻璃 · 渲染效果
魔法水晶材质节点图
水晶 · 材质节点
魔法水晶材质最终效果图
水晶 · 渲染效果
UE5 材质性能指令数统计截图
UE5 材质指令数统计:像素着色器仅 312 条指令,极低的性能开销

粒子与视觉特效

大规模粒子、Compute Shader 与实时特效的性能实践

粒子系统性能优化

针对大规模 VFX 场景中 CPU 成为瓶颈的问题,将粒子的更新逻辑全部迁移至 Compute Shader,使用结构化缓冲区(Structured Buffer)存储粒子的位置、速度、生命周期等状态。

通过空间哈希(Spatial Hash)对粒子进行视锥剔除,仅渲染摄像机可见范围内的粒子,大幅减少 Draw Call 与光栅化开销。

配合 Instance Rendering 批量提交渲染指令,同屏粒子数从 1 万提升至 10 万,帧率始终稳定在 60fps,且内存占用仅增加 15%。

Compute Shader Unreal GPU Particle Spatial Hash

工具与管线开发

用自动化工具提升美术生产效率,把重复劳动交给程序

项目创建时间二零二六年九月

我的第一个 UE5 工具:资产批量重命名

为什么做这个

做练习项目时最烦的一件事,就是手动给一堆资产一个个改名字——又慢又容易打错。我就想:能不能写个小工具,让它替我做这件事?

我经历了什么

这是我第一次碰 EUW 蓝图,走了很多弯路。第一版我把名字直接写死在逻辑里,能用但完全不灵活。

后来我加上了输入框,想实现“输入什么就改成什么”,结果点按钮毫无反应——查了很久才发现是 UI 焦点的问题。好不容易能点了,又报新错误:文本框给的 Text 类型没法直接和 String 拼接。折腾半天,最后用 GetText 配合自动转换节点才把数据真正接通。那一刻我理解了什么叫“数据流”。

目前的成果与不足

现在它已经能正常跑了:选中一批资产,一键变成 shenqu0、shenqu1……我知道它还很简陋,但我从零走通了“发现问题 → 踩坑 → 解决”的完整过程。下一步,我想给它加上命名合规检查。

V1 硬编码 → V2 参数化升级
V1 版蓝图:名字硬编码在逻辑里
V1 · 名字写死在逻辑里
V2 版蓝图:输入框参数化命名
V2 · 输入框参数化命名

建模与流程

高模、低模、拓扑与 UV 的工程化实践

项目创建时间二零二六年九月

Maya → Substance 3D Painter 流程探索:铁箱

项目定位

这是一个流程学习记录,而非成品展示。目标是跑通“建模 → 展 UV → 导入 PT 绘制材质”的基础工作流,用一个低成本的铁箱把每一步的真实坑位都踩一遍。

踩坑与收获

过程中接连遇到生成器失效的问题:先是误用“几何体遮罩”导致效果完全出不来,排查后换上正确的遮罩类型;随后底部锈迹生成器又死活调不出效果,经向他人求助并反复对照参数,最终定位到层级关系的问题。核心收获不是这个箱子,而是形成了一套“现象 → 假设 → 验证”的排错习惯。

下一步计划

待流程熟练后,将完整制作一件包含高模雕刻、法线烘焙、材质绘制与渲染输出的成品作品,补齐流程闭环的最后一环。

Maya 铁箱拓扑结构图
拓扑结构
Substance 3D Painter 铁箱图层与遮罩结构图
PT 图层与遮罩结构

完整渲染输出将在后续版本中补充

AI 技术探索

将 AI 工具链融入工作流,提升开发效率与学习深度

项目创建时间二零二六年九月

基于 AI 工具链的个人作品集网站开发

项目概述与目标

作为一名专注于实时渲染与 Shader 技术的游戏技术美术(Game TA),我认为"展示"本身就应该是一次技术实践——所以我选择了从零搭建并部署这个暗色科技风的个人作品集网站。

目标不仅是呈现作品,更是验证一件事:借助 AI 工具链,能否独立完成一个真实工程的完整闭环,从开发、调试到上线。本项目技术栈涵盖 HTML5 / CSS3 / Vanilla JS,结合本地化字体与资源懒加载技术。

作品集网站首页截图

AI 协同工作流

项目采用清晰的三位一体分工:

  • Trae 负责"执行"——生成和修改 HTML/CSS/JS 代码、调试布局、修复 Bug;
  • Kimi 担任"大脑"——讲解 UE5 材质节点原理、撰写文案、检索技术资料;
  • ima 充当"硬盘"——沉淀技术拆解笔记、归档灵感截图、管理项目素材。

我则负责拆解任务、提出验收标准、验证产出结果,始终处于决策与验收的位置。

核心技术攻坚

以页面右侧悬浮栏的滚动监听(Scroll Spy)为例:最初我完全不理解"滚动位置如何驱动导航高亮"这一逻辑。我先让 Kimi 解释 IntersectionObserver 与滚动事件监听的原理差异,在 ima 中沉淀对比笔记,再由 Trae 生成初版代码。

但滚动触发时高亮频繁抖动,我通过浏览器 DevTools 定位问题后,在向 Trae 描述需求后,加入了 debounce(防抖)机制并设置了 rootMargin 阈值,最终实现了极其平滑的滚动体验。

同样,在理解 UE5 半透明材质中 SceneDepth 与 PixelDepth 的深度混合逻辑时,我先通过 Kimi 获得原理性解释,再要求 Trae 用最小代码复现深度混合的数值变化过程,从"不懂"到"能讲清楚、能复现"。

Trae 协同开发工作界面 网站加载速度测试结果

性能优化与部署

针对 Google Fonts 国内加载超时导致的渲染阻塞,我将字体改为本地引入并裁剪字体子集,首屏文字渲染不再抖动;同时为核心资源开启懒加载,降低初始请求体积。

代码托管于 Gitee,通过帽子云(Maoziyun)实现静态网站的秒级自动部署。

成果与反思:网站已正式上线。这个项目让我形成了对"AI 辅助技术美术"的明确认知:AI 是放大器,而非替代品——它能压缩"从不懂到落地"的路径,但拆解问题、定义验收标准、判断产出质量的能力,仍然必须由人掌握。

关于我

工作之外,我是重度游戏玩家,从 3A 大作到独立游戏都玩——这是我入行的初心,也是日常的技术拆解对象。写小说让我习惯了构建逻辑闭环:一个设定的偏差会拖垮整个故事,和一条冗余的材质指令拖垮帧率是一样的道理。力量训练则让我保持专注——长期主义不是口号,是每天多做一个组。

健身

热爱力量训练,相信自律能带来持续的专注力。

游戏

重度玩家,从 3A 大作到独立游戏均有涉猎,这也是我踏入游戏行业的初心。

小说

热衷阅读流行小说,也正在尝试提笔写作,喜欢用文字构建世界。

下载我的简历