You are on page 1of 12

空山新雨后

理论课:DFAO
L_DFAO

作者:戴鑫祺 | Fisher Dai


WeChat:FishersLab
空山新雨后

DFAO
• 依赖于距离场 Distance Field
• 通过可移动天光投射的动态AO
• 表现效果一般,需要一定使用技巧,适合做辅助效果

戴鑫祺 | Fisher Dai | WeChat: FishersLab 2


空山新雨后

虚幻到底有多少种AO?
• SSAO
• SSGI-AO
• DFAO
• RTAO
• Lightmass AO
• VXGI-AO

戴鑫祺 | Fisher Dai | WeChat: FishersLab 3


空山新雨后

距离场 | Distance Field


• 通过磁场来理解距离场
• 场是一种三维空间,在虚幻中是一种体积纹理(Volume Texture)
• 事先将物体周围的空间,到物体表面的距离计算并储存下来,供以后调用。物体以外的记录为正,物体以内的记录为负。
• 距离场的用处很多,常见的有:距离计算,软阴影,GI,AO,粒子碰撞,溶解效果……等等
• https://docs.unrealengine.com/en-US/Engine/Rendering/LightingAndShadows/MeshDistanceFields/index.html

磁场 距离场
戴鑫祺 | Fisher Dai | WeChat: FishersLab 4
空山新雨后

DFAO
• 通过可移动天光调整DFAO参数
• 调整资产的“距离场分辨率缩放”提高DFAO质量
• r.DistanceFieldAO 0/1

戴鑫祺 | Fisher Dai | WeChat: FishersLab 5


空山新雨后

距离场 | Distance Field


• 显示—可视化—网格体距离场
• 显示—可视化—距离场环境光遮蔽

显示—可视化—网格体距离场 显示—可视化—距离场环境光遮蔽

戴鑫祺 | Fisher Dai | WeChat: FishersLab 6


空山新雨后

DF精度批处理:.h部分

https://answers.unrealengine.com/questions/505988/no-bulk-edit-distance-field-resolution-
scale.html

戴鑫祺 | Fisher Dai | WeChat: FishersLab 7


空山新雨后

DF精度批处理:.h部分
UFUNCTION(BlueprintCallable, Category = "Custom Functions")

static void setDFRes(UStaticMesh* SM, float targetDFRes);

戴鑫祺 | Fisher Dai | WeChat: FishersLab 8


空山新雨后

DF精度批处理:.cpp部分

戴鑫祺 | Fisher Dai | WeChat: FishersLab 9


空山新雨后

DF精度批处理:.cpp部分
#if WITH_EDITOR

if (SM == nullptr)

return;

if (SM && SM->SourceModels.Num() > 0)

SM->Modify();

for (int32 i = 0; i < SM->SourceModels.Num(); i++)

FStaticMeshSourceModel& Model = SM->SourceModels[i];

Model.BuildSettings.DistanceFieldResolutionScale = targetDFRes;

SM->Build();

#endif

戴鑫祺 | Fisher Dai | WeChat: FishersLab 10


空山新雨后

DF精度批处理:蓝图部分

戴鑫祺 | Fisher Dai | WeChat: FishersLab 11

You might also like