예제 #1
0
        public DeferredShadingUtils()
        {
            AssetBundle AB = AssetBundle.LoadFromFile(Application.dataPath + "/../plugins/PHIBL/deferredskin");

            if (AB == null)
            {
                Console.WriteLine("DeferredShadingUtil: \"deferredskin\" file missing!");
            }
            DiffuseScatteringOnRing = AB.LoadAsset <Texture2D>("DiffuseScatteringOnRing");
            DefaultSpotCookie       = AB.LoadAsset <Texture2D>("DefaultSpotCookie");
            AlloyBlurNormal         = AB.LoadAsset <Shader>("Assets/Alloy/Scripts/DeferredRendererPlus/Shaders/BlurNormals.shader");
            AlloyTransmissionBlit   = AB.LoadAsset <Shader>("Assets/Alloy/Scripts/DeferredRendererPlus/Shaders/TransmissionBlit.shader");
            GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredReflections, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetCustomShader(BuiltinShaderType.DeferredShading, AB.LoadAsset <Shader>("Assets/Alloy/Shaders/Alloy Deferred Skin.shader"));
            GraphicsSettings.SetCustomShader(BuiltinShaderType.DeferredReflections, AB.LoadAsset <Shader>("Assets/Alloy/Shaders/Alloy Deferred Reflections.shader"));
            GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, AB.LoadAsset <Shader>("Assets/Psychose Interactive/NGSS/Internal-ScreenSpaceShadows.shader"));
            AlloyDeferredSkinShader = AB.LoadAsset <Material>("skin").shader;
            AlloyAlpha = AB.LoadAsset <Material>("nip").shader;
            if (AlloyDeferredSkinShader == null)
            {
                Console.WriteLine("DeferredShadingUtil: Can't find deferred skin shader!");
            }
            AB.Unload(false);
            skinMaterials = new List <Material>();
        }
예제 #2
0
 private void OnApplicationQuit()
 {
     if (this.isGraphicSet)
     {
         this.isGraphicSet = false;
         GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/Internal-ScreenSpaceShadows"));
         GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseBuiltin);
     }
     this.RemoveCommandBuffers();
 }
예제 #3
0
 void SetCustomShader()
 {
     if (depthNormalShader != null)
     {
         GraphicsSettings.SetShaderMode(BuiltinShaderType.DepthNormals, BuiltinShaderMode.UseCustom);
         GraphicsSettings.SetCustomShader(BuiltinShaderType.DepthNormals, depthNormalShader);
     }
     else
     {
         GraphicsSettings.SetShaderMode(BuiltinShaderType.DepthNormals, BuiltinShaderMode.UseBuiltin);
     }
 }
예제 #4
0
 private void Init()
 {
     if (this.isInitialized)
     {
         return;
     }
     if (!this.isGraphicSet)
     {
         GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
         GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/NGSS_Directional"));
         this.isGraphicSet = true;
     }
     this.isInitialized = true;
 }
예제 #5
0
 private void OnDisable()
 {
     this.isInitialized = false;
     if (this.KEEP_NGSS_ONDISABLE)
     {
         return;
     }
     if (this.isGraphicSet)
     {
         this.isGraphicSet = false;
         GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/Internal-ScreenSpaceShadows"));
         GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseBuiltin);
     }
 }
예제 #6
0
    public void Setup()
    {
        _light = GetComponent <Light>();
        if (!_light)
        {
            return;
        }

        resolution = Mathf.ClosestPowerOfTwo(resolution);
        if (customShadowResolution)
        {
            _light.shadowCustomResolution = resolution;
        }
        else
        {
            _light.shadowCustomResolution = 0;
        }

        shader = Shader.Find(shaderName);
        //		if (!Application.isEditor)
        //		{
        //			if (shader)
        //				Debug.LogErrorFormat("Custom Shadow Shader Found: {0} | Supported {1}", shader.name, shader.isSupported);
        //			else
        //				Debug.LogError("Custom Shadow Shader Not Found!!!");
        //		}
        shadowmapPropID = Shader.PropertyToID("_ShadowMap");

        copyShadowBuffer      = new CommandBuffer();
        copyShadowBuffer.name = "PCSS Shadows";

        var buffers = _light.GetCommandBuffers(lightEvent);

        for (int i = 0; i < buffers.Length; i++)
        {
            if (buffers[i].name == "PCSS Shadows")
            {
                _light.RemoveCommandBuffer(lightEvent, buffers[i]);
            }
        }

        _light.AddCommandBuffer(lightEvent, copyShadowBuffer);
        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, shader);
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);

        CreateShadowRenderTexture();
        UpdateShaderValues();
        UpdateCommandBuffer();
    }
예제 #7
0
    public void ResetShadowMode()
    {
        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/Internal-ScreenSpaceShadows"));
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.Disabled);
        _light.shadowCustomResolution = 0;
        DestroyImmediate(shadowRenderTexture);
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseBuiltin);

        if (!_light)
        {
            return;
        }

        _light.RemoveCommandBuffer(LightEvent.AfterShadowMap, copyShadowBuffer);
    }
    void Init()
    {
        if (isInitialized)
        {
            return;
        }

        if (isGraphicSet == false)
        {
            GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/NGSS_Directional"));//Shader.Find can sometimes return null in Player builds (careful).
            DirLight.shadows = LightShadows.Soft;
            isGraphicSet     = true;
        }

        isInitialized = true;
    }
예제 #9
0
    void Init()
    {
        if (isInitialized)
        {
            return;
        }

        if (isGraphicSet == false)
        {
            //QualitySettings.shadowProjection = ShadowProjection.StableFit;
            //QualitySettings.shadowCascades = 4;
            //QualitySettings.shadowCascade4Split = new Vector3(0.1f, 0.275f, 0.5f);
            GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/NGSS_Directional"));//Shader.Find can sometimes return null in Player builds (careful).
            isGraphicSet = true;
        }

        isInitialized = true;
    }
예제 #10
0
    void OnValidate()
    {
        if (enableInverseSquareFalloff)
        {
            GraphicsSettings.SetCustomShader(BuiltinShaderType.DeferredShading, deferredShading);
            GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.UseCustom);

            RegenerateFalloff();
        }
        else
        {
            GraphicsSettings.SetCustomShader(BuiltinShaderType.DeferredShading, Shader.Find("Hidden/Internal-DeferredShading"));
            GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.Disabled);
            GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.UseBuiltin);
        }


        AssetDatabase.Refresh();
    }
예제 #11
0
    private void Init()
    {
        if (this.isInitialized)
        {
            return;
        }
        if (!this.isGraphicSet)
        {
            this.isGraphicSet = true;
            GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/NGSS_Directional"));
        }
        if (!this.PCSS_ENABLED)
        {
            return;
        }
        this.m_Light = base.GetComponent <Light>();
        int num = (QualitySettings.shadowResolution != ShadowResolution.VeryHigh) ? ((QualitySettings.shadowResolution != ShadowResolution.High) ? ((QualitySettings.shadowResolution != ShadowResolution.Medium) ? 512 : 1024) : 2048) : 4096;

        this.m_ShadowmapCopy            = null;
        this.m_ShadowmapCopy            = new RenderTexture(num, num, 0, RenderTextureFormat.RFloat);
        this.m_ShadowmapCopy.filterMode = FilterMode.Bilinear;
        this.m_ShadowmapCopy.useMipMap  = false;
        this.rawShadowDepthCB           = new CommandBuffer
        {
            name = "NGSS Directional PCSS buffer"
        };
        this.rawShadowDepthCB.Clear();
        this.rawShadowDepthCB.SetShadowSamplingMode(BuiltinRenderTextureType.CurrentActive, ShadowSamplingMode.RawDepth);
        this.rawShadowDepthCB.Blit(BuiltinRenderTextureType.CurrentActive, this.m_ShadowmapCopy);
        this.rawShadowDepthCB.SetGlobalTexture("NGSS_DirectionalRawDepth", this.m_ShadowmapCopy);
        foreach (CommandBuffer commandBuffer in this.m_Light.GetCommandBuffers(LightEvent.AfterShadowMap))
        {
            if (commandBuffer.name == this.rawShadowDepthCB.name)
            {
                this.isInitialized = true;
                return;
            }
        }
        this.m_Light.AddCommandBuffer(LightEvent.AfterShadowMap, this.rawShadowDepthCB);
        this.isInitialized = true;
    }
예제 #12
0
    public void Setup()
    {
        _light = GetComponent <Light>();
        if (!_light)
        {
            return;
        }

        resolution = Mathf.ClosestPowerOfTwo(resolution);
        if (customShadowResolution)
        {
            _light.shadowCustomResolution = resolution;
        }
        else
        {
            _light.shadowCustomResolution = 0;
        }

        shader          = Shader.Find(shaderName);
        shadowmapPropID = Shader.PropertyToID("_ShadowMap");

        copyShadowBuffer      = new CommandBuffer();
        copyShadowBuffer.name = "PCSS Shadows";

        var buffers = _light.GetCommandBuffers(lightEvent);

        for (int i = 0; i < buffers.Length; i++)
        {
            if (buffers[i].name == "PCSS Shadows")
            {
                _light.RemoveCommandBuffer(lightEvent, buffers[i]);
            }
        }

        _light.AddCommandBuffer(lightEvent, copyShadowBuffer);
        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, shader);
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);

        CreateShadowRenderTexture();
        UpdateShaderValues();
        UpdateCommandBuffer();
    }
예제 #13
0
    public static int SetShaderMode_s(IntPtr l)
    {
        int result;

        try
        {
            BuiltinShaderType type;
            LuaObject.checkEnum <BuiltinShaderType>(l, 1, out type);
            BuiltinShaderMode mode;
            LuaObject.checkEnum <BuiltinShaderMode>(l, 2, out mode);
            GraphicsSettings.SetShaderMode(type, mode);
            LuaObject.pushValue(l, true);
            result = 1;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
 private void UpdateGraphics()
 {
     if (deferredShading == null)
     {
         deferredShading = Resources.Load <Shader>("Internal-DeferredShading-Dithering");
     }
     if (screenSpaceShadows == null)
     {
         screenSpaceShadows = Resources.Load <Shader>("Internal-ScreenSpaceShadows-Dithering");
     }
     if (noise == null)
     {
         noise = Resources.Load <Texture2D>("NoiseHigh");
     }
     GraphicsSettings.SetShaderMode(DS, ((_point || _spot) && enabled) ? CUSTOM : BUILT_IN);
     GraphicsSettings.SetCustomShader(DS, ((_point || _spot) && enabled) ? deferredShading : null);
     GraphicsSettings.SetShaderMode(SSS, (direction && enabled) ? CUSTOM : BUILT_IN);
     GraphicsSettings.SetCustomShader(SSS, (direction && enabled) ? screenSpaceShadows : null);
     UpdateShaders();
 }
예제 #15
0
    void Init()
    {
        if (isInitialized)
        {
            return;
        }

        if (isGraphicSet == false)
        {
            GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
            GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, Shader.Find("Hidden/NGSS_Directional"));//Shader.Find can sometimes return null in Player builds (careful).
            DirLight.shadows = DirLight.shadows == LightShadows.None ? LightShadows.None : LightShadows.Soft;
            isGraphicSet     = true;
        }

        if (NGSS_NOISE_TEXTURE == null)
        {
            NGSS_NOISE_TEXTURE = Resources.Load <Texture2D>("BlueNoise_R8_8");
        }
        Shader.SetGlobalTexture("_BlueNoiseTextureDir", NGSS_NOISE_TEXTURE);

        isInitialized = true;
    }
예제 #16
0
    public void ResetShadowMode()
    {
        builtinShader = Shader.Find(builtinShaderName);
        //		if (!Application.isEditor)
        //		{
        //			if (builtinShader)
        //				Debug.LogErrorFormat("Built-In Shadow Shader Found: {0} | Supported {1}", builtinShader.name, builtinShader.isSupported);
        //			else
        //				Debug.LogError("Shadow Shader Not Found!!!");
        //		}

        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, builtinShader);
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.Disabled);
        _light.shadowCustomResolution = 0;
        DestroyImmediate(shadowRenderTexture);
        GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseBuiltin);

        if (!_light)
        {
            return;
        }

        _light.RemoveCommandBuffer(LightEvent.AfterShadowMap, copyShadowBuffer);
    }
예제 #17
0
        void SetShadows()
        {
            if (HighLogic.LoadedScene != GameScenes.MAINMENU)
            {
                if (unifiedCameraMode && (mainSettings.d3d11ShadowFix || mainSettings.terrainShadows))
                {
                    QualitySettings.shadowProjection = ShadowProjection.StableFit;                     //way more resistant to jittering
                    GraphicsSettings.SetShaderMode(BuiltinShaderType.ScreenSpaceShadows, BuiltinShaderMode.UseCustom);
                    if ((mainSettings.terrainShadows) && (mainSettings.unifiedCamShadowsDistance > 8000f))
                    {
                        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, ShaderReplacer.Instance.LoadedShaders [("Scatterer/longDistanceScreenSpaceShadows")]);
                        partialUnifiedCameraDepthBuffer = (PartialDepthBuffer)nearCamera.gameObject.AddComponent(typeof(PartialDepthBuffer));
                        partialUnifiedCameraDepthBuffer.Init(nearCamera);
                    }
                    else
                    {
                        GraphicsSettings.SetCustomShader(BuiltinShaderType.ScreenSpaceShadows, ShaderReplacer.Instance.LoadedShaders [("Scatterer/fixedScreenSpaceShadows")]);
                    }
                }

                if (mainSettings.shadowsOnOcean)
                {
                    if (unifiedCameraMode || SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11.0"))
                    {
                        QualitySettings.shadowProjection = ShadowProjection.StableFit;                          //StableFit + splitSpheres is the only thing that works Correctly for unified camera (dx11) ocean shadows
                        //Otherwise we get artifacts near shadow cascade edges
                    }
                    else
                    {
                        QualitySettings.shadowProjection = ShadowProjection.CloseFit;                           //CloseFit without SplitSpheres seems to be the only setting that works for OpenGL for ocean shadows
                        //Seems like I lack the correct variables to determine which shadow path to take
                        //also try without the transparent tag
                    }

                    shadowMapRetriever = (ShadowMapRetrieveCommandBuffer)sunLight.gameObject.AddComponent(typeof(ShadowMapRetrieveCommandBuffer));
                }

                if (mainSettings.terrainShadows)
                {
                    QualitySettings.shadowDistance = unifiedCameraMode ? mainSettings.unifiedCamShadowsDistance : mainSettings.dualCamShadowsDistance;
                    Utils.LogDebug("Set shadow distance: " + QualitySettings.shadowDistance.ToString());
                    Utils.LogDebug("Number of shadow cascades detected " + QualitySettings.shadowCascades.ToString());

                    if (sunLight)
                    {
                        //fixes checkerboard artifacts aka shadow acne
                        float bias       = unifiedCameraMode ? mainSettings.unifiedCamShadowNormalBiasOverride : mainSettings.dualCamShadowNormalBiasOverride;
                        float normalBias = unifiedCameraMode ? mainSettings.unifiedCamShadowBiasOverride : mainSettings.dualCamShadowBiasOverride;

                        if (bias > 0f)
                        {
                            sunLight.shadowBias = bias;
                        }

                        if (normalBias > 0f)
                        {
                            sunLight.shadowNormalBias = normalBias;
                        }

                        int customRes = unifiedCameraMode ? mainSettings.unifiedCamShadowResolutionOverride : mainSettings.dualCamShadowResolutionOverride;
                        if (customRes != 0)
                        {
                            if (Utils.IsPowerOfTwo(customRes))
                            {
                                Utils.LogDebug("Setting shadowmap resolution to: " + customRes.ToString());
                                sunLight.shadowCustomResolution = customRes;
                            }
                            else
                            {
                                Utils.LogError("Selected shadowmap resolution not a power of 2: " + customRes.ToString());
                            }
                        }
                    }

                    //and finally force shadow Casting and receiving on celestial bodies if not already set
                    foreach (CelestialBody _sc in scattererCelestialBodiesManager.CelestialBodies)
                    {
                        if (_sc.pqsController)
                        {
                            _sc.pqsController.meshCastShadows    = true;
                            _sc.pqsController.meshRecieveShadows = true;
                        }
                    }
                }
            }
        }
예제 #18
0
 public void Setup()
 {
     GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.UseCustom);
     GraphicsSettings.SetCustomShader(BuiltinShaderType.DeferredShading, _deferredShader);
     this.enabled = true;
 }
예제 #19
0
 public void UnSetup()
 {
     GraphicsSettings.SetShaderMode(BuiltinShaderType.DeferredShading, BuiltinShaderMode.UseBuiltin);
     this.enabled = false;
 }
예제 #20
0
 void OnEnable()
 {
     GraphicsSettings.SetShaderMode(BuiltinShaderType.DepthNormals, BuiltinShaderMode.UseCustom);
     GraphicsSettings.SetCustomShader(BuiltinShaderType.DepthNormals, customShader);
 }