与编辑器同步,增加sync优化bloom,添加打包时自动打包主题包的特性

(怎么这么多meta文件啊)

Signed-off-by: TRADER_FOER <lhf190@outlook.com>
This commit is contained in:
2026-07-23 14:52:15 +08:00
parent 02ee7fc72e
commit 9e5471b4c4
104 changed files with 670 additions and 2523 deletions

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 641c955d37d2fac4f87e00ac5c9d9bd8
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2690f45490c175045bbdc63395bf6278
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: fbd1fd9b3a70fad429d1eaaa5799c2a5
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 3579d9cf4b75c564faa8fffc58a9f3f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 0023a0858ba124646a55dfcb7231ed46
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: d1c0b77896049554fa4b635531caf741
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: c0a0a980c9ba86345bc15411db88d34f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2edbf4a9b9544774bbef617e92429664
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 13ab599a7bda4e54fba3e92a13c9580a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f6f268949ccf3f34fa4d18e92501ed82
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 69bc3229216b1504ea3e28b5820bbb0d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 4f665a06c5a2aa5499fa1c79ac058999
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 8a87ed432fe2d97498c0de5fae312e35
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 7c3bfbbeb9427b94099254e2e2768ad4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: c5303861611f41c438a30be552da5de4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: a9d68dd8913f05d4d9ce75e7b40c6044
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2243c8b4e1ab6914995699133f67ab5a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 9a5e61a8b3421b944863d0946e32da0a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 89f0b84148d149d4d96b838d7ef60e92
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 19939ee2cdb76e0489b1b8cd4bed7f3d
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 70777e8ce9f3c8d4a8182ca2f965cdb2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ba281a1a00c8ac54c914e0763299f637
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: e6fc8948257acee42b666d0bfe1d782c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 4b5cb8698f2d9c14fadf8e2383441d37
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: b460b52e6c1feae45b70b7ddc2c45bd6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 57fcea0ed8b5eb347923c4c21fa31b57
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2e9da72e7e3196146bf7d27450013734
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 0904cdf24ddcd5042b024326476220d5
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 929783250050f8a448821b6ca1f2c578
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: fcc4d2eb0af82e546ae75506872cf092
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: cd0a0171c5157b748afe763b89f71211
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f4990f6ace6142c4bbbf41cdd80b0bd3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -5,6 +5,8 @@ using System.IO;
using System.Linq; using System.Linq;
using Ichni; using Ichni;
using UnityEditor; using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine; using UnityEngine;
/// <summary> /// <summary>
@@ -44,35 +46,74 @@ public class BuildAssetBundle
} }
} }
public static void BuildForTarget(BuildTarget target)
{
string platformDirectory = GetPlatformDirectory(target);
if (string.IsNullOrEmpty(platformDirectory))
{
Debug.LogWarning($"Skip AssetBundle build for unsupported build target: {target}");
return;
}
string uri = Path.Combine(BuildPrepare(), platformDirectory);
if (Directory.Exists(uri) == false)
{
Directory.CreateDirectory(uri);
}
AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, target);
if (manifest == null)
{
throw new BuildFailedException($"AssetBundle build failed for target: {target}");
}
GenerateAbstracts(manifest);
}
private static string GetPlatformDirectory(BuildTarget target)
{
return target switch
{
BuildTarget.StandaloneWindows => "Windows64",
BuildTarget.StandaloneWindows64 => "Windows64",
BuildTarget.StandaloneOSX => "OSX",
BuildTarget.Android => "Android",
BuildTarget.iOS => "IOS",
_ => string.Empty
};
}
[MenuItem("AssetBundleTools/BuildToWindows64")] [MenuItem("AssetBundleTools/BuildToWindows64")]
public static void BuildToWindows64() public static void BuildToWindows64()
{ {
string uri = BuildPrepare() + "/Windows64"; BuildForTarget(BuildTarget.StandaloneWindows64);
AssetBundleManifest manifestWin64 = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
GenerateAbstracts(manifestWin64);
} }
[MenuItem("AssetBundleTools/BuildToOSX")] [MenuItem("AssetBundleTools/BuildToOSX")]
public static void BuildToOSX() public static void BuildToOSX()
{ {
string uri = BuildPrepare() + "/OSX"; BuildForTarget(BuildTarget.StandaloneOSX);
AssetBundleManifest manifestOSX = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);
GenerateAbstracts(manifestOSX);
} }
[MenuItem("AssetBundleTools/BuildToAndroid")] [MenuItem("AssetBundleTools/BuildToAndroid")]
public static void BuildToAndroid() public static void BuildToAndroid()
{ {
string uri = BuildPrepare() + "/Android"; BuildForTarget(BuildTarget.Android);
AssetBundleManifest manifestAndroid = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.Android);
GenerateAbstracts(manifestAndroid);
} }
[MenuItem("AssetBundleTools/BuildToIOS")] [MenuItem("AssetBundleTools/BuildToIOS")]
public static void BuildToIOS() public static void BuildToIOS()
{ {
string uri = BuildPrepare() + "/IOS"; BuildForTarget(BuildTarget.iOS);
AssetBundleManifest manifestIOS = BuildPipeline.BuildAssetBundles(uri, BuildAssetBundleOptions.None, BuildTarget.iOS);
GenerateAbstracts(manifestIOS);
} }
} }
public class AssetBundleBuildPreprocessor : IPreprocessBuildWithReport
{
public int callbackOrder => 0;
public void OnPreprocessBuild(BuildReport report)
{
Debug.Log($"Rebuild AssetBundles before player build: {report.summary.platform}");
BuildAssetBundle.BuildForTarget(report.summary.platform);
}
}

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 1782b72cd0e99a54fac09382c482e3db
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 49d5bcbbd4cbd754b98cf3200197b0f1
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: eefe45a405f061045be947217e30ed10
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 2e995dfe11e22d34d92432383d15c067
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ec984c51d4ae2504184eeb292734c672
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: e447b3d7d913d694ca35f74e30581840
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 6584a66582083a1459dcf5e4e87f6d62
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 0190b8bde50f12943926613d9a63c89a
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ae2ce8ad295486349839288636aed1ed
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: d69745226619e3241a8e04ce86aee6a6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 37e6a9374416bc946a55779c58d0d984
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: e45363610a59a4543a9793b3bf2be4aa
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: de41a70ead12af544a4e99a925b269d2
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: f597f19f656ba56eae4f6a3a7cc528f4
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 48e08dc33330d11e9d4a1b246c52e4f6
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: ed09910c0094cb27be8f3ca264680da3
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: cc355dd4cf1e6173beaeb22c2858cbe1
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,5 +1,6 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: e00e6f90ab8233e46a41c5e33917c642 guid: e30166288c8c5bd438351410a483e5b0
folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:

View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 9da5530d5ebfab24c8ecad68795e720f guid: f5d5e70a908942c4b909fdb6034752b7
DefaultImporter: TextScriptImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:

View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: aa102d640b98b5d4781710a3a3dd6983 guid: 32c3385d4214445468554a51c232cf0f
DefaultImporter: TextScriptImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:

View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 7a0bb33169d95ec499136d59cb25918b guid: 8771390f79aaef64387378be17877c84
DefaultImporter: TextScriptImporter:
externalObjects: {} externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 46fc263f248fc7e4d864bfb43d691615
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
namespace Ichni.RhythmGame.Beatmap
{
public class PositionSync_BM : GameElement_BM
{
public FlexibleBool_BM enabling;
public Guid syncTargetObjectGuid;
public PositionSync_BM()
{
}
public PositionSync_BM(string elementName, Guid elementGuid, List<string> tags,
GameElement_BM attachedElement, FlexibleBool_BM enabling, Guid syncTargetObjectGuid)
: base(elementName, elementGuid, tags, attachedElement)
{
this.enabling = enabling;
this.syncTargetObjectGuid = syncTargetObjectGuid;
}
public override void ExecuteBM()
{
matchedElement = PositionSync.GenerateElement(elementName, elementGuid, tags, false,
GetElement(attachedElementGuid), GetElement(syncTargetObjectGuid),
enabling?.ConvertToGameType() ?? new FlexibleBool());
matchedElement.matchedBM = this;
}
public override void AfterExecute()
{
if (matchedElement is PositionSync positionSync)
{
positionSync.syncTargetObject = GetElement(syncTargetObjectGuid);
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4b7660debb70462f8139aca3ccf9d839

View File

@@ -0,0 +1,20 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class FirmStartMenu : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod]
static void Initialize()
{
string startSceneName = "MenuScene";
Scene scene = SceneManager.GetActiveScene();
if (scene.name.Equals(startSceneName))
{
return;
}
SceneManager.LoadScene(startSceneName);
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 90353b44635c5f548be73e0fc1dd92ff

View File

@@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using Ichni.RhythmGame.Beatmap;
using UnityEngine;
namespace Ichni.RhythmGame
{
/// <summary>
/// Synchronizes this element's position to another element's world position.
/// </summary>
public partial class PositionSync : AnimationBase
{
#region [] Exposed Fields & References
public TransformSubmodule targetTransformSubmodule;
public GameElement syncTargetObject;
public FlexibleBool enabling;
#endregion
#region [] Lifecycle & Factory
public static PositionSync GenerateElement(string elementName, Guid id,
List<string> tags, bool isFirstGenerated, GameElement animatedObject,
GameElement syncTargetObject, FlexibleBool enabling)
{
PositionSync sync = Instantiate(GameManager.Instance.basePrefabs.emptyObject).AddComponent<PositionSync>();
sync.Initialize(elementName, id, tags, isFirstGenerated, animatedObject);
sync.animatedObject = animatedObject;
sync.syncTargetObject = syncTargetObject;
sync.enabling = enabling ?? new FlexibleBool();
sync.animationReturnType = FlexibleReturnType.Before;
sync.targetTransformSubmodule = (animatedObject as IHaveTransformSubmodule)?.transformSubmodule;
return sync;
}
public override void SetDefaultSubmodules()
{
timeDurationSubmodule = new TimeDurationSubmodule(this);
}
public override void OnDelete()
{
base.OnDelete();
targetTransformSubmodule?.MarkPositionDirty();
}
#endregion
#region [] Core Animation Logic
public override void ScheduledUpdate(UpdatePhase phase, float songTime)
{
base.ScheduledUpdate(phase, songTime);
// 与 CreatorStudio 保持一致:这里在 Animation 阶段读取 target world position。
// 如果 target 是 TrackPercentPoint当前帧 TrackFollower 尚未执行,因此读到的可能是上一帧位置。
// 这个一帧延后是有意保留的兼容行为;好处是随后 Apply 阶段能刷新被同步的 PathNode/Track
// 让本帧后续 TrackFollower/Note 使用更新后的轨道数据。
if (phase == UpdatePhase.Animation && enabling != null && enabling.value)
{
ApplyPositionSync();
}
}
protected override void UpdateAnimation(float songTime, bool forceUpdate)
{
if (enabling == null)
{
animationReturnType = FlexibleReturnType.None;
return;
}
enabling.UpdateFlexibleBool(songTime);
if (enabling.value)
{
animationReturnType = FlexibleReturnType.MiddleExecuting;
targetTransformSubmodule?.MarkPositionDirty();
}
else if (animationReturnType != FlexibleReturnType.MiddleInterval)
{
animationReturnType = FlexibleReturnType.MiddleInterval;
targetTransformSubmodule?.MarkPositionDirty();
}
}
private void ApplyPositionSync()
{
if (targetTransformSubmodule == null || syncTargetObject == null)
{
return;
}
Transform self = targetTransformSubmodule.attachedGameElement.transform;
Transform parent = self.parent;
Vector3 targetWorldPosition = syncTargetObject.transform.position;
Vector3 desiredLocalPosition = parent != null
? parent.InverseTransformPoint(targetWorldPosition)
: targetWorldPosition;
Vector3 syncOffset = desiredLocalPosition - targetTransformSubmodule.originalPosition;
targetTransformSubmodule.positionOffset += syncOffset;
targetTransformSubmodule.MarkPositionDirty();
}
public override void ApplyTimeOffset(float offset)
{
base.ApplyTimeOffset(offset);
enabling?.animations.ForEach(anim => anim.ApplyTimeOffset(offset));
}
#endregion
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2931ecd4815b44a4b105371752d14bcd
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -136,7 +136,7 @@ namespace Ichni.RhythmGame
} }
private bool HaveAnimation() => attachedGameElement.childElementList private bool HaveAnimation() => attachedGameElement.childElementList
.Any(element => element is Displacement or Swirl or Scale or LookAt); .Any(element => element is Displacement or Swirl or Scale or LookAt or PositionSync);
public override void CheckAndRemoveObservers() public override void CheckAndRemoveObservers()
{ {

View File

@@ -1,4 +1,5 @@
using Ichni.RhythmGame.Beatmap; using Ichni.RhythmGame.Beatmap;
using SLSUtilities.Rendering.PostProcessing;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.Universal; using UnityEngine.Rendering.Universal;
@@ -10,11 +11,13 @@ namespace Ichni.RhythmGame
public float peak; public float peak;
public AnimationCurve intensityCurve; public AnimationCurve intensityCurve;
private Bloom _bloom; private AnimeBloom _bloom;
private static float _bloomBasicValue = -1;
#endregion #endregion
#region [] Initialization #region [] Initialization
public BloomEffect(float effectTime, float peak, AnimationCurve intensityCurve) public BloomEffect(float effectTime, float peak, AnimationCurve intensityCurve)
: base(effectTime) // 激活时间线 : base(effectTime) // 激活时间线
{ {
this.effectTime = effectTime; this.effectTime = effectTime;
@@ -28,6 +31,10 @@ namespace Ichni.RhythmGame
{ {
PostProcessingManager.GlobalVolume.profile.TryGet(out _bloom); PostProcessingManager.GlobalVolume.profile.TryGet(out _bloom);
} }
if (_bloomBasicValue < 0 && _bloom != null)
{
_bloomBasicValue = _bloom.intensity.value;
}
} }
#endregion #endregion
@@ -42,7 +49,7 @@ namespace Ichni.RhythmGame
if (_bloom != null) if (_bloom != null)
{ {
float currentIntensity = intensityCurve.Evaluate(effectProgressPercent) * peak; float currentIntensity = intensityCurve.Evaluate(effectProgressPercent) * peak;
_bloom.intensity.value = currentIntensity; _bloom.intensity.value = _bloomBasicValue + currentIntensity;
} }
} }
@@ -52,7 +59,7 @@ namespace Ichni.RhythmGame
private void ResetEffect() private void ResetEffect()
{ {
if (_bloom != null) _bloom.intensity.value = 0f; if (_bloom != null) _bloom.intensity.value = _bloomBasicValue;
} }
#endregion #endregion

View File

@@ -126,7 +126,7 @@ namespace Ichni.RhythmGame
} }
protected void SetEnableEmission() => meshRenderer.material.SetInt("_EnableEmission", enableEmission ? 1 : 0); protected void SetEnableEmission() => meshRenderer.material.SetInt("_EnableEmission", enableEmission ? 1 : 0);
protected void SetEnableZWrite() => meshRenderer.material.SetInt("_ZWrite", zWrite ? 1 : 0); protected void SetEnableZWrite() => meshRenderer.material.SetFloat("_ZWrite", zWrite ? 1 : 0);
protected void SetEmissionIntensity() => meshRenderer.material.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity)); protected void SetEmissionIntensity() => meshRenderer.material.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity));
protected void SetUV() protected void SetUV()
{ {

Binary file not shown.

View File

@@ -6,6 +6,22 @@ using UnityEngine.Experimental.Rendering;
namespace SLSUtilities.Rendering.PostProcessing namespace SLSUtilities.Rendering.PostProcessing
{ {
public enum AnimeBloomBlurMode
{
DualKawaseFast,
DualKawaseQuality,
Box
}
[System.Serializable]
public sealed class AnimeBloomBlurModeParameter : VolumeParameter<AnimeBloomBlurMode>
{
public AnimeBloomBlurModeParameter(AnimeBloomBlurMode value, bool overrideState = false)
: base(value, overrideState)
{
}
}
[System.Serializable, VolumeComponentMenu("SLS/Postprocessing/Anime Bloom")] [System.Serializable, VolumeComponentMenu("SLS/Postprocessing/Anime Bloom")]
public class AnimeBloom : ScriptablePostProcessorVolume public class AnimeBloom : ScriptablePostProcessorVolume
{ {
@@ -31,14 +47,53 @@ namespace SLSUtilities.Rendering.PostProcessing
[Header("Iterations")] [Header("Iterations")]
// 迭代次数Dual Kawase 每层只需 1 Pass性能远低于原生双趟高斯。 // 迭代次数Dual Kawase 每层只需 1 Pass性能远低于原生双趟高斯。
// 4 次迭代 Dual Kawase ≈ 原生 6 次双趟高斯的扩散范围,但 Pass 数只有其 1/3 // 现在主要作为质量 / pass budget 控制,视觉扩散范围由 bloomRadius 统一塑形
public ClampedIntParameter diffusion = new(4, 1, 8); public ClampedIntParameter diffusion = new(4, 1, 8);
[Header("Optimization (Mobile)")] [Header("Radius")]
[Tooltip("Bloom 视觉扩散半径。\n1.0=旧默认半径;调大可扩大光晕范围,调小可让光晕更贴近高亮区域。")]
public ClampedFloatParameter bloomRadius = new(1.0f, 0.1f, 8.0f);
[Tooltip("当 diffusion 改变时,自动补偿采样跨度,尽量保持 Bloom Radius 的视觉范围稳定。\n关闭后 diffusion 会像传统 mip 金字塔一样明显改变光晕大小。")]
public BoolParameter preserveRadiusAcrossDiffusion = new(true);
[Tooltip("半径补偿的参考 diffusion。\n默认 4 表示 bloomRadius=1 时以 4 层金字塔的旧效果作为基准。")]
public ClampedIntParameter radiusReferenceDiffusion = new(4, 1, 8);
[Tooltip("自动半径补偿的最大倍率。\n低 diffusion 为了维持大半径会拉大采样跨度;该上限用于限制色块感、十字感和采样离散感。")]
public ClampedFloatParameter maxRadiusCompensation = new(2.5f, 1.0f, 8.0f);
[Header("Blur Mode")]
[Tooltip("模糊方式。\nDualKawaseFast=当前默认移动端低采样方案DualKawaseQuality=更多采样、更平滑Box=更便宜但质感更硬。")]
public AnimeBloomBlurModeParameter blurMode = new(AnimeBloomBlurMode.DualKawaseFast);
[Header("Downsample Steps")]
[Tooltip("初始降采样倍率(首趟大幅压缩分辨率)。\n1=原生半分辨率(1/2)2=1/4分辨率3=1/8分辨率。\n调大此值可用极低的迭代次数跑出巨大且柔和的光晕大幅节省 GPU 带宽。")] [Tooltip("初始降采样倍率(首趟大幅压缩分辨率)。\n1=原生半分辨率(1/2)2=1/4分辨率3=1/8分辨率。\n调大此值可用极低的迭代次数跑出巨大且柔和的光晕大幅节省 GPU 带宽。")]
public ClampedIntParameter initialDownscaleShift = new(1, 1, 3); public ClampedIntParameter initialDownscaleShift = new(1, 1, 3);
[Tooltip("第 2 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep1 = new(1, 0, 3);
[Tooltip("第 3 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep2 = new(1, 0, 3);
[Tooltip("第 4 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep3 = new(1, 0, 3);
[Tooltip("第 5 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep4 = new(1, 0, 3);
[Tooltip("第 6 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep5 = new(1, 0, 3);
[Tooltip("第 7 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep6 = new(1, 0, 3);
[Tooltip("第 8 层相对上一层的降采样倍率。\n0=保持上一层分辨率只做模糊1=1/22=1/43=1/8。")]
public ClampedIntParameter downscaleStep7 = new(1, 0, 3);
[Tooltip("采样偏移跨度放大Kernel Scale。\n1.0=原生标准跨度。适度放大(如1.2-1.5)可拉扯光晕扩散范围,但过大会产生轻微十字星/方格马赛克。")] [Header("Kernel")]
[Tooltip("采样偏移微调倍率。\n最终采样跨度 = bloomRadius * diffusion 自动补偿 * kernelScale。\n一般保持 1.0,用于针对具体画面做细调。")]
public ClampedFloatParameter kernelScale = new(1.0f, 0.5f, 3.0f); public ClampedFloatParameter kernelScale = new(1.0f, 0.5f, 3.0f);
[Header("Tint")] [Header("Tint")]
@@ -64,7 +119,8 @@ namespace SLSUtilities.Rendering.PostProcessing
// 【移动端极限优化】:强制降级到 32位 HDR 格式 (B10G11R11) // 【移动端极限优化】:强制降级到 32位 HDR 格式 (B10G11R11)
// 相比主相机默认的 64位 R16G16B16A16带宽消耗直接砍半且肉眼几乎无损 // 相比主相机默认的 64位 R16G16B16A16带宽消耗直接砍半且肉眼几乎无损
if (SystemInfo.IsFormatSupported(GraphicsFormat.B10G11R11_UFloatPack32, GraphicsFormatUsage.Linear | GraphicsFormatUsage.Render)) if (SystemInfo.IsFormatSupported(GraphicsFormat.B10G11R11_UFloatPack32,
GraphicsFormatUsage.Linear | GraphicsFormatUsage.Render))
{ {
desc.graphicsFormat = GraphicsFormat.B10G11R11_UFloatPack32; desc.graphicsFormat = GraphicsFormat.B10G11R11_UFloatPack32;
} }
@@ -83,8 +139,6 @@ namespace SLSUtilities.Rendering.PostProcessing
material.SetVector(InternalShaderHelpers.ID._BloomScatterParams, material.SetVector(InternalShaderHelpers.ID._BloomScatterParams,
new Vector4(scatterMapped, clamp.value, thresholdLinear, thresholdKnee)); new Vector4(scatterMapped, clamp.value, thresholdLinear, thresholdKnee));
material.SetFloat(InternalShaderHelpers.ID._AnimeBloom_KernelScale, kernelScale.value);
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
// 2. Tint 归一化(原生做法:亮度归一为 1只携带色相/饱和度) // 2. Tint 归一化(原生做法:亮度归一为 1只携带色相/饱和度)
// 这样 tint 调整颜色时不会改变 bloom 总亮度。 // 这样 tint 调整颜色时不会改变 bloom 总亮度。
@@ -101,6 +155,7 @@ namespace SLSUtilities.Rendering.PostProcessing
// 3. RT 数组初始化 // 3. RT 数组初始化
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
int mipCount = Mathf.Clamp(diffusion.value, 1, k_MaxMips); int mipCount = Mathf.Clamp(diffusion.value, 1, k_MaxMips);
material.SetFloat(InternalShaderHelpers.ID._AnimeBloom_KernelScale, GetEffectiveKernelScale(mipCount));
if (_bloomMipDown == null || _bloomMipDown.Length != k_MaxMips) if (_bloomMipDown == null || _bloomMipDown.Length != k_MaxMips)
{ {
@@ -112,7 +167,7 @@ namespace SLSUtilities.Rendering.PostProcessing
// 4. Prefilter提取高亮像素 + 初始激进降采样) // 4. Prefilter提取高亮像素 + 初始激进降采样)
// 根据用户选择,起始分辨率可能是 1/2, 1/4 或 1/8。 // 根据用户选择,起始分辨率可能是 1/2, 1/4 或 1/8。
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
int shift = initialDownscaleShift.value; int shift = GetDownscaleShiftForMip(0);
desc.width = Mathf.Max(1, desc.width >> shift); desc.width = Mathf.Max(1, desc.width >> shift);
desc.height = Mathf.Max(1, desc.height >> shift); desc.height = Mathf.Max(1, desc.height >> shift);
@@ -124,18 +179,20 @@ namespace SLSUtilities.Rendering.PostProcessing
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
// 5. Downsample LoopDual Kawase 降采样金字塔Pass 1 // 5. Downsample LoopDual Kawase 降采样金字塔Pass 1
// 每次分辨率减半,产生多层不同尺度的模糊纹理 // 每层可单独设置相对上一层的降采样倍率,产生可手动塑形的模糊纹理
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
int downsamplePass = GetDownsamplePass();
for (int i = 1; i < mipCount; i++) for (int i = 1; i < mipCount; i++)
{ {
desc.width = Mathf.Max(1, desc.width >> 1); shift = GetDownscaleShiftForMip(i);
desc.height = Mathf.Max(1, desc.height >> 1); desc.width = Mathf.Max(1, desc.width >> shift);
desc.height = Mathf.Max(1, desc.height >> shift);
RenderingUtils.ReAllocateHandleIfNeeded(ref _bloomMipDown[i], desc, FilterMode.Bilinear, RenderingUtils.ReAllocateHandleIfNeeded(ref _bloomMipDown[i], desc, FilterMode.Bilinear,
TextureWrapMode.Clamp, name: "_BloomDown" + i); TextureWrapMode.Clamp, name: "_BloomDown" + i);
// Down[i-1] → Down[i] via Pass 1 (Dual Kawase Downsample) // Down[i-1] → Down[i] via selected downsample pass
Blitter.BlitCameraTexture(cmd, _bloomMipDown[i - 1], _bloomMipDown[i], material, 1); Blitter.BlitCameraTexture(cmd, _bloomMipDown[i - 1], _bloomMipDown[i], material, downsamplePass);
} }
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
@@ -163,12 +220,13 @@ namespace SLSUtilities.Rendering.PostProcessing
Blitter.BlitCameraTexture(cmd, _bloomMipDown[mipCount - 1], _bloomMipUp[mipCount - 1]); Blitter.BlitCameraTexture(cmd, _bloomMipDown[mipCount - 1], _bloomMipUp[mipCount - 1]);
// 从第二底层开始向上 upsample // 从第二底层开始向上 upsample
int upsamplePass = GetUpsamplePass();
for (int i = mipCount - 2; i >= 0; i--) for (int i = mipCount - 2; i >= 0; i--)
{ {
// highMip当前层降采样纹理 Down[i],作为 Blit 的 source_BlitTexture // highMip当前层降采样纹理 Down[i],作为 Blit 的 source_BlitTexture
// lowMip 上一级升采样结果 Up[i+1],通过 SetTexture 传入 // lowMip 上一级升采样结果 Up[i+1],通过 SetTexture 传入
cmd.SetGlobalTexture(InternalShaderHelpers.ID._SourceTexLowMip, _bloomMipUp[i + 1]); cmd.SetGlobalTexture(InternalShaderHelpers.ID._SourceTexLowMip, _bloomMipUp[i + 1]);
Blitter.BlitCameraTexture(cmd, _bloomMipDown[i], _bloomMipUp[i], material, 2); Blitter.BlitCameraTexture(cmd, _bloomMipDown[i], _bloomMipUp[i], material, upsamplePass);
} }
// ───────────────────────────────────────────────────────────── // ─────────────────────────────────────────────────────────────
@@ -178,6 +236,74 @@ namespace SLSUtilities.Rendering.PostProcessing
Blitter.BlitCameraTexture(cmd, source, destination, material, 3); Blitter.BlitCameraTexture(cmd, source, destination, material, 3);
} }
private int GetDownscaleShiftForMip(int mipIndex)
{
return mipIndex switch
{
0 => initialDownscaleShift.value,
1 => downscaleStep1.value,
2 => downscaleStep2.value,
3 => downscaleStep3.value,
4 => downscaleStep4.value,
5 => downscaleStep5.value,
6 => downscaleStep6.value,
7 => downscaleStep7.value,
_ => 1
};
}
private float GetEffectiveKernelScale(int mipCount)
{
float compensation = preserveRadiusAcrossDiffusion.value
? GetRadiusCompensation(mipCount)
: 1f;
return Mathf.Max(0.01f, bloomRadius.value * kernelScale.value * compensation);
}
private float GetRadiusCompensation(int mipCount)
{
float referenceSpread = GetPyramidSpread(Mathf.Clamp(radiusReferenceDiffusion.value, 1, k_MaxMips));
float currentSpread = GetPyramidSpread(mipCount);
float compensation = referenceSpread / Mathf.Max(1f, currentSpread);
return Mathf.Clamp(compensation, 1f / maxRadiusCompensation.value, maxRadiusCompensation.value);
}
private float GetPyramidSpread(int mipCount)
{
int cumulativeShift = 0;
float spread = 0f;
for (int i = 0; i < mipCount; i++)
{
cumulativeShift += GetDownscaleShiftForMip(i);
spread += 1 << Mathf.Clamp(cumulativeShift, 0, 16);
}
return Mathf.Max(1f, spread);
}
private int GetDownsamplePass()
{
return blurMode.value switch
{
AnimeBloomBlurMode.DualKawaseQuality => 4,
AnimeBloomBlurMode.Box => 5,
_ => 1
};
}
private int GetUpsamplePass()
{
return blurMode.value switch
{
AnimeBloomBlurMode.DualKawaseQuality => 6,
AnimeBloomBlurMode.Box => 7,
_ => 2
};
}
public void Dispose() public void Dispose()
{ {
if (_bloomMipDown == null) return; if (_bloomMipDown == null) return;

View File

@@ -1,21 +1,21 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 4053260153 CRC: 369232788
HashAppended: 0 HashAppended: 0
AssetBundleManifest: AssetBundleManifest:
AssetBundleInfos: AssetBundleInfos:
Info_0: Info_0:
Name: unifiedraytracing Name: shapes
Dependencies: {} Dependencies: {}
Info_1: Info_1:
Name: basic Name: basic
Dependencies: {} Dependencies: {}
Info_2: Info_2:
Name: departure_to_multiverse
Dependencies: {}
Info_3:
Name: metropolis_on_orbit Name: metropolis_on_orbit
Dependencies: {} Dependencies: {}
Info_4: Info_3:
Name: shapes Name: departure_to_multiverse
Dependencies: {}
Info_4:
Name: unifiedraytracing
Dependencies: {} Dependencies: {}

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 4187162310 CRC: 3948698453
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: 041639c891c497f5cda773d76795250a Hash: af7857bf316830adc26e256fe67e7e6e
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: dfed41e3b38758e5f34df30221d719dc Hash: dfed41e3b38758e5f34df30221d719dc
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 1175efd1b6efe2bebf239ab190c42566 Hash: 8b2370a964ccb84ad839925da51b1839
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 12343729 CRC: 3534727336
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: 95c6613dec434b5e157eab1de94cfdfc Hash: 51cebaae174d01d837ffac32a2fa6871
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: 6d9f9b8bc1074349261a0dbbf7f0f9f8 Hash: 6d9f9b8bc1074349261a0dbbf7f0f9f8
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 0f6768f5833370c99987c209c7f083f1 Hash: 1a80e1aa74a3d257e8fdbb3bbe3af29f
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1
@@ -100,6 +100,7 @@ Assets:
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Decorations/DTM_ConstellationCube.prefab - Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Decorations/DTM_ConstellationCube.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_GlobalFog.prefab - Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_GlobalFog.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_Trail.prefab - Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_Trail.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Decorations/Constellation.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Textures/Skybox/DTM_SunMask1.png - Assets/ThemeBundles/DepartureToMultiverse/Textures/Skybox/DTM_SunMask1.png
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_StarrySkybox.prefab - Assets/ThemeBundles/DepartureToMultiverse/Prefabs/Environment/DTM_StarrySkybox.prefab
- Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_NoteVisualHold.prefab - Assets/ThemeBundles/DepartureToMultiverse/Prefabs/DTM_NoteVisualHold.prefab

View File

@@ -10,7 +10,7 @@ Hashes:
Hash: 8ab77e54d824a64c30bc20496c5f5926 Hash: 8ab77e54d824a64c30bc20496c5f5926
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 204f3b93fddc5bbe213f57aa05799cdd Hash: b9d9c1ed16d6159626cf983018a7d02a
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -10,7 +10,7 @@ Hashes:
Hash: bc9f87c7e64ff656997db0f2b2a91703 Hash: bc9f87c7e64ff656997db0f2b2a91703
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 98313c8eb74f89178044a9a994c30a81 Hash: 612a23b0b40c16e3e1e3cbbf90636bd0
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 28 - Class: 28

View File

@@ -1,21 +1,21 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 2225548766 CRC: 1636198333
HashAppended: 0 HashAppended: 0
AssetBundleManifest: AssetBundleManifest:
AssetBundleInfos: AssetBundleInfos:
Info_0: Info_0:
Name: unifiedraytracing Name: shapes
Dependencies: {} Dependencies: {}
Info_1: Info_1:
Name: basic Name: basic
Dependencies: {} Dependencies: {}
Info_2: Info_2:
Name: departure_to_multiverse
Dependencies: {}
Info_3:
Name: metropolis_on_orbit Name: metropolis_on_orbit
Dependencies: {} Dependencies: {}
Info_4: Info_3:
Name: shapes Name: departure_to_multiverse
Dependencies: {}
Info_4:
Name: unifiedraytracing
Dependencies: {} Dependencies: {}

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 1012070008 CRC: 2119417743
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: f038c8737dccdbbb922785ad13defdbe Hash: 3d16048c570846a3c430209a3f76ecec
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: dfed41e3b38758e5f34df30221d719dc Hash: dfed41e3b38758e5f34df30221d719dc
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: daff94e5b2902357c1b4f50d325b0bb4 Hash: d21f29ccc27e1ea316e8d695fe626c89
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -1,16 +1,16 @@
ManifestFileVersion: 0 ManifestFileVersion: 0
UnityVersion: 6000.3.7f1 UnityVersion: 6000.3.7f1
CRC: 3963795702 CRC: 1389196770
Hashes: Hashes:
AssetFileHash: AssetFileHash:
serializedVersion: 2 serializedVersion: 2
Hash: da36a084e3188ee1f42f70a1632a9ecf Hash: 2f04815c63d237b8fd2f42e117da867a
TypeTreeHash: TypeTreeHash:
serializedVersion: 2 serializedVersion: 2
Hash: 6d9f9b8bc1074349261a0dbbf7f0f9f8 Hash: 6d9f9b8bc1074349261a0dbbf7f0f9f8
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 40f4c5c977e00a69e1094eca8f16a3c9 Hash: 2133790ed86e50d1d8664afbc0684217
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -10,7 +10,7 @@ Hashes:
Hash: 8ab77e54d824a64c30bc20496c5f5926 Hash: 8ab77e54d824a64c30bc20496c5f5926
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: 2b9d1caa8b3c01da7365d30bd4e1e291 Hash: bf850a5f233cff8e5a36ac583934dcfd
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 1 - Class: 1

View File

@@ -10,7 +10,7 @@ Hashes:
Hash: bc9f87c7e64ff656997db0f2b2a91703 Hash: bc9f87c7e64ff656997db0f2b2a91703
IncrementalBuildHash: IncrementalBuildHash:
serializedVersion: 2 serializedVersion: 2
Hash: a6eece82ca305268802891f3699999ab Hash: 6f6f4db93d0807c90d4be79ef8de5d45
HashAppended: 0 HashAppended: 0
ClassTypes: ClassTypes:
- Class: 28 - Class: 28

View File

@@ -301,7 +301,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlendModePreserveSpecular: 1 - _BlendModePreserveSpecular: 1
@@ -665,7 +665,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -334,7 +334,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlendMode: 0 - _BlendMode: 0
@@ -828,7 +828,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -334,7 +334,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlendMode: 0 - _BlendMode: 0
@@ -828,7 +828,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -611,7 +611,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -615,7 +615,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -270,7 +270,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlinnPhongSpecularToggle: 0 - _BlinnPhongSpecularToggle: 0
@@ -613,7 +613,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 8 - _Ztest: 8
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -301,8 +301,8 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 1
- _Blend: 0 - _Blend: 0
- _BlendModePreserveSpecular: 1 - _BlendModePreserveSpecular: 1
- _BlinnPhongSpecularToggle: 0 - _BlinnPhongSpecularToggle: 0
@@ -665,7 +665,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -270,7 +270,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlinnPhongSpecularToggle: 0 - _BlinnPhongSpecularToggle: 0
@@ -613,7 +613,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -335,8 +335,8 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 1
- _Blend: 0 - _Blend: 0
- _BlendMode: 0 - _BlendMode: 0
- _BlendModePreserveSpecular: 1 - _BlendModePreserveSpecular: 1
@@ -829,7 +829,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -827,7 +827,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

View File

@@ -335,7 +335,7 @@ Material:
- _BaseMapFoldOut: 0 - _BaseMapFoldOut: 0
- _BaseMapUVRotation: 0 - _BaseMapUVRotation: 0
- _BaseMapUVRotationSpeed: 0 - _BaseMapUVRotationSpeed: 0
- _BaseOptionBigBlockItemFoldOut: 0 - _BaseOptionBigBlockItemFoldOut: 1
- _BigBlockModeSettingFoldOut: 0 - _BigBlockModeSettingFoldOut: 0
- _Blend: 0 - _Blend: 0
- _BlendMode: 0 - _BlendMode: 0
@@ -829,7 +829,7 @@ Material:
- _XianXingCH_UVRota: 0 - _XianXingCH_UVRota: 0
- _ZOffsetBlockFoldOut: 0 - _ZOffsetBlockFoldOut: 0
- _ZOffset_Toggle: 0 - _ZOffset_Toggle: 0
- _ZTest: 4 - _ZTest: 8
- _ZWrite: 0 - _ZWrite: 0
- _Ztest: 4 - _Ztest: 4
- _Zwrite: 0 - _Zwrite: 0

Some files were not shown because too many files have changed in this diff Show More