Author: Florian Linsel
Contributors: Rebecca Gnau, Naira Khachatryan, Hubert Mara
Description
Drawing and annotating artifacts in 3D are a central parts in archaeological interpretation and research. One of the central goals is creating data, so called “ground truths”, for evaluating and comparing the new methods to segment and analyse artifacts with existing interpretations of experts. In the following, a workflow for manually segment lithic artifacts gets presented. Like every other method, the approach is not limited to lithic artifacts, but need to be adjusted for other artifact categories.
The goal of this approach is marking ridges on the surface of a 3D model, in this case an artifact from the open access Grotta di Fumane dataset (Falcucci & Peresani, 2022), which was adjusted in a later data publication of our working group (Linsel et al., 2023).
In (Linsel et al., 2023), we used MeshLab to manually segment the area of all scar. We adjusted the workflow to Blender allowing a ridge segmentation. This color-based segmentation allows a line selection with a width of vertices. Hence, the precision of the ridges is quite high.
The end product of the segmentation can be transferred to connected component either with GigaMesh (Mara & Krömker, 2013; Mara et al., 2010) or the Color-labeling tool of MorseMesh (Bullenkamp et al., 2023).
Introduction
Software version:
-
Blender: 3.0 or 4.0 (Differences will be mentioned)
-
GigaMesh: v.240221
Datasets and directories included in this upload:
Drawing_the_line_in_3D_Blender_v.0.7.zip
├── example_10350
│ ├── 10350_GMCF_c_gt_labels.txt
│ ├── 10350_GMCF_c.ply
│ ├── 10350_GMCF_c.blend
├── script
│ ├── color_to_label.py
│ ├── __init__.py
│ ├── README.txt
├── learning_artifacts
│ ├── 1401_GMOCF.ply
│ ├── 1401_GMOCF_r1.00_n4_v256.volume.ply
│ ├── 1424_GMOCF.ply
│ ├── 1424_GMOCF_r1.00_n4_v256.volume.ply
│ ├── 1463_GMOCF.ply
│ ├── 1463_GMOCF_r1.00_n4_v256.volume.ply
│ ├── 1464_GMCF.ply
│ ├── 1464_GMOCF_r1.00_n4_v256.volume.ply
└── Template.blend
Description:
-
example_10350
- Includes an example dataset (GdF 10350) of how an annotation can be exported using the workflow (Annotation by Rebecca Gnau).
-
script
- Includes a script, which can be used to create from the colors the ground truth label file (_gt_labels.txt).
-
learning_artifacts
- Includes ply of multiple artifacts from the Grotta di Fumane site, which are derived from (Falcucci & Peresani, 2022) and published in (Linsel et al., 2023).
-
Template.blend
- Template for annotating lithic artifacts.
Remarks:
-
This workflow includes a the template .Blend file created in Blender 4.0 (also usable in 3.0), in which the materials "001_ridge" and "002_scar" included. Different additional annotations, like the point of impact, can be added as color coded additional feature.
-
Before getting started, please keep the following points in mind:
-
The outline of every artifact should also be considered as ridge, because it represents the border between the positive ventral positive and the dorsal negatives, and further corresponds to the negative of the core.
-
Every scar needs to be represented by a closed polyline.
-
Imported meshes should be preprocessed before using the workflow, as the annotation may change due to the filling and cleaning of the 3D surface. The GigaMesh GMOCF-Preprocessing routine is recommended used in (Linsel et al., 2023).
-
Calculating MSII values in GigaMesh can also be helpful for understanding the curvature of the surface, especially if the artifact is not at hand (Mara & Krömker, 2013).
-
Prepare own Project with Template
-
Copy the existing blender project from another artifact (template.BLEND)
-
Because then it already contains 001_ridge and 002_scar as "Materials"
-
Check for and if needed add color attributes as vertex color (Blender 4.0) or vertex color (Blender 3.0):
-
Materials are like colors, which can be wrapped around the surface of an 3D model as uv-maps with own coordinates.
-
Delete existing 3D model of artifact from Scene Collection
Data Import
-
File → Import → Stanford (.ply) → select File
-
e.g. /path/to/file/10350_GMOCF.ply
-
Annotation
Preparing Annotation
-
Go in the UV Editing View
-
Click on Mesh in "Scene Collection"
-
Select "Edit Mode"
-
important: set the light setting to this setting
-
Show Overlays = On
-
Viewport Shading = On
-
- Select the Face-Select
Creating the Annotation
- important: before starting to segment the artifact with black ridges, select all invert from no vertices (Ctrl + I)
- and color them as scar. Click on "Material" select "002_scar" and click on "Assign"
- Select a face with a left click
- Zoomed in:
- select second face hold Strg (CRTL) and left click
- select other faces holding Strg (CRTL) and left click
- After selecting all ridge points of first scar (it needs to be fully closed) go to the right menu and select material properties
- Here select 001_ridge and click on assign
- Result:
Continue with all other Scars
-
Keep in mind: Don’t select "ALL ridges of ALL scars". Select the missing ridges while using the ridges of the already selected scars!
-
Important is to fully connect all ridges.
Baking Textures to Vertex Colors
-
After the annotation the materials are not merged in the vertex color, these are separate information and we need the information as vertex color. This process is called baking.
-
Go to "Render properties" and "Bake" the material properties as vertex color in the mesh
-
Bake and Output settings:
Data Export
Export Meshes as * + "_c.ply"
- File → Export → Stanford (.ply)
Export Menu
-
In the ply export menu select only "Apply Modifiers" and Triangulated Mesh (Blender 4.0), respectively "Apply Modifiers" and Vertex Colors.
-
Please deselect "UV Coordinates"/ "UVs" because unintentional alteration of the number of vertices or faces can result!
Postprocessing GigaMesh Renderings
GigaMesh Renderings
The artifact can be depicted in GigaMesh using the baked color. For using the color as label, an additional step for a color calibration is partly needed using Blender (version 4.0).
Color Annotation to Binary Label
One of the problems using Blender is that the UV mapping results in vertex colors with gray scaled values. To convert the grey-scaled vertex to label the the vertex colors use the script "color_to_label.py" to create a binary label (ridge = label 1, scar = label 2). For using this step use the following code in the command-line:
-
python color_to_label.py "/path/to/file/" "file_name" ".ply" 10
-
the last number has to be adjusted to define the minimum label size.
-
please be aware to install python before trying and "pip install trimesh" [@trimesh]. (Dawson-Haggerty & others, 2024)
To import the label file follow the instruction:
- File → Import → Import Labels
![]() |
![]() |
---|---|
References
- Falcucci, A., & Peresani, M. (2022). The Open Aurignacian Project. Volume 1: Fumane Cave in northeastern Italy (Version 1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.6362150
- Linsel, F., Bullenkamp, J. P., & Mara, H. (2023). 3D Data Derivatives of Grotta di Fumane: GigaMesh- processed, Annotations and Segmentations (Version 1.0.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.8288967
- Mara, H., & Krömker, S. (2013). Vectorization of 3D-Characters by Integral Invariant Filtering of High-Resolution Triangular Meshes. 2013 12th International Conference on Document Analysis and Recognition, 62–66. https://doi.org/10.1109/ICDAR.2013.21
- Mara, H., Krömker, S., Jakob, S., & Breuckmann, B. (2010). GigaMesh and gilgamesh: –3D multiscale integral invariant cuneiform character extraction. Proceedings of the 11th International Conference on Virtual Reality, Archaeology and Cultural Heritage, 131–138.
- Bullenkamp, J. P., Häberle, T., & Mara, H. (2023). MorseMesh (Version v0.1). Zenodo. https://doi.org/10.5281/zenodo.8297368
- Dawson-Haggerty, M., & others. (2024). trimesh. Python Library.