# New ## Gameplay ## MultiDraw 实现了PC与移动端平台的Backface描边与类多Pass效果。 其中描边支持宽度对FOV、深度的自适应。 ## AIGC ### AnimationRetargeting 公司开发的AI生成动画的平台,通过用户输入的文字描述来给指定的角色模型生成动画。我在该项目中实现了高效的动画重定向。 我实现了3种方案: 1. 使用Blender插件,通过cmd调用的方式进行重定向。 缺点:转换速度比较慢,会影响用户使用体验。 2. 在服务端部署UE并将其服务化,以此提供动画重定向服务。缺点:部署UE服务(Editor)需要服务器带有GPU,因为服务器的费用会比较高。 3. 移植UE5骨骼链重定向逻辑到qt中,实现跨平台的重定向程序。优点:效率高、准确性高。200ms左右,主要消耗在读取与生成FBX文件上。 QRetargetService实现了以下功能: 1. 实现UE5骨骼链重定向算法。 2. 对fbx、bvh动画进行重定向并且输出fbx文件。 3. 支持字符流输入动画数据,并进行重定向。 4. 支持NPY动画数据输入。 5. 支持FBXStream读取/写入数据。 6. 重定向Pose对齐。 ### UE Docker部署 跑通了UE Docker部署流程。 ### AIMotionRender 模仿2022年初的某个AI视频APP。AI端负责识别用户上传的视频中的动作数据与其他相关信息,调用AIMotionRender来生成短片。除了角色,其他的场景、镜头都是预制。 AIMotionRender 1. 将接受到的动画数据重定向并且应用到AI端指定的角色中。 2. 将该角色放入到指定的场景中并且进行渲染压片,并且返回给APP后端。 ### AIFacialRender AI端识别用户输入的台词生成对应的表情、口型、音频文件,调用AIFacialRender来生成短片。 ### AIMotionAssetTaker 通过调用AIGC API获取动画数据,之后再在本地进行重定向后生成UE动画资产,以此提高动画制作的效率。 ### AIVirtualIdol 导播台使用了Electron;控制逻辑写在Puerts与LogicDriver状态机种。通过导播台主动连接来发送控制命令。 ### 4DGaussian 根据3DGaussian原理,使用Niagara + 扩展节点,在UE5中实现的4DGaussian效果。之后因为项目被砍,后续没有拿到质量合格的4DGaussian数据,至使开发停止。 TODO: 1. 3DGaussian LOD。(虚拟贴图) 2. 通过乒乓缓存以此减少显存占用。 # OLD ```markmap {scale=1.1} ## 美术流程 ### Ue4中的场景物体融合方式与优化 1. World aligned texturing 世界坐标映射贴图 2. Pixel depth offset 像素深度偏移 3. Distance field mesh blending 距离场模型融合 4. Runtime virtual texturing 实时虚拟贴图 ### Layered Material 1. 尝试外包一个角色,并让外包以Material Mask的方式使用Substance Painter完成贴图。最后走完EPIC的Layered Material流程。 ### UE4头发方案研究 1. 学习Ornatrix for Maya插件,并且尝试制作头发。 2. 学习Ornatrix制作面片头发方案,并且制作出成品。 3. 走通UE4 Niagara Hair流程。 ### UE4物理灯光流程 1. 如何使用物理灯光系统 2. 流程包括:初始化场景(关闭若干后处理效果,并且固定曝光)=》场景检查(贴图饱和度与亮度)=》按照当前环境对应的现实状况设置曝光度与天光HDRI(因为每个HDRI的亮度范围不一样,还可以在环境球材质中调整)=》主要自然光源完成后,烘焙二阶球谐GI=》按照场景发光物体进行布光=》烘焙阴影并检查是否有错误阴影=》逐个开启后处理效果并检查(反射=》AO)=》 3. 了解UE4静态光照与动态光照所有相关的功能与用法。 ### 动画蓝图 1. 学习物理模拟动画节点 2. 学习AdvancedLocomotionV3/V4 项目,以此对UE4动画系统有了一定了解。(FootIk、8方向运动、状态切换逻辑) 3. 为了复现AdvancedLocomotionV4项目中动画的动画曲线(这些曲线会控制状态机以及其他融合动画效果),使用AnimModifier编写生成逻辑,最终复现了Run、Walk等移动动画的曲线。 4. 学习动画蓝图的动态加载功能,解决当动画蓝图逻辑较多时的性能问题。对于每个武器拥有不同攻击动画与逻辑的情况,有很大的作用。 ### UE4FaceARSample Iphone面部方案学习 ## 程序 ### GameplayAbilitySystem GAS 1. 学习GAS系统,了解Ability、Effect、AttributeSet、Tasks等类。 1. 完全学习ActionRPG项目,并且将物品系统封装成组件,放在插件中以备后续使用。 2. 解决只使用一个Ability类实现一套连招技能。 3. 学习GameplayAbilitySystem中配套的Debug方法 ### 编写Slate控件 1. 实现整数版本的SpinBox 2. 实现类似血源诅咒那种带有虚血的进度条 3. 实现通过函数调用C++、蓝图通用的MessageBox,顺便了解了UMG、Slate、GameViewportClient之间的大致关系 ### DCC插件 1. 调用Maya的HumanIK插件实现骨骼批量重定向功能,将Max的Bip骨骼转换成Ue4骨骼。后续可以再加入其它定制功能。 2. 实现在选中父骨骼后批量生指向若干选中顶点的之骨骼,并且生成蒙皮权重。大致作用是将低模角色的BlenderShape权重传递到高精度角色上。 ### 项目管理 1. 和他人合作Demo时,在租用的VPS上,搭建Gitea以实现版本管理(包括二进制文件)。 2. 学习UE4的自动测试框架。 ## 图形学效果 ### 渲染框架 1. 通过学习EPIC的PPT以及源代码,最后撰写全网第一份RenderDependencyGraph(RDG)的使用教程以及HelloWorld案例。(案例已更新至4.26版本) 2. 通过学习源代码,了解4.25版本传统渲染框架GlobalShader的变动,并撰写文章。 ### Shader 1. UE4后处理材质:各种卷积描边、各种模糊等。 2. 在Ue4中实现对二次元模型进行透视校正,让模型更加二次元,顺便学习了BasePass中的顶点数据处理过程。 3. 使用Gerstner波制作海洋效果,水体透射使用(水面深度-水底深度)来得到深度值,之后对使用2种颜色差值进行得到最后颜色,白沫使用基于Saturate高度的方法。后面如果再做,打算使用houdini通过粒子模拟的方式来生成白沫贴图。 4. 学习EPIC TA的RayMarching 溶球效果,(使用了SDF)。 5. 学习EPIC TA的RayMarching 2D 3D云效果。 6. 修改ShaderModel以实现卡通渲染材质。 ### 自定义图元类 1. 在不修改管线的情况下,以插件的方式实现物体外描边效果 2. 在不修改管线的情况下,以插件的方式实现UE4剖面效果 ### 离线渲染学习 1. 学习完《An Introduction to Ray Tracing》 系列3本书,并且渲染出对应效果的图片。 2. 学习《Ray Tracing from the Ground Up》,并且使用Qt重新实现一遍离线渲染器(单核渲染)。 3. 学习《pbrt》至第10章,后续因为没有多线程库编写能力,只能大致看了看。 ## 其他效果 ### 面试J3时的面试题 1. 看gif图实现枪支表面的能量效果,使用一张Noise贴图,分别使用平移与旋转,2种移动UV方式,叠加到一起。2种移动方式的贴图各自乘以了不同的颜色。 2. 在不是用UE4 SSS ShaderModel情况下,使用寒霜的FastSSS方案,实现了玉石枪支的效果。因为家里电脑性能以及面试周期问题,没有通过添加ShaderModel的方式来修改,所以能量不够守恒。 3. 使用Python为Maya编写一个生成圆柱体的插件,点、面、法线都是手动计算的,可以任意设置大小、横纵以及圆弧段数,UV采用Maya内置的映射命令。 使用Qt编写了插件界面。 4. 实现了一个在屏幕空间宽度恒定的“赛博朋克”风格网格材质,通过使用了透视矩阵 对宽度进行校正来实现。 5. 在不改变模型拓扑结构或者动态改变模型结构的情况下,设计一种基于Vertex Program的算法,动态改变毒圈模型的顶点位置。使得玩家走近毒圈边缘时,看到尽可能平滑的弧线。——最后因为时间不够,只实现了核心逻辑:使用一个没有封口的圆柱体,输入2个角度,让圆柱体像扇子那样按照角度进行折叠,也就是将顶点挤压到一起。最后只差通过摄像机方向、位置、fov、圆心位置计算2个角度以及威风口处的旋转位置(将威风口藏在摄像机背后)。 ## 代码 1. GAS 2. 网络联机 3. ```