private void SetCameraAndSkybox(int index)
    {
        RT_MainShader.SetMatrix("_CameraToWorld", MainCamera.cameraToWorldMatrix);
        RT_MainShader.SetMatrix("_CameraInverseProjection", MainCamera.projectionMatrix.inverse);
        RT_MainShader.SetTexture(index, "_SkyboxTexture", SkyboxTexture);

        RT_MainShader.SetInt("_MaxGeneration", MaxRayGeneration);

        if (sampleOffset.Count == SamplesPerPixel)
        {
            return;
        }

        sampleOffset.Clear();
        for (int i = 0; i < SamplesPerPixel; i++)
        {
            sampleOffset.Add(Random.value);
        }

        loadBuffer(sampleOffset, ref SampleBuffer, sizeof(float));
        SetGlobalBuffer("_SamplesPerPixel", SampleBuffer);

        int castShadow;

        if (enableShadow == true)
        {
            castShadow = 1;
        }
        else
        {
            castShadow = 0;
        }

        RT_MainShader.SetInt("_CastShadow", castShadow);
    }
 private void SetGlobalBuffer(string name, ComputeBuffer buffer)
 {
     if (buffer != null)
     {
         RT_MainShader.SetBuffer(0, name, buffer);
     }
 }
    private void initBuffers()
    {
        int main = RT_MainShader.FindKernel("RTmain");

        SetCameraAndSkybox(main);

        // Material
        loadBuffer(materials, ref MaterialBuffer, sizeof(int) + sizeof(float) * 12);
        SetGlobalBuffer("_Materials", MaterialBuffer);

        //Lights
        loadBuffer(directionalLights, ref DirectionLightBuffer, sizeof(float) * 6);
        SetGlobalBuffer("_DirectionalLights", DirectionLightBuffer);

        loadBuffer(pointLights, ref PointLightBuffer, sizeof(float) * 7);
        SetGlobalBuffer("_PointLights", PointLightBuffer);
    }
    private void initBVHTreeBuffers()
    {
        int main = RT_MainShader.FindKernel("RTmain");

        SetCameraAndSkybox(main);

        // Material
        loadBuffer(materials, ref MaterialBuffer, sizeof(int) + sizeof(float) * 12);
        SetGlobalBuffer("_Materials", MaterialBuffer);

        //Lights
        loadBuffer(directionalLights, ref DirectionLightBuffer, sizeof(float) * 6);
        SetGlobalBuffer("_DirectionalLights", DirectionLightBuffer);

        loadBuffer(pointLights, ref PointLightBuffer, sizeof(float) * 7);
        SetGlobalBuffer("_PointLights", PointLightBuffer);


        loadBuffer(BVHTreeList, ref BVHTreeListBuffer, sizeof(float) * 6 + sizeof(uint) * 4);
        SetGlobalBuffer("_BVHTreeList", BVHTreeListBuffer);

        loadBuffer(triangleList, ref triangleListBuffer, sizeof(float) * 12 + sizeof(uint));
        SetGlobalBuffer("_TriangleList", triangleListBuffer);
    }