示例#1
0
    static void SetupLitmap(SceneDataLitAsset dstScene,
                            SceneDataLitAsset srcScene,
                            SceneAssetSet srcSceneSet,
                            int startIndex = 0
                            )
    {
        if (dstScene.lightMapData == null || dstScene.lightMapData.Length < 1 ||
            srcScene.lightMapData == null || srcScene.lightMapData.Length < 1
            )
        {
            return;
        }

        var lmDatas = LightmapSettings.lightmaps;

        if (lmDatas.Length < startIndex + srcSceneSet.lightMapData.Length)
        {
            return;
        }
        var datas = LightmapDatas(srcSceneSet);

        for (int i = 0; i < datas.Length; i++)
        {
            lmDatas[startIndex + i] = datas[i];
        }
        LightmapSettings.lightmaps = lmDatas;
    }
示例#2
0
    static bool CloneLitInfo(Transform src, Transform dst, SceneAssetSet assetSet)
    {
        if (src == null || dst == null)
        {
            return(false);
        }

        //set lit
        var srcLits = src.GetComponentsInChildren <Light>();
        var dstlits = dst.GetComponentsInChildren <Light>();

        if (srcLits != null && srcLits.Length > 0 && dstlits != null && dstlits.Length > 0)
        {
            foreach (var slit in srcLits)
            {
                foreach (var dlit in dstlits)
                {
                    if (dlit.cullingMask == slit.cullingMask)
                    {
                        dlit.transform.localPosition = slit.transform.localPosition;
                        dlit.transform.localRotation = slit.transform.localRotation;
                        dlit.color           = slit.color;
                        dlit.intensity       = slit.intensity;
                        dlit.bounceIntensity = slit.bounceIntensity;
                    }
                }
            }
        }

        //set reflection propbe
        if (dst != null && assetSet.reflectInfos != null && assetSet.reflectInfos.Length > 0)
        {
            var refls = dst.GetComponentsInChildren <ReflectionProbe>();
            foreach (var r in refls)
            {
                foreach (var info in assetSet.reflectInfos)
                {
                    if (info.name == r.name)
                    {
                        r.bakedTexture = info.refTex;
                        break;
                    }
                }
            }
        }

        //set postprocess volum
        var srcPV = src.GetComponentInChildren <PostProcessVolume>();
        var dstPV = dst.GetComponentInChildren <PostProcessVolume>();

        if (srcPV != null && dstPV != null)
        {
            dstPV.sharedProfile = srcPV.sharedProfile;
        }

        return(true);
    }
示例#3
0
    public static void SwitchSceneLit(
        SceneDataLitAsset dstScene,
        SceneDataLitAsset srcScene,
        SceneAssetSet srcSceneSet
        )
    {
        if (dstScene == null ||
            srcScene == null ||
            srcSceneSet == null)
        {
            return;
        }

        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        //find node in scene

        var sceneName = GetSceneNameFromAsset(dstScene);
        var sceneRoot = FindSceneRoot(sceneName);

        if (sceneRoot == null || srcSceneSet.sceneRoot == null)
        {
            return;
        }

        //setup litmpa data
        SetupLitmap(dstScene, srcScene, srcSceneSet);

        //Setup Materials
        Transform envRoot = sceneRoot.transform.Find(SceneDataAsset.EnvRootName);

        if (envRoot != null)
        {
            var srcEnvRoot = srcSceneSet.sceneRoot.transform.Find(SceneDataAsset.EnvRootName);
            CloneEnvRootInfo(srcEnvRoot, envRoot);
        }

        //Setup Lit and Shadows
        Transform sunRoot = sceneRoot.transform.Find(SceneDataAsset.SunRootName);

        if (sunRoot != null)
        {
            var srcSunRoot = srcSceneSet.sceneRoot.transform.Find(SceneDataAsset.SunRootName);
            CloneLitInfo(srcSunRoot, sunRoot, srcSceneSet);
        }
        QualitySetting.GraphicQualityConfigManager.Instance.ApplyPostProcessingConfig();

        Shader.SetGlobalFloat("_FogStrengthYStart", srcScene.fogHeight);
        Shader.SetGlobalFloat("_FogStrengthYParam", srcScene.fogTransition);
        Shader.SetGlobalFloat("_windStr", srcScene.windStrength);
        ApplyRenderSetting(srcScene, srcSceneSet);
        if (srcScene.charEnvColor.maxColorComponent > 0f)
        {
            Shader.EnableKeyword(SceneDataAsset.CharEnvLitKeyword);
            Shader.SetGlobalColor(SceneDataAsset.charEnvColorPropId, srcScene.charEnvColor);
        }
        else
        {
            Shader.DisableKeyword(SceneDataAsset.CharEnvLitKeyword);
        }
        sw.Stop();
        Debug.Log("use time:" + sw.ElapsedMilliseconds);
    }