This commit is contained in:
2023-06-29 11:55:02 +08:00
commit 36e95249b1
1236 changed files with 464197 additions and 0 deletions

View File

@@ -0,0 +1,186 @@
```markmap {scale=1.1}
## 对于项目管理的了解
### PSD通用格式
灼华互娱
主要使用ABC缓存结算头发与布料但ABC缓存很可能因为过大而导致导入崩溃。所以灼华互娱对DCC的ABC导出插件进行魔改从而减少ABC缓存大小。但个人认为最佳的解决方案还是重新实现导出缓存格式不过这需要实现DCC导出插件与Unreal4导入插件引擎没有必要使用高精度数据工作相对来说会大一些。
Niagara与Houdini结合
灼华互娱采用的方案是: 使用Niagara制作普通粒子特效。 对于需要解算巨量粒子则使用Houdini生成粒子缓存导入Ue4中。在Ue4中生成模型Instance作为粒子。
#### 个人想法
- 多版本美术资产浏览与比对功能。
### 聊聊自搭建服务器以及Gitlab、Gitea
- 小巧耗资源少但功能有限。貌似邮件系统还有bug。
#### GitLFS与UE4
- 二进制文件臃肿与git清理功能
#### GitHook与WebHook
- GitHook执行Git操作所会调用的钩子。
- WebHook是GitHook的一种通过WebSocket通知其他软件与平台的钩子。
### 自动化集成系统
- 多操作系统开发需要
- 构建与发布产品(不同环境)
- 构建DLL并且上传到哨兵程序中
- 构建自定义引擎
- 运行自动测试程序(UE4内置Session Frontend或者通过自动化集成系统直接与UE4自动测试框架进行交互)
- 检测代码与分支的有效性
- 为每个设置构建对应的版本
#### 好处
- 减少不必要的加班时间
- 可以及时发现bug即使不写自动测试代码
#### 相关的CL工具
##### 因为是个人开发所以,仅仅是大致了解一下。
- TeamCity
- Jenkins
- Bamboo
#### 为单位写个一个简单的全流程数据生产平台,功能为数据录入、展示、查询、以及打包成单机版程序
## 渲染知识
- 我个人认为渲染的本质是:通过对场景与光源的采样,计算传递到摄像机与实际情况接近的光辐射量。
### 光谱
- 光通常指的是人类眼睛可以见的电磁波可见光视知觉就是对于可见光的知觉。可见光只是电磁波谱上的某一段频谱一般是定义为波长介于400至750奈nm之间的电磁波。实际生活中我们看到的光由很多不同强度和波长的光混合而成。
- PBRT中会使用光谱值进行采样与计算最后再将光谱值转化为RGB值输出。
### 采样
根据场景不同,存在不同的采样方式。
#### 采样器基本原理
事先生成若干组采样点样本,之后进行乱序操作。在进行逐像素采样时,使用伪随机的方式选取随机序号的采样点组。
#### 采样分布
##### 分层采样
对采样区域进行分割,各个子区域单独生成样本。
##### 低差异序列
- Van der Corput根据底数将指定长度的正整数序列转换为指定进制的数序列之后以小数符号为分界线将每个数左边翻转到右边去。
- HAMMERSLEY 哈默斯利:使用底数为 样本序号/样本总数 的Van der Corput序列。
- Halton 霍尔顿使用底数为质数序列的Van der Corput序列。
#### 贴图采样
- 双线性插值
- ISOTROPIC TRIANGLE FILTER 各项同性三角形过滤 然无法生成高质量的结果,但速度比较快。该滤波器因为各项同性的关系不支持非正方形或非轴对称的范围。该滤波器的主要缺点是:在斜角度观察纹理时图像容易变模糊。因为不同的角度会导致采样率不一致。
- ELLIPTICALLY WEIGHTED AVERAGE 椭圆权重均值
#### 抗锯齿
- SSAA
- MSAA
- FXAA
- TAA使用了低差异序列作为采样点
#### 采样偏差以及信号重建没看
### 材质
- 材质分为金属(导体)、非金属(绝缘体)、半导体。
#### 反射模型概念BRDF、BTDF、BSDF、BSSSDF
#### 菲尼尔
- 近似函数Schlick施利克
- 菲涅尔方程描述了光线接触到表面后反射与透射的比它实际上Maxwell方程在光滑表面上的求解。 因为在现实环境中光的偏振现象较少所以在PBRT假设光不偏振。
- 一般情况下,计算计算机图形学中的常见操作都会忽略色散现象,以此极大地简化光线传输计算(色散:折射率随着光的波长而变化)。
#### 微表面模型
与普通的着色模型的区别在于,普通的着色模型假设着色的区域是一个平滑的表面,表面的方向可以用一个单一的法线向量来定义来定义。
通过统计学方式来模拟这种微观结构分布。假设物体表面由大量微观几何表面组成,且每个表面都是绝对光滑的。必须保证每个微表面都能反射。因此只能用一个概率分布函数来计算任意方向的微小表面在着色区域中存在的概率。
#### 漫反射模型
- LAMBERTIAN漫反射辐射度/π)
- ORENNAYAR奥伦-纳亚尔)漫反射模型(基于微表面模型)
#### 半向量(位于入射法线与观察法线中间的向量)
#### 微表面分布函数(法线分布函数)
- 法线分布函数由粗糙度决定,主要影响高光
- BeckmannSpizzichino贝克曼-斯皮兹奇诺)
- Phong
- GGX
#### 几何衰减因子Shadowing和Masking
- TrowbridgeReitz特罗布里奇 瑞兹)
#### 金属微表面模型BRDF
- TORRANCESPARROW托伦斯-斯派若)
- Cook-Torrance托伦斯
- $$f(\omega_{o},\omega_{i})=\frac{D(\omega_{h})F(\omega_{o})G(\omega_{o},\omega_{i})}{4 cos\theta_o cos\theta_i}$$
#### 迪士尼PBR模型
##### 漫反射
- 用两个Fresnel项来增加入射角度低时反射的光线能量强度来模拟这种效果
float DisneyDiffuse(Vector3 In, Vector3 Out)
{
float oneMinusCosL = 1.0f - AbsCosTheta(In);
float oneMinusCosLSqr = oneMinusCosL * oneMinusCosL;
float oneMinusCosV = 1.0f - AbsCosTheta(Out);
float oneMinusCosVSqr = oneMinusCosV * oneMinusCosV;
// Roughness是粗糙度IDotH的意思会在下一篇讲Microfacet模型时提到
float IDotH = Dot(In, Normalize(In + Out));
float F_D90 = 0.5f + 2.0f * IDotH * IDotH * Roughness;
return INV_PI * (1.0f + (F_D90 - 1.0f) * oneMinusCosLSqr * oneMinusCosLSqr * oneMinusCosL) *
(1.0f + (F_D90 - 1.0f) * oneMinusCosVSqr * oneMinusCosVSqr * oneMinusCosV);
}
#### FourierBSDF
#### 曲线拟合BSDF-使用真实测量值进行曲线拟合FF15
### 光线追踪框架
#### 求交加速框架BVH、KD树、SBVH
- BVH在一个轴上对两个图元进行分割。分割过程中通过公式计算最佳分割点最佳的表面积与体积步骤1、计算每个图元的边界信息并且存储在数组中2、使用指定的方法构建树3、优化树使得树更加紧凑
- KD树经过空间分割的图元数。
- SBVHNvidia改进过的BVH结构先对图元进行空间分割最后使用BVH方式分割。 https://www.nvidia.com/object/nvidia_research_pub_012.html
#### 蒙特卡洛方法与重要性采样(忘记了)
- 逆推法、舍选法
#### 路径追踪
##### 双向路径追踪
## UE4灯光相关
### 物理灯光:使用现实世界的测量值作为标准进行灯光设置
- 之前版本中Unreal4的灯光使用的是虚幻单位这是的之前版本的灯光没有一个物理值的衡量标准。你很可能会因为后处理空间、曝光等因素影响而无法设置出正确的亮度值。例如你已经将一个区域的效果调整的很自然但是别的区域就会很奇怪bloom、阴影、光照等效果互相不匹配。 而前人已经积累了大量的摄影知识与经验,所以我们没有必要光靠感觉来设置灯光亮度与曝光度,而需要使用摄影标准来设置灯光,从而使得场景更加真实。
- 大晴天 15~16
- 多云 13
- 晚上月光 -6~-2
### UE4的曝光问题
- 因为UE4的渲染框架都是以EV100 为0设计的所以需要将经验上使用的灯光强度从当前曝光值下转换到EV100 0不然会出现若干bug比如默认的天空盒。
### 流程
#### 场景初始化
- 禁用自动曝光
- 禁用SSAO以及SSR
- 保持默认Tone Mapping
- 确认天光与方向光为默认数值。天光亮度为1 方向光亮度为3.141593(π)
- 设置测试用球(与色卡) 使用亮度为3.141593(Pi)的方向光此时灰球的亮度为0.5。使用Color Picker、或者截图使用Photoshop查看
- 确定你的材质是物理正确的。BaseColor太暗或者太亮 Metallic应该为0或者1。黑色或者白色Mask Specular应该为0~1范围的浮点数。不应该为颜色值。
#### 后续流程
- 设置曝光相关属性。
- 将所有灯光都是设置为Stationary类型。并开始设置方向光与其他主光源的基础属性方向、亮度等以及天光与反弹次数
- 设置LightMass属性使用预览级对场景进行测试渲染。
- 开启LightingOnly模式对光照进行检查。
- 给场景中的带有反射属性的物体添加反射球并调整属性。(命令行全局的反射质量、与抗锯齿质量
- 调整场景雾气
- 后处理调色
#### 静态方案
- lightMasslightMap
- VolumeLightMap二阶球谐与旧版区别在于可以使用流加载以及手机使用
#### 动态方案
- 级联阴影
- 胶囊阴影
- 接触阴影(后处理)
- 距离场GI废弃
- 距离场阴影与AO
- 4.25屏幕空间GI
```

View File

@@ -0,0 +1,173 @@
## RDG
### FrameGraph
首先需要了解Frame Graphe的设计思想为了速成看了知乎大佬 奔驰 的文章。但也因为速成必然会在一些地方有所误解还请见谅。这里说一下我的理解Frame Graphe思想可以理解为一帧中执行逻辑的图没有限定是渲染还是Gameplay逻辑但不管怎么说其重点在于图。
大致操作为将逻辑以最小功能为标准封装成单独的PassPass与Pass之间是变量或者可以理解为资源的传递的关系因此就可以把整个逻辑关系转换成一个Graphe。
UE4的RDG全名为Render Dependency Graph感觉是为了能更好的管理资源的加载回收尤其是RT拯救一下显卡上珍贵的显存以及IO带宽。同时方便程序员理解代码不会写出毛线团一样的代码。至于生成的图没有看过在哪估计在4.25加在Insight调试系统里吧。
### 大致流程
通过FRDGBuilder对象构建RDG渲染流程。之后塞入定义的RDG Uniform以及Shader后运行这个流程。RT会使用外部的IPooledRenderTarget接口取得比如各种GBuffer当然也可以自己创建之后绑定到RDG Uniform中的RenderTargets[0]数组中。最后根据是ComputShader还是PixelShader选择分发或是绘制即可。但源码里也没有RDG的PixelShader的代码95%都是ComputeShader的经过试验RDG的PixelShader的使用方法还是和旧版的GloalShader比较像的。
既然说到这个,之前我也是看了虚幻开放日的技术分享,知道了两者的区别。
### ComputeShader与PixelShader对比
ComputeShader对于PixelShader的优势
1. PixelShader只能处理当前ShaderComputeShader是任意位置可写。可以用于编写屏幕空间反射等需要将效果写入任意位置的效果。
2. 可以更好地利用显卡的并线单元。
3. 共享内存:举个例子模糊、等需要多次采样各个像素的算法,使用共享内存就可以减少采样次数与消耗。
PixelShader对于ComputeShader的优势
1. PixelShader可以预加载贴图并且缓存UV使得读取贴图的效率会非常高。而ComputeShader需要计算出UV所以做不到这点。
2. PixelShader支持FrameBuffer压缩减少带宽压力。
3. PixelShader支持更多的贴图格式。
ComputeShader还存在无法读取UAV比如把RT转化成SRV后才能读取问了EPIC的luoshuang说是历史遗留问题UE5会解决。
## 制作玉石效果
使用寒霜的FastSSS方案这里我下载了演讲的PPT。厚度贴图可以使用Substance Painter烘焙。算法是反转法线后使用AO算法在像素对应的三维坐标球形区域内生成若干采样点计算模型内部的点与总点数的比。之后就是直接套寒霜公式了。
## 光线追踪
《Ray Tracing in One Weekend》只是尝个鲜学习《Ray Tracing from the Ground Up》后拥有了一个基础的Ray Tracing框架。然后就是PBRT了相当不错的教科书。因为单线程渲染效率太低所以使用了直接使用Inter的TBB库但最后发现写的渲染器
会出现样本混乱的情况的。同时因为没有写并行库的基础所以之后的后面几章就没有去写代码了。如果有时间会去看《c++并发编程实战》的英文版来学习并行编程。
### PBRT
1. pbrt采用了FLOAT宏来调整浮点类型不过我记得VS的设置就可以直接调整。并且手动实现了EFLoat类来消除浮点数在四则运算后积累的误差。
2. pbrt采用c++11的线程编写没使用任何并行库。
3. 实现了一个场景描述文件格式可以将dcc软件制作的场景导入渲染。
### 一束光线
我们从眼睛中看到的图形可以理解为视觉细胞接收到场景中辐射与反射的光辐射信息的结果光线追踪就是计算机通过模拟这一过程所发明出的算法。根据光的波长不同将其排列成为光谱。但受限于人眼感光细胞人眼无法看到所有颜色对于可见光人们建立了不同色域范围的色彩标准。常用的是rgb、sRGB等。
#### 光源
PBRT为了将光谱值转换为RGB值实现了SampledSpectrum采样频谱与RGBSpectrumRPG频谱这里我没看懂好像是通过对3条曲线采样求积分得到3轴的比值。
#### 采样
除非直视光源不然人眼接收到的光全都是经过N次反射的因为我们可以把人眼接收到的图像理解成一个N阶多项式方程。同时这也相当于将一个自然现象模拟问题转化为一个数学问题可以用其他的数学工具来解决问题。但该方程无法直接求解所以会使用蒙特卡洛方法求近似值。
#### 蒙特卡洛方法
是一种以概率统计理论为基础的数值计算方法。它的核心思想就是使用随机数(或更常见的伪随机数)来解决一些复杂的计算问题。通过对大量抽样样本进行统计,计算出其分布规律。
概率密度函数 pdf 一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。
累积分布函数 cdf 是概率密度函数的积分能完整描述一个实随机变量X的概率分布。
有关抽样:
#### 逆转法
#### 舍选法
某些函数可能无法通过对其进行积分从而获得pdf或者无法通过计算获得逆cdf。舍选法是一种无需进行以上任意一个步骤就能根据函数分布生成样本的技术。本质上它是一种投飞镖法假设我们想从某个函数f(x)中抽取样本但是我们有一个pdf p(x)满足f(x)< c p(x),假设我们知道如何从p中获取样本
这个过程反复选取一对随机变量(X,ξ)如果点(X,ξc p(X))是在f(X)下面,那么接受样本X否则它将被拒绝并再次选取一个新的样本对这个方法的效率取决于f(x)与cp(x)的接近程度越相似收敛地越快而且适用于任意维度的函数
#### 重要性采样
选择一个与目标概率密度函数具有相同形状的分布函数进行抽样来减少方差形状越接近收敛越快Raytracing in weekend中对方形面光源运行了重要性采样
#### 分层采样
对采样区域进行分割各个子区域单独生成样本
#### 低差异序列
低差异序列可以非常高效的生成分布非常均匀的高质量样本集合相比伪随机数极大的提高蒙特卡洛积分收敛的效率并且它们的实现都不复杂
- Van der Corput根据底数将指定长度的正整数序列转换为指定进制的数序列之后以小数符号为分界线将每个数左边翻转到右边去
- HAMMERSLEY 哈默斯利使用底数为 样本序号/样本总数 的Van der Corput序列
- Halton 霍尔顿使用底数为质数序列的Van der Corput序列
UE4中的TAA好像就是用的低差异序列生成的样本
#### 使用均值样本会产生 混叠现象,也就是摩尔纹
在信号处理以及相关领域中走样混叠在对不同的信号进行采样时导致得出的信号相同的现象它也可以指信号从采样点重新信号导致的跟原始信号不匹配的瑕疵它分为时间走样比如数字音乐以及在电影中看到车轮倒转等和空间走样两种摩尔纹)。这里我们不详细展开
#### 采样器基本原理
事先生成若干组采样点样本之后进行乱序操作在进行逐像素采样时使用伪随机的方式选取随机序号的采样点组
#### 抗锯齿
因为场景的定义在三维空间中是连续的而最终显示的像素则是一个离散的二维数组所以判断一个点到底没有被某个像素覆盖的时候单纯是一个或者没有"问题丢失了连续性的信息导致锯齿
SSAA超采样抗锯齿高分辨渲染之后取平均值结果
MSAA在光栅化阶段判断一个三角形是否被像素覆盖的时候会计算多个覆盖样本Coverage sample最后根据权重样本占比所在的片元进行着色不兼容延迟渲染管线
FXAA边缘检测抗锯齿是一种后处理抗锯齿技术
TAA时间抗锯齿将采样放到时间轴上的抗锯齿技术对一个像素使用抖动效果之后再将所有的采样混合起来他需要解决判断每帧中这个像素的移动位置但在一些运动较大或者帧数较低的情况会出现 重影的问题
#### 贴图采样
- 双线性插值
- ISOTROPIC TRIANGLE FILTER 各项同性三角形过滤 然无法生成高质量的结果但速度比较快该滤波器因为各项同性的关系不支持非正方形或非轴对称的范围该滤波器的主要缺点是在斜角度观察纹理时图像容易变模糊因为不同的角度会导致采样率不一致
- ELLIPTICALLY WEIGHTED AVERAGE 椭圆权重均值
#### 偏差分析与重采样
没学过相关知识无法继续
#### 加速结构
如果光线每次与物体交互都需要遍历所有三角形那效率将会非常低为了提高求交速度我们可以在渲染前实现构建加速结构常用的有BVHKD
BVH
1. 计算每个图元的边界信息并且存储在数组中图元号包围盒以及中心点
2. 使用指定的方法构建树中间对半切的方法SAH首先计算图元位置将其分配到12个桶中并且计算每个桶最大边界盒再遍历每个桶边界盒的Min与Max坐标计算最佳切分点通过 切分后两个边界盒的表面积/当前包围盒的表面积来计算求交效率子图元中质心距离最大的轴向作为分割方向
KD树对3个轴的所有的切分方案进行尝试最终计算出最优的空间分割方案
KD树的分割每个轴遍历所有分割方案与BVHSAH分割每个轴12次分割更加精确BVH保证每个图元只有一次引用内存占用较少构建较为简单而KD树并不保证所以内存占用较多因此KD树的求交效率要比BVH好也导致了渲染时需要花费比BVH更多的时间在构建KD树上 同时KD树在求交时会计算与光线与分割面的相交位置是否在[min,max]中来判断是否需要与茎节点中的两个节点一一求交以此来减少求交计算量而BVH通过深度优先遍历树进行求交的 总结BVH是基于物体分割的KD数是基于空间分割的
早几年NVIDIA研发出将两者结合的方案SBVH这种算法可以节约因为图元分布大小不均匀而造成的BVH树求交效率低下
1. 找到一个对象分割候选者使用SAH算法构建一个BVH
2. 找到一个空间分割候选者类似构建KD树算法
3. 选择获胜者基于SAH选择消耗最小的作为最后结果如果不满足叶子节点生成条件则继续分割
我记得是前几次进行空间分割后续使用对象分割
### 材质模型
接下来就是处理光线与物体交互的结果了PBRT把材质分开金属非金属与半导体其中半导体较为复杂Pbrt里没有介绍
根据材质性质不同可以分为一下表面分布函数
BRDF双向反射分布函数在单位微表面上反射辐亮度与入射辐射照度的比值
BTDF双向透射分布函数在单位微表面上折射辐亮度与入射辐射照度的比值
与两者结合的BSDF对于半透明材质则使用BSSSDF双向表面散射分布函数
#### 微表面模型
本来对于一个不确定表面可能需要使用采样要求积分因为物体的微观表面参差不齐无法通过分析的方法精准模拟但微表面模型假定物体由大量微小的绝对光滑表面组成之后就可以根据统计学计算出模拟出看上去正确的结果
现在用得较多的Burley模型迪士尼模型也是UE4使用的就是基于这个微表面模型
#### BRDF公式
对于各项同性的BRDF公式就是 漫反射 +菲尼尔函数 * 法线分布项 D * 几何项G/(4 cos入射角 * cos出射角)
Cook-Torrance
##### 菲尼尔
- 一般都会使用近似近似函数Schlick施利克
- 菲涅尔方程描述了光线接触到表面后反射与透射的比它实际上Maxwell方程在光滑表面上的求解 因为在现实环境中光的偏振现象较少所以在PBRT假设光不偏振
- 一般情况下计算计算机图形学中的常见操作都会忽略色散现象以此极大地简化光线传输计算色散折射率随着光的波长而变化)。
##### 微表面法线分布函数 (法线分布项 D)
- 法线分布函数由粗糙度决定主要影响高光
- BeckmannSpizzichino贝克曼-斯皮兹奇诺
- Phong
- TrowbridgeReitz特罗布里奇 瑞兹ggx
- 迪士尼改进了 TrowbridgeReitz 将其命名为GTR
##### 几何衰减因子Shadowing和Masking几何项G
- Smith阴影函数
- 迪士尼对Smith 改造smith-ggx
##### 漫反射
- pbrt中使用 ORENNAYAR奥伦-纳亚尔漫反射模型基于微表面模型
Raytracing in weekend会使用LAMBERTIAN漫反射 辐射度/π 作为漫反射项即不论任何角度都会反射出一样的辐射度
Lambert漫反射模型在边缘上通常太暗Disney开发了一种用于漫反射的新的经验模型以在光滑表面的漫反射菲涅尔阴影和粗糙表面之间进行平滑过渡思路是使用了2个Schlick Fresnel近似相乘作为调节因子
##### 测量BRDF
pbrt中还介绍了一种通过测量来拟合brdf的方法ff15中用到这种方法
##### BTDF
没看过应该乘以 菲尼尔来计算的
##### BSSDF
没看过UE4好像通过生成均值采样点之后再通过距离进行近似计算的
##### 迪士尼模型
根据透明度参数对透明渲染结果与绝缘体渲染结果混合之后再根据金属度与金属渲染结果混合
### 路径追踪
从摄像机发射采样光线最后把这条光线若干次反射过程中结果累加起来
### 优化
#### 光子映射
通过让光源发射光子来生成光子贴图这样就能让收敛速度变快
#### 双向路径追踪追踪
同时从光源与摄像机发射采样光线一起构建光路之后将各个反射点直接连接起来这样就能快速构建多条光路了大大加快收敛速度当然这些光路需要进行可见性测试

84
07-Other/简历/成果.md Normal file
View File

@@ -0,0 +1,84 @@
```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.
```

52
07-Other/简历/技能.md Normal file
View File

@@ -0,0 +1,52 @@
## UE4
使用Custom节点实现后处理效果 (https://www.cnblogs.com/blueroses/p/6361517.html、
https://www.cnblogs.com/blueroses/p/6511751.html)
学习Ryan Brucks的溶球视频教程https://www.cnblogs.com/blueroses/p/6391995.html
学习Ue4的GlobalShader与Computer写法https://zhuanlan.zhihu.com/p/66514192、
https://zhuanlan.zhihu.com/p/66841824
在不修改源代码的情况下实现多Pass效果https://zhuanlan.zhihu.com/p/69139579、
https://zhuanlan.zhihu.com/p/69156465
学习GameplayAbility系统、ActionRPG项目https://zhuanlan.zhihu.com/p/76395757、
https://zhuanlan.zhihu.com/p/75987858等
学习UE4的灯光流程https://zhuanlan.zhihu.com/p/89270442、https://zhuanlan.zhihu.com/p/92456949等
探索UE4头发制作方法https://zhuanlan.zhihu.com/p/98751524、https://zhuanlan.zhihu.com/p/99345059
Ue4动画系统学习https://zhuanlan.zhihu.com/
### Slate
扩展Slate的进度条以实现血源诅咒中的虚血效果。
### 渲染
Shader
灯光流程
渲染框架
### 动画系统
### 编程
GAS
## 其他语言与框架
Qt、Python、JavaScript、VUE全家桶、Node.js。
## DCC
1. 对Maya比较熟悉编写过2个Maya插件分为调用HumanIK对动作文件进行批量重定向、批量生成指向选中顶点的骨骼并赋予蒙皮用于表情
2. 目前正在学习Houdini。
## 能力佐证
- 知乎https://www.zhihu.com/people/blueroseslol/
- Github: https://github.com/blueroseslol
- Bloghttp://blueroses.top
- Blog(已废弃):https://www.cnblogs.com/blueroses
## 工作经历
国家锁具产品质量监督检验中心 2013年07月~至今
- 使用Node.js为公司编写内网数据管理系统具有数据汇总、展示、打包单机版等功能。
- 使用Electron为公司编写数据查询软件。
- 使用Qt为公司编写其他工具产品。