Exemplo n.º 1
0
    //插值辅助函数
    private Color LerpColor2(ShaderSetter.SetterUnit setterUnit, int v, float startTime, float endTime, float rate)
    {
        if (setterUnit.ColorSelectorTex == null)
        {
            return(Color.black);
        }
        //int timePixel = (int)(42.22f * TimeHour);
        float scale          = 42.22f; //每小时占用42.22像素;
        int   timePixelStart = (int)(startTime * scale);
        int   timePixelEnd   = (int)(endTime * scale);

        Color color1    = setterUnit.ColorSelectorTex.GetPixel(timePixelStart, v);
        Color color2    = setterUnit.ColorSelectorTex.GetPixel(timePixelEnd, v);
        Color lerpColor = Color.Lerp(color1, color2, rate);

        return(lerpColor);
    }
Exemplo n.º 2
0
    //同一区域,不同时间段的颜色和参数插值(added by thjie 2019-01-16)
    public void WeatherColorLerp(int setterIndex, float start, float end, float rate)
    {
        if (setterIndex < 0 || setterIndex >= Setters.Length)
        {
            return;
        }
        ShaderSetter.SetterUnit setterUnit = Setters[setterIndex];
        if (setterUnit == null)
        {
            return;
        }

        //颜色变化
        if (IsColorSetter)
        {
            mCloudyColor = Color.Lerp(Color.white, LerpColor2(setterUnit, 362, start, end, rate), RainForce * 1.667f);
            mTmpColor    = LerpColor2(setterUnit, 533, start, end, rate);
            Shader.SetGlobalColor("_LightColorC", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 576, start, end, rate);
            Shader.SetGlobalColor("_ShadowColor", mTmpColor * mCloudyColor);
            RenderSettings.ambientLight = mTmpColor * mCloudyColor;
            mTmpColor = LerpColor2(setterUnit, 619, start, end, rate);
            Shader.SetGlobalColor("_DFogColorFar", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 662, start, end, rate);
            Shader.SetGlobalColor("_DFogColorNear", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 705, start, end, rate);
            Shader.SetGlobalColor("_VFogColorLow", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 748, start, end, rate);
            Shader.SetGlobalColor("_VFogColorHigh", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 791, start, end, rate);
            Shader.SetGlobalColor("_CloudColor", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 834, start, end, rate);
            Shader.SetGlobalColor("_BodyColor", mTmpColor * mCloudyColor);
            Shader.SetGlobalColor("_RimColor", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 877, start, end, rate);
            Shader.SetGlobalColor("_ShadowColor1", mTmpColor * mCloudyColor);
            mTmpColor = LerpColor2(setterUnit, 920, start, end, rate);
            Shader.SetGlobalColor("_ShadowColor2", mTmpColor * mCloudyColor);
            if (SkyBoxMat != null)
            {
                mTmpColor = LerpColor2(setterUnit, 963, start, end, rate);
                SkyBoxMat.SetColor("_SkyLowColor", mTmpColor * mCloudyColor);
                mTmpColor = LerpColor2(setterUnit, 1006, start, end, rate);
                SkyBoxMat.SetColor("_SkyHighColor", mTmpColor * mCloudyColor);
            }

            Shader.SetGlobalFloat("_Rotationbbb", RotationSun);
            Shader.SetGlobalFloat("_RotationeeeX", RotationMoonX);
            Shader.SetGlobalFloat("_RotationeeeY", RotationMoonY);

            mTmpColor = IsUiChara ? UiCharaLight : LerpColor2(setterUnit, 491, start, end, rate) * mCloudyColor;
            Shader.SetGlobalColor("_LightColorMapping", mTmpColor);
            mTmpColor = IsUiChara ? UiCharaDark : LerpColor2(setterUnit, 448, start, end, rate) * mCloudyColor;
            Shader.SetGlobalColor("_DarkColorMapping", mTmpColor);
            mTmpColor = IsUiChara ? UiCharaSkinDark : LerpColor2(setterUnit, 405, start, end, rate) * mCloudyColor;
            Shader.SetGlobalColor("_SkinDarkColorMapping", mTmpColor);
        }


        //公用变量
        if (BRDFTex != null)
        {
            Shader.SetGlobalTexture("_BRDFTex", BRDFTex);
        }
        if (NoiseTex != null)
        {
            Shader.SetGlobalTexture("_NoiseTex", NoiseTex);
        }
        //Shader.SetGlobalFloat("_Shininess", Shininess);

        if (CharaLightModelDiff != null)
        {
            Shader.SetGlobalTexture("_MatCap", CharaLightModelDiff);
        }

        /*if (CharaLightModelSpec != null)
         *  Shader.SetGlobalTexture("_MatCapSpec", CharaLightModelSpec);*/

        Shader.SetGlobalFloat("_StartY", FogStartY);
        Shader.SetGlobalFloat("_Wetness", Wetness);
        Shader.SetGlobalFloat("_RainForce", RainForce);
        Shader.SetGlobalFloat("_EndY", FogHeight);
#if UNITY_IOS
        Shader.SetGlobalFloat("_FinalSaturation", Saturation);
#else
        Shader.SetGlobalFloat("_FinalSaturation", Saturation);
#endif
        Shader.SetGlobalFloat("_FarFogDistance", FarFogDistance);

        if (Player != null)
        {
            Shader.SetGlobalVector("_PlayerPos", Player.position);
        }
        if (CloudNoiseTex != null)
        {
            Shader.SetGlobalTexture("_CloudNoiseTex", CloudNoiseTex);
        }
    }