Ejemplo n.º 1
0
    unsafe public void ExportQuanLMData()
    {
        List <OutputLightMapData> out_lm_data_list = new List <OutputLightMapData>();

        for (int i = 0; i < ucBakingData.indirected_lighting_baking_data.Count; ++i)
        {
            OutputLightMapData data = new OutputLightMapData();
            data.name   = ucBakingData.indirected_lighting_baking_data[i].name;
            data.width  = ucBakingData.indirected_lighting_baking_data[i].width;
            data.height = ucBakingData.indirected_lighting_baking_data[i].height;

            data.outdata = ucBakingData.indirected_lighting_baking_data[i].outdata;
            for (int j = 0; j < data.outdata.Length; ++j)
            {
                data.outdata[j].IncidentLighting[0] += ucBakingData.direct_lighting_baking_data[i].outdata[j].IncidentLighting[0];
                data.outdata[j].IncidentLighting[1] += ucBakingData.direct_lighting_baking_data[i].outdata[j].IncidentLighting[1];
                data.outdata[j].IncidentLighting[2] += ucBakingData.direct_lighting_baking_data[i].outdata[j].IncidentLighting[2];

                //Add SH
                data.outdata[j].SHVector      = data.outdata[j].SHVector + ucBakingData.direct_lighting_baking_data[i].outdata[j].SHVector;
                data.outdata[j].SHCorrection += ucBakingData.direct_lighting_baking_data[i].outdata[j].SHCorrection;
                //data.outdata[j].SHVector.r.v[0] = 1.0f;
                //data.outdata[j].SHCorrection = 1.0f;
            }

            //out_lm_data_list.Add(data);
            out_lm_data_list.Add(ucBakingData.direct_lighting_baking_data[i]);
        }

        //Debug.LogFormat("Output list = {0}", out_lm_data_list.Count);
        foreach (OutputLightMapData out_data in out_lm_data_list)
        {
            QuantifierResult(out_data.outdata, out_data.width, out_data.height, out_data.name);
        }
    }
Ejemplo n.º 2
0
    unsafe public void CalculateAllBakedLighting()
    {
        List <LightmassBakerData> datas = ucExportMesh.GetBakerData();

        //ucNative.Invoke_Void<PreallocRadiositySurfaceCachePointers>(nativeLibraryPtr, datas.Count);

        List <OutputLightMapData> out_lm_data_list = new List <OutputLightMapData>();

        //int i = 0;
        //int texel_num = 0;
        foreach (LightmassBakerData obj in datas)
        {
            int texel_num = obj.size_x * obj.size_y;


            float[] texel_radius = new float[texel_num];
            for (int i = 0; i < texel_num; ++i)
            {
                texel_radius[i] = 0.1f;
            }

            GatheredLightSample[] tmp_out_lm_data = new GatheredLightSample[texel_num];

            object[] param = new object[]
            {
                texel_num,
                obj.size_x,
                obj.size_y,
                32,
                obj.world_pos_map,
                obj.world_normal_map,
                texel_radius,
                tmp_out_lm_data
            };
            ucNative.Invoke_Void <CalculateAllLightingAndShadow>(nativeLibraryPtr, param);

            OutputLightMapData lm_data = new OutputLightMapData();
            lm_data.name    = obj.name;
            lm_data.width   = obj.size_x;
            lm_data.height  = obj.size_y;
            lm_data.outdata = tmp_out_lm_data;

            out_lm_data_list.Add(lm_data);
        }

        //ucNative.Invoke_Void<SetTotalTexelsForProgressReport>(nativeLibraryPtr, texel_num);

        Debug.LogFormat("Output list = {0}", out_lm_data_list.Count);

        //ucBakingData.direct_lighting_baking_data = out_lm_data_list;

        foreach (OutputLightMapData out_data in out_lm_data_list)
        {
            QuantifierResult(out_data.outdata, out_data.width, out_data.height, out_data.name);
        }
    }