diff --git a/Content/DynamicLineMaterial-Unoptimized.uasset b/Content/DynamicLineMaterial-Unoptimized.uasset new file mode 100644 index 0000000000000000000000000000000000000000..00cd4efcf8507ee0abbf45cf2ad43e44494c54b2 Binary files /dev/null and b/Content/DynamicLineMaterial-Unoptimized.uasset differ diff --git a/Content/DynamicLineMaterial.uasset b/Content/DynamicLineMaterial.uasset index e4529ef79a4492ebb3bb941980aab51f06487134..cd11b674a11243b853765475c892ce8e56576866 100644 Binary files a/Content/DynamicLineMaterial.uasset and b/Content/DynamicLineMaterial.uasset differ diff --git a/Content/DynamicLineMaterialNewBackup.uasset b/Content/DynamicLineMaterialNewBackup.uasset index 8941aaff1f87b80799abf485b6497bb4d5b034be..cd0056d098d43cf45c8aafbcf08c79609961a3f3 100644 Binary files a/Content/DynamicLineMaterialNewBackup.uasset and b/Content/DynamicLineMaterialNewBackup.uasset differ diff --git a/Content/DynamicLineMaterialOldBackup.uasset b/Content/DynamicLineMaterialOldBackup.uasset index 91d3640c2277496afadde2c9499505066c57455e..2187dc645856e8d11f7368184d65fe2f9fc3932c 100644 Binary files a/Content/DynamicLineMaterialOldBackup.uasset and b/Content/DynamicLineMaterialOldBackup.uasset differ diff --git a/Content/DynamicLineMaterialTesting.uasset b/Content/DynamicLineMaterialTesting.uasset index 9b4c6fd06cc86ca8e0d37fe60f303c7ef5892f7d..79d7b52111d4169ebbaba1e1eef3c472ce6f4c40 100644 Binary files a/Content/DynamicLineMaterialTesting.uasset and b/Content/DynamicLineMaterialTesting.uasset differ diff --git a/Content/line.uasset b/Content/line.uasset index e53730b60727f78b76728d091c3f56474d3dc599..5eef0bfd3997b72daff8b796b43dfe1f06c9375d 100644 Binary files a/Content/line.uasset and b/Content/line.uasset differ diff --git a/Content/optimized_line.uasset b/Content/optimized_line.uasset new file mode 100644 index 0000000000000000000000000000000000000000..d03b0c31a0886d08d020f9d0b27d847d777b0140 Binary files /dev/null and b/Content/optimized_line.uasset differ diff --git a/Source/InstancedMeshLineRendering/Private/GPUInstancedLineComponent.cpp b/Source/InstancedMeshLineRendering/Private/GPUInstancedLineComponent.cpp index 687d43f5644036086f2697aab03c51a2cc180176..59b4055be4215f553f9990f63c3b97346c06d84c 100644 --- a/Source/InstancedMeshLineRendering/Private/GPUInstancedLineComponent.cpp +++ b/Source/InstancedMeshLineRendering/Private/GPUInstancedLineComponent.cpp @@ -27,7 +27,7 @@ UGPUInstancedLineComponent::UGPUInstancedLineComponent(const FObjectInitializer& SetCanEverAffectNavigation(false); - static ConstructorHelpers::FObjectFinder<UStaticMesh>LineMeshAsset(TEXT("StaticMesh'/InstancedMeshLineRendering/line.line'")); + static ConstructorHelpers::FObjectFinder<UStaticMesh>LineMeshAsset(TEXT("StaticMesh'/InstancedMeshLineRendering/optimized_line.optimized_line'")); static ConstructorHelpers::FObjectFinder<UMaterial>LineMaterialAsset(TEXT("Material'/InstancedMeshLineRendering/DynamicLineMaterial.DynamicLineMaterial'")); UStaticMesh* LineAsset = LineMeshAsset.Object; UMaterial* LineMaterial = LineMaterialAsset.Object; @@ -601,7 +601,7 @@ void UGPUInstancedLineComponent::InitializeLinesInBulk(int32 NumberOfLines, int3 SetCustomDataValue(InstanceId, 0, Color.R, false); SetCustomDataValue(InstanceId, 1, Color.G, false); SetCustomDataValue(InstanceId, 2, Color.B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); SetCustomDataValue(InstanceId, 4, static_cast<float>(CurrentTextureIndex), false); // Segment Start NewLineArray.IndexArray.Add({InstanceId, LineIndex * (NumberOfSegmentsPerLine + 1) + PointIndex}); CurrentTextureIndex++; @@ -646,7 +646,7 @@ int32 UGPUInstancedLineComponent::AddLine(const TArray<FVector>& Line, FLinearCo SetCustomDataValue(InstanceId, 0, Color.R, false); SetCustomDataValue(InstanceId, 1, Color.G, false); SetCustomDataValue(InstanceId, 2, Color.B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); SetCustomDataValue(InstanceId, 4, static_cast<float>(CurrentTextureIndex), false); // Segment Start NewLineArray.IndexArray.Add({InstanceId, LinearLineData.Num() + PointIndex}); CurrentTextureIndex++; @@ -721,7 +721,7 @@ bool UGPUInstancedLineComponent::AddPoint(int32 LineId, const FVector& Point) SetCustomDataValue(InstanceId, 0, R, false); SetCustomDataValue(InstanceId, 1, G, false); SetCustomDataValue(InstanceId, 2, B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); // Update the latest dummy entry to point to the actual segment. Line.IndexArray.Last().InstanceIndex = InstanceId; @@ -842,7 +842,7 @@ bool UGPUInstancedLineComponent::InsertPoint(int32 LineId, int32 SegmentId, cons SetCustomDataValue(InstanceId, 0, Color.R, false); SetCustomDataValue(InstanceId, 1, Color.G, false); SetCustomDataValue(InstanceId, 2, Color.B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); LinearLineData.Insert(FVector4(Point), LinearDataIndex); @@ -936,7 +936,7 @@ bool UGPUInstancedLineComponent::AddPoints(int32 LineId, const TArray<FVector>& SetCustomDataValue(InstanceId, 0, R, false); SetCustomDataValue(InstanceId, 1, G, false); SetCustomDataValue(InstanceId, 2, B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); SetCustomDataValue(InstanceId, 4, static_cast<float>(PointTextureIndex + PointIndex), false); // Update the latest dummy entry to point to the actual segment. @@ -1008,7 +1008,7 @@ bool UGPUInstancedLineComponent::AddPoints(int32 LineId, const TArray<FVector>& SetCustomDataValue(InstanceId, 0, R, false); SetCustomDataValue(InstanceId, 1, G, false); SetCustomDataValue(InstanceId, 2, B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); SetCustomDataValue(InstanceId, 4, static_cast<float>(NewPointTextureIndex - 1 + PointIndex), false); // Update the latest dummy entry to point to the actual segment. @@ -1073,7 +1073,7 @@ bool UGPUInstancedLineComponent::InsertPoints(int32 LineId, int32 SegmentId, con SetCustomDataValue(InstanceId, 0, R, false); SetCustomDataValue(InstanceId, 1, G, false); SetCustomDataValue(InstanceId, 2, B, false); - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); Line.IndexArray.Insert({ InstanceId, LinearDataIndex + PointIndex }, SegmentId + PointIndex); SetCustomDataValue(InstanceId, 4, LinearDataIndex + PointIndex, false); @@ -1558,7 +1558,7 @@ bool UGPUInstancedLineComponent::SetLineWidth(int32 LineId, float Width) const int32 InstanceId = LineIndices.InstanceIndex; if (InstanceId >= 0) { - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); } } MarkRenderStateDirty(); @@ -1569,7 +1569,7 @@ bool UGPUInstancedLineComponent::SetSegmentWidth(int32 LineId, int32 SegmentId, { const int32 InstanceId = LineMap[LineId].IndexArray[SegmentId].InstanceIndex; - SetCustomDataValue(InstanceId, 3, Width, false); + SetCustomDataValue(InstanceId, 3, Width / 2.0f, false); return true; } //#pragma optimize("", on)