当前位置:   article > 正文

UE4 光照_lightmassimportancevolume

lightmassimportancevolume

static light

static light只有间接光,没有直接光。光照和阴影烘焙到lightmap;static light通过indirect lighting cache Sample Grid(需要有lightmass importance volume)影响动态物体。

stationary light

光源位置不变,但颜色和亮度会变。这是stationary light和static light的区别。后者在运行时,什么都不能改变。另外,运行时改变亮度只影响直接光照。因为间接光照是预先用lightmass烘焙的,不会改变。三种光照可移动性的光照中,stationary光照效率最高,中等易变形,中等性能消耗。
stationary光照的间接光照和阴影都存储在lightmap中;直接阴影存储在Shadowmap中。这些光照用到Distance Field Shadows,也就是说即使光照的物体lightmap分辨率很低,还是会很清晰。

直接光照

用延迟着色动态渲染。所以,运行时,可以改变亮度和颜色。通过改变Visible属性可以使直接光照显示或隐藏。

直接阴影

光源的实时阴影是主要性能消耗。动态光带阴影开销是动态光不带阴影开销的20倍。所以stationary光可以在静态物体上有静态阴影,但是有限制。

static阴影

不透明物体

lightmass在build light过程中对静态物体上的stationary light生成了远距离shadowmap。即使在比较小的分辨率下,远距离shadowmap依然提供了准确的阴影过渡。远距离shadowmap也需要接收静态光照的staticMesh有单独的展uv。
最多能有4个重叠的stationary光照有静态阴影,因为光必须映射到shadowmap贴图的不同通道,所以最多有4个重叠的stationary光照。StationaryLightOverlap viewMode可以看重叠。当不能再分配通道时,光源图标会变成红色的叉。

半透明物体

半透明物体从stationary光接收阴影的开销也特别小。lightmass从运行时的透明静态几何体预计算阴影深度贴图。这种形式的阴影比较糙,以米为单位。静态阴影深度贴图的分辨率在BaseLightmass.ini文件中,StaticShadowDepthMapTransitionSampleDistanceX 和StaticShadowDepthMapTransitionSampleDistanceY 控制,默认是100,表示每一米一个纹素。

dynamic阴影

动态物体(移动性设为Movable的staticMesh组件或SkeletonMesh组件)需要与远距离shadowmap中得到的世界的静态阴影融为一体。这是通过Per Object阴影来实现的。每个动态物体从stationary光照创建2个动态阴影:一个控制静态环境投影到物体上的阴影,一个控制物体投影到环境的阴影。stationary光照的开销来源于它所影响的物体,它影响的物体足够多的时候,用Movable光照更划算。
逐物体阴影将一个shadowmap映射到物体的包围盒上,所以包围盒需要精确。skeletal mesh要有一个物理资源,粒子相同的包围盒需要足够大以容纳所有粒子。

平行光动态阴影

平行光stationary光很特殊,因为它既要支持静态阴影又要通过csm支持整个场景的阴影。动态阴影通过距离融入静态阴影,过渡一般无法分辨。改变Dynamic Shadow Distance StationaryLight属性为你想要过渡发生的范围。
movable组件在平行光用了csm的同时仍会创建逐物体的阴影。这种行为在动态阴影距离较小的时候有用,但距离大的时候会产生不必要的开销。关掉逐物体阴影,通过不勾选光源上的Use Inset Shadows For Movable Objects属性

间接光照

stationary光将他们的间接光照存储在lightmap(像static光一样)。间接光照不能在运行时改变颜色和亮度,也就是说即使不勾选visible,build light时,间接光照也会烘焙到lightmap中。光照上的IndirectLightingIntensity影响构建光照时,给定光源影响间接光照的程度。后处理体积设置上有IndirectLightingIntensity属性,能运行时改变,用来控制所有光照的lightmap贡献程度。

stationary光的Area阴影

stationary平行光有一个阴影属性位于Lightmass下面,Use Area Shadows for Stationary Lights。开启后,距离投射阴影的物体越远,阴影越柔和。

Movable光照

完全动态光照和阴影,坐标、旋转、颜色 亮度 falloff 半径,所有有的属性都能改变。没有间接光,不会烘焙到lightmap。

阴影

整个场景都用动态阴影,开销较大。开销来源于光照影响的mesh数及这些mesh的三角形数。所以,投射阴影的可移动光源的半径越大开销越大。

阴影缓存

当点光源或聚光灯不动的时候,我们会存储这个光源用的shadowmap以备下一帧所用。缓存是默认开启的。可以检测缓存对性能开销的影响:1.选择关卡中所有要投射动态阴影的光源;2.将光源可移动性设为Movable,Cast Shadow也勾选上;3.控制台输入Stat Shadowrendering查看动态阴影开销;4.r.Shadow.CacheWholeSceneShadows 0关闭缓存,r.Shadow.CacheWholeSceneShadows 0比较性能数据中的CallCount和InclusiveAug 数量。
缓存对性能开销影响特别大。我们可以通过r.Shadow.WholeSceneShadowCacheMb控制shadowmap缓存用的最大内存数。
shadowmap缓存的限制:
图元的Mobility属性为Static或Stationary;
关卡中材质没有用World Position Offset
光源类型为点光源或聚光灯,Movable,ShadowCasting开启
用了动画细分或像素深度偏移的材质当阴影深度缓存的时候会产生瑕疵。

Indirect Lighting Cache

4.18版本后, Volumetric Lightmap 代替 Indirect Lighting Cache成为默认体积光方式了。要重新用间接光照缓存,设置World Settings > Lightmass Settings > Volume Lighting Method为Sparse Volume Light Sample。
间接光照缓存工作方式:lightmass在关卡中放置采样点,在烘焙光照的时候计算采样点处的间接光照;渲染动态物体时,间接光照缓存检查该物体是否有可用光照,如果有,则用;如果没有(物体是新的或没有移动太多),间接光照缓存从预计算的光照采样点插值计算间接光照缓存。
光照采样点放置在lightmassImportanceVolume里面。
通过Show->Visualize->Volume Lighting Samples可以看到lightmass生成的采样点。
但这种工作流需要的内容比较少,有时候这种方式不能在一些区域无法得到比较多的细节,比如一个角色在悬浮空间中乘坐电梯或者飞行;这时,可以通过在这些区域放置LightmassCharacterIndirectDetailVolumes 得到更多的细节。
间接光照缓存也允许预览没有执行built light物体的光照。

sky light

sky light捕获到关卡较远处,并作为光源用到场景中。天空的外表和它的光照或反射要匹配,即使你的天空是来自大气层或天空盒上的层云或远处的山。你同样需要人为指定一个所用的cubemap。

Scene Capture

Skylight只在特定情况下捕获场景:
静态skylight&#x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/91465
推荐阅读
相关标签
  

闽ICP备14008679号