Project_WL/AgentScripts/WL816b_Iter.cs

77 lines
3.9 KiB
C#

// WL-816b — 무기용 덩어리·팔레트 값 결정 (🔴 인게임 Play · 포스트 포함 · 게임 크기에서만 잰다)
// 빌드: scripts 가 한 파일로 합쳐져야 한다 → AgentScripts/WL816b_ALL.cs 로 concat 해서 돌린다.
// entry: WL816bIter.Run
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using UnityEngine;
public static class WL816bIter
{
// 대표 5종 (우선순위 상위 + 성격이 다른 것)
static readonly string[][] TARGETS = {
new[]{ "Elven_Sword_01", "2" },
new[]{ "PP_Theme_10_Mace_003", "1" },
new[]{ "PP_Theme_10_Shield_003", "0" },
new[]{ "Dagger1", "3" },
new[]{ "PP_Theme_05_Bow_003", "6" },
};
// 후보 (덩어리목표, 팔레트칸) — 캐릭터는 40/16. 무기는 화면이 10분의 1 이라 작게부터 본다.
static readonly int[][] CFG = {
new[]{ 6, 6 }, new[]{ 10, 8 }, new[]{ 16, 8 }, new[]{ 24, 12 }, new[]{ 40, 16 },
};
public static void Run()
{
WL816b.Reset(); WL816b.PubSetup();
WL816b.Log("");
WL816b.Log("=== 무기 팔레트 후보 비교 (인게임 Play · 포스트 포함 · 1080x1920 · ortho 10) ===");
var c0 = WL816b.MeasureChar("m_char0.png", "s_char0.png");
WL816b.Log(string.Format("캐릭터 기준(무기 없음) : {0} px · 고유색 {1} · 비율 {2:F2} % · 단계 {3}", c0.px, c0.uniq, c0.ratio, c0.steps));
WL816b.Log("");
WL816b.Log("| 무기 | 안 | 덩어리 | 칸 | verts | 화면 px | 고유색 | 서로다른색 % | 단계 | 굽기 dHue평균/최대 |");
WL816b.Log("|---|---|---|---|---|---|---|---|---|---|");
foreach (var t in TARGETS)
{
// ⓐ 지금 (원본)
WL816b.Clear();
float rb, mult;
var go = WL816b.Spawn(t[0], int.Parse(t[1]), out rb, out mult);
if (go == null) { WL816b.Log("| " + t[0] + " | 부착실패 | | | | | | | | |"); continue; }
WL816b.ReLook();
var m0 = WL816b.MeasureNow(go, "m_" + t[0] + "_before.png", "s_" + t[0] + "_before.png");
WL816b.Log(string.Format("| {0} | **지금** | — | — | — | {1} | {2} | {3:F2} | {4} | — |", t[0], m0.px, m0.uniq, m0.ratio, m0.steps));
foreach (var cf in CFG)
{
WL816b.Clear(); WL816b.FreeTmp();
go = WL816b.Spawn(t[0], int.Parse(t[1]), out rb, out mult);
var res = WL816bBake.Bake(t[0], cf[0], cf[1], null, false);
if (res == null) continue;
WL816b.ApplyBaked(go, res.palette, res.mesh);
WL816b.ReLook();
string tag = "c" + cf[0] + "p" + cf[1];
var m = WL816b.MeasureNow(go, "m_" + t[0] + "_" + tag + ".png", "s_" + t[0] + "_" + tag + ".png");
int mx; float av; string det = WL816b.CellSteps(go, res.palette, out mx, out av);
var cc = WL816b.MeasureChar(null, null);
WL816b.Log(string.Format("| {0} | {1} | {2} | {3} | {4}→{5} | {6} | {7} | {8:F2} | {9} | {10:F2}/{11:F2} | 칸단계 {12:F2}/{13} | 캐릭 {14}·{15:F2}% |",
t[0], tag, res.regions, res.palUsed, res.vBefore, res.vAfter, m.px, m.uniq, m.ratio, m.steps, res.meanDHue, res.maxDHue, av, mx, cc.uniq, cc.ratio));
WL816b.Log(" " + det);
}
}
// 캐릭터 악화 확인 (무기 끼운 뒤에도 캐릭터 수치가 그대로인가)
var c1 = WL816b.MeasureChar("m_char1.png", "s_char1.png");
WL816b.Log("");
WL816b.Log(string.Format("캐릭터 재측정(무기 적용 후) : {0} px · 고유색 {1} · 비율 {2:F2} % · 단계 {3}", c1.px, c1.uniq, c1.ratio, c1.steps));
WL816b.Clear(); WL816b.FreeTmp(); WL816b.PubTeardown();
WL816b.Flush("WL816b_ITER.txt");
Debug.Log("[WL816b] iter done");
}
}