实现bake的自动化,但是autoorient的重建还是需要一些优化

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2026-01-24 20:56:43 +08:00
parent de4e399d78
commit 77726bcb6c
29 changed files with 728515 additions and 10750 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Dreamteck.Splines;
using Ichni.Editor;
using Ichni.RhythmGame.Beatmap;
@@ -61,11 +62,30 @@ namespace Ichni.RhythmGame
public override void Refresh()
{
SetEnableZWrite();
SetEnableEmission();
SetEmissionIntensity();
// 使用 MaterialPropertyBlock 替代直接操作 material
var block = new MaterialPropertyBlock();
meshRenderer.GetPropertyBlock(block);
// ZWrite
block.SetFloat("_ZWrite", zWrite ? 1f : 0f);
// Emission
if (enableEmission)
{
meshRenderer.material.EnableKeyword("_EMISSION_ON");
block.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity));
}
else
{
meshRenderer.material.DisableKeyword("_EMISSION_ON");
block.SetColor("_EmissionColor", Color.black);
}
// UV仍然直接设置到 meshGenerator
SetUV();
meshRenderer.SetPropertyBlock(block);
if (track.trackTimeSubmodule is TrackTimeSubmoduleMovable trackTimeSubmoduleMovable)
{
meshGenerator.clipFrom = trackTimeSubmoduleMovable.tailPercent;
@@ -97,7 +117,7 @@ namespace Ichni.RhythmGame
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Track Renderer " + submoduleName[submoduleNameIndex]);
var container = inspector.GenerateContainer("Track Renderer " + submoduleName[submoduleNameIndex] + (meshGenerator.baked ? " (Baked)" : ""));
var zWriteSettings = container.GenerateSubcontainer(3);
var zWriteToggle =
@@ -149,6 +169,7 @@ namespace Ichni.RhythmGame
protected void SetEnableEmission()
{
// 仅保留关键字控制,具体颜色由 Refresh 的 property block 控制
if (enableEmission)
{
meshRenderer.material.EnableKeyword("_EMISSION_ON");
@@ -161,12 +182,32 @@ namespace Ichni.RhythmGame
protected void SetEnableZWrite()
{
meshRenderer.material.SetInt("_ZWrite", zWrite ? 1 : 0);
var block = new MaterialPropertyBlock();
meshRenderer.GetPropertyBlock(block);
// ZWrite
block.SetFloat("_ZWrite", zWrite ? 1f : 0f);
meshRenderer.SetPropertyBlock(block);
}
protected void SetEmissionIntensity()
{
meshRenderer.material.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity));
var block = new MaterialPropertyBlock();
meshRenderer.GetPropertyBlock(block);
// Emission
if (enableEmission)
{
meshRenderer.material.EnableKeyword("_EMISSION_ON");
block.SetColor("_EmissionColor", Color.white * Mathf.Pow(2, emissionIntensity));
}
else
{
meshRenderer.material.DisableKeyword("_EMISSION_ON");
block.SetColor("_EmissionColor", Color.black);
}
meshRenderer.SetPropertyBlock(block);
}
protected void SetUV()