holodepth

3D Model Formatları · OBJ · Temel Yapı

Face Tanımları: OBJ'de f Satırları ve Topoloji Birleştirmesi

«Köşeler var, model içi boş veya delikli» çoğu zaman yanlış f winding'i veya kopuk indeks zinciridir. Vertex Listesi konum havuzunu sabitledi; bu sayfa Temel Yapı hattının topoloji adımına geçer: hangi vertex indeksleri hangi yüzeyi kaplar?

Holodepth'te face satırı OBJ'nin «çizilebilir geometri» sözleşmesidir. Yalnızca v listesi nokta bulutudur; f köşeleri birleştirerek üçgen, dörtgen veya çokgen yüzey tanımlar. Her köşe referansı isteğe bağlı olarak vt ve vn indekslerini taşır; slash sözdizimi bu üç havuzu face seviyesinde eşler. Normal vektörün kendisi Normal Verileri'nde; UV koordinatının kendisi UV Verileri'nde kalır.

Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «OBJ face, 1-based vertex (ve isteğe bağlı vt/vn) indekslerinin yüzey döngüsüdür. Üçgen ve dörtgen yaygındır; n-gon loader'da triangulate edilir. Negatif indeks sondan sayar. Winding yönü ön/arka yüz ve normal türetimini etkiler. glTF'deki indices accessor aynı topoloji fikrinin binary karşılığıdır; detay Index Buffer sayfasındadır.»

Bu sayfanın sınırı · komşu konularla ayrım

Bu sayfa OBJ face topolojisini anlatır:

  • f satır sözdizimi (v/vt/vn birleşimi)
  • Üçgen, quad, n-gon ve triangulation beklentisi
  • Negatif indeks kuralı
  • Winding (dolaşım yönü) ve görünürlük
  • Eksik vt / vn bileşenleri
  • Face ile obje/materyal sınırı (üst seviye)
  • Holodepth teşhis açıları

Bilinçli olarak dışarıda bırakılan konular:

  • v koordinat havuzu → Vertex Listesi
  • vn vektör tanımı → Normal Verileri
  • vt UV tanımı → UV Verileri
  • MTL, usemtl, map_Kd → MTL Sistemi
  • glTF accessor byte düzeni → Index Buffer (glTF)
  • s smoothing group derinliği → Normal Verileri / export notları
  • OBJLoader triangulation kodu → Three.js

Kısa ayrım: Face Tanımları «hangi indeksler bir yüzey?» · Vertex Listesi «indeks neyi işaret eder?» · Index Buffer (glTF) «indeksler binary'de nasıl?»

Temel Yapı · topoloji adımı

Sıra Önek Rol Sayfa
Önce v Konum havuzu Vertex Listesi
Şimdi f Yüzey birleştirme Face Tanımları (bu sayfa)
Sonra vn · vt Shading ve doku köşesi Normal · UV

Topoloji rolü: noktadan yüzeye

Wavefront OBJ geometriyi referans tabanlı kurar: önce köşe konumları birikir, sonra face satırları bu köşeleri kapalı döngüler halinde birleştirir. Bu, glTF'de tek primitive içinde attributes.POSITION + indices birlikteliğine kavramsal karşılıktır; fark OBJ'nin metin ve ayrık listeler kullanmasıdır.

Vertex listesi haritadaki noktaları işaretler. Face satırları «şu noktaları birleştir, bu parsel yüzeydir» der. Normal ve UV, face köşesinde hangi listeden okunacağını slash ile seçer; yüzeyin kendisi yine f satırındadır.

Holodepth debug sırası: «mesh yok» şikayetinde önce Vertex Listesi teşhisi, ardından «en az bir geçerli f var mı?» Bu sayfa ikinci kapıdır.

f slash sözdizimi: v/vt/vn

Her face köşesi bir token'dır; slash ile üç bağımsız 1-based indeks birleşir:

f  v1/vt1/vn1  v2/vt2/vn2  v3/vt3/vn3  ...
# Örnek: yalnızca konum (vt ve vn atlanmış)
f 1 2 3
# Tam köşe: konum / uv / normal
f 1/1/1 2/2/2 3/3/1
Köşe token biçimleri
Yazım Anlam
f v1 v2 v3 Yalnızca vertex indeksi; vt/vn sonradan veya varsayılan
f v1/vt1 v2/vt2 v3/vt3 Konum + UV; normal ayrı hesaplanabilir
f v1//vn1 v2//vn2 v3//vn3 Konum + normal; UV yok (çift slash)
f v1/vt1/vn1 ... Üç liste tam eşleme

Üç indeks listesi birbirinden bağımsız büyür ( Vertex Listesi · indeks). Face'teki 2/5/1 «ikinci v, beşinci vt, birinci vn» demektir; aynı spatial köşede farklı vt UV seam'i için farklı token kullanılır.

Üçgen, dörtgen ve n-gon

OBJ face üç veya daha fazla köşe kabul eder. WebGL ve çoğu gerçek zamanlı motor yalnızca üçgen çizer; dörtgen ve n-gon loader veya export aracında triangulate edilir. Format quad'ı yasaklamaz; runtime davranışı triangulation kuralına bağlıdır.

  • Üçgen (f 1 2 3): en güvenli; winding net
  • Quad (f 1 2 3 4): DCC'den sık; diagonal seçimi görünümü değiştirebilir
  • n-gon: concave polygon triangulation hatası riski; CAD'den gelebilir
# Aynı quad, iki tri ayrımı (kavramsal)
# f 1 2 3 4  →  (1,2,3) + (1,3,4)  veya  (1,2,4) + (2,3,4)
# Farklı diagonal = farklı normal interpolasyonu / UV warp

Holodepth web hedefi: glTF export öncesi quad'ları bilinçli üçgenlemek winding ve UV tutarlılığı için tercih edilir. OBJ ara dosyada quad bırakmak mümkündür; pipeline sorumluluğu triangulation algoritmasını dokümante etmektir.

Negatif indeks: sondan sayma

Face token'ında negatif sayı «listenin sonundan» anlamına gelir: -1 son vertex (veya son vt/vn, hangi bileşense). Bu, modüler OBJ üretiminde «son eklenen köşeyi kapat» kalıbını kısaltır; parser'da liste boyutu gerekir.

v 0 0 0
v 1 0 0
v 0 1 0
f -3 -2 -1
# f 1 2 3 ile aynı üçgen (üç v satırı varsayımıyla)

Karışık pozitif/negatif kullanım geçerlidir; hata ayıklamada okunabilirliği düşürür. Holodepth CI: üretim OBJ'lerinde negatif indeks ya tamamen yasak ya da tek stil rehberi ile sınırlandırılır; golden parse testleri pozitif forma göre yazılır.

Winding order: ön yüz, arka yüz, flip

Köşelerin face içindeki sırası (saat yönü / saat tersi) yüzeyin «ön» tarafını belirler. Backface culling açık renderers'ta ters winding görünmez yüzey üretir; «içi dışarı model» şikayetinin kökü çoğu zaman global scale -1 veya yanlış triangulation diagonal'ıdır.

glTF index buffer'da winding kavramı aynı mantıkla anlatılır ( Index Buffer · winding); OBJ'de sıra doğrudan f token dizisindedir. Normal vektör dosyada ayrı (vn) olsa bile tutarsız winding + otomatik normal hesabı çakışma üretir ( Normal Verileri).

  • Right-hand rule: parmak uçları köşe sırası, başparmak normal
  • Mirror export: tek eksen flip winding'i tersine çevirebilir
  • Double-sided materyal: culling kapalı; hata gizlenir, performans düşer

Eksik bileşenler ve tutarlılık

Face'te yalnızca v indeksi verildiğinde loader genelde düz shading veya hesaplanmış normal kullanır; UV yoksa doku uygulanamaz veya varsayılan (0,0) kullanılır. Karışık dosyalar (bazı face'lerde vt, bazılarında yok) validator uyarısı üretmeli; sessiz devam texture stretch ile biter.

Köşe başına tutarlılık kuralı: aynı face içinde tüm token'lar aynı «şablonu» takip etmeli (hepsi v/vt/vn veya hepsi yalnızca v). Bir köşede 1/2/1, diğerinde yalnızca 3 spec açısından yorumlanabilir ama export araçları arasında farklı davranış riski taşır.

İndeks taşması

f içindeki herhangi bir bileşen ilgili listenin boyutunu aşarsa geometry bozulur veya parse reddedilir. Vertex sayısı küçük, face indeksi büyük: tipik «OBJ birleştirme script'i yanlış offset» hatası.

Obje, grup ve materyal sınırı

o ve g satırları sonraki face'lerin mantıksal sahibini değiştirir; vertex havuzu global kalır ( Vertex Listesi · o/g). usemtl name sonraki face'lere materyal atar; MTL dosyasındaki tanım ayrı okunur (MTL Sistemi dalı).

Face sırası draw batch gruplamasına ipucu verir: aynı materyalin face'leri ardışık yazılırsa runtime daha az state değişimi. Format zorunlu kılmaz; optimizasyon export düzenidir. glTF'de karşılık material slot + primitive ayrımı farklı katmanda çözülür.

OBJ face → glTF indices köprüsü

Dönüştürücü tipik olarak face döngülerini triangulate eder, köşe başına benzersiz (v, vt, vn) tuple oluşturur ve uint16/32 indices dizisi yazar. Welding identik tuple'ları birleştirir; UV seam'de tuple ayrılır ( Vertex Listesi · tekrar). OBJ metin face satırı glTF binary index buffer'a politika ile map edilir; birebir byte karşılığı yoktur.

Derin index buffer semantiği, winding tabloları ve non-indexed karşılaştırma Index Buffer (glTF) sayfasındadır. Face okuyucusu «OBJ tarafında topoloji metni»ni öğrenir; glTF tarafında «sıkışık indeks dizisi»ni.

Holodepth perspektifleri ve teşhis

Non-manifold ve T-junction

Üçten fazla yüzün aynı kenarı paylaşması veya «T» birleşimi CAD'den gelen OBJ'de sık görülür. Real-time motorlar sorunsuz çizebilir veya normal hesabını bozar; format hata vermez. glTF export öncesi mesh repair pipeline'ı face tabanlı teşhis gerektirir.

Line ve point elemanları (l, p)

OBJ wireframe veya point cloud için l (polyline) ve p (point) satırları da tanımlar. Holodepth Temel Yapı omurgası kapalı mesh'e odaklanır; line/point ayrı import yoludur. «Face var ama çizgi de var» karışık dosyada hangi primitive'in render edileceği ürün kararıdır.

Degenerate face

Aynı vertex indeksinin face içinde tekrarı (sıfır alanlı üçgen) parse geçer, culling ve ışık hesabında gürültü üretir. Export sonrası «degenerate triangle remove» adımı face listesi üzerinde çalışır.

Smoothing group ipucu

s off / s 1 gibi smoothing group satırları komşu face'lerin normal interpolasyonunu etkiler; face topolojisi ile birlikte okunur. Derinlik Normal Verileri sayfasına bırakılır; burada yalnızca «face sırası + smoothing birlikte shading'i belirler» notu sabitlenir.

Face katmanı teşhis soruları

  1. En az bir geçerli f satırı var mı?
  2. Tüm indeksler ilgili listelerin boyutunda mı?
  3. Quad/n-gon triangulation kuralı dokümante mi?
  4. Winding tutarlı mı (iç yüzey / flip)?
  5. vt/vn şablonu face'ler arasında karışık mı?
  6. Negatif indeks kasıtlı mı, test golden dosyayla uyumlu mu?
  7. Non-manifold kenar sayısı kabul edilebilir mi?
  8. glTF export sonrası index count beklenen tri sayısı ile örtüşüyor mu?

Holodepth içgörüsü

«Model delikli» raporunda önce tek face'i izole edin: üç bilinen v ile f 1 2 3 winding'ini ters çevirin. Düzeliyorsa sorun global scale değil topoloji yönüdür. Düzelmiyorsa indeks taşması veya kopuk v havuzuna dönün.

Topoloji tamam; shading ve doku köşeleri

Face satırları «hangi köşeler birleşir?» sorusunu yanıtlar. Köşe başına ışık yönü ve doku adresi ayrı listelerden gelir:

  1. Normal listesi Normal Verileri: vn ve face'te //vn eşlemesi
  2. UV listesi UV Verileri: vt ve /vt eşlemesi

Format okuyucusu özeti: f = 1-based yüzey döngüsü; token v/vt/vn. Tri/quad/n-gon; negatif indeks; winding kritik. glTF indices dönüşümde triangulate + tuple welding. Normal ve UV içerikleri sonraki iki sayfada.