Пример #1
0
    public OperationParameters(Camera iCamera, RenderSettings iRenderSettings, bool iMatrixRotationMode)
    {
        cameraOrthographicSize = iCamera.orthographicSize;
        screenSize             = new Vector2Int(Screen.width, Screen.height);

        cameraViewportUnitsInWorldSpace = iCamera.WorldToViewportPoint(Vector3.zero) - iCamera.WorldToViewportPoint(Vector3.one);
        cameraViewportUnits             = iCamera.ViewportToWorldPoint(Vector3.one) - iCamera.ViewportToWorldPoint(Vector3.zero);
        cameraViewportUnitsCeiled       = new Vector2Int(Mathf.CeilToInt(cameraViewportUnits.x), Mathf.CeilToInt(cameraViewportUnits.y));

        bool _highViewMode = PlayerPrefs.GetInt("CamZoomSetting") == 1;

        float _bla = screenSize.x / cameraViewportUnits.x;
        // Override Occlusion detail to match sprite detail if matrix is rotating.
        int _occlusionDetail = iMatrixRotationMode == false ? iRenderSettings.occlusionDetail : 32;

        // Reduce detail if player zoomed out.
        _occlusionDetail = _highViewMode == false ? _occlusionDetail : _occlusionDetail / 2;

        // Make sure detail is even value.
        int _initialSampleDetail = iRenderSettings.occlusionDetail % 2 == 0 ? _occlusionDetail : ++_occlusionDetail;

        occlusionPPRTParameter     = new PixelPerfectRTParameter(cameraViewportUnitsCeiled + iRenderSettings.occlusionMaskSizeAdd, _initialSampleDetail);
        fovPPRTParameter           = new PixelPerfectRTParameter(occlusionPPRTParameter.units, _initialSampleDetail);
        lightPPRTParameter         = new PixelPerfectRTParameter(cameraViewportUnitsCeiled, _initialSampleDetail * (int)iRenderSettings.lightResample);
        obstacleLightPPRTParameter = new PixelPerfectRTParameter(lightPPRTParameter.units, Mathf.Clamp(_initialSampleDetail, 2, int.MaxValue));

        pixelsPerUnit = _occlusionDetail;
    }
Пример #2
0
    public void Update(PixelPerfectRTParameter iPprtParameter)
    {
        if (mPPRTParameter == iPprtParameter)
        {
            return;
        }

        mPPRTParameter = iPprtParameter;

        mRenderTexture?.Release();
        mRenderTexture = CreateRenderTexture(iPprtParameter);
    }
Пример #3
0
    private static RenderTexture CreateRenderTexture(PixelPerfectRTParameter iPprtParameter)
    {
        var _newRenderTexture = new RenderTexture(iPprtParameter.resolution.x, iPprtParameter.resolution.y, 0, RenderTextureFormat.Default);

        _newRenderTexture.name             = "Dynamic PPRenderTexture";
        _newRenderTexture.autoGenerateMips = false;
        _newRenderTexture.useMipMap        = false;
        _newRenderTexture.antiAliasing     = 1;
        _newRenderTexture.filterMode       = FilterMode.Point;
        _newRenderTexture.useDynamicScale  = true;

        return(_newRenderTexture);
    }
Пример #4
0
    public PixelPerfectRT Render(
        Camera iCameraToMatch,
        PixelPerfectRTParameter iPPRTParameter,
        PixelPerfectRT iOcclusionMask,
        RenderSettings iRenderSettings,
        bool iMatrixRotationMode)
    {
        // Arrange.
        Vector2 _renderPosition;

        if (iMatrixRotationMode == false)
        {
            _renderPosition = iPPRTParameter.GetFilteredRendererPosition(iCameraToMatch.transform.position, mPreviousCameraPosition, mPreviousFilteredPosition);
        }
        else
        {
            // Note: Do not apply PixelPerfect position when matrix is rotating.
            _renderPosition = iCameraToMatch.transform.position;
        }

        mPreviousCameraPosition   = iCameraToMatch.transform.position;
        mPreviousFilteredPosition = _renderPosition;

        mMaskCamera.enabled            = false;
        mMaskCamera.backgroundColor    = Color.black;
        mMaskCamera.transform.position = _renderPosition;
        mMaskCamera.orthographicSize   = iPPRTParameter.orthographicSize;
        mMaskCamera.cullingMask        = iRenderSettings.lightSourceLayers;

        if (mPPRenderTexture == null)
        {
            mPPRenderTexture = new PixelPerfectRT(iPPRTParameter);
            mPPRenderTexture.renderTexture.filterMode = FilterMode.Bilinear;
        }
        else
        {
            mPPRenderTexture.Update(iPPRTParameter);
        }

        // Arrange Occlusion RT
        iOcclusionMask.renderTexture.filterMode = FilterMode.Bilinear;
        Shader.SetGlobalTexture("_FovExtendedMask", iOcclusionMask.renderTexture);

        // Note: We need to override mLightPPRT position for transformation, because new position for mLightPPRT will be set during light rendering.
        Shader.SetGlobalVector("_FovTransformation", iOcclusionMask.GetTransformation(mPPRenderTexture, _renderPosition));

        // Execute.
        mPPRenderTexture.Render(mMaskCamera);

        return(mPPRenderTexture);
    }
Пример #5
0
    public PixelPerfectRT Render(
        Camera iCameraToMatch,
        PixelPerfectRTParameter iPPRTParameter,
        bool iMatrixRotationMode)
    {
        // Arrange.
        Vector2 _renderPosition;

        if (iMatrixRotationMode == false)
        {
            _renderPosition = iPPRTParameter.GetFilteredRendererPosition(iCameraToMatch.transform.position, mPreviousCameraPosition, mPreviousFilteredPosition);
        }
        else
        {
            // Note: Do not apply PixelPerfect position when matrix is rotating.
            _renderPosition = iCameraToMatch.transform.position;
        }

        mPreviousCameraPosition   = iCameraToMatch.transform.position;
        mPreviousFilteredPosition = _renderPosition;

        mMaskCamera.enabled            = false;
        mMaskCamera.backgroundColor    = new Color(0, 0, 0, 0);
        mMaskCamera.transform.position = _renderPosition;
        mMaskCamera.orthographicSize   = iPPRTParameter.orthographicSize;

        if (mPPRenderTexture == null)
        {
            mPPRenderTexture = new PixelPerfectRT(iPPRTParameter);
        }
        else
        {
            mPPRenderTexture.Update(iPPRTParameter);
        }

        // Execute.
        mPPRenderTexture.Render(mMaskCamera);

        return(mPPRenderTexture);
    }
Пример #6
0
 public PixelPerfectRT(PixelPerfectRTParameter iPprtParameter)
 {
     Update(iPprtParameter);
 }