DmytroKhitro/pixel-art-normal-maps
Pixel-Art Normal Maps Synthetic (pixel-art sprite → camera-space normal map) image pairs for training and evaluating normal-map generation models for 2D pixel-art. This dataset accompanies a master's thesis on normal-map generation for pixelated images. Code: https://github.com/Dmiktor/pixel-art-normal-maps Load from datasets import load_dataset ds = load_dataset("<HF_USERNAME>/pixel-art-normal-maps", split="train") ex = ds[0] ex["color"] # PIL.Image - RGBA… See the full description on the dataset page: https://huggingface.co/datasets/DmytroKhitro/pixel-art-normal-maps.
Pixel-Art Normal Maps
Synthetic (pixel-art sprite → camera-space normal map) image pairs for training and evaluating normal-map generation models for 2D pixel-art.
This dataset accompanies a master's thesis on normal-map generation for pixelated images. Code: https://github.com/Dmiktor/pixel-art-normal-maps
Load
from datasets import load_dataset
ds = load_dataset("<HF_USERNAME>/pixel-art-normal-maps", split="train")
ex = ds[0]
ex["color"] # PIL.Image - RGBA pixel-art sprite (model INPUT)
ex["normal"] # PIL.Image - camera-space normal map (TARGET)
ex["size"], ex["model_id"], ex["filename"]Columns
One train split. Stored as Parquet with the image bytes embedded (loads anywhere, no external files).
How it was made
Low-poly 3D models indexed by Objaverse++ are filtered with CLIP to keep clean single-character meshes, then rendered twice in Blender under identical camera and pose: a stylised pixel-art colour pass and a matching camera-space normal pass. Identical framing means the two images align pixel-for-pixel.
Baseline results (masked angular error, validation = 1,449 images)
Citation
@misc{shapovalov2026pixelnormalmaps,
author = {Shapovalov, Dmytro},
title = {Pixel-Art Normal Maps: a synthetic dataset for normal-map generation},
year = {2026},
howpublished = {Hugging Face Hub},
note = {Derived from Objaverse++ / Objaverse assets}
}License & attribution
Released under CC BY 4.0. Rendered from Objaverse++ / Objaverse 3D assets, which carry their own licenses — please attribute Objaverse++ and respect upstream model licenses.
