Looking at the code, the runtime import perf could potentially be improved by allowing the user to set concurrency. Right now (LidarPointCloud.cpp:653 in master) it’s total threads - 1, so as you say it saturates the system. You could add a setting like ‘MaxImportConcurrency’, where a positive value is thread count, and negative is actual system threads - value:
const int32 MaxImportConcurrency = GetDefault<ULidarPointCloudSettings>()->MaxImportConcurrency;
const int32 MaxThreads = FPlatformMisc::NumberOfCoresIncludingHyperthreads() - 1;
const int32 UserThreads = FMath::Sign(MaxImportConcurrency) > 0 ? MaxImportConcurrency : MaxThreads + (MaxImportConcurrency + 1); // last option subtracts, MaxImportConcurrency is already negative
const int32 NumThreads = FMath::Min(FMath::Min(FMath::(1, UserThreads), MaxImportConcurrency), (int32)(Count / MaxBatchSize) + 1);
Also, without testing it, i’m guessing it probably hitches a bit when the data is sync’d from the loading threads to the game thread. This might be offset by syncing the data back in batches over a number of ticks.