Exemplo n.º 1
0
 public void AddRequestToPendingBlitFromCache(HDShadowRequest request)
 {
     if (request.isMixedCached)
     {
         m_MixedRequestsPendingBlits.Add(request);
     }
 }
        internal void UpdateShadowRequest(int index, HDShadowRequest shadowRequest)
        {
            if (index >= m_ShadowRequestCount)
            {
                return;
            }

            m_ShadowRequests[index] = shadowRequest;

            switch (shadowRequest.shadowMapType)
            {
            case ShadowMapType.PunctualAtlas:
            {
                m_Atlas.AddShadowRequest(shadowRequest);
                break;
            }

            case ShadowMapType.CascadedDirectional:
            {
                m_CascadeAtlas.AddShadowRequest(shadowRequest);
                break;
            }

            case ShadowMapType.AreaLightAtlas:
            {
                m_AreaLightShadowAtlas.AddShadowRequest(shadowRequest);
                break;
            }
            }
            ;
        }
Exemplo n.º 3
0
        internal void UpdateShadowRequest(int index, HDShadowRequest shadowRequest, ShadowMapUpdateType updateType)
        {
            if (index >= m_ShadowRequestCount)
            {
                return;
            }

            m_ShadowRequests[index] = shadowRequest;

            bool addToCached = updateType == ShadowMapUpdateType.Cached || updateType == ShadowMapUpdateType.Mixed;
            bool addDynamic  = updateType == ShadowMapUpdateType.Dynamic || updateType == ShadowMapUpdateType.Mixed;

            switch (shadowRequest.shadowMapType)
            {
            case ShadowMapType.PunctualAtlas:
            {
                if (addToCached)
                {
                    cachedShadowManager.punctualShadowAtlas.AddShadowRequest(shadowRequest);
                }
                if (addDynamic)
                {
                    m_Atlas.AddShadowRequest(shadowRequest);
                    if (updateType == ShadowMapUpdateType.Mixed)
                    {
                        m_Atlas.AddRequestToPendingBlitFromCache(shadowRequest);
                    }
                }

                break;
            }

            case ShadowMapType.CascadedDirectional:
            {
                m_CascadeAtlas.AddShadowRequest(shadowRequest);
                break;
            }

            case ShadowMapType.AreaLightAtlas:
            {
                if (addToCached)
                {
                    cachedShadowManager.areaShadowAtlas.AddShadowRequest(shadowRequest);
                }
                if (addDynamic)
                {
                    m_AreaLightShadowAtlas.AddShadowRequest(shadowRequest);
                    if (updateType == ShadowMapUpdateType.Mixed)
                    {
                        m_AreaLightShadowAtlas.AddRequestToPendingBlitFromCache(shadowRequest);
                    }
                }

                break;
            }
            }
            ;
        }
Exemplo n.º 4
0
        internal void UpdateShadowRequest(int index, HDShadowRequest shadowRequest, bool isCached = false)
        {
            if (index >= m_ShadowRequestCount)
            {
                return;
            }

            m_ShadowRequests[index] = shadowRequest;

            switch (shadowRequest.shadowMapType)
            {
            case ShadowMapType.PunctualAtlas:
            {
                if (isCached)
                {
                    cachedShadowManager.punctualShadowAtlas.AddShadowRequest(shadowRequest);
                }
                else
                {
                    m_Atlas.AddShadowRequest(shadowRequest);
                }

                break;
            }

            case ShadowMapType.CascadedDirectional:
            {
                m_CascadeAtlas.AddShadowRequest(shadowRequest);
                break;
            }

            case ShadowMapType.AreaLightAtlas:
            {
                if (isCached)
                {
                    cachedShadowManager.areaShadowAtlas.AddShadowRequest(shadowRequest);
                }
                else
                {
                    m_AreaLightShadowAtlas.AddShadowRequest(shadowRequest);
                }

                break;
            }
            }
            ;
        }
Exemplo n.º 5
0
        HDShadowData CreateShadowData(HDShadowRequest shadowRequest, HDShadowAtlas atlas)
        {
            HDShadowData data = new HDShadowData();

            var devProj = shadowRequest.deviceProjection;
            var view    = shadowRequest.view;

            data.proj                  = new Vector4(devProj.m00, devProj.m11, devProj.m22, devProj.m23);
            data.pos                   = shadowRequest.position;
            data.rot0                  = new Vector3(view.m00, view.m01, view.m02);
            data.rot1                  = new Vector3(view.m10, view.m11, view.m12);
            data.rot2                  = new Vector3(view.m20, view.m21, view.m22);
            data.shadowToWorld         = shadowRequest.shadowToWorld;
            data.cacheTranslationDelta = new Vector3(0.0f, 0.0f, 0.0f);

            var viewport = shadowRequest.isInCachedAtlas ? shadowRequest.cachedAtlasViewport : shadowRequest.dynamicAtlasViewport;

            // Compute the scale and offset (between 0 and 1) for the atlas coordinates
            float rWidth  = 1.0f / atlas.width;
            float rHeight = 1.0f / atlas.height;

            data.atlasOffset = Vector2.Scale(new Vector2(rWidth, rHeight), new Vector2(viewport.x, viewport.y));

            data.shadowMapSize = new Vector4(viewport.width, viewport.height, 1.0f / viewport.width, 1.0f / viewport.height);

            data.normalBias     = shadowRequest.normalBias;
            data.worldTexelSize = shadowRequest.worldTexelSize;

            data.shadowFilterParams0.x = shadowRequest.shadowSoftness;
            data.shadowFilterParams0.y = HDShadowUtils.Asfloat(shadowRequest.blockerSampleCount);
            data.shadowFilterParams0.z = HDShadowUtils.Asfloat(shadowRequest.filterSampleCount);
            data.shadowFilterParams0.w = shadowRequest.minFilterSize;

            data.zBufferParam = shadowRequest.zBufferParam;
            if (atlas.HasBlurredEVSM())
            {
                data.shadowFilterParams0 = shadowRequest.evsmParams;
            }

            data.isInCachedAtlas = shadowRequest.isInCachedAtlas ? 1.0f : 0.0f;

            return(data);
        }
Exemplo n.º 6
0
 internal void AddShadowRequest(HDShadowRequest shadowRequest)
 {
     m_ShadowRequests.Add(shadowRequest);
 }