diff --git a/lib/rbx_loader/src/primitives.rs b/lib/rbx_loader/src/primitives.rs
index 8dbb7ac01..00d6d153d 100644
--- a/lib/rbx_loader/src/primitives.rs
+++ b/lib/rbx_loader/src/primitives.rs
@@ -51,22 +51,6 @@ pub enum WedgeFace{
 	Left,
 	Bottom,
 }
-const WEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[
-	vec3::int( 1, 0, 0),//Wedge::Right
-	vec3::int( 0, 1,-1),//Wedge::TopFront
-	vec3::int( 0, 0, 1),//Wedge::Back
-	vec3::int(-1, 0, 0),//Wedge::Left
-	vec3::int( 0,-1, 0),//Wedge::Bottom
-];
-/*
-local cornerWedgeVerticies = {
-	Vector3.new(-1/2,-1/2,-1/2),7
-	Vector3.new(-1/2,-1/2, 1/2),0
-	Vector3.new( 1/2,-1/2,-1/2),6
-	Vector3.new( 1/2,-1/2, 1/2),1
-	Vector3.new( 1/2, 1/2,-1/2),5
-}
-*/
 #[derive(Hash,PartialEq,Eq)]
 pub enum CornerWedgeFace{
 	Right,
@@ -75,13 +59,6 @@ pub enum CornerWedgeFace{
 	Bottom,
 	Front,
 }
-const CORNERWEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[
-	vec3::int( 1, 0, 0),//CornerWedge::Right
-	vec3::int( 0, 1, 1),//CornerWedge::BackTop
-	vec3::int(-1, 1, 0),//CornerWedge::LeftTop
-	vec3::int( 0,-1, 0),//CornerWedge::Bottom
-	vec3::int( 0, 0,-1),//CornerWedge::Front
-];
 #[derive(Default)]
 pub struct CubeFaceDescription([Option<FaceDescription>;6]);
 impl CubeFaceDescription{
@@ -92,16 +69,6 @@ impl CubeFaceDescription{
 		self.0.into_iter().enumerate().filter_map(|(i,v)|v.map(|u|(i,u)))
 	}
 }
-pub fn unit_cube(render:RenderConfigId)->Mesh{
-	let mut t=CubeFaceDescription::default();
-	t.insert(CubeFace::Right,FaceDescription::new_with_render_id(render));
-	t.insert(CubeFace::Top,FaceDescription::new_with_render_id(render));
-	t.insert(CubeFace::Back,FaceDescription::new_with_render_id(render));
-	t.insert(CubeFace::Left,FaceDescription::new_with_render_id(render));
-	t.insert(CubeFace::Bottom,FaceDescription::new_with_render_id(render));
-	t.insert(CubeFace::Front,FaceDescription::new_with_render_id(render));
-	generate_partial_unit_cube(t)
-}
 #[derive(Default)]
 pub struct WedgeFaceDescription([Option<FaceDescription>;5]);
 impl WedgeFaceDescription{
@@ -112,15 +79,6 @@ impl WedgeFaceDescription{
 		self.0.into_iter().enumerate().filter_map(|v|v.1.map(|u|(v.0,u)))
 	}
 }
-// pub fn unit_wedge(render:RenderConfigId)->Mesh{
-// 	let mut t=WedgeFaceDescription::default();
-// 	t.insert(WedgeFace::Right,FaceDescription::new_with_render_id(render));
-// 	t.insert(WedgeFace::TopFront,FaceDescription::new_with_render_id(render));
-// 	t.insert(WedgeFace::Back,FaceDescription::new_with_render_id(render));
-// 	t.insert(WedgeFace::Left,FaceDescription::new_with_render_id(render));
-// 	t.insert(WedgeFace::Bottom,FaceDescription::new_with_render_id(render));
-// 	generate_partial_unit_wedge(t)
-// }
 #[derive(Default)]
 pub struct CornerWedgeFaceDescription([Option<FaceDescription>;5]);
 impl CornerWedgeFaceDescription{
@@ -131,15 +89,6 @@ impl CornerWedgeFaceDescription{
 		self.0.into_iter().enumerate().filter_map(|v|v.1.map(|u|(v.0,u)))
 	}
 }
-// pub fn unit_cornerwedge(render:RenderConfigId)->Mesh{
-// 	let mut t=CornerWedgeFaceDescription::default();
-// 	t.insert(CornerWedgeFace::Right,FaceDescription::new_with_render_id(render));
-// 	t.insert(CornerWedgeFace::TopBack,FaceDescription::new_with_render_id(render));
-// 	t.insert(CornerWedgeFace::TopLeft,FaceDescription::new_with_render_id(render));
-// 	t.insert(CornerWedgeFace::Bottom,FaceDescription::new_with_render_id(render));
-// 	t.insert(CornerWedgeFace::Front,FaceDescription::new_with_render_id(render));
-// 	generate_partial_unit_cornerwedge(t)
-// }
 
 #[derive(Clone)]
 pub struct FaceDescription{
@@ -157,48 +106,48 @@ impl FaceDescription{
 	}
 }
 pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{
-	const CUBE_DEFAULT_POLYS:[[[u32;3];4];6]=[
+	const CUBE_DEFAULT_POLYS:[[[u32;2];4];6]=[
 		// right (1, 0, 0)
 		[
-			[6,2,0],//[vertex,tex,norm]
-			[5,1,0],
-			[2,0,0],
-			[1,3,0],
+			[6,2],//[vertex,tex]
+			[5,1],
+			[2,0],
+			[1,3],
 		],
 		// top (0, 1, 0)
 		[
-			[5,3,1],
-			[4,2,1],
-			[3,1,1],
-			[2,0,1],
+			[5,3],
+			[4,2],
+			[3,1],
+			[2,0],
 		],
 		// back (0, 0, 1)
 		[
-			[0,3,2],
-			[1,2,2],
-			[2,1,2],
-			[3,0,2],
+			[0,3],
+			[1,2],
+			[2,1],
+			[3,0],
 		],
 		// left (-1, 0, 0)
 		[
-			[0,2,3],
-			[3,1,3],
-			[4,0,3],
-			[7,3,3],
+			[0,2],
+			[3,1],
+			[4,0],
+			[7,3],
 		],
 		// bottom (0,-1, 0)
 		[
-			[1,1,4],
-			[0,0,4],
-			[7,3,4],
-			[6,2,4],
+			[1,1],
+			[0,0],
+			[7,3],
+			[6,2],
 		],
 		// front (0, 0,-1)
 		[
-			[4,1,5],
-			[5,0,5],
-			[6,3,5],
-			[7,2,5],
+			[4,1],
+			[5,0],
+			[6,3],
+			[7,2],
 		],
 	];
 	let mut generated_pos=Vec::new();
@@ -238,8 +187,8 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{
 		//push vertices as they are needed
 		let group_id=PolygonGroupId::new(polygon_groups.len() as u32);
 		polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![
-			CUBE_DEFAULT_POLYS[face_id].map(|tup|{
-				let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize];
+			CUBE_DEFAULT_POLYS[face_id].map(|[pos_id,tex_id]|{
+				let pos=CUBE_DEFAULT_VERTICES[pos_id as usize];
 				let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){
 					pos_index
 				}else{
@@ -251,7 +200,7 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{
 				//always push vertex
 				let vertex=IndexedVertex{
 					pos:PositionId::new(pos_index),
-					tex:TextureCoordinateId::new(tup[1]+4*transform_index),
+					tex:TextureCoordinateId::new(tex_id+4*transform_index),
 					normal:NormalId::new(normal_index),
 					color:ColorId::new(color_index),
 				};
@@ -279,41 +228,48 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{
 }
 //don't think too hard about the copy paste because this is all going into the map tool eventually...
 pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh{
-	const WEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[
+	const WEDGE_DEFAULT_POLYS:[&[[u32;2]];5]=[
 		// right (1, 0, 0)
 		&[
-			[6,2,0],//[vertex,tex,norm]
-			[2,0,0],
-			[1,3,0],
+			[6,2],//[vertex,tex]
+			[2,0],
+			[1,3],
 		],
 		// FrontTop (0, 1, -1)
 		&[
-			[3,1,1],
-			[2,0,1],
-			[6,3,1],
-			[7,2,1],
+			[3,1],
+			[2,0],
+			[6,3],
+			[7,2],
 		],
 		// back (0, 0, 1)
 		&[
-			[0,3,2],
-			[1,2,2],
-			[2,1,2],
-			[3,0,2],
+			[0,3],
+			[1,2],
+			[2,1],
+			[3,0],
 		],
 		// left (-1, 0, 0)
 		&[
-			[0,2,3],
-			[3,1,3],
-			[7,3,3],
+			[0,2],
+			[3,1],
+			[7,3],
 		],
 		// bottom (0,-1, 0)
 		&[
-			[1,1,4],
-			[0,0,4],
-			[7,3,4],
-			[6,2,4],
+			[1,1],
+			[0,0],
+			[7,3],
+			[6,2],
 		],
 	];
+	const WEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[
+		vec3::int( 1, 0, 0),//Wedge::Right
+		vec3::int( 0, 1,-1),//Wedge::TopFront
+		vec3::int( 0, 0, 1),//Wedge::Back
+		vec3::int(-1, 0, 0),//Wedge::Left
+		vec3::int( 0,-1, 0),//Wedge::Bottom
+	];
 	let mut generated_pos=Vec::new();
 	let mut generated_tex=Vec::new();
 	let mut generated_normal=Vec::new();
@@ -351,8 +307,8 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh
 		//push vertices as they are needed
 		let group_id=PolygonGroupId::new(polygon_groups.len() as u32);
 		polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![
-			WEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{
-				let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize];
+			WEDGE_DEFAULT_POLYS[face_id].iter().map(|&[pos_id,tex_id]|{
+				let pos=CUBE_DEFAULT_VERTICES[pos_id as usize];
 				let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){
 					pos_index
 				}else{
@@ -364,7 +320,7 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh
 				//always push vertex
 				let vertex=IndexedVertex{
 					pos:PositionId::new(pos_index),
-					tex:TextureCoordinateId::new(tup[1]+4*transform_index),
+					tex:TextureCoordinateId::new(tex_id+4*transform_index),
 					normal:NormalId::new(normal_index),
 					color:ColorId::new(color_index),
 				};
@@ -392,39 +348,46 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh
 }
 
 pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescription)->Mesh{
-	const CORNERWEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[
+	const CORNERWEDGE_DEFAULT_POLYS:[&[[u32;2]];5]=[
 		// right (1, 0, 0)
 		&[
-			[6,2,0],//[vertex,tex,norm]
-			[5,1,0],
-			[1,3,0],
+			[6,2],//[vertex,tex]
+			[5,1],
+			[1,3],
 		],
 		// BackTop (0, 1, 1)
 		&[
-			[5,3,1],
-			[0,1,1],
-			[1,0,1],
+			[5,3],
+			[0,1],
+			[1,0],
 		],
 		// LeftTop (-1, 1, 0)
 		&[
-			[5,3,2],
-			[7,2,2],
-			[0,1,2],
+			[5,3],
+			[7,2],
+			[0,1],
 		],
 		// bottom (0,-1, 0)
 		&[
-			[1,1,3],
-			[0,0,3],
-			[7,3,3],
-			[6,2,3],
+			[1,1],
+			[0,0],
+			[7,3],
+			[6,2],
 		],
 		// front (0, 0,-1)
 		&[
-			[5,0,4],
-			[6,3,4],
-			[7,2,4],
+			[5,0],
+			[6,3],
+			[7,2],
 		],
 	];
+	const CORNERWEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[
+		vec3::int( 1, 0, 0),//CornerWedge::Right
+		vec3::int( 0, 1, 1),//CornerWedge::BackTop
+		vec3::int(-1, 1, 0),//CornerWedge::LeftTop
+		vec3::int( 0,-1, 0),//CornerWedge::Bottom
+		vec3::int( 0, 0,-1),//CornerWedge::Front
+	];
 	let mut generated_pos=Vec::new();
 	let mut generated_tex=Vec::new();
 	let mut generated_normal=Vec::new();
@@ -462,8 +425,8 @@ pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescri
 		//push vertices as they are needed
 		let group_id=PolygonGroupId::new(polygon_groups.len() as u32);
 		polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![
-			CORNERWEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{
-				let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize];
+			CORNERWEDGE_DEFAULT_POLYS[face_id].iter().map(|&[pos_id,tex_id]|{
+				let pos=CUBE_DEFAULT_VERTICES[pos_id as usize];
 				let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){
 					pos_index
 				}else{
@@ -475,7 +438,7 @@ pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescri
 				//always push vertex
 				let vertex=IndexedVertex{
 					pos:PositionId::new(pos_index),
-					tex:TextureCoordinateId::new(tup[1]+4*transform_index),
+					tex:TextureCoordinateId::new(tex_id+4*transform_index),
 					normal:NormalId::new(normal_index),
 					color:ColorId::new(color_index),
 				};