// Use this for initialization void Start() { awake = false; waking = false; smoke = this.transform.Find("Cloud Effect").GetComponent <ParticleSystem>(); player = Camera.allCameras[0]; speed = 4; panel = GameObject.FindObjectOfType <Canvas>().transform.Find("Panel").gameObject; blur = player.GetComponent <UnityStandardAssets.ImageEffects.CameraMotionBlur>(); overlay = player.GetComponent <UnityStandardAssets.ImageEffects.ScreenOverlay>(); }
private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (!this.CheckResources()) { Graphics.Blit(source, destination); } else { if (this.filterType == CameraMotionBlur.MotionBlurFilter.CameraMotion) { this.StartFrame(); } RenderTextureFormat format = (!SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RGHalf)) ? RenderTextureFormat.ARGBHalf : RenderTextureFormat.RGHalf; RenderTexture temporary = RenderTexture.GetTemporary(CameraMotionBlur.divRoundUp(source.width, this.velocityDownsample), CameraMotionBlur.divRoundUp(source.height, this.velocityDownsample), 0, format); this.maxVelocity = Mathf.Max(2f, this.maxVelocity); float value = this.maxVelocity; bool flag = this.filterType == CameraMotionBlur.MotionBlurFilter.ReconstructionDX11 && this.dx11MotionBlurMaterial == null; int num; int height; if (this.filterType == CameraMotionBlur.MotionBlurFilter.Reconstruction || flag || this.filterType == CameraMotionBlur.MotionBlurFilter.ReconstructionDisc) { this.maxVelocity = Mathf.Min(this.maxVelocity, CameraMotionBlur.MAX_RADIUS); num = CameraMotionBlur.divRoundUp(temporary.width, (int)this.maxVelocity); height = CameraMotionBlur.divRoundUp(temporary.height, (int)this.maxVelocity); value = (float)(temporary.width / num); } else { num = CameraMotionBlur.divRoundUp(temporary.width, (int)this.maxVelocity); height = CameraMotionBlur.divRoundUp(temporary.height, (int)this.maxVelocity); value = (float)(temporary.width / num); } RenderTexture temporary2 = RenderTexture.GetTemporary(num, height, 0, format); RenderTexture temporary3 = RenderTexture.GetTemporary(num, height, 0, format); temporary.filterMode = FilterMode.Point; temporary2.filterMode = FilterMode.Point; temporary3.filterMode = FilterMode.Point; if (this.noiseTexture) { this.noiseTexture.filterMode = FilterMode.Point; } source.wrapMode = TextureWrapMode.Clamp; temporary.wrapMode = TextureWrapMode.Clamp; temporary3.wrapMode = TextureWrapMode.Clamp; temporary2.wrapMode = TextureWrapMode.Clamp; this.CalculateViewProjection(); if (base.gameObject.activeInHierarchy && !this.wasActive) { this.Remember(); } this.wasActive = base.gameObject.activeInHierarchy; Matrix4x4 matrix4x = Matrix4x4.Inverse(this.currentViewProjMat); this.motionBlurMaterial.SetMatrix("_InvViewProj", matrix4x); this.motionBlurMaterial.SetMatrix("_PrevViewProj", this.prevViewProjMat); this.motionBlurMaterial.SetMatrix("_ToPrevViewProjCombined", this.prevViewProjMat * matrix4x); this.motionBlurMaterial.SetFloat("_MaxVelocity", value); this.motionBlurMaterial.SetFloat("_MaxRadiusOrKInPaper", value); this.motionBlurMaterial.SetFloat("_MinVelocity", this.minVelocity); this.motionBlurMaterial.SetFloat("_VelocityScale", this.velocityScale); this.motionBlurMaterial.SetFloat("_Jitter", this.jitter); this.motionBlurMaterial.SetTexture("_NoiseTex", this.noiseTexture); this.motionBlurMaterial.SetTexture("_VelTex", temporary); this.motionBlurMaterial.SetTexture("_NeighbourMaxTex", temporary3); this.motionBlurMaterial.SetTexture("_TileTexDebug", temporary2); if (this.preview) { Matrix4x4 worldToCameraMatrix = this._camera.worldToCameraMatrix; Matrix4x4 identity = Matrix4x4.identity; identity.SetTRS(this.previewScale * 0.3333f, Quaternion.identity, Vector3.one); Matrix4x4 gpuprojectionMatrix = GL.GetGPUProjectionMatrix(this._camera.projectionMatrix, true); this.prevViewProjMat = gpuprojectionMatrix * identity * worldToCameraMatrix; this.motionBlurMaterial.SetMatrix("_PrevViewProj", this.prevViewProjMat); this.motionBlurMaterial.SetMatrix("_ToPrevViewProjCombined", this.prevViewProjMat * matrix4x); } if (this.filterType == CameraMotionBlur.MotionBlurFilter.CameraMotion) { Vector4 zero = Vector4.zero; float num2 = Vector3.Dot(base.transform.up, Vector3.up); Vector3 rhs = this.prevFramePos - base.transform.position; float magnitude = rhs.magnitude; float num3 = Vector3.Angle(base.transform.up, this.prevFrameUp) / this._camera.fieldOfView * ((float)source.width * 0.75f); zero.x = this.rotationScale * num3; num3 = Vector3.Angle(base.transform.forward, this.prevFrameForward) / this._camera.fieldOfView * ((float)source.width * 0.75f); zero.y = this.rotationScale * num2 * num3; num3 = Vector3.Angle(base.transform.forward, this.prevFrameForward) / this._camera.fieldOfView * ((float)source.width * 0.75f); zero.z = this.rotationScale * (1f - num2) * num3; if (magnitude > Mathf.Epsilon && this.movementScale > Mathf.Epsilon) { zero.w = this.movementScale * Vector3.Dot(base.transform.forward, rhs) * ((float)source.width * 0.5f); zero.x += this.movementScale * Vector3.Dot(base.transform.up, rhs) * ((float)source.width * 0.5f); zero.y += this.movementScale * Vector3.Dot(base.transform.right, rhs) * ((float)source.width * 0.5f); } if (this.preview) { this.motionBlurMaterial.SetVector("_BlurDirectionPacked", new Vector4(this.previewScale.y, this.previewScale.x, 0f, this.previewScale.z) * 0.5f * this._camera.fieldOfView); } else { this.motionBlurMaterial.SetVector("_BlurDirectionPacked", zero); } } else { Graphics.Blit(source, temporary, this.motionBlurMaterial, 0); Camera camera = null; if (this.excludeLayers.value != 0) { camera = this.GetTmpCam(); } if (camera && this.excludeLayers.value != 0 && this.replacementClear && this.replacementClear.isSupported) { camera.targetTexture = temporary; camera.cullingMask = this.excludeLayers; camera.RenderWithShader(this.replacementClear, ""); } } if (!this.preview && Time.frameCount != this.prevFrameCount) { this.prevFrameCount = Time.frameCount; this.Remember(); } source.filterMode = FilterMode.Bilinear; if (this.showVelocity) { this.motionBlurMaterial.SetFloat("_DisplayVelocityScale", this.showVelocityScale); Graphics.Blit(temporary, destination, this.motionBlurMaterial, 1); } else if (this.filterType == CameraMotionBlur.MotionBlurFilter.ReconstructionDX11 && !flag) { this.dx11MotionBlurMaterial.SetFloat("_MinVelocity", this.minVelocity); this.dx11MotionBlurMaterial.SetFloat("_VelocityScale", this.velocityScale); this.dx11MotionBlurMaterial.SetFloat("_Jitter", this.jitter); this.dx11MotionBlurMaterial.SetTexture("_NoiseTex", this.noiseTexture); this.dx11MotionBlurMaterial.SetTexture("_VelTex", temporary); this.dx11MotionBlurMaterial.SetTexture("_NeighbourMaxTex", temporary3); this.dx11MotionBlurMaterial.SetFloat("_SoftZDistance", Mathf.Max(0.00025f, this.softZDistance)); this.dx11MotionBlurMaterial.SetFloat("_MaxRadiusOrKInPaper", value); Graphics.Blit(temporary, temporary2, this.dx11MotionBlurMaterial, 0); Graphics.Blit(temporary2, temporary3, this.dx11MotionBlurMaterial, 1); Graphics.Blit(source, destination, this.dx11MotionBlurMaterial, 2); } else if (this.filterType == CameraMotionBlur.MotionBlurFilter.Reconstruction || flag) { this.motionBlurMaterial.SetFloat("_SoftZDistance", Mathf.Max(0.00025f, this.softZDistance)); Graphics.Blit(temporary, temporary2, this.motionBlurMaterial, 2); Graphics.Blit(temporary2, temporary3, this.motionBlurMaterial, 3); Graphics.Blit(source, destination, this.motionBlurMaterial, 4); } else if (this.filterType == CameraMotionBlur.MotionBlurFilter.CameraMotion) { Graphics.Blit(source, destination, this.motionBlurMaterial, 6); } else if (this.filterType == CameraMotionBlur.MotionBlurFilter.ReconstructionDisc) { this.motionBlurMaterial.SetFloat("_SoftZDistance", Mathf.Max(0.00025f, this.softZDistance)); Graphics.Blit(temporary, temporary2, this.motionBlurMaterial, 2); Graphics.Blit(temporary2, temporary3, this.motionBlurMaterial, 3); Graphics.Blit(source, destination, this.motionBlurMaterial, 7); } else { Graphics.Blit(source, destination, this.motionBlurMaterial, 5); } RenderTexture.ReleaseTemporary(temporary); RenderTexture.ReleaseTemporary(temporary2); RenderTexture.ReleaseTemporary(temporary3); } }
public void InitPostProcessingEffects() { cameraMotionBlur = this.GetComponentInChildren<UnityStandardAssets.ImageEffects.CameraMotionBlur>(); depthOfField = this.GetComponentInChildren<UnityStandardAssets.ImageEffects.DepthOfField>(); cameraMotionBlur.enabled = false; depthOfField.enabled = false; //Enable CameraMotionBlur if Setting is allowed to be on if (PlayerPrefs.GetInt("CMB") == 1) { CMBEnabled = true; } else { CMBEnabled = false; cameraMotionBlur.enabled = false; } if (PlayerPrefs.GetInt("DOF") == 1) { DOFEnabled = true; } else { DOFEnabled = false; depthOfField.enabled = false; } }