private IEnumerator RefreshFace(RenderPair pair, Camera camera) { try { for (int face = 0; face < 6; face++) { camera.transform.rotation = orientations[face]; Shader.EnableKeyword("NO_REFLECTION"); camera.Render(); Shader.DisableKeyword("NO_REFLECTION"); Graphics.Blit(pair.Render, pair.Mirror, mirror); Graphics.CopyTexture(pair.Mirror, 0, 0, cubemap, face, 0); Clear(pair); yield return(null); } cubemap.GenerateMips(); } finally { rendering = false; refreshing = null; } }
private void Clear(RenderPair pair) { RenderTexture rt = RenderTexture.active; RenderTexture.active = pair.Render; GL.Clear(true, true, Color.red); RenderTexture.active = pair.Mirror; GL.Clear(true, true, Color.red); RenderTexture.active = rt; }
/*public void PostCullRender(CullingCamera camera) * { * if (!visible || !rendering) * return; * * Shader.EnableKeyword("NO_REFLECTION"); * Camera.Render(); * Shader.DisableKeyword("NO_REFLECTION"); * * cullRenderTimer = -1; * rendering = false; * }*/ private IEnumerator ClearOvertime(RenderPair pair) { RenderTexture.active = pair.Render; GL.Clear(true, true, Color.clear); yield return(null); RenderTexture.active = pair.Mirror; GL.Clear(true, true, Color.clear); yield return(null); }
private void CreateData() { if (Application.isPlaying) { if (dynamics.Contains(this)) { return; } dynamics.Add(this); } //if (mirror == null) // mirror = new Material(ShadingManager.MirrorShader); if (mirror == null) { mirror = new Material(Shader.Find("Hidden/ReflectorProbe/Mirror")); } int resolution = GetComponent <ReflectionProbe>().resolution; RenderPair pair; if (targets.TryGetValue(resolution, out pair)) { pair.Reflections.Add(this); } else { RenderTexture render = new RenderTexture(resolution, resolution, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear); render.useMipMap = false; render.Create(); RenderTexture mirror = new RenderTexture(resolution, resolution, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear); mirror.useMipMap = false; mirror.Create(); pair = new RenderPair(render, mirror); pair.Reflections.Add(this); targets.Add(resolution, pair); } }
private void RefreshInstant(RenderPair pair, Camera camera) { try { for (int face = 0; face < 6; face++) { camera.transform.rotation = orientations[face]; Shader.EnableKeyword("NO_REFLECTION"); camera.Render(); Shader.DisableKeyword("NO_REFLECTION"); Graphics.Blit(pair.Render, pair.Mirror, mirror); RenderTexture source = pair.Mirror; RenderTexture destination = pair.Render; for (int i = 0; i < effects.Length; i++) { if (effects[i].Render(source, destination)) { RenderTexture temp = source; source = destination; destination = temp; } } Graphics.CopyTexture(source, 0, 0, cubemap, face, 0); Clear(pair); } cubemap.GenerateMips(); } finally { rendering = false; refreshing = null; } }
private IEnumerator RefreshOvertime(RenderPair pair, Camera camera) { try { for (int face = 0; face < 6; face++) { yield return(ClearOvertime(pair)); camera.transform.rotation = orientations[face]; rendering = true; cullRenderTimer = 0.25f; while (cullRenderTimer > 0) { cullRenderTimer -= Time.deltaTime; yield return(null); } yield return(null); Graphics.Blit(pair.Render, pair.Mirror, mirror); yield return(null); Graphics.CopyTexture(pair.Mirror, 0, 0, cubemap, face, 0); yield return(null); } cubemap.GenerateMips(); } finally { rendering = false; refreshing = null; } }