using UnityEngine; namespace VRMShaders.VRM10.MToon10.Runtime { /// /// Migrate from VRM 0.x MToon to VRM 1.0 vrmc_materials_mtoon /// public static class MToon10Migrator { /// /// mtoon.shadingToonyFactor /// public static float MigrateToShadingToony(float shadingToony0X, float shadingShift0X) { var (rangeMin, rangeMax) = GetShadingRange0X(shadingToony0X, shadingShift0X); // new shadingToony is the margin of range. return Mathf.Clamp((2.0f - (rangeMax - rangeMin)) * 0.5f, 0, 1); } /// /// mtoon.shadingShiftFactor /// public static float MigrateToShadingShift(float shadingToony0X, float shadingShift0X) { var (rangeMin, rangeMax) = GetShadingRange0X(shadingToony0X, shadingShift0X); // new shadingShift is the center of range inverted. return Mathf.Clamp((rangeMax + rangeMin) * 0.5f * -1f, -1, +1); } /// /// mtoon.giEqualizationFactor /// public static float MigrateToGiEqualization(float giIntensity0X) { return Mathf.Clamp01(1 - giIntensity0X); } private static (float min, float max) GetShadingRange0X(float shadingToony0X, float shadingShift0X) { var rangeMin = shadingShift0X; var rangeMax = Mathf.Lerp(1, shadingShift0X, shadingToony0X); return (rangeMin, rangeMax); } } }