Unreal——Shader初探(一)

使用Shader文件

在项目根目录新建一个文件夹Shaders,新建shader文件,必须以.usf 或者.ush 结尾。

通过添加一个custom node,在code中添加代码,在Gaussian Blur中添加

1
2
#include "C:/UGit/Shader/CustomShaders/CustomShadersStarter/Shaders/Gaussian.usf"
return 1;

然后在Gaussian.usf中填充shader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static const int SceneTextureId = 14;
float2 TexelSize = View.ViewSizeAndInvSize.zw; //将偏移量转换到UV空间
float2 UV = GetDefaultSceneTextureUV(Parameters, SceneTextureId); //当前像素的UV
float3 PixelSum = float3(0, 0, 0); //将内核(kernel)中每一个像素的颜色累加(sum)起来。
float WeightSum = 0; //将内核中每一个像素的权重累加起来。

for (int x = -Radius; x <= Radius; x++) //水平方向
{
for (int y = -Radius; y <= Radius; y++) //垂直方向
{
float2 Offset = UV + float2(x, y) * TexelSize; //计算采样像素的相对偏移量并将其转换为UV空间
float3 PixelColor = SceneTextureLookup(Offset, SceneTextureId, 0).rgb; //经过偏移量对场景纹理进行采样
float Weight = Calculate1DGaussian(x / Radius) * Calculate1DGaussian(y / Radius); //计算采样像素的加权。为了计算二维的高斯模糊,你须要将两个一维的高斯模糊相乘(multiply),除以(divide)radius是由于简化的高斯模糊公式的值域是[-1,1],因此须要将它们的值归一化。
PixelSum += PixelColor * Weight; //将加权的颜色添加到PixelSum
WeightSum += Weight; //将权重添加给WeightSum

}
}

return PixelSum / WeightSum;

image-20210726150720610

Unreal学习开发(二)

动态多播代理

例子1

1
2
3
4
5
6
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SixParams(FOnHealthChangedSignature, USHealthComponent*, OwningHealthComp,
float, Health, float, HealthDelta, const class UDamageType*, DamageType, class AController*, InstigatedBy, AActor*, DamageCauser);//1.宏声明一个自定义delegate类型
FOnHealthChangedSignature OnHealthChanged;//2.create a instance in class
HealthComp->OnHealthChanged.AddDynamic(this, &ASCharacter::OnHealthChanged);//3.增加动态代理,一旦broadcast,执行ASCharacter::OnHealthChanged中的函数。
OnHealthChanged.Broadcast(this, Health, Damage, DamageType, InstigatedBy, DamageCauser);//4.触发代理Broadcast
FOnHealthChangedSignature OnHealthChanged;

例子2

Actor自带的代理(OnTakeAnyDamage

Called when the actor is damaged in any way.

1
2
3
4
DECLARE_DYNAMIC_MULTICAST_SPARSE_DELEGATE_NineParams( FTakePointDamageSignature, AActor, OnTakePointDamage, AActor*, DamagedActor, float, Damage, class AController*, InstigatedBy, FVector, HitLocation, class UPrimitiveComponent*, FHitComponent, FName, BoneName, FVector, ShotFromDirection, const class UDamageType*, DamageType, AActor*, DamageCauser );//1.
FTakeAnyDamageSignature OnTakeAnyDamage;//2.
MyOwner->OnTakeAnyDamage.AddDynamic(this, &USHealthComponent::HandleTakeAnyDamage);//3.
OnTakePointDamage.Broadcast(this, ActualDamage, EventInstigator, PointDamageEvent->HitInfo.ImpactPoint, PointDamageEvent->HitInfo.Component.Get(), PointDamageEvent->HitInfo.BoneName, PointDamageEvent->ShotDirection, DamageTypeCDO, DamageCauser);//4.Broadcast

Unreal学习开发(一)

Actor

An Actor is any object that can be placed into a level, such as a Camera, static mesh, or player start location. Actors support 3D transformations such as translation, rotation, and scaling. They can be created (spawned) and destroyed through gameplay code (C++ or Blueprints).

In C++, AActor is the base class of all Actors

Each actor has a instigator, in new version it is private so ues GetInstigator() to get it .

Delegates

Data types that reference and execute member functions on C++ Objects.

Pawn

Pawn是可作为世界场景中”代理”的Actor。Pawn可被控制器所有,

    • AAIController

Character

PlayerInputComponent

Character basic control animation

Controller

  • AController
    • PlayerController
    • AAIController

Weapon class

Add damage to a target dummy

  • TSubclassOf

    1
    2
    3
    /** type of damage */
    UPROPERTY(EditDefaultsOnly, Category=Damage)
    TSubclassOf<UDamageType> DamageType;

    Let designer choose demage type.

  • Spawn an actor in world.

1
GetWorld()->SpawnActor<AActor>(ProjectileClass);

Weapon to Character need to set owner.

TPSCamera

1
CameraComp->SetFieldOfView(FOV);

terminology

OKR: Objective and key results

Muzzle: 枪口

Replicated:同步给服务端

定义component 起始字母为U(Uobject),Actor 为A(Actor)

Black Magic

UE_4.26\Engine\Binaries\Win64 下UnrealHeaderTool.target

TypeName 行尾加一个空格。

可以加快编译速度。

UE4 定义属性修饰符总结

UE4C++定义属性修饰符总结 - 烤肉酱 - 博客园 (cnblogs.com)

Reference

虚幻引擎4文档 | 虚幻引擎文档 (unrealengine.com)

Unreal Engine 4 Mastery