Beispiel #1
0
    public static void RenderLights(DSRenderer dsr)
    {
        foreach(DSLight l in instances) {
            Vector4 c = l.lit.color * l.lit.intensity;
            Vector4 shadow = Vector4.zero;
            shadow.x = l.castShadow ? 1.0f : 0.0f;
            shadow.y = (float)l.shadowSteps;

            l.mat.SetTexture("_NormalBuffer", dsr.rtNormalBuffer);
            l.mat.SetTexture("_PositionBuffer", dsr.rtPositionBuffer);
            l.mat.SetTexture("_ColorBuffer", dsr.rtColorBuffer);
            l.mat.SetTexture("_GlowBuffer", dsr.rtGlowBuffer);
            l.mat.SetVector("_LightColor", c);
            l.mat.SetVector("_ShadowParams", shadow);

            if (l.lit.type == LightType.Point)
            {
                Matrix4x4 trans = Matrix4x4.TRS(l.transform.position, Quaternion.identity, Vector3.one);
                Vector4 range = Vector4.zero;
                range.x = l.lit.range;
                range.y = 1.0f / range.x;
                l.mat.SetVector("_LightPosition", l.transform.position);
                l.mat.SetVector("_LightRange", range);
                l.mat.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, trans);
            }
            else if (l.lit.type == LightType.Directional)
            {
                l.mat.SetVector("_LightDir", l.lit.transform.forward);
                l.mat.SetPass(0);
                DSRenderer.DrawFullscreenQuad();
            }
        }
    }
Beispiel #2
0
    void Render()
    {
        if (!enabled || m_material == null)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        dsr.CopyFramebuffer();
        Graphics.SetRenderTarget(dsr.rtComposite.colorBuffer, dsr.rtNormalBuffer.depthBuffer);
        m_material.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        m_material.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        m_material.SetFloat("g_speed", m_speed);
        m_material.SetFloat("g_refraction", m_refraction);
        m_material.SetFloat("g_reflection_intensity", m_reflection_intensity);
        m_material.SetFloat("g_fresnel", m_fresnel);
        m_material.SetFloat("g_raymarch_step", m_raymarch_step);
        m_material.SetFloat("g_attenuation_by_distance", m_attenuation_by_distance);
        m_material.SetPass(0);

        DSPEWaterEntity.GetInstances().ForEach((e) =>
        {
            Graphics.DrawMeshNow(e.GetMesh(), e.GetMatrix());
        });
        Graphics.SetRenderTarget(dsr.rtComposite);
    }
 protected void ResetDSRenderer()
 {
     if (m_dsr == null) m_dsr = GetComponent<DSRenderer>();
     if (m_dsr == null) m_dsr = GetComponentInParent<DSRenderer>();
     if (m_cam == null) m_cam = GetComponent<Camera>();
     if (m_cam == null) m_cam = GetComponentInParent<Camera>();
 }
Beispiel #4
0
    static public void RenderLights(DSRenderer dsr)
    {
        foreach (DSLight l in instances)
        {
            Vector4 c      = l.lit.color * l.lit.intensity;
            Vector4 shadow = Vector4.zero;
            shadow.x = l.castShadow ? 1.0f : 0.0f;
            shadow.y = (float)l.shadowSteps;

            l.mat.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
            l.mat.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
            l.mat.SetTexture("_ColorBuffer", dsr.rtAlbedoBuffer);
            l.mat.SetTexture("g_glow_buffer", dsr.rtEmissionBuffer);
            l.mat.SetVector("_LightColor", c);
            l.mat.SetVector("_ShadowParams", shadow);

            if (l.lit.type == LightType.Point)
            {
                Matrix4x4 trans = Matrix4x4.TRS(l.transform.position, Quaternion.identity, Vector3.one);
                Vector4   range = Vector4.zero;
                range.x = l.lit.range;
                range.y = 1.0f / range.x;
                l.mat.SetVector("_LightPosition", l.transform.position);
                l.mat.SetVector("_LightRange", range);
                l.mat.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, trans);
            }
            else if (l.lit.type == LightType.Directional)
            {
                l.mat.SetVector("_LightDir", l.lit.transform.forward);
                l.mat.SetPass(0);
                DSRenderer.DrawFullscreenQuad();
            }
        }
    }
Beispiel #5
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        UpdateRenderTargets();

        DSRenderer dsr = GetDSRenderer();

        Graphics.SetRenderTarget(rtNormalCopy);
        GL.Clear(false, true, Color.black);
        matNormalPattern.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        matNormalPattern.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        matNormalPattern.SetPass(0);
        DSRenderer.DrawFullscreenQuad();

        Graphics.SetRenderTarget(dsr.rtNormalBuffer);
        matCopyGBuffer.SetTexture("g_normal_buffer", rtNormalCopy);
        matCopyGBuffer.SetPass(2);
        DSRenderer.DrawFullscreenQuad();

        dsr.SetRenderTargetsGBuffer();
    }
    void OnEnable()
    {
        m_pw = GetComponent <GPUParticleWorld>();
        if (m_camera == null || m_camera.Length == 0)
        {
            m_camera = new Camera[1] {
                Camera.main
            };
        }
        m_tmp_params = new CSTrailParams[1];

        m_max_entities       = m_pw.GetNumMaxParticles() * 2;
        m_buf_trail_params   = new ComputeBuffer(1, CSTrailParams.size);
        m_buf_trail_entities = new ComputeBuffer(m_max_entities, CSTrailEntity.size);
        m_buf_trail_history  = new ComputeBuffer(m_max_entities * m_trail_max_history, CSTrailHistory.size);
        m_buf_trail_vertices = new ComputeBuffer(m_max_entities * m_trail_max_history * 2, CSTrailVertex.size);

        if (m_act_render == null)
        {
            m_act_render = Render;
            foreach (var c in m_camera)
            {
                if (c == null)
                {
                    continue;
                }
                DSRenderer dsr = c.GetComponent <DSRenderer>();
                dsr.AddCallbackTransparent(m_act_render);
            }
        }
    }
Beispiel #7
0
    void UpdateRenderTargets()
    {
        Vector2 reso = GetDSRenderer().GetInternalResolution();

        if (rtRDepth != null && rtRDepth.width != (int)reso.x)
        {
            rtRDepth.Release();
            rtRDepth = null;
        }
        if (rtAndRDepth != null && rtAndRDepth.width != (int)reso.x)
        {
            rtAndRDepth.Release();
            rtAndRDepth = null;
            for (int i = 0; i < rtAndGBuffer.Length; ++i)
            {
                rtAndGBuffer[i].Release();
                rtAndGBuffer[i] = null;
            }
        }

        if (rtRDepth == null || !rtRDepth.IsCreated())
        {
            rtRDepth = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, 32, RenderTextureFormat.RHalf);
        }
        if (DSAnd.instances.Count > 0 && (rtAndRDepth == null || !rtAndRDepth.IsCreated()))
        {
            rtAndRDepth = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, 32, RenderTextureFormat.RHalf);
            for (int i = 0; i < rtAndGBuffer.Length; ++i)
            {
                int depthbits = i == 0 ? 32 : 0;
                rtAndGBuffer[i] = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, depthbits, RenderTextureFormat.ARGBHalf);
                rbAndGBuffer[i] = rtAndGBuffer[i].colorBuffer;
            }
        }
    }
 protected void ResetDSRenderer()
 {
     Transform parent = GetComponent<Transform>().parent;
     if (m_dsr == null) m_dsr = GetComponent<DSRenderer>();
     if (m_dsr == null) m_dsr = parent.GetComponent<DSRenderer>();
     if (m_cam == null) m_cam = GetComponent<Camera>();
     if (m_cam == null) m_cam = parent.GetComponent<Camera>();
 }
Beispiel #9
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }
        UpdateRenderTargets();

        DSRenderer dsr     = GetDSRenderer();
        Vector4    hscreen = new Vector4(m_rt_half[0].width, m_rt_half[0].height, 1.0f / m_rt_half[0].width, 1.0f / m_rt_half[0].height);
        Vector4    qscreen = new Vector4(m_rt_quarter[0].width, m_rt_quarter[0].height, 1.0f / m_rt_quarter[0].width, 1.0f / m_rt_quarter[0].height);

        m_mat_bloom_blur.SetVector("_Screen", hscreen);

        Graphics.SetRenderTarget(m_rt_half[0]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", dsr.rtEmissionBuffer);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_half[1]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_half[0]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_half[0]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_half[1]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_half[1]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_half[0]);
        m_mat_bloom_blur.SetPass(1);
        DSRenderer.DrawFullscreenQuad();

        m_mat_bloom_blur.SetVector("_Screen", qscreen);
        Graphics.SetRenderTarget(m_rt_quarter[0]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", dsr.rtEmissionBuffer);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[1]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_quarter[0]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[0]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_quarter[1]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[1]);
        m_mat_bloom_blur.SetTexture("g_glow_buffer", m_rt_quarter[0]);
        m_mat_bloom_blur.SetPass(1);
        DSRenderer.DrawFullscreenQuad();

        Graphics.SetRenderTarget(dsr.rtComposite);
        m_mat_bloom_combine.SetTexture("g_glow_buffer", dsr.rtEmissionBuffer);
        m_mat_bloom_combine.SetTexture("g_half_glow_buffer", m_rt_half[1]);
        m_mat_bloom_combine.SetTexture("g_quarter_glow_buffer", m_rt_quarter[1]);
        m_mat_bloom_combine.SetFloat("g_intensity", m_intensity);
        m_mat_bloom_combine.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #10
0
    void Render()
    {
        if (!enabled || matRaymarching == null)
        {
            return;
        }

        matRaymarching.SetFloat("_Fovy", fovy);
        matRaymarching.SetFloat("_FixedRadius", fixedRadius);
        matRaymarching.SetFloat("_MinRadius", minRadius);
        matRaymarching.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #11
0
 void UpdateRenderTargets()
 {
     if (m_rt_half[0] == null || !m_rt_half[0].IsCreated())
     {
         for (int i = 0; i < 2; ++i)
         {
             m_rt_half[i]               = DSRenderer.CreateRenderTexture(256, 256, 0, RenderTextureFormat.ARGBHalf);
             m_rt_half[i].filterMode    = FilterMode.Trilinear;
             m_rt_quarter[i]            = DSRenderer.CreateRenderTexture(128, 128, 0, RenderTextureFormat.ARGBHalf);
             m_rt_quarter[i].filterMode = FilterMode.Trilinear;
         }
     }
 }
Beispiel #12
0
    void UpdateRenderTargets()
    {
        Vector2 reso = GetDSRenderer().GetInternalResolution();

        if (rtNormalCopy != null && rtNormalCopy.width != (int)reso.x)
        {
            rtNormalCopy.Release();
            rtNormalCopy = null;
        }
        if (rtNormalCopy == null || !rtNormalCopy.IsCreated())
        {
            rtNormalCopy = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, 0, RenderTextureFormat.ARGBHalf);
        }
    }
Beispiel #13
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        matFog.SetTexture("g_position_buffer", GetDSRenderer().rtPositionBuffer);
        matFog.SetVector("_Color", color);
        matFog.SetFloat("_Near", near);
        matFog.SetFloat("_Far", far);
        matFog.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #14
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        dsr.SwapFramebuffer();
        m_material.SetVector("g_range_min", m_range_min);
        m_material.SetVector("g_range_max", m_range_max);
        m_material.SetVector("g_pow", m_pow);
        m_material.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #15
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        dsr.SwapFramebuffer();
        m_material.SetFloat("g_intensity", m_intensity);
        m_material.SetFloat("g_radius", m_radius);
        m_material.SetVector("g_center", m_center);
        m_material.SetVector("g_threshold", m_threshold);
        m_material.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
    void OnEnable()
    {
        s_instance = this;
        DSRenderer dsr = GetComponent <DSRenderer>();

        if (dsr == null)
        {
            dsr = GetComponentInParent <DSRenderer>();
        }
        if (m_depth_prepass == null)
        {
            m_depth_prepass = DepthPrePass;
            m_gbuffer       = GBufferPass;
            dsr.AddCallbackPreGBuffer(m_depth_prepass);
            dsr.AddCallbackPostGBuffer(m_gbuffer, 10);
        }
    }
Beispiel #17
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        dsr.SwapFramebuffer();
        m_material.SetFloat("g_darkness", m_darkness);
        m_material.SetFloat("g_monochrome", m_monochrome);
        m_material.SetFloat("g_scanline", m_scanline);
        m_material.SetFloat("g_scanline_scale", m_scanline_scale);
        m_material.SetVector("g_color_shearing", m_color_shearing);
        m_material.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #18
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        matGlowNormal.SetVector("_BaseColor", baseColor);
        matGlowNormal.SetFloat("g_intensity", intensity);
        matGlowNormal.SetFloat("_Threshold", threshold);
        matGlowNormal.SetFloat("_Edge", edge);
        matGlowNormal.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        matGlowNormal.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        matGlowNormal.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #19
0
 protected void ResetDSRenderer()
 {
     if (m_dsr == null)
     {
         m_dsr = GetComponent <DSRenderer>();
     }
     if (m_dsr == null)
     {
         m_dsr = GetComponentInParent <DSRenderer>();
     }
     if (m_cam == null)
     {
         m_cam = GetComponent <Camera>();
     }
     if (m_cam == null)
     {
         m_cam = GetComponentInParent <Camera>();
     }
 }
Beispiel #20
0
    void Render()
    {
        if (!enabled || m_material == null)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        m_material.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        m_material.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        m_material.SetFloat("g_speed", m_speed);
        m_material.SetFloat("g_intensity", m_intensity);
        m_material.SetPass(0);

        DSPECausticsEntity.GetInstances().ForEach((e) => {
            Graphics.DrawMeshNow(e.GetMesh(), e.GetMatrix());
        });
    }
    public override void OnEnable()
    {
        base.OnEnable();

        if (m_act_depth_prepass == null)
        {
            m_act_depth_prepass = DepthPrePass;
            m_act_render        = Render;
            foreach (var c in m_camera)
            {
                if (c == null)
                {
                    continue;
                }
                DSRenderer dsr = c.GetComponent <DSRenderer>();
                dsr.AddCallbackPreGBuffer(m_act_depth_prepass);
                dsr.AddCallbackPostGBuffer(m_act_render);
            }
        }
    }
Beispiel #22
0
    void UpdateRenderTargets()
    {
        Vector2 reso = GetDSRenderer().GetInternalResolution() * resolution_scale;

        if (rtTemp[0] != null && rtTemp[0].width != (int)reso.x)
        {
            for (int i = 0; i < rtTemp.Length; ++i)
            {
                rtTemp[i].Release();
                rtTemp[i] = null;
            }
        }
        if (rtTemp[0] == null || !rtTemp[0].IsCreated())
        {
            for (int i = 0; i < rtTemp.Length; ++i)
            {
                rtTemp[i]            = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, 0, RenderTextureFormat.ARGBHalf);
                rtTemp[i].filterMode = FilterMode.Bilinear;
            }
        }
    }
Beispiel #23
0
    protected void ResetDSRenderer()
    {
        Transform parent = GetComponent <Transform>().parent;

        if (m_dsr == null)
        {
            m_dsr = GetComponent <DSRenderer>();
        }
        if (m_dsr == null)
        {
            m_dsr = parent.GetComponent <DSRenderer>();
        }
        if (m_cam == null)
        {
            m_cam = GetComponent <Camera>();
        }
        if (m_cam == null)
        {
            m_cam = parent.GetComponent <Camera>();
        }
    }
Beispiel #24
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }
        UpdateRenderTargets();

        DSRenderer dsr = GetDSRenderer();

        Graphics.SetRenderTarget(m_rt_temp[0]);
        //GL.Clear(false, true, Color.black);
        m_mat_reflection.SetFloat("g_intensity", m_intensity);
        m_mat_reflection.SetFloat("_RayMarchDistance", m_raymarch_distance);
        m_mat_reflection.SetFloat("_RayDiffusion", m_ray_diffusion);
        m_mat_reflection.SetFloat("_FalloffDistance", m_falloff_distance);
        m_mat_reflection.SetFloat("_MaxAccumulation", m_max_accumulation);

        m_mat_reflection.SetTexture("g_frame_buffer", dsr.rtComposite);
        m_mat_reflection.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        m_mat_reflection.SetTexture("g_prev_position_buffer", dsr.rtPrevPositionBuffer);
        m_mat_reflection.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        m_mat_reflection.SetTexture("_PrevResult", m_rt_temp[1]);
        m_mat_reflection.SetMatrix("_ViewProjInv", dsr.viewProjInv);
        m_mat_reflection.SetMatrix("_PrevViewProj", dsr.prevViewProj);
        m_mat_reflection.SetMatrix("_PrevViewProjInv", dsr.prevViewProjInv);
        m_mat_reflection.SetPass((int)m_algorithm);
        DSRenderer.DrawFullscreenQuad();

        m_rt_temp[0].filterMode = FilterMode.Trilinear;
        Graphics.SetRenderTarget(dsr.rtComposite);
        m_mate_combine.SetTexture("_MainTex", m_rt_temp[0]);
        m_mate_combine.SetPass(2);
        DSRenderer.DrawFullscreenQuad();
        m_rt_temp[0].filterMode = FilterMode.Point;

        DSRenderer.Swap(ref m_rt_temp[0], ref m_rt_temp[1]);
    }
Beispiel #25
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        UpdateRenderTargets();

        DSRenderer dsr = GetDSRenderer();

        Graphics.SetRenderTarget(rtTemp[1]);
        matFill.SetVector("_Color", new Vector4(0.0f, 0.0f, 0.0f, 0.02f));
        matFill.SetTexture("g_position_buffer1", dsr.rtPositionBuffer);
        matFill.SetTexture("g_position_buffer2", dsr.rtPrevPositionBuffer);
        matFill.SetPass(1);
        DSRenderer.DrawFullscreenQuad();

        Graphics.SetRenderTarget(rtTemp[0]);
        matSurfaceLight.SetFloat("g_intensity", intensity);
        matSurfaceLight.SetFloat("_RayAdvance", rayAdvance);
        matSurfaceLight.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        matSurfaceLight.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        matSurfaceLight.SetTexture("_ColorBuffer", dsr.rtAlbedoBuffer);
        matSurfaceLight.SetTexture("g_glow_buffer", dsr.rtEmissionBuffer);
        matSurfaceLight.SetTexture("_PrevResult", rtTemp[1]);
        matSurfaceLight.SetPass(0);
        DSRenderer.DrawFullscreenQuad();

        rtTemp[0].filterMode = FilterMode.Trilinear;
        Graphics.SetRenderTarget(dsr.rtComposite);
        matCombine.SetTexture("_MainTex", rtTemp[0]);
        matCombine.SetPass(2);
        DSRenderer.DrawFullscreenQuad();
        rtTemp[0].filterMode = FilterMode.Point;

        Swap(ref rtTemp[0], ref rtTemp[1]);
    }
Beispiel #26
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        rbBuffers[0] = dsr.rtEmissionBuffer.colorBuffer;
        rbBuffers[1] = dsr.rtAlbedoBuffer.colorBuffer;

        Graphics.SetRenderTarget(rbBuffers, dsr.rtNormalBuffer.depthBuffer);
        matGlowLine.SetTexture("g_position_buffer", dsr.rtPositionBuffer);
        matGlowLine.SetTexture("g_normal_buffer", dsr.rtNormalBuffer);
        matGlowLine.SetFloat("g_intensity", intensity);
        matGlowLine.SetVector("_BaseColor", baseColor);
        matGlowLine.SetInt("_GridPattern", (int)gridPattern);
        matGlowLine.SetInt("_SpreadPattern", (int)spreadPattern);
        matGlowLine.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(dsr.rtComposite);
    }
Beispiel #27
0
    void UpdateRenderTargets()
    {
        Vector2 reso = GetDSRenderer().GetInternalResolution() * m_resolution_scale;

        if (m_rt_temp[0] != null && m_rt_temp[0].width != (int)reso.x)
        {
            for (int i = 0; i < m_rt_temp.Length; ++i)
            {
                m_rt_temp[i].Release();
                m_rt_temp[i] = null;
            }
        }
        if (m_rt_temp[0] == null || !m_rt_temp[0].IsCreated())
        {
            for (int i = 0; i < m_rt_temp.Length; ++i)
            {
                m_rt_temp[i]            = DSRenderer.CreateRenderTexture((int)reso.x, (int)reso.y, 0, RenderTextureFormat.ARGBHalf);
                m_rt_temp[i].filterMode = FilterMode.Point;
                Graphics.SetRenderTarget(m_rt_temp[i]);
                GL.Clear(false, true, Color.black);
            }
        }
    }
Beispiel #28
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }
        UpdateRenderTargets();

        DSRenderer dsr     = GetDSRenderer();
        Vector4    hscreen = new Vector4(m_rt_half[0].width, m_rt_half[0].height, 1.0f / m_rt_half[0].width, 1.0f / m_rt_half[0].height);
        Vector4    qscreen = new Vector4(m_rt_quarter[0].width, m_rt_quarter[0].height, 1.0f / m_rt_quarter[0].width, 1.0f / m_rt_quarter[0].height);

        m_mat_bloom_blur.SetVector("_Screen", hscreen);

        Graphics.SetRenderTarget(m_rt_half[0]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", dsr.rtComposite);
        m_mat_bloom_blur.SetVector("g_threshold", m_threshold);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();

        Graphics.SetRenderTarget(m_rt_half[1]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_half[0]);
        m_mat_bloom_blur.SetVector("g_threshold", Vector3.zero);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_half[0]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_half[1]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_half[1]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_half[0]);
        m_mat_bloom_blur.SetPass(1);
        DSRenderer.DrawFullscreenQuad();

        m_mat_bloom_blur.SetVector("_Screen", qscreen);
        Graphics.SetRenderTarget(m_rt_quarter[0]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", dsr.rtComposite);
        m_mat_bloom_blur.SetVector("g_threshold", m_threshold);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[1]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_quarter[0]);
        m_mat_bloom_blur.SetVector("g_threshold", Vector3.zero);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[0]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_quarter[1]);
        m_mat_bloom_blur.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
        Graphics.SetRenderTarget(m_rt_quarter[1]);
        m_mat_bloom_blur.SetTexture("g_frame_buffer", m_rt_quarter[0]);
        m_mat_bloom_blur.SetPass(1);
        DSRenderer.DrawFullscreenQuad();

        dsr.SwapFramebuffer();
        m_mat_bloom_combine.SetTexture("g_half_frame_buffer", m_rt_half[1]);
        m_mat_bloom_combine.SetTexture("g_quarter_frame_buffer", m_rt_quarter[1]);
        m_mat_bloom_combine.SetVector("g_intensity", m_intensity);
        m_mat_bloom_combine.SetPass(0);
        DSRenderer.DrawFullscreenQuad();
    }
Beispiel #29
0
    void Render()
    {
        if (!enabled)
        {
            return;
        }

        DSRenderer dsr = GetDSRenderer();

        // if there is no subtract or and object, just create g-buffer
        if (DSSubtract.instances.Count == 0 && DSAnd.instances.Count == 0)
        {
            foreach (DSLogicOpReceiver l in DSLogicOpReceiver.instances)
            {
                l.matGBuffer.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }
            return;
        }

        UpdateRenderTargets();

        // and
        if (DSAnd.instances.Count > 0)
        {
            Graphics.SetRenderTarget(rtAndRDepth);
            GL.Clear(true, true, Color.black, 0.0f);
            foreach (DSAnd l in DSAnd.instances)
            {
                l.matReverseDepth.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }

            Graphics.SetRenderTarget(rbAndGBuffer, rtAndNormalBuffer.depthBuffer);
            dsr.matGBufferClear.SetPass(0);
            DSRenderer.DrawFullscreenQuad();
            foreach (DSAnd l in DSAnd.instances)
            {
                l.matGBuffer.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }
            dsr.SetRenderTargetsGBuffer();
        }

        // create g-buffer
        if (DSAnd.instances.Count > 0)
        {
            Graphics.SetRenderTarget(rtRDepth);
            GL.Clear(true, true, Color.black, 0.0f);
            foreach (DSLogicOpReceiver l in DSLogicOpReceiver.instances)
            {
                Graphics.SetRenderTarget(rtRDepth);
                l.matReverseDepth.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);

                dsr.SetRenderTargetsGBuffer();
                l.matGBuffer.SetInt("_EnableLogicOp", 1);
                l.matGBuffer.SetTexture("_RDepthBuffer", rtRDepth);
                l.matGBuffer.SetTexture("_AndRDepthBuffer", rtAndRDepth);
                l.matGBuffer.SetTexture("_AndNormalBuffer", rtAndNormalBuffer);
                l.matGBuffer.SetTexture("_AndPositionBuffer", rtAndPositionBuffer);
                l.matGBuffer.SetTexture("_AndColorBuffer", rtAndColorBuffer);
                l.matGBuffer.SetTexture("_AndGlowBuffer", rtAndGlowBuffer);
                l.matGBuffer.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);

                Graphics.SetRenderTarget(rtRDepth);
                l.matDepthClear.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }
            dsr.SetRenderTargetsGBuffer();
        }
        else
        {
            foreach (DSLogicOpReceiver l in DSLogicOpReceiver.instances)
            {
                l.matGBuffer.SetInt("_EnableLogicOp", 0);
                l.matGBuffer.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }
        }

        // create depth buffer with reversed meshes
        {
            Graphics.SetRenderTarget(rtRDepth);
            GL.Clear(true, true, Color.black, 0.0f);
            foreach (DSLogicOpReceiver l in DSLogicOpReceiver.instances)
            {
                l.matReverseDepth.SetPass(0);
                Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            }
            dsr.SetRenderTargetsGBuffer();
        }

        // subtraction
        foreach (DSSubtract l in DSSubtract.instances)
        {
            l.matStencilWrite.SetPass(0);
            Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            l.matSubtractor.SetTexture("_Depth", rtRDepth);
            l.matSubtractor.SetPass(0);
            Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
            l.matStencilClear.SetPass(0);
            Graphics.DrawMeshNow(l.mesh, l.trans.localToWorldMatrix);
        }
    }
Beispiel #30
0
 void Start()
 {
     dsr = GetComponent <DSRenderer>();
     dsr.AddCallbackPostGBuffer(() => { Render(); }, 100);
 }
 void Start()
 {
     dsr = GetComponent<DSRenderer>();
     dsr.AddCallbackPostGBuffer(() => { Render(); }, 100);
 }