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); }
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); } }
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); } }
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"); }
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); } }