Cascade 原理

编辑器

Cascade 的实质是一个编辑器。 就像角色编辑器(Persona)下的骨骼编辑器(SkeletonEditor)、动画编辑器(AnimationEditor)等一样。

下图为整个 Cascade 模块的源码目录, 它位于 Engine\Source\Editor 下。

阅读全文 »

前言

UE4 的光源类型有: 平行光 点光源 聚光源 天光(环境光)

也是比较典型的光源类型, 关于这些光源类型的介绍和相关参数, 可参考此篇

【cg】【原理】光照模型 中的预备知识第二条 光源类型

ue 现在还多了个 矩形光源, 个人感觉然并卵

每一种光源都可以设置它的 Transform 信息 和 移动性类型

【Tips】位置信息对于平行光来说是无效的

阅读全文 »

前言

为了更好地进行光照测试, 我们需要对场景做一些设置。 当然这些设置不是必要的, 只是一些个人的强迫症式的做法, 这里列举一下。

首先给场景加了一个 landscape, 然后增加了一个没有镜面光 (设置 Specular 为 0) 的材质给它, 这样只是个人看起来比较舒服而已-_-

增加了 ppv (后处理体积) 和 liv (lightmass重要体积)

然后通过后处理 (post process) 对 GI 产生的光照 (间接光) 修改了一下颜色, 以增加对间接光的辨识

去掉了天空盒

下面我们将按照三类光源 (静态 动态 固定) 分别作用于不同的物体 (静态 动态 固定) 上, 同时对于不同的光源种类 (平行光 点光 聚光) 也作适当的分类讨论。

阅读全文 »

前言

个人感觉 ue4 的光照系统特别复杂

她把光源按照移动性分为了三类 -- 静态, 固定, 动态

的同时, 也把物体按照移动性分为了相同的三类

这样总的来说就有了9种对应关系

而对于每一种, 不同的光源类型还可能有不同的方案, 如平行光和点光源的方案就有差异

这样算下来情形就有些复杂了

我们只能慢慢地, 一点一点地去实践分析, 再找几个大腿, 踩踩前人的脚步, 实现不行还有源码 ~

阅读全文 »

Post Process

UE4 提供了内置的后处理 (Post Process) 阶段 -- 渲染管线的最后一个阶段

UE4 提供的后处理效果

HDR 与 ToneMapping (色调映射 HDR->LDR)

SSAO

MotionBlur -- 动态模糊

AntiAliasingQuality -- 搞锯齿 -- FSAA -- FXAA TAA MSAA

Depth of Field -- 景深

Eye Adaption -- 人眼自适应 -- 自动曝光

Lens Flare -- 镜头眩光

SSR -- 屏幕空间反射 -- 解决动态反射问题

【Tips】 UE 的 SSAO 是在 DeferredShading 中做的, 所以 手机上没有

阅读全文 »

Shader

Global Shader

全局着色器是对固定几何体 (如屏幕四边形) 执行操作但不需要与材质进行交互的着色器

如阴影过滤, 全局后处理, 全局雾 等, 都可以用全局着色器来渲染

【Tips】 一个全局着色器类型在内存中只能有一个

要想实现全局着色器, 必须实现一个继承自 FGlobalShader 的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class FMyGShader : public FGlobalShader
{
public:
FMyGShader(){}
FMyGShader(const ShaderMetaType::CompiledShaderInitializerType& Initializer) : FGlobalShader(Initializer)
{
SimpleColorVal.Bind(Initializer.ParameterMap, TEXT("SimpleColor"));
}

void SetParameters(FRHICommandListImmediate& RHICmdList, const FLinearColor &MyColor)
{
SetShaderValue(RHICmdList, GetPixelShader(), SimpleColorVal, MyColor);
}

static bool ShouldCache(EShaderPlatform Platform) { return true; }
virtual bool Serialize(FArchive& Ar) override;

private:
FShaderParameter SimpleColorVal;
}
阅读全文 »

行为树

BehaviorTree -- 行为树

BlackBoard -- 黑板 -- 用于共享数据

Decorator -- 先决条件

Service -- 服务

Task -- 任务 -- 执行节点 -- 行为树中的叶子节点

AIController -- AI控制器 -- 联系行为树和黑板并运行行为树的地方

阅读全文 »

NavMesh

UE4 内置了 寻路体积 (NavMeshBoundsVolume) 来实现某个体积区域的 NavMesh 覆盖

可以按 P 键查看当前 NavMesh 覆盖的地方

可以使用 NavLink 增加跳跃点

我理解的 NavMesh 寻路的原理无非是生成寻路网格,然后跑A*

阅读全文 »

UMG

UMG 作为官方推荐的 UI 系统, 是在 Slate 上又封装了一层

支持可视化的设计界面, 支持 UI 的复用

在控件蓝图 (Widget Blueprint) 里进行编辑

一般只关注于 UI 的显示, 至于事件的绑定及逻辑上的交互, 大都放在游戏逻辑里去写

如果当前的 UI 与 地图的切换无关, 那最好就放到 World 之上那层去实现逻辑

在 AActor 蓝图里, 也可以给 WidgetComonent 指定 控件父类, 从而实现3D场景中交互的UI

阅读全文 »