Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// <summary>
- /// Component which renders object on top of all other object.
- /// </summary>
- public class FirstPersonEffect : MonoBehaviour
- {
- public Camera Camera;
- public Material DepthClearMaterial;
- List<Renderer> m_renderers = new List<Renderer>();
- CommandBuffer m_cmdBuffer;
- private void OnEnable()
- {
- m_cmdBuffer = new CommandBuffer();
- Camera.AddCommandBuffer(CameraEvent.AfterGBuffer, m_cmdBuffer);
- UpdateCommandBuffer();
- }
- private void OnDisable()
- {
- Camera.RemoveCommandBuffer(CameraEvent.AfterGBuffer, m_cmdBuffer);
- m_cmdBuffer.Dispose();
- }
- private void OnTransformChildrenChanged()
- {
- UpdateCommandBuffer();
- }
- private void UpdateCommandBuffer()
- {
- m_cmdBuffer.Clear();
- GetComponentsInChildren(m_renderers);
- // Render first with DepthClear material
- foreach (var rend in m_renderers)
- {
- for (int i = 0; i < rend.materials.Length; i++)
- {
- m_cmdBuffer.DrawRenderer(rend, DepthClearMaterial, i);
- }
- }
- // Then render with it's material
- foreach (var rend in m_renderers)
- {
- for (int i = 0; i < rend.materials.Length; i++)
- {
- var material = rend.materials[i];
- int pass = material.FindPass("DEFERRED");
- m_cmdBuffer.DrawRenderer(rend, material, i, pass != -1 ? pass : 0);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment