Этот код создает стандартную шестигранную игральную кость с правильным расположением точек на гранях (сумма противоположных граней всегда равна 7). Вы можете настроить размер кости, радиус и глубину точек, а также радиус скругления углов, изменяя соответствующие параметры в начале кода.
Для 3D-печати эта модель хорошо подходит, так как имеет гладкие скругленные углы и четкие углубления для точек.
OpenScad скрипт создания игральной кости
// Параметры игральной кости
size = 20; // Размер кости
dot_radius = 1.5; // Радиус точек
dot_depth = 1; // Глубина углублений точек
corner_radius = 2; // Радиус скругления углов
module rounded_cube(size, r) {
minkowski() {
cube([size-r*2, size-r*2, size-r*2], center=true);
sphere(r=r);
}
}
module die(size) {
difference() {
// Основная форма кости
rounded_cube(size, corner_radius);
// Грань 1 (одна точка)
translate([0, 0, size/2 - dot_depth/2])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
// Грань 6 (противоположная грань 1)
for (x = [-size/4, size/4]) {
for (y = [-size/4, 0, size/4]) {
translate([x, y, -size/2 + dot_depth/2])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
}
// Грань 2
translate([size/2 - dot_depth/2, 0, 0])
rotate([0, 90, 0]) {
translate([size/4, size/4, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
translate([-size/4, -size/4, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
// Грань 5 (противоположная грань 2)
translate([-size/2 + dot_depth/2, 0, 0])
rotate([0, 90, 0]) {
for (x = [-size/4, size/4]) {
for (y = [-size/4, size/4]) {
translate([x, y, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
}
translate([0, 0, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
// Грань 3
translate([0, size/2 - dot_depth/2, 0])
rotate([90, 0, 0]) {
translate([0, 0, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
translate([size/4, size/4, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
translate([-size/4, -size/4, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
// Грань 4 (противоположная грань 3)
translate([0, -size/2 + dot_depth/2, 0])
rotate([90, 0, 0]) {
for (x = [-size/4, size/4]) {
for (y = [-size/4, size/4]) {
translate([x, y, 0])
cylinder(h=dot_depth, r=dot_radius, center=true, $fn=20);
}
}
}
}
}
// Создаем игральную кость
die(size);
Пояснения к коду
Код создает шестигранную игральную кость с помощью OpenSCAD. Вот подробное объяснение структуры:
- Параметры:
size– размер кости (длина ребра)dot_radius– радиус точек на граняхdot_depth– глубина выдавливания точекcorner_radius– радиус скругления углов кости
- Основная структура:
- Сначала создается базовая кубическая форма со скругленными углами
- Затем на каждой грани создаются точки путем вычитания цилиндров
- Для каждой грани используется подходящее расположение точек (1-6)
- Расположение точек:
- Грань 1: одна точка в центре
- Грань 2: две точки по диагонали
- Грань 3: три точки (одна в центре, две по диагонали)
- Грань 4: четыре точки по углам
- Грань 5: пять точек (четыре по углам, одна в центре)
- Грань 6: шесть точек (два ряда по три)
Базовая форма кости создается при помощи функции minkowski() ;
module rounded_cube(size, r) {
minkowski() {
cube([size-r*2, size-r*2, size-r*2], center=true);
sphere(r=r);
}
}

Возможные модификации
Добавление текстурирования поверхности:
module textured_die(size) {difference() {
die(size);
// Добавляем тонкую текстуру поверхностиfor(i = [0:100]) {
for(j = [0:100]) {
rotate([rands(0,360,1)[0],rands(0,360,1)[0],rands(0,360,1)[0]])
translate([rands(-size/2,size/2,1)[0], rands(-size/2,size/2,1)[0], size/2])
cylinder(h=0.05, r=0.1, $fn=3);
}
}
}
}

Создание кости с альтернативным числом граней (например, 8-гранная кость):
module d8(size) {
difference() {
// Октаэдр (8-гранная кость)
polyhedron(
points = [
[size/2, 0, 0], [-size/2, 0, 0], [0, size/2, 0],
[0, -size/2, 0], [0, 0, size/2], [0, 0, -size/2]
],
faces = [
[0, 2, 4], [2, 1, 4], [1, 3, 4], [3, 0, 4],
[0, 2, 5], [2, 1, 5], [1, 3, 5], [3, 0, 5]
]
);
// Добавление точек (упрощенный пример)
for (i = [1:8]) {
// Здесь нужно добавить точки для каждой грани
}
}
}
Добавление полого внутреннего пространства для уменьшения количества материала:
module hollow_die(size, wall_thickness) {
difference() {
die(size);
// Создание полого внутреннего пространства
cube(size - 2*wall_thickness, center=true);
}
}
Создание набора костей разных размеров:
module dice_set() {
translate([0, 0, 0])
die(20); // d6 размером 20
translate([30, 0, 0])
die(15); // d6 размером 15
translate([0, 30, 0])
die(10); // d6 размером 10
}
Советы по 3D-печати игральных костей
- Ориентация при печати:
- Печатайте кость, расположив её на углу (на трёх гранях), чтобы минимизировать необходимость поддержек.
- Такая ориентация также даст более равномерные свойства по всем направлениям.
- Заполнение:
- Используйте высокий процент заполнения (около 50-70%) для обеспечения равномерного веса.
- Если хотите создать особенно тяжелую кость, можно увеличить заполнение до 90-100%.
- Баланс:
- Для игральных костей критически важен баланс. Убедитесь, что кость имеет равномерное распределение веса.
- Если печатаете полую кость, используйте равномерную толщину стенок.
- Материалы:
- PLA подходит для базовых костей
- PETG даст большую прочность
- Для высококачественных костей рассмотрите возможность использования смол для SLA/DLP печати
- Постобработка:
- Шлифовка поможет сделать поверхности более гладкими
- Покраска точек контрастным цветом улучшит читаемость
- Можно нанести лак для защиты поверхности и придания глянца
Этот проект отлично подходит для настройки под личные предпочтения, и вы можете создать уникальный дизайн костей для настольных игр!






