You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

64 lines
2.7 KiB

using System;
namespace UnityEngine.Rendering.HighDefinition
{
public partial struct LocalVolumetricFogArtistParameters
{
internal void MigrateToFixUniformBlendDistanceToBeMetric()
{
//Note: At this revision, advanceMode boolean is obsolete and unusable anymore
if (!m_EditorAdvancedFade)
{
//Replicate old editor behavior of normal mode to keep scene intact
m_EditorAdvancedFade = true;
negativeFade = positiveFade = m_EditorUniformFade * Vector3.one;
m_EditorUniformFade = 0f;
}
//feed new variable to handle editor values
m_EditorPositiveFade = positiveFade;
m_EditorNegativeFade = negativeFade;
}
}
public partial class LocalVolumetricFog : IVersionable<LocalVolumetricFog.Version>
{
enum Version
{
First,
ScaleIndependent,
FixUniformBlendDistanceToBeMetric,
ExposeMaterialBlendMode,
}
static readonly MigrationDescription<Version, LocalVolumetricFog> k_Migration = MigrationDescription.New(
MigrationStep.New(Version.ScaleIndependent, (LocalVolumetricFog data) =>
{
data.parameters.size = data.transform.lossyScale;
//missing migrated data.
//when migrated prior to this fix, Local Volumetric Fog have to be manually set on advance mode.
data.parameters.m_EditorAdvancedFade = true;
}),
MigrationStep.New(Version.FixUniformBlendDistanceToBeMetric, (LocalVolumetricFog data) => data.parameters.MigrateToFixUniformBlendDistanceToBeMetric()),
MigrationStep.New(Version.ExposeMaterialBlendMode, (LocalVolumetricFog data) =>
{
if (data.parameters.maskMode == LocalVolumetricFogMaskMode.Material)
{
if (data.parameters.materialMask != null)
{
data.parameters.materialMask.SetColor(FogVolumeAPI.k_SingleScatteringAlbedoProperty, data.parameters.albedo);
data.parameters.materialMask.SetFloat(FogVolumeAPI.k_FogDistanceProperty, data.parameters.meanFreePath);
FogVolumeAPI.SetupFogVolumeBlendMode(data.parameters.materialMask, data.parameters.blendingMode);
}
}
})
);
[SerializeField]
Version m_Version = MigrationDescription.LastVersion<Version>();
Version IVersionable<Version>.version { get => m_Version; set => m_Version = value; }
void Awake() => k_Migration.Migrate(this);
}
}