public AglLightMap(Stream stream) { var aamp = AampFile.LoadFile(stream); LightAreas.Clear(); foreach (var ob in aamp.RootNode.paramObjects) { if (ob.HashString == "lut_param") { //32 curves. for (int i = 0; i < 32; i++) { LUTParameter param = new LUTParameter(); param.Name = ob.GetEntryValue <StringEntry>($"name{i}").ToString(); param.Intensity = GetCurve(ob, $"intensity{i}")[0]; LutTable[i] = param; } } } foreach (var lightAreaParam in aamp.RootNode.childParams) { var lightArea = new LightArea(); LightAreas.Add(lightArea); foreach (var ob in lightAreaParam.paramObjects) { if (ob.HashString == "setting") { lightArea.Settings = new LightSettings(ob); } } foreach (var c in lightAreaParam.childParams) { if (c.HashString == "env_obj_ref_array") { foreach (var childObj in c.paramObjects) { lightArea.Lights.Add(new LightEnvObject(childObj)); } } } } Console.WriteLine(); }
public AglLightMap() { LutTable[0] = LUTParameter.Create($"Lambert", new float[] { 0, 0, 0.5f, 0.5f, 0.5f, 0.5f, 1, 1, 0.5f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); LutTable[1] = LUTParameter.Create($"Half-Lambert", new float[] { 0, 0, 0.5f, 0.5f, 0.5f, 0.5f, 1, 1, 0.5f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); LutTable[2] = LUTParameter.Create($"Hemisphere", new float[] { 0, 0, 0.5f, 0.5f, 0.5f, 0.5f, 1, 1, 0.5f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); LutTable[3] = LUTParameter.Create($"Toon1", 18, new float[] { 0, 0, 0.042381f, 0.5f, 0, 0.090593f, 0.567106f, 0.345158f, 0.626382f, 0.582622f, 0.439986f, 0.791862f, 0.593483f, 0.560675f, 1.115393f, 1, 1, 0.042553f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); for (int i = 4; i < 32; i++) { LutTable[i] = LUTParameter.Create($"UserData{i+1}", new float[] { 0, 0, 0.5f, 0.5f, 0.5f, 0.5f, 1, 1, 0.5f, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }); } //Order matters. //Games have a default lmap name list and materials pull from these. string[] lmapNames = new string[] { "diffuse", "diffuse1", "diffuse2", "diffuse_course4", "diffuse_course3", "diffuse_course0", "diffuse3", "diffuse_course2", "diffuse_course1", "diffuse4", }; string[] hemiNames = new string[] { "HemiLight_chara0", "HemiLight_chara1", "HemiLight_chara2", "HemiLight_course4", "HemiLight_course3", "HemiLight_course0", "HemiLight_chara3", "HemiLight_course2", "HemiLight_course1", "HemiLight_chara4", }; for (int i = 0; i < 8; i++) { var area = new LightArea(); area.Settings = new LightSettings(lmapNames[i]); area.Lights.Add(new LightEnvObject("AmbientLight", "", true, true)); area.Lights.Add(new LightEnvObject("DirectionalLight", "MainLight0", true, false)); area.Lights.Add(new LightEnvObject("DirectionalLight", "", true, false)); area.Lights.Add(new LightEnvObject("DirectionalLight", "", true, false)); area.Lights.Add(new LightEnvObject("DirectionalLight", "", true, false)); area.Lights.Add(new LightEnvObject("HemisphereLight", hemiNames[i], true, true)); LightAreas.Add(area); } }