Пример #1
0
        public static int[] ArrayAllocator(int length, ComputeShader shader)
        {
            string kernelName = "QuickArrayAllocation";

            UnifiedArray <int> array = new UnifiedArray <int>(length, sizeof(int), "array");

            array.SetBuffer(shader, kernelName);
            shader.SetInt("arrayLength", length);

            return(array.SynchUpdate(shader, kernelName).array);
        }
Пример #2
0
 void RecieveLidarData(ScriptableRenderContext context, Camera[] cameras)
 {
     if (SynchronousUpdate)
     {
         lidarDataByte.SynchUpdate(lidarShader, "CSMain");
         message = new LidarMessage(LidarHorisontalRes * NrOfLasers * NrOfCameras, OSPtime, lidarDataByte.array);
         gate    = true;
     }
     else
     {
         AsyncGPUReadback.Request(lidarDataByte.buffer, PointCloudDataCompleted);
     }
 }
Пример #3
0
 void RGBUpdate(ScriptableRenderContext context, Camera[] cameras)
 {
     if (SynchronousUpdate)
     {
         cameraData.SynchUpdate(cameraShader, "CSMain");
         Data = ByteString.CopyFrom(cameraData.array);
         gate = true;
     }
     else
     {
         AsyncGPUReadback.Request(camera.activeTexture, 0, textureFormat, ReadbackCompleted);
     }
 }
Пример #4
0
        void Start()
        {
            // Setting User information

            WidthRes /= NrOfCameras;

            float lidarVerticalAngle = VerticalAngle;

            HeightRes     = (int)(WidthRes * Mathf.Tan(lidarVerticalAngle * Mathf.Deg2Rad / 2) / Mathf.Sin(Mathf.PI / NrOfCameras));
            VerticalAngle = Mathf.Rad2Deg * 2 * Mathf.Atan(Mathf.Tan(lidarVerticalAngle * Mathf.Deg2Rad / 2) / Mathf.Cos(Mathf.PI / NrOfCameras));

            NumberOfDepthPixels = (uint)WidthRes * (uint)HeightRes * (uint)NrOfCameras;
            NumberOfLidarPoints = (uint)NrOfLasers * (uint)LidarHorisontalRes * (uint)NrOfCameras;

            // Settup Game objects

            pointCloud = GetComponent <PointCloudManager>();
            pointCloud.SetupPointCloud((int)NumberOfLidarPoints);

            var frustum = new CameraFrustum(WidthRes, MaxDistance, MinDistance, 2 * Mathf.PI / NrOfCameras, lidarVerticalAngle * Mathf.Deg2Rad);

            depthCameras = new DepthCameras(NrOfCameras, frustum, this.transform, lidarShader, "CSMain");
            lidarCameras = depthCameras.cameras;

            projectionFilter = GetComponent <SphericalProjectionFilter>();
            projectionFilter.SetupSphericalProjectionFilter(LidarHorisontalRes, NrOfLasers, frustum);
            pixelCoordinatesBuffer = projectionFilter.filterCoordinates.buffer;

            // Setting up Compute Buffers

            kernelHandle = lidarShader.FindKernel("CSMain");

            lidarShader.SetBuffer(kernelHandle, "sphericalPixelCoordinates", pixelCoordinatesBuffer);
            lidarShader.SetInt("N_theta", LidarHorisontalRes);
            lidarShader.SetInt("N_phi", NrOfLasers);
            lidarShader.SetFloat("rayDropProbability", rayDropProbability);

            UnifiedArray <uint> RandomStateVector = new UnifiedArray <uint>(NrOfCameras * NrOfLasers * LidarHorisontalRes, sizeof(float), "_state_xorshift");

            RandomStateVector.SetBuffer(lidarShader, "CSMain");
            RandomStateVector.SetBuffer(lidarShader, "RNG_Initialize");
            RandomStateVector.SynchUpdate(lidarShader, "RNG_Initialize");

            particleUnifiedArray = new UnifiedArray <Vector3>(NrOfCameras * NrOfLasers * LidarHorisontalRes, sizeof(float) * 3, "lines");
            particleUnifiedArray.SetBuffer(lidarShader, "CSMain");

            lidarDataByte = new UnifiedArray <byte>(NrOfCameras * NrOfLasers * LidarHorisontalRes, sizeof(float) * 6, "LidarData");
            lidarDataByte.SetBuffer(lidarShader, "CSMain");
        }
Пример #5
0
 void PointCloudRendering(ScriptableRenderContext context, Camera[] cameras)
 {
     if (SynchronousUpdate)
     {
         particleUnifiedArray.SynchUpdate(lidarShader, "CSMain");
         if (pointCloud != null)
         {
             pointCloud.UpdatePointCloud(particleUnifiedArray.array);
         }
         gate = true;
     }
     else
     {
         AsyncGPUReadback.Request(particleUnifiedArray.buffer, PointCloudCompleted);
     }
 }