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; }
public void Update(PixelPerfectRTParameter iPprtParameter) { if (mPPRTParameter == iPprtParameter) { return; } mPPRTParameter = iPprtParameter; mRenderTexture?.Release(); mRenderTexture = CreateRenderTexture(iPprtParameter); }
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); }
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); }
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); }
public PixelPerfectRT(PixelPerfectRTParameter iPprtParameter) { Update(iPprtParameter); }