ue4 加载一个用于渲染3D角色到UI的独立关卡的相关问题
2021-03-01 11:25 kk20161206 阅读(373) 评论(0) 编辑 收藏 举报你好,是移动平台对吗?
无论是都放在一个地图里,还是通过子关卡(Streaming level)都需要屏蔽掉一切关卡的灯光和后期对其的影响。为了管理制作方便作为子关卡更好。
在具体实现上除了动态光用Channel屏蔽较为简单直接,主要注意的是需要屏蔽掉主地图的天光;主地图的light cache;以及主地图的Reflection capture对Streaming level的影响。以下是创建一个独立3DUI对象捕捉地图环境设置参考
- 用ILC,不使用VLM;以便加载控制和管理。首先需要使用ILC而非VLM,这个在World Settings里改。原因是ILC方便加载,VLM支持Streaming,但有局限,主次关卡灯光分离不彻底。
- 给stream地图加个reflection capture 使用specific cubemap;这样可以屏蔽掉主地图的reflection capture;移动上的reflection capture不存在影响范围,物体采样最近的那个,所以必须要放置一个reflection capture来屏蔽其他更远的的影响
- Streaming到主地图的放置的位置也需要没有light cache的地方,否则主地图的light cache会影响Stream level
- 另外在Scene capture里也可以把sky light标记去掉,避免收到主地图Skylight影响。这个flap是针对Movable或者Stationary天光的,如果静态天光被build到ILC中无法使用这个取消影响
- 灯光可以打开Cast Cinematic Shadows,避免影响其他非Cinematic物体;需要捕捉的物体需要打开相应的Cast Cinematic Shadow
- 因为屏蔽掉了天光,Steaming level里需要build一些light cache出来作为Ambient diffuse照明,同时reflection 的亮度也受到light cache影响。这些light cache的来源可以是静态天光,静态的其他光源,以及其反弹光。build lighting的时候单独build此关卡。
这个ILC一般可以用静态的灯烘培而来,比如子关卡的静态天光,静态点光,及他们的反弹(GI),都会被Build入子关卡的ILC
子关卡放偏僻些的地方,避免和主关卡的ILC有交集。目前ILC不支持移动(World Origin Shift可以),利用加载方法去改位置无法移动ILC,因此制作的时候就在远一些的地方,比如高空,地下等
- 所有的物件需要是动态,light channel 2;
- 所有动态灯光也为light channel 2;
- Project settings 里确保mobile 上的Max movable point lights大于需要的数量
- 放置给与单独Postprocess Volume
上次的单独加载SteamLevel光照不正常查了下大概是通过ULevelStreamingDynamic::LoadLevelInstanceBySoftObjectPtr加载时传入的Location却没有机会PrecomputedLightVolume->ApplyWorldOffset,于是在加载后再偏移就好了
- LoadedLevel->ApplyWorldOffset(InWorldOffset, false);
UDN查到的解决方法是在 FLevelUtils::ApplyLevelTransform末尾执行PrecomputedLightVolume->ApplyWorldOffset,改引擎确实也能解决问题,但该提交是4.18的版本,已经有一段时间了, 不清楚官方没有改是出于什么顾虑,于是只在客户端加载后ApplyWorldOffset,降低影响范围。