holodepth

3D Model Formatları · OBJ · Temel Yapı

Normal Verileri: OBJ'de vn Listesi ve Yüzey Yönü

«Model düz karton gibi, köşeler keskin parlama» çoğu zaman eksik vn veya smoothing group kopukluğudur. Face Tanımları topolojiyi sabitledi; bu sayfa shading verisine geçer: ışık hangi yön vektörünü okuyacak?

Holodepth OBJ Temel Yapı hattında normal, konum (v) ve bağ ( f) listelerinden bağımsız üçüncü havuzdur. Her vn satırı birim yönde (nx, ny, nz) taşır; face köşesi v//vn veya v/vt/vn ile bu havuza bağlanır. glTF tarafındaki NORMAL accessor semantic'i ( Normal Verileri · glTF) aynı «yüzey yönü» sorusunu binary attribute olarak cevaplar; bu sayfa Wavefront metin listesini anlatır, accessor byte düzenine girmez.

Sayfayı bitirdiğinizde şu cümleyi kurabilmelisiniz: «OBJ normal listesi vn satırlarından oluşur; 1-based indeks face'te seçilir. Smoothing group (s) komşu face'lerin normal interpolasyonunu yönetir. Hard edge için aynı konumda farklı vn veya farklı v kopyası kullanılır. vn yoksa loader face normal hesaplar; CAD faceted export'ta her yüz düz normal ister. Normal map MTL'de ayrı konudur; vn geometri shading'idir.»

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

Bu sayfa OBJ normal havuzu ve shading sözleşmesini anlatır:

  • vn satır sözdizimi
  • 1-based vn indeksi ve face bağlantısı
  • Smoothing group (s) davranışı
  • Flat vs smooth, hard edge stratejisi
  • vn eksikliği ve otomatik hesap
  • Holodepth teşhis açıları

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

Kısa ayrım: vn (OBJ Format) «yön listesi metinde» · NORMAL (glTF Format) «yön attribute binary'de» · Normal map (Runtime) «doku ile mikro yön»

Neden ayrı normal listesi?

Üç köşeli bir yüzeyin konumu v ile bellidir; fakat aynı geometri farklı «parlaklık okuması» verebilir. Real-time shading, her köşede (veya her pikselde) «yüzey dışarı hangi yöne bakıyor?» sorusunu sorar. OBJ bu cevabı ayrı vn tablosunda saklar; ışık hesabı format dosyasında yoktur.

glTF Normal Data sayfası face normal vs vertex normal ayrımını accessor dilinde anlatır; OBJ'de karşılık «her köşe token'ında hangi vn indeksi?» sorusudur. İki format aynı grafik fikri, farklı paketleme.

vn satırı: nx ny nz

vn nx ny nz
# Örnek: +Y yukarı birim normal (exporter'a göre eksen değişir)
vn 0.0 1.0 0.0
vn 0.70710678 0.70710678 0.0

Spesifikasyon vektörün yönünü taşır; uzunluğun 1.0 olması beklenir (unit normal). Normalize edilmemiş vn export'ta görülür; loader çoğu zaman normalize eder, spec garantisi değildir. Sıfır vektör (0 0 0) geçersiz yöndür; shading NaN veya siyah leke üretebilir.

vn listesi v listesi gibi global ve 1-based indekslenir ( Vertex Listesi · indeks). Onuncu vn satırı indeks 10'dur; face'te //10 veya üçlü token'ın son bileşeni olarak geçer.

Face köşesinde vn seçimi

Normal, face satırında konum indeksinden bağımsız seçilir:

vn 0.0 0.0 1.0
vn 0.0 0.0 1.0
v  ...  (konumlar)
f 1//1 2//1 3//2
# Köşe 1 ve 2 aynı vn; köşe 3 farklı vn → crease / hard edge ipucu

Tam token v/vt/vn formu Face Tanımları · slash bölümünde; burada yalnızca «vn bileşeni shading yönünü seçer» kuralı sabitlenir. Yalnızca f 1 2 3 (vn yok) yazıldığında loader genelde face normal veya vertex normal türetir; dosyada shading niyeti kaybolur.

Smoothing group: s satırları

OBJ'ye özgü en sık atlanan shading mekanizması smoothing group'tur. Face satırlarından önce gelen s komutu, sonraki face'lerin hangi «yumuşatma grubuna» ait olduğunu işaretler:

s 1
f 1 2 3
f 1 3 4
s 2
f 5 6 7
s off
f 8 9 10
s komutları (özet)
Satır Etki
s 1 (sayı) Sonraki face'ler grup 1; komşu aynı grupta smooth birleşim
s off Smoothing kapalı; face normal / flat shading eğilimi
s (boş / farklı exporter) Araç yorumu; dokümante edin

İki face aynı kenarı paylaşır ama farklı smoothing group'taysa hard edge oluşur: köşe normal interpolasyonu kesilir. Bu, glTF'de duplicate vertex + split normal ile aynı görsel sonuca gidebilir; OBJ'de grup numarası ile ifade edilir. Face Tanımları sayfasında yalnızca ipucu vardı; mekanizma burada derinleşir.

Flat vs smooth: aynı mesh, farklı okuma

Flat shading: her üçgen yüzey normali sabit; faceted görünüm (CAD, düşük poly stil). Smooth shading: köşe normal'leri komşu yüzlerden ortalama/interpolasyon; organik eğriler. OBJ'de ikisi de aynı v ve f ile mümkün; fark vn dağılımı ve s gruplarındadır.

  • Her face için ayrı üç vn (faceted) → keskin kenarlar
  • Paylaşılan köşede tek vn → smooth kubbe hissi
  • s off + otomatik face normal → düz karton model

glTF Normal Data flat/smooth kavramını attribute tablosu üzerinden anlatır; OBJ okuyucusu «vn + s» birlikte okumalıdır. Yalnızca vn'e bakıp s'yi yok saymak Blender ile viewer arası fark üretir.

Hard edge: duplicate vn veya duplicate v

Keskin kenar için iki yaygın OBJ stratejisi:

  1. Aynı konum, farklı vn: tek v, face köşelerinde farklı vn indeksi (UV seam olmadan mümkün)
  2. Duplicate v + duplicate vn: spatial weld yok; export araçları bazen bunu tercih eder ( Vertex Listesi · tekrar)

glTF export'ta hard edge genelde indexed geometry'de köşe bölünmesine dönüşür. OBJ'de bölünme metin listelerinde görünür; envanter «vn sayısı > v sayısı mı?» sorusu hard edge varlığına ipucu verir.

vn eksik: otomatik normal türetme

Birçok minimal OBJ yalnızca v ve f taşır. Loader winding'e göre face normal hesaplar, komşu face'lerden vertex normal ortalar (smooth) veya ortalamaz (flat). Davranış loader'a özgüdür; format sabitlemez.

Holodepth üretim kuralı: dağıtım öncesi explicit vn + tutarlı s export edin; «viewer hesaplasın» pipeline'lar arası tutarsızlık üretir. CAD'den gelen faceted modellerde her face için vn yazmak kasıtlıdır; otomatik smooth uygulanırsa yüzey «yumuşadı» sanılır.

Winding ve normal flip

Türetilmiş normal, face winding'e bağlıdır ( Face Tanımları · winding). Mirror export veya negatif scale sonrası vn el ile düzeltilmediyse iç yüzey aydınlatması görülür.

OBJ → glTF NORMAL (köprü, tek paragraf)

Dönüştürücü, face köşe başına seçilen vn'yi (veya türetilmiş normali) glTF primitive attributes.NORMAL float vec3 dizisine yazar; indeks buffer köşe bölünmesini yansıtır. Tangent/bitangent OBJ core'da yoktur; normal map hedefi glTF'de TANGENT gerektirir ( Tangent Data). OBJ'deki map_Bump MTL satırı mikro pürüz dokusudur; vn ile karıştırılmamalıdır.

Holodepth perspektifleri

CAD faceted export

Mühendislik mesh'lerinde her yüzey patch'i düz normal ile gelir; smooth s uygulamak tasarım niyetini bozar. «OBJ kötü görünüyor» şikayeti bazen yanlış smooth post-process'tir.

Bump map vs vn

MTL map_Bump / bump shader'ı etkiler; geometri vn değildir. İkisi birlikte kullanılabilir; debug'da hangi katmanın sorunlu olduğunu ayırın (MTL Sistemi dalı).

Smoothing split unutulması

Blender export'ta «Write Smooth Groups» kapalıysa viewer'da beklenmedik hard edge veya tam tersi oluşur. Export checklist'te s satırı varlığı kontrol edilir.

Teşhis özeti (madde madde)

  • Dosyada vn satırı var mı, yoksa türetime mi güveniliyor?
  • vn vektörleri birim uzunlukta mı, sıfır vektör var mı?
  • Face token'larında vn bileşeni tutarlı mı?
  • s grupları beklenen kenarlarda mı değişiyor?
  • Winding flip sonrası vn hâlâ dışa mı bakıyor?
  • vn sayısı / v sayısı oranı hard edge beklentisiyle uyumlu mu?
  • glTF export sonrası NORMAL attribute dolu mu?

Holodepth içgörüsü

Shading bug'unda önce materyal rengine değil: vn var mı, s grup doğru mu, winding flip var mı? üçlüsüne bakın. Üçü yeşilse sorun MTL veya normal map katmanındadır; biri kırmızıysa hâlâ Temel Yapı shading sözleşmesindedir.

Normal tamam; doku adresi listesi

Temel Yapı hattının son veri listesi UV'dir: vt satırları ve face'te /vt bileşeni.

Sıradaki sayfa: UV Verileri. MTL ve doku yolu MTL Sistemi dalında; glTF TEXCOORD_0 UV Channels (glTF) sayfasında kalır.

Format okuyucusu özeti: vn = global normal havuzu; face köşesinde seçilir; s komşu yüzey yumuşatmasını yönetir. Flat/smooth ve hard edge vn dağılımı ile kodlanır. glTF NORMAL dönüşüm çıktısıdır; normal map ayrı katmandır.