Ejemplo n.º 1
0
        /// <summary>
        /// 使用三色渐变模式生成球谐光数据
        /// </summary>
        /// <param name="sky"></param>
        /// <param name="equator"></param>
        /// <param name="ground"></param>
        /// <returns></returns>
        public static SHData GenSHByTriLight(Color sky, Color equator, Color ground)
        {
            Color       oSkyColor, oEquatorColor, oGroundColor;
            AmbientMode oMode = RenderSettings.ambientMode;

            RenderSettings.ambientMode = AmbientMode.Trilight;
            oSkyColor     = RenderSettings.ambientSkyColor;
            oEquatorColor = RenderSettings.ambientEquatorColor;
            oGroundColor  = RenderSettings.ambientGroundColor;
            RenderSettings.ambientSkyColor     = sky;
            RenderSettings.ambientEquatorColor = equator;
            RenderSettings.ambientGroundColor  = ground;
            DynamicGI.UpdateEnvironment();
            SphericalHarmonicsL2 sh = new SphericalHarmonicsL2();

            LightProbes.GetInterpolatedProbe(Vector3.zero, new Renderer(), out sh);
            SHData retData = CreateInstance <SHData>();

            retData.Init(sh);
            RenderSettings.ambientMode         = oMode;
            RenderSettings.ambientSkyColor     = oSkyColor;
            RenderSettings.ambientEquatorColor = oEquatorColor;
            RenderSettings.ambientGroundColor  = oGroundColor;
            DynamicGI.UpdateEnvironment();

            return(retData);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 通过天空盒方式生成球谐光数据
        /// </summary>
        /// <param name="cubeTex"></param>
        /// <param name="rotate"></param>
        /// <returns></returns>
        public static SHData GenSHBySkyBox(Texture cubeTex, float rotate)
        {
            AmbientMode oMode = RenderSettings.ambientMode;

            RenderSettings.ambientMode = AmbientMode.Skybox;
            Material mSky = new Material(Shader.Find("Skybox/Cubemap"));

            mSky.SetTexture("_Tex", cubeTex);
            mSky.SetFloat("_Rotation", rotate);
            Material oldSky = RenderSettings.skybox;

            RenderSettings.skybox = mSky;
            DynamicGI.UpdateEnvironment();
            SphericalHarmonicsL2 sh = new SphericalHarmonicsL2();

            LightProbes.GetInterpolatedProbe(Vector3.zero, new Renderer(), out sh);
            SHData retData = CreateInstance <SHData>();

            retData.Init(sh);
            RenderSettings.skybox      = oldSky;
            RenderSettings.ambientMode = oMode;
            DynamicGI.UpdateEnvironment();

            DestroyImmediate(mSky);
            return(retData);
        }