// 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[]{ "PP_Theme_08_Shield_003", "0" }, new[]{ "PP_Theme_05_Bow_004", "6" }, }; // 후보 (덩어리목표, 팔레트칸) — 캐릭터는 40/16. 무기는 화면이 10분의 1 이라 작게부터 본다. static readonly int[][] CFG = { new[]{ 6, 6 }, new[]{ 16, 12 }, new[]{ 24, 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"); } }