public VoxelVertexOutput ResolveVoxelVertex(VoxelVertexInput input, object scratch, VoxelModelGenerationSettings settings) { VoxelMaterial material = (scratch as VoxelMaterialBaseVertexScratch).Material; VoxelVertexOutput output = new VoxelVertexOutput(); output.SetDefaults(input, material.RenderMaterial, settings); int matId = m_MaterialTable.GetMaterialIndex(material); output.UVs = new Vector4[2]; // First channel is reserved // Calulcate face UVs (Don't bother clampping) Vector3Int absNormal = new Vector3Int( Mathf.Abs(input.Normal.x), Mathf.Abs(input.Normal.y), Mathf.Abs(input.Normal.z) ); Vector3 uvPos = input.Coord + input.CoordOffset; Vector2 uvs = new Vector2(); if (absNormal.x > absNormal.y && absNormal.x > absNormal.z) { uvs = new Vector2(uvPos.y, uvPos.z); } else if (absNormal.y > absNormal.x && absNormal.y > absNormal.z) { uvs = new Vector2(uvPos.x, uvPos.z); } else { uvs = new Vector2(uvPos.x, uvPos.y); } output.UVs[0] = uvs + new Vector2(0.5f, 0.5f); output.UVs[1] = new Vector4(matId, 0, 0, 0); return(output); }
public virtual bool ShouldGenerateFaceBetween(VoxelMaterial a, VoxelMaterial b) { return(a != null && b == null); }
public VoxelMaterialBaseVertexScratch(VoxelMaterial mat) { Material = mat; }