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)