Blender'da Roblox Stud birim sistemini birebir simüle eden, viewport HUD destekli profesyonel bir addon.
- Nedir?
- Kurulum
- Hızlı Başlangıç
- Panel Referansı
- Viewport HUD
- Teknik Detaylar
- Dosya Yapısı
- Sorun Giderme
Roblox, nesnelerin boyutunu metrik yerine Stud adlı kendi birimiyle ölçer.
1 Stud = 0.28 metre — bu çevirimi el ile yapmak zordur ve hataya açıktır.
StudConv, bu dönüşümü tamamen otomatikleştirir:
| Özellik | Açıklama |
|---|---|
| Birim Modu | Sahnenin scale_length değerini tek tıkla 0.28'e çeker |
| Stud Converter | X / Y / Z değerlerini Stud'da gir, objeye otomatik uygular |
| Scale Koruması | transform_apply ile obje scale'i her zaman (1, 1, 1) kalır |
| Viewport HUD | Seçili objenin kenarlarında canlı Stud ölçüleri |
| Live Display | Transform sırasında (S, G, R) anlık Stud göstergesi |
| Ikon Desteği | Obje yanında özel PNG ikon (opsiyonel) |
- Blender 4.0 veya üstü
- Python 3.10+ (Blender ile birlikte gelir)
StudConv/klasörünü Blender'ın addon dizinine kopyala- Blender → Edit › Preferences › Add-ons › Install
- Klasörü seç → Enable et
cd ~/Documents/Projeler
zip -r StudConv.zip StudConv/Blender → Edit › Preferences › Add-ons › Install from File → StudConv.zip
# Blender 4.x addon dizinine sembolik link kur
ln -s ~/Documents/Projeler/StudConv \
~/Library/Application\ Support/Blender/4.x/scripts/addons/StudConvBlender'da N tuşuna bas → "Roblox Toolbox" sekmesi görünüyorsa kurulum başarılı ✅
N-Panel › Roblox Toolbox › Scene Scale › [ Set Global Stud Scale ]
scene.unit_settings.scale_length otomatik 0.28'e ayarlanır.
Artık Blender'daki 1 birim = 1 Stud.
Bir küp seç → Stud Dimensions kutularına gir:
X: 4 Y: 1 Z: 2
[ Convert ]
Sonuç: obj.dimensions = (1.12m, 0.28m, 0.56m) ve obj.scale = (1, 1, 1) ✅
N-Panel › Viewport HUD › [ Live Stud Display ]
S ile ölçeklerken viewport sağ üstünde anlık Stud değerleri güncellenir.
ESC veya butona tekrar tıkla → modal kapanır.
┌─────────────────────────────────┐
│ 🌐 Unit Mode │
│ [ Default ] / [ Stud ] │
├─────────────────────────────────┤
│ 🔧 Stud Dimensions │
│ X (Studs): [ 4.00 ] │
│ Y (Studs): [ 1.00 ] │
│ Z (Studs): [ 2.00 ] │
│ [ Convert ] │
│ ┌──────────────────────────┐ │
│ │ Current: X:4.00 Y:1.00 │ │ ← Seçili objenin anlık Stud değeri
│ │ Z:2.00 │ │
│ └──────────────────────────┘ │
├─────────────────────────────────┤
│ 🌍 Scene Scale │
│ [ Set Global Stud Scale ] │ ← scale_length = 0.28
│ [ Reset Default Scale ] │ ← scale_length = 1.0
├─────────────────────────────────┤
│ 👁 Viewport HUD │
│ ☑ Measurements ☑ Icon │
│ [ Live Stud Display ] │
└─────────────────────────────────┘
| Kontrol | İşlev |
|---|---|
| Unit Mode | scale_length callback'i tetikler (Default ↔ Stud) |
| Convert | obj.dimensions atar → transform_apply(scale=True) çalıştırır |
| Set Global Stud Scale | Sahne ölçeğini 0.28'e çeker, unit_mode = 'STUD' ayarlar |
| Reset Default Scale | scale_length = 1.0, unit_mode = 'DEFAULT' |
| Measurements | Viewport HUD açık/kapalı |
| Icon | Stud ikonu göster/gizle |
| Live Stud Display | Modal toggle (ESC veya tekrar tıkla ile kapat) |
Bir mesh objesi seçili olduğunda viewport üzerinde otomatik çizilir:
┌──────────────┐
│ Z: 2.0 Stud │ ← Z kenar ortası
└──────────────┘
┌──────────────┐ ┌──────────────┐
│ Y: 1.0 Stud │ │ X: 4.0 Stud │
└──────────────┘ └──────────────┘
- Yazı: Beyaz, 1px siyah gölge
- Arka plan: Yarı saydam siyah rounded rectangle
- Obje seçimi kalktığında HUD kaybolur
Live Stud Display modalı aktifken viewport sağ üstünde:
╔══════════════════╗
║ X: 4.25 Stud ║
║ Y: 1.02 Stud ║
║ Z: 2.50 Stud ║
╚══════════════════╝
Transform tuşları (S, G, R) native Blender ile çalışmaya devam eder
— modal PASS_THROUGH döndürdüğü için hiçbir event'i tüketmez.
icons/stud_icon.png dosyasını klasöre koyarsan objenin yanında görünür.
- Önerilen boyut: 64 × 64 px, alfa kanallı PNG
- İkon yoksa HUD sessizce ikonsu devam eder
STUD_TO_METER = 0.28
# Stud → Metre
meters = studs * 0.28
# Metre → Stud
studs = meters / 0.28# Blender dimensions ayarlayınca scale değişir
obj.dimensions = (studs_x * 0.28, studs_y * 0.28, studs_z * 0.28)
# Scale'i bake ederek 1.0'a sıfırla (KRİTİK)
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
# → obj.scale = (1.0, 1.0, 1.0) ✅draw_hud_callback() ← SpaceView3D.draw_handler_add(..., 'POST_PIXEL')
│ bpy.context kullanır (stale context riski yok)
├─ _draw_axis_measurements()
│ ├─ bound_box köşe → mat @ Vector → 3D
│ ├─ location_3d_to_region_2d() → 2D ekran koordinatı
│ └─ _draw_label_with_background()
│ ├─ _draw_rounded_rect() ← batch cache (int_w, int_h, r, s)
│ └─ blf.draw() ← metin + gölge
└─ _draw_stud_icon()
├─ gpu.texture.from_image() ← tek seferlik yükleme
├─ unit batch (0,0 → ICON_SIZE) ← tek seferlik oluşturma
└─ gpu.matrix.translate() ← her frame sadece pozisyon
| Teknik | Nerede |
|---|---|
| Draw handler ilk satırda guard kontrolü | draw_hud_callback |
Rounded rect batch'leri (int_w, int_h, r) ile cache |
_batch_cache dict |
Icon shader + batch tek seferlik, gpu.matrix.translate ile konumlandırma |
_draw_stud_icon |
PNG texture tek seferlik bpy.data.images + gpu.texture.from_image |
_load_icon_texture |
bpy.ops draw handler içinde asla çağrılmıyor |
Tüm HUD |
Modal timer: 16ms (~60fps) ile tag_redraw |
modal_stud_display |
| Alan | Kullanılan (4.0+) |
|---|---|
| GPU shader | gpu.shader.from_builtin('UNIFORM_COLOR') |
| Blend modu | gpu.state.blend_set('ALPHA') |
| Font boyutu | blf.size(font_id, size) — eski DPI argümanı yok |
| Texture | gpu.texture.from_image(image) |
| Manifest | blender_manifest.toml (4.2+) + bl_info fallback (4.0/4.1) |
StudConv/
│
├── __init__.py # bl_info, register/unregister orkestrasyonu
├── blender_manifest.toml # Blender 4.2+ extension manifest
│
├── constants.py # STUD_TO_METER = 0.28, renkler, stil sabitleri
├── utils.py # studs_to_meters(), meters_to_studs(), project_3d_to_2d()
├── properties.py # StudConvProperties (unit_mode, stud_dimensions, show_hud…)
│
├── operators.py # convert_dimensions, set_global_stud_scale,
│ # reset_default_scale, toggle_hud
├── panels.py # VIEW3D_PT_studconv_main — "Roblox Toolbox" N-Panel
│
├── hud_drawing.py # GPU rounded rect · BLF metin+gölge · ikon · axis ölçüleri
├── modal_stud_display.py # PASS_THROUGH live-stud modal operator
│
└── icons/
└── stud_icon.png # Opsiyonel, 64×64 alfa-kanallı PNG
# register()
properties → operators → modal_operator → panel → draw_handler
# unregister()
draw_handler → panel → modal_operator → operators → propertiesshow_hudcheckbox açık mı? (Viewport HUD bölümü)- Seçili bir mesh objesi var mı? (Armature, empty, ışık vb. desteklenmiyor)
- Object Mode'da mı çalışıyorsun? (Edit Mode'da poll başarısız olur)
- Aktif obje seçili ve mesh tipi mi?
- Butona tıkladıktan sonra Blender bilgi çubuğunda "Live Stud Display: ON" mesajı geldi mi?
- Modalı kapatmak için aynı butona tekrar tıkla veya
ESCbas
StudConv/icons/stud_icon.pngdosyası gerçekten orada mı?- PNG alfa kanallı mı? (Beyaz arka planlı PNG garip görünür)
- Blender konsolunda
StudConv:ile başlayan hata var mı?
Windows: Window › Toggle System Console macOS / Linux: Blender'ı terminalden başlat
/Applications/Blender.app/Contents/MacOS/BlenderGPL-3.0-or-later — Özgürce kullan, değiştir, dağıt.