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:
vnsatır sözdizimi- 1-based
vnindeksi 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:
vkonum → Vertex Listesifslash token detayı → Face TanımlarıvtUV → UV Verileri- glTF
NORMALaccessor, TANGENT → Normal Data (glTF), Tangent Data (glTF) - Normal map dokusu, mikro pürüz → Three.js Normal Map; OBJ'de
map_BumpMTL Sistemi - Işık denklemi, PBR → Three.js lighting
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
| 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:
- Aynı konum, farklı vn: tek
v, face köşelerinde farklı vn indeksi (UV seam olmadan mümkün) - 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
vnsatı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ı?
sgrupları 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;skomş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.