Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
            }
        }