From cb0e17ee21314d6dd93799e9dc8f918827346826 Mon Sep 17 00:00:00 2001 From: swrring Date: Sun, 13 Sep 2026 00:31:06 +0900 Subject: [PATCH] =?UTF-8?q?[WL-814v]=20=EC=96=BC=EA=B5=B4=C2=B7=EB=A8=B8?= =?UTF-8?q?=EB=A6=AC=20=ED=85=8D=EC=8A=A4=EC=B2=98=20=EB=8F=84=ED=8A=B8?= =?UTF-8?q?=ED=92=8D=20=EC=95=88=20(#814)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §1 실측: 부위별 텍셀→화면픽셀 밀도(앞면 삼각형 · 화면면적 가중) · 올리브 원인 규명 - 얼굴 face02_V1..V4 · 머리칼 Hair05_V1..V4 (원본 복사 → 제자리 가공 · UV/메시 무변경) - 올리브 차단: HSV 의 V 만 조절(RGB 배율 금지 → 채널 포화 0) + 단별 Hue 를 기준색 ±cap 로 제한 Co-Authored-By: Claude Opus 5 --- AgentScripts/WL814v_CAPTURE.txt | 26 ++ AgentScripts/WL814v_Capture.cs | 298 ++++++++++++++++++ AgentScripts/WL814v_PROBE.txt | 23 ++ AgentScripts/WL814v_Probe.cs | 177 +++++++++++ .../WL/Look/Character/Textures/Hair05_V1.png | Bin 0 -> 25620 bytes .../Character/Textures/Hair05_V1.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/Hair05_V2.png | Bin 0 -> 30306 bytes .../Character/Textures/Hair05_V2.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/Hair05_V3.png | Bin 0 -> 22751 bytes .../Character/Textures/Hair05_V3.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/Hair05_V4.png | Bin 0 -> 24008 bytes .../Character/Textures/Hair05_V4.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/face02_V1.png | Bin 0 -> 17606 bytes .../Character/Textures/face02_V1.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/face02_V2.png | Bin 0 -> 17903 bytes .../Character/Textures/face02_V2.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/face02_V3.png | Bin 0 -> 17742 bytes .../Character/Textures/face02_V3.png.meta | 181 +++++++++++ .../WL/Look/Character/Textures/face02_V4.png | Bin 0 -> 17800 bytes .../Character/Textures/face02_V4.png.meta | 181 +++++++++++ 20 files changed, 1972 insertions(+) create mode 100644 AgentScripts/WL814v_CAPTURE.txt create mode 100644 AgentScripts/WL814v_Capture.cs create mode 100644 AgentScripts/WL814v_PROBE.txt create mode 100644 AgentScripts/WL814v_Probe.cs create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V1.png create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V1.png.meta create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V2.png create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V2.png.meta create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V3.png create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V3.png.meta create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V4.png create mode 100644 Assets/WL/Look/Character/Textures/Hair05_V4.png.meta create mode 100644 Assets/WL/Look/Character/Textures/face02_V1.png create mode 100644 Assets/WL/Look/Character/Textures/face02_V1.png.meta create mode 100644 Assets/WL/Look/Character/Textures/face02_V2.png create mode 100644 Assets/WL/Look/Character/Textures/face02_V2.png.meta create mode 100644 Assets/WL/Look/Character/Textures/face02_V3.png create mode 100644 Assets/WL/Look/Character/Textures/face02_V3.png.meta create mode 100644 Assets/WL/Look/Character/Textures/face02_V4.png create mode 100644 Assets/WL/Look/Character/Textures/face02_V4.png.meta diff --git a/AgentScripts/WL814v_CAPTURE.txt b/AgentScripts/WL814v_CAPTURE.txt new file mode 100644 index 000000000..6d301771e --- /dev/null +++ b/AgentScripts/WL814v_CAPTURE.txt @@ -0,0 +1,26 @@ +포즈 = 카메라 정면 yaw 240° · ortho 10 · 1080×1920 (814u 동일) +마스크: 얼굴데칼 50 px (x:532, y:969, width:22, height:7) · 머리칼 1154 px · 머리(피부) 1047 px · 전체 2996 px (x:512, y:909, width:51, height:100) +피부(Head) 평균 밝기 L = 181 → 「진하게 읽히는 점」 문턱 = L < 136 + +== 얼굴 안별 화면 실측 (얼굴 데칼 50 px) == + 원본 고유색 49 · 서로다른색 98 % · 밝기 71~184(폭 112) · Hue 16.9° · ΔHue - · 진한점 14 px · 눈1개 진한부분 5×3 px + face V1 고유색 31 · 서로다른색 62 % · 밝기 10~172(폭 162) · Hue 23.0° · ΔHue +6.1 · 진한점 36 px · 눈1개 진한부분 7×5 px + face V2 고유색 36 · 서로다른색 72 % · 밝기 12~161(폭 148) · Hue 22.0° · ΔHue +5.1 · 진한점 25 px · 눈1개 진한부분 7×5 px + face V3 고유색 21 · 서로다른색 42 % · 밝기 21~171(폭 150) · Hue 21.7° · ΔHue +4.8 · 진한점 15 px · 눈1개 진한부분 7×3 px + face V4 고유색 32 · 서로다른색 64 % · 밝기 10~172(폭 162) · Hue 24.3° · ΔHue +7.3 · 진한점 38 px · 눈1개 진한부분 7×5 px + +== 머리칼 안별 화면 실측 (머리칼 1154 px) == + 원본 고유색 1067 · 서로다른색 92 % · 밝기 104~237(폭 132) · Hue 39.2° · ΔHue - + hair V1 고유색 564 · 서로다른색 49 % · 밝기 78~225(폭 147) · Hue 36.0° · ΔHue -3.2 + hair V2 고유색 641 · 서로다른색 56 % · 밝기 84~226(폭 141) · Hue 35.8° · ΔHue -3.4 + hair V3 고유색 517 · 서로다른색 45 % · 밝기 49~216(폭 167) · Hue 30.3° · ΔHue -8.9 + hair V4 고유색 497 · 서로다른색 43 % · 밝기 36~219(폭 183) · Hue 33.4° · ΔHue -5.8 + + saved Screenshots_WL/WL814v/v_face_grid.png (3588×770) + saved Screenshots_WL/WL814v/v_hair_grid.png (1212×306) + saved Screenshots_WL/WL814v/v_best_full.png (768×800) + +== 추천 조합 얼굴 V1 + 머리 V1 == + 캐릭터 전체: 고유색 2658 → 2131 · 서로다른색 89 % → 71 % + 얼굴 진한점 14 → 38 px · 눈1개 7×5 px · 대비폭 112 → 162 + 머리칼 고유색 1067 → 564 · ΔHue -3.2° diff --git a/AgentScripts/WL814v_Capture.cs b/AgentScripts/WL814v_Capture.cs new file mode 100644 index 000000000..3e73a741f --- /dev/null +++ b/AgentScripts/WL814v_Capture.cs @@ -0,0 +1,298 @@ +// WL814v_Capture.cs — 안별 임포트 설정 + 화면 실측 + 비교 캡처 (에디터 전용) +// 🔴 씬 저장 0 · 머티리얼/프리팹/URP 에셋 수정 0 (씬 인스턴스에 임시 Material 만 꽂았다 버린다) · ProjectSettings 0 · 원본 png 수정 0 +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.Rendering.Universal; + +public static class WL814v_Capture +{ + const string SCENE = "Assets/WL/Look/Arena/Scenes/WL_ArenaProto.unity"; + const string TEX = "Assets/WL/Look/Character/Textures/"; + const string SHOT = "Screenshots_WL/WL814v/"; + const string OUT = "AgentScripts/WL814v_CAPTURE.txt"; + const int LAYER = 31; + const int W = 1080, H = 1920; + static readonly string[] VS = { "V1", "V2", "V3", "V4" }; + static readonly StringBuilder sb = new StringBuilder(); + static void L(string s) { sb.AppendLine(s); Console.WriteLine("[814vC] " + s); } + + public static void Import() + { + try + { + foreach (var v in VS) + foreach (var f in new[] { "face02_" + v + ".png", "Hair05_" + v + ".png" }) + { + var p = TEX + f; + AssetDatabase.ImportAsset(p, ImportAssetOptions.ForceUpdate); + var ti = (TextureImporter)AssetImporter.GetAtPath(p); + if (ti == null) { L("!! importer null " + p); continue; } + ti.textureType = TextureImporterType.Default; + ti.alphaSource = TextureImporterAlphaSource.FromInput; + ti.alphaIsTransparency = true; + ti.mipmapEnabled = true; // 1/40 축소 → 밉 없으면 심하게 반짝인다 + ti.filterMode = FilterMode.Point; // 도트: 보간 금지 + ti.wrapMode = TextureWrapMode.Clamp; + ti.sRGBTexture = true; + ti.maxTextureSize = 512; // 원본 face02_WL/Hair05_WL 의 실효 크기와 동일 조건 + ti.textureCompression = TextureImporterCompression.Uncompressed; // 블록압축은 하드 엣지를 뭉갠다 + ti.SaveAndReimport(); + var t = AssetDatabase.LoadAssetAtPath(p); + L(string.Format("import {0} → {1}×{2} · {3} · mip {4} · {5}", f, t.width, t.height, t.format, t.mipmapCount, t.filterMode)); + } + } + catch (Exception e) { L("EXCEPTION " + e); } + finally { Directory.CreateDirectory(Path.GetDirectoryName(OUT)); File.WriteAllText(OUT, sb.ToString(), new UTF8Encoding(true)); } + } + + class Shot { public Color32[] px; public int w, h; } + + static Camera cam; + static Shot Render(Color bg) + { + var rt = new RenderTexture(W, H, 24, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); + rt.antiAliasing = 1; rt.filterMode = FilterMode.Point; + var pA = RenderTexture.active; var pC = cam.clearFlags; var pB = cam.backgroundColor; + cam.clearFlags = CameraClearFlags.SolidColor; cam.backgroundColor = bg; cam.targetTexture = rt; cam.Render(); + RenderTexture.active = rt; + var t = new Texture2D(W, H, TextureFormat.RGBA32, false); t.ReadPixels(new Rect(0, 0, W, H), 0, 0); t.Apply(); + cam.targetTexture = null; RenderTexture.active = pA; cam.clearFlags = pC; cam.backgroundColor = pB; + var s = new Shot { px = t.GetPixels32(), w = W, h = H }; + UnityEngine.Object.DestroyImmediate(t); rt.Release(); UnityEngine.Object.DestroyImmediate(rt); + return s; + } + + static bool[] MaskOf(SkinnedMeshRenderer[] all, SkinnedMeshRenderer[] on, out int cnt, out RectInt bb) + { + foreach (var r in all) r.enabled = on.Contains(r); + var b = Render(Color.black); var w = Render(Color.white); + var m = new bool[W * H]; cnt = 0; int x0 = W, y0 = H, x1 = -1, y1 = -1; + for (int i = 0; i < m.Length; i++) + { + int d = Mathf.Max(Mathf.Abs(b.px[i].r - w.px[i].r), Mathf.Max(Mathf.Abs(b.px[i].g - w.px[i].g), Mathf.Abs(b.px[i].b - w.px[i].b))); + if (d < 128) { m[i] = true; cnt++; int x = i % W, y = i / W; if (x < x0) x0 = x; if (x > x1) x1 = x; if (y < y0) y0 = y; if (y > y1) y1 = y; } + } + foreach (var r in all) r.enabled = true; + bb = (x1 < 0) ? new RectInt(0, 0, 0, 0) : new RectInt(x0, y0, x1 - x0 + 1, y1 - y0 + 1); + return m; + } + + static float Lum(Color32 c) { return 0.299f * c.r + 0.587f * c.g + 0.114f * c.b; } + static void Hsv(Color32 c, out float h, out float s, out float v) + { + float r = c.r, g = c.g, b = c.b; float mx = Mathf.Max(r, Mathf.Max(g, b)), mn = Mathf.Min(r, Mathf.Min(g, b)); float d = mx - mn; + h = 0; if (d > 1e-6f) { if (mx == r) h = ((g - b) / d + 6f) % 6f; else if (mx == g) h = (b - r) / d + 2f; else h = (r - g) / d + 4f; } + h *= 60f; s = mx > 1e-6f ? d / mx : 0f; v = mx; + } + static float CMeanHue(List hs, List ws) + { + double x = 0, y = 0; + for (int i = 0; i < hs.Count; i++) { x += ws[i] * Math.Cos(hs[i] * Math.PI / 180.0); y += ws[i] * Math.Sin(hs[i] * Math.PI / 180.0); } + return (float)(((Math.Atan2(y, x) * 180.0 / Math.PI) + 360.0) % 360.0); + } + + class Met { public int px, colors; public float ratio, lmin, lmax, hue, darkPx, eyeW, eyeH; } + + static Met Measure(Shot s, bool[] mask, RectInt bb, float skinL) + { + var m = new Met(); var set = new HashSet(); var hs = new List(); var ws = new List(); + m.lmin = 999; m.lmax = -1; + int dx0 = W, dy0 = H, dx1 = -1, dy1 = -1; int half = bb.x + bb.width / 2; + for (int i = 0; i < mask.Length; i++) + { + if (!mask[i]) continue; + var c = s.px[i]; m.px++; + set.Add((c.r << 16) | (c.g << 8) | c.b); + float l = Lum(c); if (l < m.lmin) m.lmin = l; if (l > m.lmax) m.lmax = l; + float h, sa, v; Hsv(c, out h, out sa, out v); + if (sa > 0.08f) { hs.Add(h); ws.Add(sa); } + if (skinL > 0 && l < skinL * 0.75f) + { + m.darkPx++; + int x = i % W, y = i / W; + if (x < half) { if (x < dx0) dx0 = x; if (x > dx1) dx1 = x; if (y < dy0) dy0 = y; if (y > dy1) dy1 = y; } + } + } + m.colors = set.Count; m.ratio = m.px > 0 ? 100f * set.Count / m.px : 0; + m.hue = hs.Count > 0 ? CMeanHue(hs, ws) : -1; + m.eyeW = dx1 >= dx0 ? dx1 - dx0 + 1 : 0; m.eyeH = dy1 >= dy0 ? dy1 - dy0 + 1 : 0; + return m; + } + + static Shot Crop(Shot s, RectInt r, int zoom) + { + var o = new Shot { w = r.width * zoom, h = r.height * zoom, px = new Color32[r.width * zoom * r.height * zoom] }; + for (int y = 0; y < o.h; y++) + for (int x = 0; x < o.w; x++) + { + int sx = r.x + x / zoom, sy = r.y + y / zoom; + o.px[y * o.w + x] = (sx >= 0 && sy >= 0 && sx < s.w && sy < s.h) ? s.px[sy * s.w + sx] : new Color32(24, 24, 28, 255); + } + return o; + } + static Shot HStack(List a, int gap) + { + int h = a.Max(s => s.h), w = a.Sum(s => s.w) + gap * (a.Count - 1); + var o = new Shot { w = w, h = h, px = new Color32[w * h] }; + for (int i = 0; i < o.px.Length; i++) o.px[i] = new Color32(24, 24, 28, 255); + int xo = 0; + foreach (var s in a) { for (int y = 0; y < s.h; y++) for (int x = 0; x < s.w; x++) o.px[y * w + xo + x] = s.px[y * s.w + x]; xo += s.w + gap; } + return o; + } + static Shot VStack(List a, int gap) + { + int w = a.Max(s => s.w), h = a.Sum(s => s.h) + gap * (a.Count - 1); + var o = new Shot { w = w, h = h, px = new Color32[w * h] }; + for (int i = 0; i < o.px.Length; i++) o.px[i] = new Color32(24, 24, 28, 255); + int yo = 0; + for (int k = a.Count - 1; k >= 0; k--) { var s = a[k]; for (int y = 0; y < s.h; y++) for (int x = 0; x < s.w; x++) o.px[(yo + y) * w + x] = s.px[y * s.w + x]; yo += s.h + gap; } + return o; + } + static void Save(Shot s, string file) + { + var t = new Texture2D(s.w, s.h, TextureFormat.RGBA32, false); t.SetPixels32(s.px); t.Apply(); + Directory.CreateDirectory(SHOT); File.WriteAllBytes(SHOT + file, t.EncodeToPNG()); + UnityEngine.Object.DestroyImmediate(t); L(" saved " + SHOT + file + " (" + s.w + "×" + s.h + ")"); + } + + public static void Capture() + { + try { Body(); } + catch (Exception e) { L("EXCEPTION " + e); } + finally { Directory.CreateDirectory(Path.GetDirectoryName(OUT)); File.WriteAllText(OUT, sb.ToString(), new UTF8Encoding(true)); } + } + + static void Body() + { + EditorSceneManager.OpenScene(SCENE, OpenSceneMode.Single); + GameObject root = null; + foreach (var go in UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects()) + if (go.name.Contains("LH_M05")) { root = go; break; } + var smrs = root.GetComponentsInChildren(true).Where(r => r.enabled).ToArray(); + var faceSMR = smrs.First(r => r.name == "Face"); + var hairSMR = smrs.First(r => r.name == "Hair05"); + var headSMR = smrs.First(r => r.name == "Head"); + var scam = Camera.main ?? UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Exclude, FindObjectsSortMode.None).First(c => c.orthographic); + float camYaw = scam.transform.eulerAngles.y; + root.transform.rotation = Quaternion.Euler(0, camYaw + 180f, 0); + L(string.Format("포즈 = 카메라 정면 yaw {0:F0}° · ortho 10 · {1}×{2} (814u 동일)", camYaw + 180f, W, H)); + + var all = root.GetComponentsInChildren(true); + var origLayer = new Dictionary(); foreach (var t in all) { origLayer[t] = t.gameObject.layer; t.gameObject.layer = LAYER; } + var b = new Bounds(root.transform.position, Vector3.zero); foreach (var r in smrs) b.Encapsulate(r.bounds); + var go2 = new GameObject("WL814v_Cap"); + cam = go2.AddComponent(); cam.CopyFrom(scam); + cam.orthographic = true; cam.orthographicSize = 10f; cam.aspect = (float)W / H; cam.targetTexture = null; cam.cullingMask = 1 << LAYER; + cam.transform.SetPositionAndRotation(b.center - scam.transform.forward * 50f, scam.transform.rotation); + var ucd = cam.GetUniversalAdditionalCameraData(); if (ucd != null) { ucd.renderPostProcessing = false; ucd.SetRenderer(0); } + for (int i = 0; i < 3; i++) Render(Color.black); // 배치 워밍업 + + var faceOrig = faceSMR.sharedMaterial; var hairOrig = hairSMR.sharedMaterial; + try + { + int cF, cH, cHead, cAll; RectInt bbF, bbH, bbHead, bbAll; + var mFace = MaskOf(smrs, new[] { faceSMR }, out cF, out bbF); + var mHair = MaskOf(smrs, new[] { hairSMR }, out cH, out bbH); + var mHead = MaskOf(smrs, new[] { headSMR }, out cHead, out bbHead); + var mAll = MaskOf(smrs, smrs, out cAll, out bbAll); + L(string.Format("마스크: 얼굴데칼 {0} px {1} · 머리칼 {2} px · 머리(피부) {3} px · 전체 {4} px {5}", cF, bbF, cH, cHead, cAll, bbAll)); + + var baseShot = Render(new Color(0.10f, 0.10f, 0.12f)); + // 피부 밝기 기준 = Head 마스크의 평균 L + float skinL = 0; int nh = 0; + for (int i = 0; i < mHead.Length; i++) if (mHead[i] && !mFace[i]) { skinL += Lum(baseShot.px[i]); nh++; } + skinL = nh > 0 ? skinL / nh : 128f; + L(string.Format("피부(Head) 평균 밝기 L = {0:F0} → 「진하게 읽히는 점」 문턱 = L < {1:F0}", skinL, skinL * 0.75f)); + + var m0f = Measure(baseShot, mFace, bbF, skinL); + var m0h = Measure(baseShot, mHair, bbH, 0); + L(""); + L("== 얼굴 안별 화면 실측 (얼굴 데칼 " + cF + " px) =="); + L(string.Format(" {0,-8} 고유색 {1,4} · 서로다른색 {2,5:F0} % · 밝기 {3,3:F0}~{4,3:F0}(폭 {5,3:F0}) · Hue {6,5:F1}° · ΔHue {7,6} · 진한점 {8,3:F0} px · 눈1개 진한부분 {9}×{10} px", + "원본", m0f.colors, m0f.ratio, m0f.lmin, m0f.lmax, m0f.lmax - m0f.lmin, m0f.hue, "-", m0f.darkPx, m0f.eyeW, m0f.eyeH)); + var faceShots = new List(); faceShots.Add(baseShot); + foreach (var v in VS) + { + var tx = AssetDatabase.LoadAssetAtPath(TEX + "face02_" + v + ".png"); + if (tx == null) { L(" !! 없음 face02_" + v); continue; } + var fm = new Material(faceOrig) { name = "TMP_face_" + v }; + if (fm.HasProperty("_MainTex")) fm.SetTexture("_MainTex", tx); + if (fm.HasProperty("_BaseMap")) fm.SetTexture("_BaseMap", tx); + if (fm.HasProperty("_ShadowBaseMap")) fm.SetTexture("_ShadowBaseMap", tx); + faceSMR.sharedMaterial = fm; + var s = Render(new Color(0.10f, 0.10f, 0.12f)); faceShots.Add(s); + var m = Measure(s, mFace, bbF, skinL); + L(string.Format(" {0,-8} 고유색 {1,4} · 서로다른색 {2,5:F0} % · 밝기 {3,3:F0}~{4,3:F0}(폭 {5,3:F0}) · Hue {6,5:F1}° · ΔHue {7,6:+0.0;-0.0} · 진한점 {8,3:F0} px · 눈1개 진한부분 {9}×{10} px", + "face " + v, m.colors, m.ratio, m.lmin, m.lmax, m.lmax - m.lmin, m.hue, Mathf.DeltaAngle(m0f.hue, m.hue), m.darkPx, m.eyeW, m.eyeH)); + faceSMR.sharedMaterial = faceOrig; + } + + L(""); + L("== 머리칼 안별 화면 실측 (머리칼 " + cH + " px) =="); + L(string.Format(" {0,-8} 고유색 {1,4} · 서로다른색 {2,5:F0} % · 밝기 {3,3:F0}~{4,3:F0}(폭 {5,3:F0}) · Hue {6,5:F1}° · ΔHue {7,6}", + "원본", m0h.colors, m0h.ratio, m0h.lmin, m0h.lmax, m0h.lmax - m0h.lmin, m0h.hue, "-")); + var hairShots = new List(); hairShots.Add(baseShot); + foreach (var v in VS) + { + var tx = AssetDatabase.LoadAssetAtPath(TEX + "Hair05_" + v + ".png"); + if (tx == null) { L(" !! 없음 Hair05_" + v); continue; } + var hm = new Material(hairOrig) { name = "TMP_hair_" + v }; + if (hm.HasProperty("_MainTex")) hm.SetTexture("_MainTex", tx); + if (hm.HasProperty("_BaseMap")) hm.SetTexture("_BaseMap", tx); + if (hm.HasProperty("_ShadowBaseMap")) hm.SetTexture("_ShadowBaseMap", tx); + hairSMR.sharedMaterial = hm; + var s = Render(new Color(0.10f, 0.10f, 0.12f)); hairShots.Add(s); + var m = Measure(s, mHair, bbH, 0); + L(string.Format(" {0,-8} 고유색 {1,4} · 서로다른색 {2,5:F0} % · 밝기 {3,3:F0}~{4,3:F0}(폭 {5,3:F0}) · Hue {6,5:F1}° · ΔHue {7,6:+0.0;-0.0}", + "hair " + v, m.colors, m.ratio, m.lmin, m.lmax, m.lmax - m.lmin, m.hue, Mathf.DeltaAngle(m0h.hue, m.hue))); + hairSMR.sharedMaterial = hairOrig; + } + + // ── 캡처 ── + var headCrop = new RectInt(bbAll.x - 4, bbAll.y + bbAll.height - 58, bbAll.width + 8, 58); + L(""); + Save(VStack(new List { + HStack(faceShots.Select(s => Crop(s, headCrop, 1)).ToList(), 4), + HStack(faceShots.Select(s => Crop(s, headCrop, 12)).ToList(), 12) }, 16), "v_face_grid.png"); + Save(VStack(new List { + HStack(hairShots.Select(s => Crop(s, headCrop, 1)).ToList(), 4), + HStack(hairShots.Select(s => Crop(s, headCrop, 4)).ToList(), 8) }, 16), "v_hair_grid.png"); + + // 최적 조합 = BEST_FACE / BEST_HAIR (인자로 바꿀 수 있게 상수) + { + var ftx = AssetDatabase.LoadAssetAtPath(TEX + "face02_" + BEST_FACE + ".png"); + var htx = AssetDatabase.LoadAssetAtPath(TEX + "Hair05_" + BEST_HAIR + ".png"); + var fm = new Material(faceOrig) { name = "TMP_bestF" }; var hm = new Material(hairOrig) { name = "TMP_bestH" }; + foreach (var pn in new[] { "_MainTex", "_BaseMap", "_ShadowBaseMap" }) { if (fm.HasProperty(pn)) fm.SetTexture(pn, ftx); if (hm.HasProperty(pn)) hm.SetTexture(pn, htx); } + faceSMR.sharedMaterial = fm; hairSMR.sharedMaterial = hm; + var best = Render(new Color(0.10f, 0.10f, 0.12f)); + var full = new RectInt(bbAll.x - 6, bbAll.y - 6, bbAll.width + 12, bbAll.height + 12); + Save(VStack(new List { + HStack(new List{ Crop(baseShot, full, 1), Crop(best, full, 1) }, 6), + HStack(new List{ Crop(baseShot, full, 6), Crop(best, full, 6) }, 12) }, 16), "v_best_full.png"); + var mf = Measure(best, mFace, bbF, skinL); var mh = Measure(best, mHair, bbH, 0); var ma = Measure(best, mAll, bbAll, 0); + var ma0 = Measure(baseShot, mAll, bbAll, 0); + L(""); + L(string.Format("== 추천 조합 얼굴 {0} + 머리 {1} ==", BEST_FACE, BEST_HAIR)); + L(string.Format(" 캐릭터 전체: 고유색 {0} → {1} · 서로다른색 {2:F0} % → {3:F0} %", ma0.colors, ma.colors, ma0.ratio, ma.ratio)); + L(string.Format(" 얼굴 진한점 {0:F0} → {1:F0} px · 눈1개 {2}×{3} px · 대비폭 {4:F0} → {5:F0}", m0f.darkPx, mf.darkPx, mf.eyeW, mf.eyeH, m0f.lmax - m0f.lmin, mf.lmax - mf.lmin)); + L(string.Format(" 머리칼 고유색 {0} → {1} · ΔHue {2:+0.0;-0.0}°", m0h.colors, mh.colors, Mathf.DeltaAngle(m0h.hue, mh.hue))); + faceSMR.sharedMaterial = faceOrig; hairSMR.sharedMaterial = hairOrig; + } + } + finally + { + faceSMR.sharedMaterial = faceOrig; hairSMR.sharedMaterial = hairOrig; + foreach (var kv in origLayer) if (kv.Key != null) kv.Key.gameObject.layer = kv.Value; + UnityEngine.Object.DestroyImmediate(go2); + } + } + + public static string BEST_FACE = "V1", BEST_HAIR = "V1"; +} diff --git a/AgentScripts/WL814v_PROBE.txt b/AgentScripts/WL814v_PROBE.txt new file mode 100644 index 000000000..85b4bdf0e --- /dev/null +++ b/AgentScripts/WL814v_PROBE.txt @@ -0,0 +1,23 @@ +포즈 = 카메라 정면 yaw 240° · 카메라 ortho 10 · 1080×1920 (814u 동일) +전체 실루엣: 키 100 px · 폭 51 px · 면적 2996 px + +== 부위별 「텍셀 → 화면 픽셀」 밀도 (앞면 삼각형만 · 화면면적 가중) == + (UV 면적은 실효 텍스처 512² 기준 · 괄호는 원본 2048² 기준) + Arm_m05 : 그려진 화면 335 px · 앞면삼각 372개 · 앞면 화면면적 339 px² · UV면적 18171 텍셀² + → 화면 1 px = 54 텍셀(512²) = 857 텍셀(2048²) · 🔴 격자 1변 = 7.3 텍셀(512²) = 29.3 텍셀(2048²) · 투영검증 오차 3 px [TRS(무스케일)] + ↳ 이방성: u 1텍셀(512²) = 0.179 화면 px · v 1텍셀 = 0.190 px → 화면 1 px = u 5.6 × v 5.3 텍셀(512²) = u 22 × v 21 텍셀(2048²) + Body_m05 : 그려진 화면 975 px · 앞면삼각 474개 · 앞면 화면면적 894 px² · UV면적 43365 텍셀² + → 화면 1 px = 49 텍셀(512²) = 776 텍셀(2048²) · 🔴 격자 1변 = 7.0 텍셀(512²) = 27.9 텍셀(2048²) · 투영검증 오차 2 px [TRS(무스케일)] + ↳ 이방성: u 1텍셀(512²) = 0.193 화면 px · v 1텍셀 = 0.194 px → 화면 1 px = u 5.2 × v 5.2 텍셀(512²) = u 21 × v 21 텍셀(2048²) + Face : 그려진 화면 50 px · 앞면삼각 28개 · 앞면 화면면적 20 px² · UV면적 13530 텍셀² + → 화면 1 px = 672 텍셀(512²) = 10748 텍셀(2048²) · 🔴 격자 1변 = 25.9 텍셀(512²) = 103.7 텍셀(2048²) · 투영검증 오차 26 px [TRS(무스케일)] + ↳ 이방성: u 1텍셀(512²) = 0.097 화면 px · v 1텍셀 = 0.083 px → 화면 1 px = u 10.3 × v 12.0 텍셀(512²) = u 41 × v 48 텍셀(2048²) + Hair05 : 그려진 화면 1154 px · 앞면삼각 380개 · 앞면 화면면적 1678 px² · UV면적 63381 텍셀² + → 화면 1 px = 38 텍셀(512²) = 604 텍셀(2048²) · 🔴 격자 1변 = 6.1 텍셀(512²) = 24.6 텍셀(2048²) · 투영검증 오차 2 px [localToWorld] + ↳ 이방성: u 1텍셀(512²) = 0.210 화면 px · v 1텍셀 = 0.230 px → 화면 1 px = u 4.8 × v 4.4 텍셀(512²) = u 19 × v 17 텍셀(2048²) + Head : 그려진 화면 1047 px · 앞면삼각 308개 · 앞면 화면면적 1053 px² · UV면적 17046 텍셀² + → 화면 1 px = 16 텍셀(512²) = 259 텍셀(2048²) · 🔴 격자 1변 = 4.0 텍셀(512²) = 16.1 텍셀(2048²) · 투영검증 오차 3 px [localToWorld] + ↳ 이방성: u 1텍셀(512²) = 0.315 화면 px · v 1텍셀 = 0.286 px → 화면 1 px = u 3.2 × v 3.5 텍셀(512²) = u 13 × v 14 텍셀(2048²) + Leg_M05 : 그려진 화면 729 px · 앞면삼각 400개 · 앞면 화면면적 703 px² · UV면적 37605 텍셀² + → 화면 1 px = 53 텍셀(512²) = 856 텍셀(2048²) · 🔴 격자 1변 = 7.3 텍셀(512²) = 29.3 텍셀(2048²) · 투영검증 오차 2 px [TRS(무스케일)] + ↳ 이방성: u 1텍셀(512²) = 0.179 화면 px · v 1텍셀 = 0.175 px → 화면 1 px = u 5.6 × v 5.7 텍셀(512²) = u 22 × v 23 텍셀(2048²) diff --git a/AgentScripts/WL814v_Probe.cs b/AgentScripts/WL814v_Probe.cs new file mode 100644 index 000000000..dcbfe118f --- /dev/null +++ b/AgentScripts/WL814v_Probe.cs @@ -0,0 +1,177 @@ +// WL814v_Probe.cs — §1-1 부위별 「텍셀 → 화면 픽셀」 밀도 실측 (에디터 전용) +// 🔴 씬 저장 0 · 에셋 수정 0 · ProjectSettings 0. 카메라·포즈는 814u 와 동일(ortho 10 · 1080×1920 · 캐릭터를 카메라 정면으로). +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.Rendering.Universal; + +public static class WL814v_Probe +{ + const string SCENE = "Assets/WL/Look/Arena/Scenes/WL_ArenaProto.unity"; + const string OUT = "AgentScripts/WL814v_PROBE.txt"; + const int LAYER = 31; + const int W = 1080, H = 1920; + static readonly StringBuilder sb = new StringBuilder(); + static void L(string s) { sb.AppendLine(s); Console.WriteLine("[814vP] " + s); } + + class Shot { public Color32[] px; public int w, h; } + + static Shot Render(Camera cam, Color bg) + { + var rt = new RenderTexture(W, H, 24, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB); + rt.antiAliasing = 1; rt.filterMode = FilterMode.Point; + var pA = RenderTexture.active; var pC = cam.clearFlags; var pB = cam.backgroundColor; + cam.clearFlags = CameraClearFlags.SolidColor; cam.backgroundColor = bg; cam.targetTexture = rt; cam.Render(); + RenderTexture.active = rt; + var t = new Texture2D(W, H, TextureFormat.RGBA32, false); t.ReadPixels(new Rect(0, 0, W, H), 0, 0); t.Apply(); + cam.targetTexture = null; RenderTexture.active = pA; cam.clearFlags = pC; cam.backgroundColor = pB; + var s = new Shot { px = t.GetPixels32(), w = W, h = H }; + UnityEngine.Object.DestroyImmediate(t); rt.Release(); UnityEngine.Object.DestroyImmediate(rt); + return s; + } + + // 검정/흰 배경 2장 차분 = 실루엣 마스크 (반투명·안티앨리어싱 무시) + static bool[] Mask(Camera cam, out int x0, out int y0, out int x1, out int y1, out int cnt) + { + var b = Render(cam, Color.black); var wt = Render(cam, Color.white); + var m = new bool[W * H]; x0 = W; y0 = H; x1 = -1; y1 = -1; cnt = 0; + for (int i = 0; i < m.Length; i++) + { + int d = Mathf.Max(Mathf.Abs(b.px[i].r - wt.px[i].r), Mathf.Max(Mathf.Abs(b.px[i].g - wt.px[i].g), Mathf.Abs(b.px[i].b - wt.px[i].b))); + if (d < 128) { m[i] = true; cnt++; int x = i % W, y = i / W; if (x < x0) x0 = x; if (x > x1) x1 = x; if (y < y0) y0 = y; if (y > y1) y1 = y; } + } + return m; + } + + public static void Run() + { + try { Body(); } + catch (Exception e) { L("EXCEPTION " + e); } + finally { Directory.CreateDirectory(Path.GetDirectoryName(OUT)); File.WriteAllText(OUT, sb.ToString(), new UTF8Encoding(true)); } + } + + static void Body() + { + EditorSceneManager.OpenScene(SCENE, OpenSceneMode.Single); + GameObject root = null; + foreach (var go in UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects()) + if (go.name.Contains("LH_M05")) { root = go; break; } + if (root == null) { L("!! root 없음"); return; } + var smrs = root.GetComponentsInChildren(true).Where(r => r.enabled && r.gameObject.activeInHierarchy).ToArray(); + var scam = Camera.main ?? UnityEngine.Object.FindObjectsByType(FindObjectsInactive.Exclude, FindObjectsSortMode.None).First(c => c.orthographic); + + float camYaw = scam.transform.eulerAngles.y; + root.transform.rotation = Quaternion.Euler(0, camYaw + 180f, 0); // 814u 캡처와 동일 포즈 + L(string.Format("포즈 = 카메라 정면 yaw {0:F0}° · 카메라 ortho 10 · {1}×{2} (814u 동일)", camYaw + 180f, W, H)); + + var all = root.GetComponentsInChildren(true); + var origLayer = new Dictionary(); + foreach (var t in all) { origLayer[t] = t.gameObject.layer; t.gameObject.layer = LAYER; } + + var b = new Bounds(root.transform.position, Vector3.zero); foreach (var r in smrs) b.Encapsulate(r.bounds); + var go2 = new GameObject("WL814v_Cam"); + var cam = go2.AddComponent(); cam.CopyFrom(scam); + cam.orthographic = true; cam.orthographicSize = 10f; cam.aspect = (float)W / H; cam.targetTexture = null; + cam.cullingMask = 1 << LAYER; + cam.transform.SetPositionAndRotation(b.center - scam.transform.forward * 50f, scam.transform.rotation); + var ucd = cam.GetUniversalAdditionalCameraData(); if (ucd != null) { ucd.renderPostProcessing = false; ucd.SetRenderer(0); } + for (int i = 0; i < 3; i++) Render(cam, Color.black); // 배치 워밍업 + + try + { + int x0, y0, x1, y1, cntAll; + foreach (var r in smrs) r.enabled = true; + Mask(cam, out x0, out y0, out x1, out y1, out cntAll); + L(string.Format("전체 실루엣: 키 {0} px · 폭 {1} px · 면적 {2} px", y1 - y0 + 1, x1 - x0 + 1, cntAll)); + L(""); + L("== 부위별 「텍셀 → 화면 픽셀」 밀도 (앞면 삼각형만 · 화면면적 가중) =="); + L(" (UV 면적은 실효 텍스처 512² 기준 · 괄호는 원본 2048² 기준)"); + + foreach (var target in smrs) + { + // 이 렌더러만 켜서 실제로 그려지는 화면 픽셀 수(가림 반영) + foreach (var r in smrs) r.enabled = (r == target); + int a0, b0, a1, b1, cnt; + Mask(cam, out a0, out b0, out a1, out b1, out cnt); + + var mesh = new Mesh(); + target.BakeMesh(mesh, true); // useScale = true → 스케일 포함 + var verts = mesh.vertices; var uvs = mesh.uv; var tris = mesh.triangles; + var mNoScale = Matrix4x4.TRS(target.transform.position, target.transform.rotation, Vector3.one); + var mFull = target.transform.localToWorldMatrix; + + // 🔴 cam.WorldToScreenPoint 는 GameView 크기를 쓴다(배치 = 엉뚱한 값) → VP 행렬로 직접 1080×1920 으로 투영 + var VP = cam.projectionMatrix * cam.worldToCameraMatrix; + System.Func Proj = (wp) => + { + var c = VP * new Vector4(wp.x, wp.y, wp.z, 1f); + if (Mathf.Abs(c.w) > 1e-9f) { c.x /= c.w; c.y /= c.w; c.z /= c.w; } + return new Vector3((c.x * 0.5f + 0.5f) * W, (c.y * 0.5f + 0.5f) * H, c.z); + }; + + double bestScore = double.MaxValue; string bestTag = "?"; double dens = 0, sArea = 0, uArea = 0; int nFront = 0; + foreach (var mode in new[] { 0, 1 }) + { + var M = (mode == 0) ? mNoScale : mFull; + double sA = 0, uA = 0; int nf = 0, nb = 0; double sAb = 0, uAb = 0; + float px0 = 1e9f, py0 = 1e9f, px1 = -1e9f, py1 = -1e9f; + for (int i = 0; i < tris.Length; i += 3) + { + Vector3 p0 = Proj(M.MultiplyPoint3x4(verts[tris[i]])); + Vector3 p1 = Proj(M.MultiplyPoint3x4(verts[tris[i + 1]])); + Vector3 p2 = Proj(M.MultiplyPoint3x4(verts[tris[i + 2]])); + float cross = (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); + px0 = Mathf.Min(px0, Mathf.Min(p0.x, Mathf.Min(p1.x, p2.x))); px1 = Mathf.Max(px1, Mathf.Max(p0.x, Mathf.Max(p1.x, p2.x))); + py0 = Mathf.Min(py0, Mathf.Min(p0.y, Mathf.Min(p1.y, p2.y))); py1 = Mathf.Max(py1, Mathf.Max(p0.y, Mathf.Max(p1.y, p2.y))); + Vector2 q0 = uvs[tris[i]], q1 = uvs[tris[i + 1]], q2 = uvs[tris[i + 2]]; + float ucross = Mathf.Abs((q1.x - q0.x) * (q2.y - q0.y) - (q2.x - q0.x) * (q1.y - q0.y)); + if (cross > 0f) { sA += cross * 0.5; uA += ucross * 0.5 * 512.0 * 512.0; nf++; } + else { sAb += -cross * 0.5; uAb += ucross * 0.5 * 512.0 * 512.0; nb++; } + } + // 앞면 winding 자동 판별: 그려진 화면 px 수에 더 가까운 쪽 + if (Math.Abs(sAb - cnt) < Math.Abs(sA - cnt)) { sA = sAb; uA = uAb; nf = nb; } + // 검증: 투영 bbox 가 실제 렌더 bbox 와 얼마나 맞나 + double score = Math.Abs(px0 - a0) + Math.Abs(px1 - a1) + Math.Abs(py0 - b0) + Math.Abs(py1 - b1); + if (score < bestScore) { bestScore = score; bestTag = (mode == 0 ? "TRS(무스케일)" : "localToWorld"); sArea = sA; uArea = uA; nFront = nf; dens = (sA > 0 ? uA / sA : 0); } + } + UnityEngine.Object.DestroyImmediate(mesh); + L(string.Format(" {0,-9}: 그려진 화면 {1,5} px · 앞면삼각 {2,4}개 · 앞면 화면면적 {3,7:F0} px² · UV면적 {4,9:F0} 텍셀²", + target.name, cnt, nFront, sArea, uArea)); + L(string.Format(" → 화면 1 px = {0:F0} 텍셀(512²) = {1:F0} 텍셀(2048²) · 🔴 격자 1변 = {2:F1} 텍셀(512²) = {3:F1} 텍셀(2048²) · 투영검증 오차 {4:F0} px [{5}]", + dens, dens * 16.0, Math.Sqrt(dens), Math.Sqrt(dens) * 4.0, bestScore, bestTag)); + + // ── U/V 축별 이방성 (면적 가중) ── + { + var VP2 = cam.projectionMatrix * cam.worldToCameraMatrix; + var M2 = (bestTag == "TRS(무스케일)") ? mNoScale : mFull; + System.Func P2 = (wp) => { var c = VP2 * new Vector4(wp.x, wp.y, wp.z, 1f); if (Mathf.Abs(c.w) > 1e-9f) { c.x /= c.w; c.y /= c.w; } return new Vector2((c.x * 0.5f + 0.5f) * W, (c.y * 0.5f + 0.5f) * H); }; + double wu = 0, wv = 0, wsum = 0; + for (int i = 0; i < tris.Length; i += 3) + { + Vector2 p0 = P2(M2.MultiplyPoint3x4(verts[tris[i]])), p1 = P2(M2.MultiplyPoint3x4(verts[tris[i + 1]])), p2 = P2(M2.MultiplyPoint3x4(verts[tris[i + 2]])); + Vector2 q0 = uvs[tris[i]], q1 = uvs[tris[i + 1]], q2 = uvs[tris[i + 2]]; + Vector2 e1 = q1 - q0, e2 = q2 - q0; Vector2 f1 = p1 - p0, f2 = p2 - p0; + float det = e1.x * e2.y - e2.x * e1.y; if (Mathf.Abs(det) < 1e-12f) continue; + Vector2 dPdu = (f1 * e2.y - f2 * e1.y) / det, dPdv = (f2 * e1.x - f1 * e2.x) / det; + double ar = Math.Abs(f1.x * f2.y - f2.x * f1.y) * 0.5; + wu += ar * dPdu.magnitude / 512.0; wv += ar * dPdv.magnitude / 512.0; wsum += ar; + } + if (wsum > 0) + L(string.Format(" ↳ 이방성: u 1텍셀(512²) = {0:F3} 화면 px · v 1텍셀 = {1:F3} px → 화면 1 px = u {2:F1} × v {3:F1} 텍셀(512²) = u {4:F0} × v {5:F0} 텍셀(2048²)", + wu / wsum, wv / wsum, wsum / wu, wsum / wv, 4.0 * wsum / wu, 4.0 * wsum / wv)); + } + } + foreach (var r in smrs) r.enabled = true; + } + finally + { + foreach (var kv in origLayer) if (kv.Key != null) kv.Key.gameObject.layer = kv.Value; + UnityEngine.Object.DestroyImmediate(go2); + } + } +} diff --git a/Assets/WL/Look/Character/Textures/Hair05_V1.png b/Assets/WL/Look/Character/Textures/Hair05_V1.png new file mode 100644 index 0000000000000000000000000000000000000000..5cfcc57458b03b67ea8b777ccf89b0d9ce7a6231 GIT binary patch literal 25620 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 literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/Hair05_V1.png.meta b/Assets/WL/Look/Character/Textures/Hair05_V1.png.meta new file mode 100644 index 000000000..19af8aa87 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/Hair05_V1.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: 8b84cf412edabc844853ed7836338da9 +TextureImporter: + internalIDToNameTable: + - first: + 213: 8374489691656223259 + second: Hair05_V1_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Hair05_V1_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b1af65e210a283470800000000000000 + internalID: 8374489691656223259 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Look/Character/Textures/Hair05_V2.png b/Assets/WL/Look/Character/Textures/Hair05_V2.png new file mode 100644 index 0000000000000000000000000000000000000000..86f2fcbbbeee7d55f145cc7b596af243d6b4f6a6 GIT binary patch literal 30306 zcmdUYdsGzX{r7;0#F&J($@`0!=;n9w{+f#>5HT1<82ht@Hm0IAToh%oBzOVYB!I}` z?qJfCUQ|w-L?kGy__H7X=&eJiM*GRir7@qmcK0QO{V4b4KVVyZ7JScl{^^BV(hvK+acbnH&7)=G z|LgV4n}5I@AI^Ws_w6muUh4hq-9HWA4l{Jv6ldx3%+Scjoyle@>XwPI>TzMFMfxq$ z*P=ew`sCb83>$gq{;Th8xc>_C`F7u|nZ3N3=o9YBj6M4N2-zS5nX{rZ;QY^urjh3i0-0}X|0QAZxOrgP)2pF5|`t;HEUh6Q%F07F*`utW; zYjHL#WAB10l2}=?k$viXFvl0NibeSW_b*#MBY1FAa}KZ%Ewa3C`?Oh~-_kYci!~wS zBnQ%8IHuIIHxD)UXv9MZZhTS}Q94QE9WAn7YPVK8PVai;!;wbq-1<5??9SJpn`j*# zzgnB)rY%>r4`E5XQ2r(FA4DROA)np2G+%LVj=trU^YvA&oaN^1eddb%++F^GX9gNp97A{0Zy!y0@dn9xfAt3wDs?$a z)Tr!=c78&*)kLLsGm$L!___=o>Y>}(WWO+r<8IWuUVN+~8&yaJydaM8IvcfE&V)2< z@B8c4A9&?x2|p8KqDni>l#TEiT+O+YrzonNEKm!h!uR`TA%DwnUa~%xx|ZH=kIZfVYmd{I$>&GV)2e_9i_ZFfe`cf)c0P#XGNy!> zT|}PNn}qnqaV&$^xt#25`BB)6y=`88K_E?2RZguoL$4^Odkw!5R;cPJ$)$ z$UsBcF??B3aQ+4Fe$M&zKgM%m(j`)a} zP;K{w>h}w1wNbTBBTiOl@Bjc*R&n%1*IC9p7KX|QJg~A?hj%+rZl>xDyC7mmOS6UB zM$skmd(473zoAIxkbuE2oyx49DA}0t=r(?UMlT#gc}OsK4Ss&;guRjBlmU4+51pa8 z3eG!_ywB_Zp-P)wW=t#s@<08L`w`ouJ^V{j(O?b)W)29tQYTlBq#nhY_b&_w42u2lY` zU-S=u`?v9?#kHW#r6Pn)`@Cx2oRrl19$C;U5uYPRW>L&(5(`u~^DehHYMo)k@N4{p zJ{}fx{8HQ_?n$va==axMO;rrpxm@{^x&))Gz9jJKz%}4=9l*4+A06NC9C(%SMv&V4 zuCv*XHm%rBetxaa99gVaCP62#I+O-x`bt6X5J|O(BB%+^O~@O>?1IWoB&?;2f)@|k zy)U}RuH9YxjJ7xfUN<6SrdJXPJq~)vWEv5&ryYv4Lcy!h2y6I>I8}gk+oHZ9UbWV> z$-alwp4r9-#XK7kyp1HH*Ahpz%bv2&aj1_jzATaRMYq*i>5)gmU5cg)Y#yUlS;GPY zoQ^?($lh1v6Qsji-$Pexn^M9F?LiU+8agRr7v7XC??KME%sQ>NIL#Ldb8XgVvjcr0 zR?l8!soBvU(cvzl=|Y_j6_HIBdMumRr_Qv$-*4dqFOJXwAk4gc3{6dF_IXF^D0KTV zfgdoD-smL=I@8aeC-J~l@-9`Bz;)#jDL;fRT=<9C!QbhIT78x6X}xZ9boV2l=EGvX z0iWS^8;w^}iM6gcga6TNl#p7aNF(vQM)8*^Ruat!+EF%Qe?K~#Cv%v_K9uubg*p3x zcVOabZD7$rgXL(-+GPM(0|$hvI`KjnQLY>e=D3e)1v7yn_jxIi%l~-^Gkvp8=zY0G z0~*z!XP&*Zk=)Xcw8Z=$4#=C0)ED%tvp#7Ka9Ba8qWaWELp*>5q6b<`B~kZsi;$F5 zOcGHNe>S1sD3cDwJ%ii<a$;h9@@3b&WAnJEv%_yCWnfApDZgPTC>=zwOF8uYv=ZKab95#mD`kW@Ohv0 zQaW67m{KEgh7i+&s$lj*KRVkkim!7*D|c*jHU_i;xy6jbyl5vV)KTRx75bW$ld#`&IlIO z>J=@z0u$M(r+RgS)#3jdu+o5InZoA{EI}&fH5`|HEgPynmHC9v^&-M4m9r+pptoZC z=G^C(Etr|^aavOqGaltG@)~hWBdpb8Sege^1xaM*NhR1IzV=CZ1Fx|n?6uacJx{Ny zaJdQN`W*)U(+(BOwDiN4&VKYUueaPrp6I%}FYPYS%Hs-2H7nAsE)65=DMhInbk2hI z4p_=*2#asMPmi&0+1Sas&s@IgHA!yIoYMK`0jU{n__Nv=sS#$~h0j+^qp@>WEhp^S z5o>%X(P}o`Vf}|d<^)~$lD7Xb4a)FhIh{TJR_F6rg53G9^~s#yNlJinv!CCYt*odo z!lPQVVwRBc%O%1KQpswq(U=lmgtxT`X+cwNeYVh1kuCfJSkk;^Bg!J?^%H|{X^8SL zytJHj#FLm?-phD=);5h`|93cmEKqto-(PndJsGEGK@)9F9OCz|-ZH?I&gp!6V+Ke8 zr7S(d?VAEhQBLfRcaen`DW&Mi9z*{rX+zM(s|p0sqCumgKyleARx@mgc~dgyP_r69 zYhuuqfd(fK#d|%uDER3{qstx>io$^r(aK_q{Kl;atQrxjIPX%y^IDyYS$Om?dRGW^ zyOE#CKgVn(ta!#@*?GWZTC z!|YIKl+e$ZhRUhIL9W0u z+CuUIpx`@{{EO^Q#GtoSLqEYnSb4iOHbx<{Df48}@v=HfYkj$E@)# z;yt13cvVUdp5}}v=3#*+T&$lnCdVv$pnxTU=YMmCnY`Ur&eH)3(rK&_Kytm9&36kC z4~lJvQFC%T>n>bkQik^!wdc%3w6dw8&a8A1SW}AZjnbxmm`=dD>m{2widA}McG1;i zx+e<%a4ZZ>POK=x#~er!RIw&9d74qN-0o>c@mdv$(rK{5bR8Gfs5Bl;z3=t8W083b z0EpaM(C@(x$-25chnfDx67m_gaC5g16Q%_%j)$y+cNF%n+IyyJh*b^UGD7M3eg=*k zaezUu%YH7gAdpL7$xdHctQNuX=Or7<%qP7)rw@<2+QHIwmq56o^>z!XMi1Zll%=}< zTv>Q~i1sfAbJvWj6gV5XZY|-H(<}Rui>-TkZZcDn?p2+}8sTp&vi$OMrj4Y?)JYOzeB1`mmiMiHO^RH-@{HiU=t8{|RTsq)9`@tEdxAKCyKNQev@xh7p>CKvvhfwYO;>*pUSg@U;0b7-{KP;{!6~21V;1r8k!2>Cf>aqOrjmPAD zHx5AT0if|_a8K$qQt;7tL+-u(9a*^WXwnp$*Xf{)T7nnoa}(fkf*AQkg=J5d+FM!* zy_ZV_zcUgvo!fOfs^em|Fw7OkF+#OkJg7rf9>{;V-0uMU&`@>!atKS#3d&ewtSSKh zB3173-w7(A`7aI?Bb1b8^HV$YtZgg=EsACC$<2^M++;7{S(A$=3@*426LFF*y9glI zQh^&TLZc>Kugpc})cJ6bP8}PBLQssm$5H<2vxpKY);zT8grQ zn;y%$6Q_8`5Sy1;MUfEb>224F?INGYu6bc6-lGZ}<-P-F6pD8ohp5(@6?MpLX$5ie z=odo$H3U^`hEY>T%h#b1G12ADTuZ-UH@Dg$2iag(+Qd7o-sQ}k5Oh8Q1KJW2ZnR(6_+s-+sC{wc?t(MrB726*KygEjI@i2~vcfOJyAYo1}P+c2#0 za;G`K8m`1&c36|%ZXLc<&^s$IObd|Ub(id)6(1TQ*em2|#k@vTpGS?d{t5l8iq<7U znm1EV)FCm|$`k2TI=on~)5tq*zve>#`K}k?xXOz?0cmj%3Yr;c$nM*D=nD~FHd^yr z2x})Lx$ra!562PAwzWlHr}fD(pA|7H$WIqF2mG*NAF=q$ zeFpD@*;RI7#ZSr8mw)i3V*U?~y#0{xzANpop4b(Vtv_q~p2srN?4H^Bysg8d)2)-- z(QoC**X`)YoLa_GoX(G33xHsoe#C7a2{%(7#r)%BYue~c2>nJrsiZgBEyLqiYQap8 z6+9}&Q8L1t_q&L@V_Ly$>6p|UVl^WJO2PXo$LC3Y-7Pxrg3P7GI0(rwmc$WV!nDU= zZ&W|JGG*GHTYbz$-XNjc{ZvpZmJ(U1(ZResnQ=$JjWGBJm4#_9G7!_gsHeK&I7e%jUKqME_~{wrPO_z3i+tr? z6)K9b>b|U)IzgLtB2|ICG-XNLdpN`eL%72ZoB57ER(JjRk3lc<_zId#d4pCWL62U8 z)HazX;9HPWi5%zu$miAqP}OiV+Pw`diH+N3&QYTy6EemcEN$h=qH`9Nlz9`TFBJJ= z3*+%5Qd^liB_=bxX@rFR4c{->I6S>Q8|4<5blo&w3a2i_nE>=wozNYnAd34@Q=LQC zt*4sm{wF1JHtzAQWKL4bo)4@)XgiS96JQ#7ab?9a_MC+_L<~>+#Jasojga_e$g*EI zvrglbSkH+D&a?ZF;76eS#ROjM#Cg$BH)7XwUjG#^=u;?}ARMOJW1_a(6o56zT$91Q z115sAB<;R8>D}8BcF)bY_ua8;N_97K^RXMfttR~OV>Fz-x;e^HRXA!(O-I`WHo0UY z^VErGjkrtjhVGwsM=%p`J4lXRQ{O457`Gx#NsN-1O7?E&&Jen^1Z&;jqG6so-=oSK zc@Yb|>#65B9t!u(F+^ z4}KaO+^PYYMTK5nEh>;mpVx|uty*%u5~!-d)Xy>Tp&y-#QjkT;{ZUGkWZs+$<)IxE z_}K5xwuX7W$qj4|efZ2z$(V3!S9vJ6v{sn4wIg-mD9 zTN>1}Irp4_tP4<*kI(uF9fw%_=(xP2oz|6=$|AthS*(PmF+@1$#!05U(v+tWmDVAT z|4H)@AL&rW<`ektB+~2MHatxp7J^rc*XwE6-fnq2+2gsS*Aq#U6+MKxhYbMcLO(IFRyWr}M?p6fw6sKSUpCelsv{7WZQE%twtZz*OcNA+2l9 zD2saZTcC5qBW?Cukw<>p-iWGdIt8=m;{u8PqAi);YhudzFd_^2G{pfs9Ocs1y=fdT zb}M#~BTj|@V_J>byB5k?NfDePJIz4%n)TjfEI9o<}MWVd-DNr6PDA}=#dFlnPzzysZ zvUoAGKQ1(9fk`J!zhDhZUTQ_9d5VNx-E<`EQ6Ry_{8ZhmHpSNARwcW`kXPC+$e@Q5Pz1p+>`X#2$j^ z+ML_|rG)$*&Uw*9lqvD>D80_9_*DM$`CK319p9R+v+2B`24xOw%Ii7KLm`?z)VuRe z#8N8}k*C0V4if{ylb1??zA&Vs{06t}Z?dnom#!RK2Sw+<#~N1bLbGa2LeveEoZKRG z%xJS4QeMHluirq`922(M#xH$|LWhW|8i21- z_r4xt%pF6n-((;;?$~DX1-qd(~w-i&$&uyY05IA-nO0KkdKmPeJ2h!P=;jR{T z8^XFB8OEzXM7tcA-npp35f~cw*Y@?O5$3;RzjBc?q># z(%Fi6Wr%Cdr$EltXqO=V>GTulEK2LR7<3J-f=2?NSt0rVz)4H0EoI8PMlA^~M*K6& z(1e3~b&bqVmX0iFtCWyb&Z@EWOWc+WZ>_lUz%)fFi?$)5*zJei$+QvH-aowS@hB%Jib6{3NZu+F}J*67m70*tyOQAU%V6?O{9E7!S z6In&$WeU8TAla6}b1b>Fm^bC?=jgm<@A_nUvw4XqY$<`^v{LXGODJC9c|;4{2WAm) z*(kkIs&)QYP-&yqRLP0O%h2$MxXkqY2quM!gh{^KtZS@7SvUyVuATm(|@6#d<2d-Y;f>)zyC4X&;kG_u*;*G;;7(cxA)Iq0?jDX zQQ^mI`0*lg4-(2ux}$L1obQ;KTNC*@V#yK}T4tvrV+&+&5+?ybJv%Yhklnj8`YOjk z)mA^cZ5F|vJSpVf6jYPWr^gSDT~q96)Mm$Ou@l+aN%8H}Vv-u-Hx7z0dc186WXg?p zLW%{4X1D`x$Uoly)T?bCoK@)&TS4M$`4G5?@Y7$ zz#y5ow)U?i%jBbT)$U4I&Q5bS^Hl6f!T)4b$g&e*D2gI#QG8s8E4P`o*g=)XP9EVE zvF0H+oJD{hh9=#S(CKp4$sVUC92iSqv;>;i<%xX9`CmwZ73j_^krSmyw`}BF6tT7J zfy&vmvLA167yQSg6*i4xN5j|k>Lm>k#EBRB90V^ddpq({H=X`z@^9j4vz6*RXn9f% zvy_)ZtN|40>FvBX5uLpW4;pPM2M_}*0Rm6zM<1JMAyNHJhbreKm!fA-`2KTYn!_re zg@V_Fwy4oM&THp_@ z8%tYH+z`F(eWgfvdurxA@8=fT_veHR0Zc&ZM*YvvX^pDrXrp*^y9QN&|2OjDhJs!e z5*pRVY$W7M-LZmD;!sMFEi^O{!t)_=ug4%}Hcz#tjr>=65iy%ETLIoYIG^i42fNfK zu2Fk02eXmM6n_0nsK=`tspZn#y8BTbF)#WxwOFP_TLiJ(ODhg*7i+Y?JSuyPaiKdP z68C9cVg*N6azXLvkY(rNCnaOd2b(z!qr3_+rC4=)1QI(LzriR$Jg?@ls!4IVP3{L| z)V@s?rZsJ^r!Q-dr{Exhxr92r?2VQfpvmD#++U@~A!5lJI-NLnsR+b&tmiAwr=QAx z3t}(9utpSTW<`K^^2n`Y=`SoJ>!j^i!--WKO~NxFiD^O4iD?Y)*YiNC&Z&M&iT04h zDM9qdUMj)?Fh_p}6wU3@G#-`&+@+_{5Z7L*qzenGB{jaszX!6DXQLURYlIDGgM69f z8(xMJU)~6_e{`d^Qj1=PM~>-;f^4*GKwNz0*RtP}SnRg1UHO9d_+sap(tG2DRBQuk zzcDe-{h1*Ceg{DRC6p?!y)E2<*J+#T!f7%TuV|dZ-LS3F~cO zfJUn}Kna3y7=%1?3-WaP!Kv4hwFKE+OZ@tCJ3S4U@i?E~{?1Q|o%jfWSV_ysLz9t` zFL4m<6ug%>0m@b<-!j5K-z@WE+R>5Np?c6TUQve7CyIz_VD?hh5rjtdDBgBhjI)lm z=qW|cADyPTetOOx;UMcenLtc6;{nwsFLTUGK$_E;JiOyCY0 zK~0tv*ruy3_?A7>&VZ&kAazqBNiBy^)qCXj-XRL-_^Im@255k8Wc2q``N#J#dxRTc&|$%u0g<6VZArvNcQKOGS4qr8rH z{GG`}k2Nj*E=*%1qe1mjswW^>F*nGR^P&I&%{dUH=Vl58Hco@i zMKco%$D=EWx42n5=-|4PXsxIeXq^@M%nK}qmH$=taRp2TTHwtu_^%DE=y?3h<`8-% z!W@yj0>g`(bYH1X7Xh)is#OH)BMHWHuOQ*8mt!xh9kO;}}BL%fuOch4#q_+jwM%{bHoT|Cljdt&PtnE86k%7h9tY`?4 z^yqSDW}`?b#P{{~_DBD9AjI|8bB~;Q#BcxG)+4(YuUA-!&0%f!O~qT^&6+ice7-&?`^baO_{zEG z9buU7gAdqv_WqkW-}nfy2Os6P;r_QVALo$txolMmOR^44XciB1f}_*n_uMYW7<`Ib zA;OLLsvsH+9>vo8KlAK2e)|8z1^o;EWKPDEba9dIoo0u=kNtYw`(YM=^Ouh;hmSW5 zxb)x<^}lj|{)Nl=XSe*pKN%b051(9E=xm6{Yx;|sz-!(~DmEz+o-*M{(<1`T^Ic`@ z2@JEf-v5Y6?B6%>53b_>Z7tog=yeKRaV})@*G?xcFI=E?)XY`R^IZvozsbNNrR$v(QuAe#-Bn+G3LepVL8bTTp zI5+tt>XKqda4i5}{mx(P_zeJ&Xc-A2A44BqZPru( z3ROFI{A~9d?@r&*%1ZY}=iGWZ^u_nUGy9W5-p~51y<8(^V`g?gb85q15@QsyKX!n3 zy86MNx8+Bj`XYRB?@vx%pxMtqWfqN2Ju`yN`Pl7U#=*qSn@g{M!~$^kUv#;MB2tI+ zdp4pk{f7^R@ynO@H7Voy)axgwmXKh&Yh*FUsOSMJ$PbxnNu-80=$KTyoJ-J z+s3AT07gy6*c*$7U{ThZby-CA*<$FrcP(GUdi1^O?6Bl5jIX@g*w)5r2&U#TdnzBY z6vxjX`Ac_7vk6l&26B*ryb|6F8pw`Q`tIv~PL{MV)lc<$JK(TN32BFEYLleJWuqqs z-M-SUNeekd0JF<8eWpocFf-@e*2#IGehw>@|D_?*me~@#XgX!W9o0OisibRF? zD!GpYF=b@kUPRW2h+78cB7mxgsalJ{NrUSmrB##E!U53I}N z@;>(@MOgKudoUCvr!j7dfZpQ^k>I7<*tNiRjbNk>GK%FNq4aKIdnczTknELpDG6Ow zV?M!Jon-3p{5Y)kCwqmjdTC2Fm;Dj273SUdDR0b0NS?;(7^ek5Fob@ZW8lzrttmsd z90cQ3)-y`VuIWdHg`sGcH0%x_d18!xzLs%nY@*@$F&JmT9A4FEn@Sbrp@R z9BXIKDs55(ZuA3b1P^N59|5r72(sW9?W{#`l&ib+y26T2GsGQS28ghYs(E@A$%?5> zh5wjS%DhaK*9CoxI#m9nk9y|F`V)o7XvSr0!N^72brl)t6at>{nYIhBl(j49ajyGf z)RafUUak;=)dZGNKrm`z!zI5EV2{y`Gq03&aBc-X(_I@@SVqKtz)HqVM;0PG&Br{* zsj$N`TzVGFgA3#Jn=sltJn=6at+I}EhfAsxe;pFu+!Sn9{m^!D!T-eVOYm{%U_gyfXUShbku=bGSsq1j*h_ z(*90ulN$T#&rLfPd-E5s9KW4(uAbA;%`?@y_P7wqP2xwaAD~D@i&Gi;Xa)uIL=5XbLfey$k7QLe_P|g>W&wZ8a0nJo2o?yG9=&v* zwNu6Qej|f}B}~y8bI#K)u3&!x`x6KrK`n8P)-ME@(-(`VcK)B|2bu;G z4QW;g-|VRza)?@<2z(6$V|FL-7lfI9)iJ%C9t<`7(%5GYkC}cT3V_E{qfmSiBR|xj zws7W}nt=P@^>=xctYQiE=;PjUXcI>2280q}@2KOz9`Cg}g%0e}o|biumFV+pGPqF= zbdYyF6j7|4>ALP?`=pDo!m1>#6p7i_zlCul9}o(K$+d1xlTy}+(2JTfGj!RCVrVrY z6Ijw>T}rE6Xd|FXOadTjxH~o`8n(`spjxxrIZqKP`dS_86Vk){tqe=FVoiZjEgV!M zO#uvRk*N3>eMZ?~Nr!c*i<|jCd|eD}3uq*dS*n5-J2c;44sb$=Ecgupt9L7n&N4Ii z$`_*A4`)vQlqiiAD>ePd`L#*K8mFua0T+SzKR#u^-v#xp?)W4ZYm{n@Mp>F3nniVx zn2GD|&xGZNm!+amdO?;q8dj2EwI#X-^|hdIvRZdm2mJQ${9F%0a_vYKnvf3AF&hC= zZ_GPM`9&YQnRY8DRZjGdipTk!4`XK4VJ3lp_Cnb#hP$-QWSRPr{JDnHy?>2Ic11u=+K2FS8I!N)o@;~EK{W|pZT?7A}UVX2x zJ#GzK)+VNsU^}hGnsA^7Mgu{Cl7w)# z7j1{OiC(Ky1765ElNLG?1>zZ)^m5$ASg#3zGoHx7K^8^1T;N#nek^x;`+a?Pxg%-E znOc^PGrIdnvXjj0z`O6h@AE#-^M1d7aLdLe*L~|cgwT>r_uuz(gcif?Vzl@g`0I@p zXC^}1^_%Xy_ZNE(PYj)Y=C%tjuK(FxxBl4mp6lJEH@LGO%Y1C>Nb<`?*PZ@m!Cf2j z>vp`|Q(Y~OM)L0JomUi-^ zdtDPkBtIhojXb;;7n{5ul|z+jzd0W9uS6co4DM%r(_(6u?ao!D8Z2s~ccpF6&xBJ@ zS(UkPsbN^P9DY~XpbCp*q%xGR6Y34|w&0Ck=M9&p$w!gGG z4Tu2kYw2S67gMkjqn@wl;vbyFSv&c#Rlo;^9oCS#XdGv0$S8hplM;NnSyyL- z_PJ=N_0WYdXRoTpeDJ2G)b_qWu)^#er}782BxfCM_KsHYm=eNkiK{MJvD!i+7&npj7oklwtK-AHbB2U*r=Ji7=W z`q}AvG13I@d7;vPw=yotoD+5InMx5j z0+6|tOKo8h9%jBW}QXnyV&L^Hi-;C8PBB} z99FNuimX72>vDD8x3jB+{g!5yZu}(D$%g?=QUafZ+V!jBh*V*<(ENI=nqVAmEKIK2 z;u*bUhrvl=1iUL>3u!gYhtT5_B(szc(viqclH__a5?QMe3}cb*+db4v9W3qiFmL+$ z>7o~u7a=zTV=vnpk5#n&;S-GlgH7R;8B+!xQZgPFQGvuNA)eR;M z8R*4kgJ0F~(USO=Ft5Q`VTae-xIkjZKC!#b0ZZd>v)=0USJaZ?)pphSoF@ITHmext z2gj6f%gi$|+^FO4ae8bv%Ztu=>$Yix1f<*CL9l5!z@^%@C@g_&mY^VGM1+xm9qW6V z2^PmwA~jbrnP&>7`8&|WsFKnPkkT%n5INXurH;fI0oNr7zK|r_2B(8*h4Nvmm=>i# z=~84lG_SrnGENhZm0p$hw7GDVT?Kuz*aUsj@|!+@F~$C{y*P+VNrLOF;FugIcX8JC zLxRIkp)!$q+bgrx~H8PJlG0>7JdmpDB} z!GTi{dQ@R#7GO|9CBs*-y*Xvs0#`tj^T0tK)6=@wCnS6_WmFPeeu4)QCHyT>jM;z; zoex0G-dY^t(j0VspOFNnJsj0A8ck^iR-jLX1A@w=P`&dTL&0e=do7-caGb+YeB2pc zV@bZoqE;CxWXq@|7I%neeRkrj%_*y)@7d_7popuymJD~1a)$0Sbm28*;1pRyO4_V$ zD_x?{GP0`;XxOuE45aM=Sygyb5;;o1G0>+z9r6?~WRg|6cGeO`D>QYH6xUM`F14Q- zRz8A-`3M5HA*5qOpBHsmtU|`&IYIzNQ;x22caa=YQchu)2Jgdz<&m&`y3-w)?iBDD zg$0(&0=LmLiRNcOX_~nONSVOVE^%5deovTAZz7=cd9u2()gYu4-O*3$nm9%oR2N`S zg)Wc{L`!UZa+O7*W^tHe+8mdK-TXA*$f-vsyN$F(G0Vtw3C%Xz|Ew{phAL>Tl$K95 z=!rxy<_X4S_;>4;g`NERg{gEtgNIqAg}%YSrl{@K6K%Srft{? zonik)^>mVnF;Z-g*j%gVEG73uyqkX^c;;G2{{8E|V3h z1HAt$V(%Z#%Vl8W7$ZfR(~b{_W=RRkfS5Xts|G_n;~kB=C;L21Xw>nVkFh@KWXO}P zRDPw9gtP`l>zfy6xjz2RP(r;|G}W~AfaV=o4xGXh5nL6)bS)0x0tb-C$0!mA+jqej z>n>-A7d$nh5{`<}6kE-_5?(hK`ou1RqhaoZ%Uc&6jO`jA-J%X6tm|P&*;wSv?fqb( zVIAM^S7-Ybs3W%pXG(iXud))4u=QLprRW`y_$)!m9DEFzgtnd`GNH(+vP=4hJ5P!N zNb+o^WBsoF144Q=KzWYlr;QhBLN|S)D0~alIHlRsMi?=bUk9gH?X~S8UTT{ayXku# zR?|(y)M2EZ3K1rk2m_Fa8me+t4_A=bLLU0KoW_|xu_H<{YeENDP>ovA-`=996as#p zJ}_XpX0OF!$g|hRDVV6_WrzQ|WYFT{!@&AVD>bGLitOn0^%JkdvFi(-onk+@%x_y4 zdyMS(UC~HC|0C0z)6h#I4FHDrPfrX4JW^@{=>poS9Te)Q6qp`1L)p+n za@CEe8w!!R3D#%AfJLhF)W`H>j@T6!W7ZD@{GDEp-r2!|v${gDI6_E1e?oue>51-qU)K z7g=4JXC0x@RD>qN{7zm>^i+)9f?&wQP9qa6<$|Sr*u&K;J9e(d$rZvRyc;iG=GN)V`>XOnR)DXBG8MCbg+M6G(JP8#B@h_I}GY8jc&_ z4)<sK18R+l zm^m4->decM~Yo!4ITe_Yhq}S~jbQ zWC+&XB)$(J4NdV;!OUZazkb-x2$byxMWd6e(Jggek95z+AY^=13CyLDwE~|d@Ykao zfhxPq>wOcHvbO}aS0?jm11w`JlosA&hbMJqgXvDPyX(kd53mH$RZ3PbL{^WTQmfpK zU-gnlIJLz-+YVi`-x0Q7WSKX;jH)Co)aSTq zx|t;{93Amjtky(_>C@?)75b=xS{4empj9x2UU*(QE2dMVbO9%N1tX3+VQXM80Db@f zF`zRE)7v!obO|tEzHOw&fN{AMR^8!cC?{*kS34M*#!*9IGP13T9qAArl(r=S%e(a; zXTu2(6L)LKhY|ajU$yEaPPFAIN~&D8y^aWBII-bt2pQlT5D)SdkJ6yUg)s@li?iyK zTIsT~yDSJu;BYwr;ndmzHV$8os~PB=Qpo?kkdM&5q2o)?t;>>+r(Uv})9(E1yNiDJ zr|qXNe{>CINpVB2$F!@5g;PdfJe5S;F#m4fvAIWNN a9((oZ+ZUgBrBRIIrk`xNuk}Yo&;AQq=OBXs literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/Hair05_V4.png.meta b/Assets/WL/Look/Character/Textures/Hair05_V4.png.meta new file mode 100644 index 000000000..ac4c4b645 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/Hair05_V4.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: 348e1899929201447825cf8c3e3e2b97 +TextureImporter: + internalIDToNameTable: + - first: + 213: 2029141942209985260 + second: Hair05_V4_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Hair05_V4_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ceab54878d5f82c10800000000000000 + internalID: 2029141942209985260 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Look/Character/Textures/face02_V1.png b/Assets/WL/Look/Character/Textures/face02_V1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e1e4a7a4219c325050dccef4e82bfaa07be4f2e GIT binary patch literal 17606 zcmeI%Ur19?90%|-9qwZOtq4=niJ+BY2I3y3xpI+GTADAR$%r6x`U+MRu|Z6hjX>Bhe3k2;>rXKr9-m{AG#=+5acYqi?cF!3eF`M}W; z>-5>&2z?P-Mi`Fg|HP6R>uNCZ)jR3CasyA?zx&?gt>AW=D$lCiVU|42oP4LgT0FQ* zR$_dzJvxczIzY8S2+Az-+vcRKdznqW`^#lt-+T3Zc@b-HOvxAg3CYRRS?fjR#%z7H zLo?W5Q4vz{LBM4xYCE!CZHEm4`K2`~mx^d1009U<00I#BhXuBcMJ2diZ{nFX-(Kr+ zp_{qr`Wr@f-t1VbOKY}p04UE0wvrpMmE;l-Ed(F{0SG_<0uX=z1Rwwb2tWV=5P-m6 cC?G3c3~Ak*6n@*LTXj8t%E2^g>j9bi8(zplBme*a literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/face02_V1.png.meta b/Assets/WL/Look/Character/Textures/face02_V1.png.meta new file mode 100644 index 000000000..9f5b35035 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/face02_V1.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: 38fe6159a126f194c8b79ae5cc892b85 +TextureImporter: + internalIDToNameTable: + - first: + 213: 5320282600810261513 + second: face02_V1_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: face02_V1_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 90cacfd56d075d940800000000000000 + internalID: 5320282600810261513 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Look/Character/Textures/face02_V2.png b/Assets/WL/Look/Character/Textures/face02_V2.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a026ea8f8639148700a07107ac315b48f0c946 GIT binary patch literal 17903 zcmeI%ZA?>F7y#gxj}?YNN^}DhP;nb(iJ|-9C`7oh!5Ep7DMaSN?8UJ$5DTOTI10Do z#$seJ$AVn~RL6plxzPZkIB1Jx;y(Ba1BRird@Kbm6and=l)GEQbwAC@er)ibKle?4 z+}`t?bKduyd(XXfFv8hsn-c&yN4_3*7{HMU9l?>qTCLCJB6 zTO}i3UD^>7cFE_v&~*DG&otLfU--1VbZb+g|K~4Orx|=c8Tw|Q`+MCSPE3M(jr6LI z=uVC-(M~tksS0vCrs%W$6E+k;0Te(16hHwKKmim$0Te(16hHwKKmim$0Te(16hHwK z_zw$c>G+^r=J`th7}aMG0aU$u@Qe*SJ3gvU$fm^&lr5z3G@in(t6i88xU!uIk+2ci z+Or{dCmTt?h7Ij4pJX1jogu3MfQ>C1I&#@)9p94tTUq&zT$3k$IgsvB5+)8v>~iLM zUCs|vD@$S`kgCsZpaJCWLKX!f0j!!qMO7{Us=AcMA08$TE|j!s6wTYp>5*RZcs5N) zcDW_`RvKi2+KM-e1kD`_>64}%0G@^0S@(@QS3_6=s}`x`;XJeQC2glov&qC_GatUq^>EAfa%Bdy0xIV;=9Tt|Wy7)M{eiS5b2@h4FFZ-xOt1&1RqIjR zI=aiT;F+`9{HsZF=Y$`>CbxY2ylVn^SjyuZkKwjzdDTacK8UJwa?0N$_RfzNx(pdk zd8zVTQr!)v^f}<&*7?^K1TTGiBDP?f$T6i)to(LzD2Ja(iB3$cEObtH8~i|0lWxb3 zwN-lq+^}-xd`o7F7R^p{T{gKLInq8&Pyrd#z0$6|&T6HJ6iuuc1{4~BjJ3Yq^G DI-vkR literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/face02_V2.png.meta b/Assets/WL/Look/Character/Textures/face02_V2.png.meta new file mode 100644 index 000000000..69f7b7962 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/face02_V2.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: a0079a53ad52fd14692edd0f9aeff0df +TextureImporter: + internalIDToNameTable: + - first: + 213: 1884068705787105596 + second: face02_V2_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: face02_V2_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c31ded4718e852a10800000000000000 + internalID: 1884068705787105596 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Look/Character/Textures/face02_V3.png b/Assets/WL/Look/Character/Textures/face02_V3.png new file mode 100644 index 0000000000000000000000000000000000000000..50659e104cf898d0d09aa04041d957e76de9b67e GIT binary patch literal 17742 zcmeI%Unpcz90%|(b2GPTiLI@PvN!vxF}5}$+|h_>OG{guOqwV!+Z1URdAWv~ZHcD7(=?4bAIR7Iej0hD^pFG zCIG39Dtj#;$3hu$O6)Q9JzxbYUODWxj~&Cu+mjB-X4d@mO?7+Lv$tItTmF}6@7KRB zH>~>9H0NqCr?>w4_k2q8;QmPWz~)Kp4{Q{m00k&O0SZun0u-PC1t>rP3Q&Lo6rcbF zC_n)UJavJYeD@Cvko9wD{FAqAZ2TaY1($j?JN>_GV(oM#Y=mZWy62Pb`>`99M32%H z5or*gA?a5Q@usNv0g#j|LOESTswN^N^Ov*)ClR=MfJ9CkgEKooOQ$#TtEgQ&ANKVZ zC@&5t7FweQ^ZK7~=+=mybAw2G%#;Z|*4)UrgM+0D@EE0wHC}L9jzTAMMQ!H5QXrm5 zBO76FO-boc6nOKHJbL{(=yOBzDDvMqNxk)Fz~WJSh5k{K>)qvOykuqR`6%P3h)s?~ z9gDiyTu9`i?%8hiVvX`i0SZun0u-RY^A%Y9_T@tFU9=_prnt-S&v_Lx>hG;v$Kv>Y zu~0-jie%NQPYzz)fOl5lQJ=mR*eE~&3Q&Lo6rcbFC_n)UP=EpyNOS@1V6C(u`*oyo RB{xs+i=(32K34AX+yV6f`X&GX literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/face02_V3.png.meta b/Assets/WL/Look/Character/Textures/face02_V3.png.meta new file mode 100644 index 000000000..4108c6c75 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/face02_V3.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: 4918f11a580835f428779005b08ac550 +TextureImporter: + internalIDToNameTable: + - first: + 213: 3534896832738962428 + second: face02_V3_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: face02_V3_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: cfb2f01d0f97e0130800000000000000 + internalID: 3534896832738962428 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/WL/Look/Character/Textures/face02_V4.png b/Assets/WL/Look/Character/Textures/face02_V4.png new file mode 100644 index 0000000000000000000000000000000000000000..13a1585de38064d1550cee3309ac9e8b71f60367 GIT binary patch literal 17800 zcmeI&T}V@57zglYx{hl#cBDk>W`jT^jE*9Nc?EzR}1@6QMcCF;1#{`I`jYDod4B<_s4Ud_kGVf zw~yNn>$JPIM5MDGF`p#TC{aTiPPsHb`zR1ua;@gphoIa6?^ZYB+a^PnUJ_zQJ33vFvG|-Qqp{uuUHdmc}c$#DD+< zAOHafKmY;|fB*y_009U<00Izz00bZa0SG|g9~US%(=z2Ia=n)A*X}>akNocRoBWd( zJ)wBj_A5Vv{ZqdpUwb{D&U#+VdmTh?U%f16Ga8F*Wzm?$5~<=?)bK22Ni0#Ennm8o zl0+&N)zMEEv4L9>ES1k#C?Y&PwDH=8tMDLE$1%5~ti0)J)pW0Kn0~xt!5}^j z&vl0Nl=5a9Yj)^`ghhY|s~=(6$Fi?<#Z}9G$2Xty*U4~Ge)9hGo38HJqUJ7dP3CB- zefdvdCXpTu6&cEujqAi*cfd5XIR4J$|I!uk?Q!+F^)*4mdR;bjesH9ODxGQCpU*QS zM`=oJs_}DDrF>87890y-?aio0RO8xel%i!38#u`jwk?}u+rmm7R|r4=0uX=z1pZ$E zu`e_BmcLyb9k4Go1X?dd=gPOVhS{728%uaez2>wkt+?QPfb#)uj`IOZeO0NiGynt$ vKmY;|fB*y_009U<00Izz00cI!fVk9{&{n^<2!p#b&P05uJYlac3ZP literal 0 HcmV?d00001 diff --git a/Assets/WL/Look/Character/Textures/face02_V4.png.meta b/Assets/WL/Look/Character/Textures/face02_V4.png.meta new file mode 100644 index 000000000..0b9504c77 --- /dev/null +++ b/Assets/WL/Look/Character/Textures/face02_V4.png.meta @@ -0,0 +1,181 @@ +fileFormatVersion: 2 +guid: fe42dc99779996a4ab4e7150123ba646 +TextureImporter: + internalIDToNameTable: + - first: + 213: -809660786628649809 + second: face02_V4_0 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: face02_V4_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 2048 + height: 2048 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fac9f68edc183c4f0800000000000000 + internalID: -809660786628649809 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: