public void StartRender(Texture Input)
    {
        start = true;
        EffectProcess.SetupProcess(Input);

        EarlyProcess.SetupProcess(EffectProcess.ProcessResult);

        if (branchProcessPath.Count > 0)
        {
            for (int i = 0; i < branchProcessPath.Count; i++)
            {
                if (i == 0)
                {
                    branchProcessPath[i].SetupProcess(EarlyProcess.ProcessResult);
                }
                else
                {
                    branchProcessPath[i].SetupProcess(branchProcessPath[i - 1].ProcessResult);
                }
            }
            TransitionProcess.SetupProcess(branchProcessPath[branchProcessPath.Count - 1].ProcessResult);
        }
        else
        {
            TransitionProcess.SetupProcess(EarlyProcess.ProcessResult);
        }

        PostProcess.SetupProcess(TransitionProcess.ProcessResult);

        StartCoroutine(OnRender());
    }
    IEnumerator OnRender(Texture input = null)
    {
        while (true)
        {
            EffectProcess.DoRenderProcess(input);

            EarlyProcess.DoRenderProcess();

            for (int i = 0; i < branchProcessPath.Count; i++)
            {
                branchProcessPath[i].DoRenderProcess();
            }

            TransitionProcess.DoRenderProcess();

            PostProcess.DoRenderProcess();

            yield return(new WaitForEndOfFrame());
        }
    }