您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

65 行
3.9 KiB

namespace UnityEngine.Experimental.Rendering.HDPipeline
{
[Serializable]
public class LightLoopSettings
{
// Setup by the users
public bool enableTileAndCluster;
public bool enableComputeLightEvaluation;
public bool enableComputeLightVariants;
public bool enableComputeMaterialVariants;
// Deferred opaque always use FPTL, forward opaque can use FPTL or cluster, transparent always use cluster
// When MSAA is enabled, we only support cluster (Fptl is too slow with MSAA), and we don't support MSAA for deferred path (mean it is ok to keep fptl)
public bool enableFptlForForwardOpaque;
public bool enableBigTilePrepass;
// Setup by system
public bool isFTPLEnabled;
public LightLoopSettings()
{
enableTileAndCluster = true;
enableComputeLightEvaluation = true;
enableComputeLightVariants = true;
enableComputeMaterialVariants = true;
enableFptlForForwardOpaque = true;
enableBigTilePrepass = true;
isFTPLEnabled = true;
}
// aggregateFrameSettings already contain the aggregation of RenderPipelineSettings and FrameSettings (regular and/or debug)
static public LightLoopSettings InitializeLightLoopSettings(FrameSettings aggregateFrameSettings, RenderPipelineSettings renderPipelineSettings, FrameSettings frameSettings, FrameSettings debugSettings = null)
{
LightLoopSettings aggregate;
aggregate.enableTileAndCluster = frameSettings.enableTileAndCluster;
aggregate.enableComputeLightEvaluation = frameSettings.enableComputeLightEvaluation;
aggregate.enableComputeLightVariants = frameSettings.enableComputeLightVariants;
aggregate.enableComputeMaterialVariants = frameSettings.enableComputeMaterialVariants;
aggregate.enableFptlForForwardOpaque = frameSettings.enableFptlForForwardOpaque;
aggregate.enableBigTilePrepass = frameSettings.enableBigTilePrepass;
// Don't take into account debug settings for reflection probe or preview
if (debugSettings != null && !camera.cameraType == CameraType.Reflection && camera.cameraType != CameraType.Preview)
{
aggregate.enableTileAndCluster = aggregate.enableTileAndCluster && debugSettings.enableTileAndCluster;
aggregate.enableComputeLightEvaluation = aggregate.enableComputeLightEvaluation && debugSettings.enableComputeLightEvaluation;
aggregate.enableComputeLightVariants = aggregate.enableComputeLightVariants && debugSettings.enableComputeLightVariants;
aggregate.enableComputeMaterialVariants = aggregate.enableComputeMaterialVariants && debugSettings.enableComputeMaterialVariants;
aggregate.enableFptlForForwardOpaque = aggregate.enableFptlForForwardOpaque && debugSettings.enableFptlForForwardOpaque;
aggregate.enableBigTilePrepass = aggregate.enableBigTilePrepass && debugSettings.enableBigTilePrepass;
}
// Deferred opaque are always using Fptl. Forward opaque can use Fptl or Cluster, transparent use cluster.
// When MSAA is enabled we disable Fptl as it become expensive compare to cluster
// In HD, MSAA is only supported for forward only rendering, no MSAA in deferred mode (for code complexity reasons)
aggregate.enableFptlForForwardOpaque = aggregate.enableFptlForForwardOpaque && aggregateFrameSettings.enableMSAA;
// If Deferred, enable Fptl. If we are forward renderer only and not using Fptl for forward opaque, disable Fptl
aggregate.isFTPLEnabled = !aggregateFrameSettings.enableForwardRenderingOnly || aggregate.enableFptlForForwardOpaque;
return aggregate;
}
}
}