#pragma kernel EstimatePointCloudPosOfs uint2 PointCloudRes; //float2 SpaceScale; float3 ImuUpVector; uint MinDepth; uint MaxDepth; StructuredBuffer SpaceTable; StructuredBuffer DepthMap; RWStructuredBuffer PointCloudPos; RWStructuredBuffer PointCloudOfs; RWStructuredBuffer PointCloudMask; [numthreads(8, 8, 1)] void EstimatePointCloudPosOfs(uint3 id : SV_DispatchThreadID) { uint i = id.x + id.y * PointCloudRes.x; uint depth2 = DepthMap[i >> 1]; uint depth = i & 1 != 0 ? depth2 >> 16 : depth2 & 0xffff; depth = (depth >= MinDepth && depth <= MaxDepth) * depth; float fDepth = (float)depth / 1000.0; bool mask = depth != 0; float3 pos = float3(SpaceTable[i * 3] * fDepth, SpaceTable[i * 3 + 1] * fDepth, fDepth); float ofs = dot(ImuUpVector, pos) * mask; PointCloudPos[i] = pos; PointCloudOfs[i] = ofs; PointCloudMask[i] = mask; }