# Nahida Dependency Map This document captures the Unity sample semantics that must survive the port. Source roots: - Unity reference project: `mvs/NahidaRender` - Engine project staging area: `project/Assets/Characters/Nahida` ## Texture groups Body and Dress1: - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Body_Diffuse.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Body_Lightmap.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Body_Normalmap.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Body_Shadow_Ramp.png` Hair and Dress2: - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Hair_Diffuse.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Hair_Lightmap.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Hair_Normalmap.png` - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Hair_Shadow_Ramp.png` Face and shared: - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Face_Diffuse.png` - `Textures/Shared/Avatar_Loli_Tex_FaceLightmap.png` - `Textures/Shared/Avatar_Tex_Face_Shadow.png` - `Textures/Shared/Avatar_Tex_MetalMap.png` Reference-only extra: - `Textures/Nahida/Avatar_Loli_Catalyst_Nahida_Tex_Body_Specular_Ramp.png` - Present in the sample resources. - Not directly referenced by the seven Unity Nahida materials that were copied into `docs/reference/NahidaUnity/Materials`. ## Material graph Shared base material: - `docs/reference/NahidaUnity/Materials/Nahida_Base.mat` - Uses `docs/reference/NahidaUnity/Shaders/Genshin.shader` - Binds shared `_MetalMap = Textures/Shared/Avatar_Tex_MetalMap.png` - Carries shared shadow, rim, outline, and specular defaults Body branch: - `docs/reference/NahidaUnity/Materials/Nahida_Body.mat` - `_BaseMap = Body_Diffuse` - `_LightMap = Body_Lightmap` - `_NormalMap = Body_Normalmap` - `_ShadowRamp = Body_Shadow_Ramp` - Enables emission, normal map, rim, specular, and smooth normal - `docs/reference/NahidaUnity/Materials/Nahida_Dress1.mat` - Reuses the same body texture group - Double-sided - Uses smooth normal Hair branch: - `docs/reference/NahidaUnity/Materials/Nahida_Hair.mat` - `_BaseMap = Hair_Diffuse` - `_LightMap = Hair_Lightmap` - `_NormalMap = Hair_Normalmap` - `_ShadowRamp = Hair_Shadow_Ramp` - Enables emission, normal map, rim, specular, and smooth normal - `docs/reference/NahidaUnity/Materials/Nahida_Dress2.mat` - Reuses the same hair texture group - Double-sided Face branch: - `docs/reference/NahidaUnity/Materials/Nahida_Face.mat` - `_BaseMap = Face_Diffuse` - `_FaceLightMap = Avatar_Loli_Tex_FaceLightmap` - `_FaceShadow = Avatar_Tex_Face_Shadow` - `_ShadowRamp = Body_Shadow_Ramp` - Marks `_IsFace = 1` - Depends on runtime `_FaceDirection` - `docs/reference/NahidaUnity/Materials/Nahida_Brow.mat` - Reuses the same face texture group - Uses a tint override through `_BaseColor` - Sets outline width to `0` ## Shader semantics Core shader files: - `docs/reference/NahidaUnity/Shaders/Genshin.shader` - `docs/reference/NahidaUnity/Shaders/GenshinInput.hlsl` - `docs/reference/NahidaUnity/Shaders/GenshinForwardPass.hlsl` - `docs/reference/NahidaUnity/Shaders/GenshinOutlinePass.hlsl` Important shader features to preserve: - `_LightMap` driven shadow partitioning - `_FaceLightMap + _FaceShadow + _FaceDirection` face shading path - `_MetalMap` driven specular/metal response - Rim light - Separate outline pass - `_UseSmoothNormal` switch for outline data path ## Scene semantics from Unity sample Reference scene: - `docs/reference/NahidaUnity/Scenes/SampleScene.unity` Observed setup: - Instantiates `Avatar_Loli_Catalyst_Nahida.fbx` as a prefab instance - Renames the root object to `NahidaUnityModel` - Uses `SkinnedMeshRenderer`, not a static `MeshFilter + MeshRenderer` setup - Overrides one renderer mesh with `Meshes/Nahida_Body_Smooth.mesh` - Assigns body renderer material slots in this order: - slot 0: `Nahida_Hair.mat` - slot 1: `Nahida_Body.mat` - slot 2: `Nahida_Dress1.mat` - slot 3: `Nahida_Dress2.mat` - Additional renderers use: - `Nahida_Face.mat` - `Nahida_Brow.mat` - One face-related renderer writes `BlendShapeWeights[0] = 100` ## Current static assembly baseline in XCEngine Preview scene: - `Assets/Scenes/NahidaPreview.xc` Current static assembly uses the existing imported FBX sub-meshes from: - `Assets/Models/nahida/Avatar_Loli_Catalyst_Nahida.fbx` Scene-side material path mapping in `Assets/Scenes/NahidaPreview.xc`: - `Nahida_Hair` - mesh localID: `5268898388415806497` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Hair.mat` - `Nahida_Body` - mesh localID: `5268897288904178286` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Body.mat` - `Nahida_Dress1` - mesh localID: `5268896189392550075` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Dress1.mat` - `Nahida_Dress2` - mesh localID: `5268895089880921864` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Dress2.mat` - `Nahida_Brow` - mesh localID: `15841426242793151682` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Brow.mat` - `Nahida_EffectMesh` - mesh localID: `692846506840157104` - temporary fallback material: `builtin://materials/default-primitive` - `Nahida_EyeStar` - mesh localID: `8234240765526303311` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Face.mat` - `Nahida_Face` - mesh localID: `1306782875462705981` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Face.mat` - `Nahida_FaceEye` - mesh localID: `977130118610429631` - engine material: `Assets/Characters/Nahida/Materials/Nahida_Face.mat` Current engine-native shader and materials: - Shader: `Assets/Shaders/XCCharacterToon.shader` - Materials: - `Assets/Characters/Nahida/Materials/Nahida_Hair.mat` - `Assets/Characters/Nahida/Materials/Nahida_Body.mat` - `Assets/Characters/Nahida/Materials/Nahida_Dress1.mat` - `Assets/Characters/Nahida/Materials/Nahida_Dress2.mat` - `Assets/Characters/Nahida/Materials/Nahida_Face.mat` - `Assets/Characters/Nahida/Materials/Nahida_Brow.mat` Current model material remap sidecars: - `Assets/Models/nahida/Avatar_Loli_Catalyst_Nahida.fbx.materialmap` - `Assets/Characters/Nahida/Model/Avatar_Loli_Catalyst_Nahida.fbx.materialmap` Format: - `meshLocalID=Assets/.../Material.mat` - Multiple material slots can be provided with `|` Current gaps: - No dedicated outline pass yet. - Face shading logic now matches the Unity-style forward path more closely, but `_FaceDirection` is still not driven at runtime. ## Runtime driver semantics Runtime driver: - `docs/reference/NahidaUnity/Scripts/MaterialUpdater.cs` Behavior: - Reads the head bone transform every frame - Rotates the configured local head direction - Writes `_FaceDirection` into every material on the configured face renderers This means face shading is not static material data. The engine port needs a runtime material-parameter driver. ## Post-process reference Reference files: - `docs/reference/NahidaUnity/Shaders/URPGenshinPostProcess.shader` - `docs/reference/NahidaUnity/Scripts/Rendering/` - `docs/reference/NahidaUnity/URPSettings/` These are kept only as semantic reference for a later phase. They should not be treated as engine-native runtime assets.