void Awake()
    {
        _compute = Instantiate(_compute);

        //  m_Pattern = GetComponent<TransformPattern>();

        if (m_Pattern)
        {
            m_Pattern.CreateTransforms();
            m_InstCount = m_Pattern.Transforms.Count;
        }

        UpdateBuffers();

        #region Compute shader
        // Get the compute kernal and set the position buffer reference
        kernel = _compute.FindKernel("TransformUpdate");
        _compute.SetBuffer(kernel, "BaseTransformBuffer", m_BaseTransformBuffer);
        _compute.SetBuffer(kernel, "ModifiedTransformBuffer", m_ModifiedTransformBuffer);
        _compute.SetBuffer(kernel, "PositionCurve", m_PosCurveBuffer);
        _compute.SetBuffer(kernel, "RotationCurve", m_RotCurveBuffer);
        _compute.SetBuffer(kernel, "ScaleCurve", m_ScaleCurveBuffer);

        _compute.SetFloat("InstanceCount", (float)m_InstCount);

        _compute.Dispatch(kernel, ThreadGroupCount, 1, 1);
        #endregion

        #region Instance shader
        m_InstMat       = new Material(m_InstMat);
        m_InstMat.name += "(Clone)";
        m_InstMat.SetBuffer("ModifiedTransformBuffer", m_ModifiedTransformBuffer);
        m_InstMat.SetBuffer("BaseTransformBuffer", m_BaseTransformBuffer);
        #endregion
    }