Beispiel #1
0
        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);
        }
Beispiel #2
0
 public virtual bool ShouldGenerateFaceBetween(VoxelMaterial a, VoxelMaterial b)
 {
     return(a != null && b == null);
 }
Beispiel #3
0
 public VoxelMaterialBaseVertexScratch(VoxelMaterial mat)
 {
     Material = mat;
 }