Köşe rengi nedir?


31

Benim sorum başlığında ne yazıyor. Bu "köşe rengi" terimi çok görünür. Bunu anlamak için zor zamanlar geçiriyorum.

Örneğin:

Köşe, 3B alanda basit bir nokta değil mi? Öyleyse, bir noktanın rengi nasıl olabilir? Yoksa bu "renk" başka bir şey mi ifade ediyor?

Gerçek dışı motorun malzeme editöründe "Vertex Color" düğümü var.

Birisi soruma ışık tutabilir mi? “Köşe rengi nedir” derken gozlendiğimde işe yaramaz bir şey bulamadım, ancak benim için çok teknik olan belgeler.


2
Geometride, bir köşe uzayda sadece bir noktadır. Ancak 3B oluşturma için, nesnelerin hoş görünmesini istersiniz; bu, her köşeye, bir renk veya bir doku koordinatı gibi veya daha fazla bilgi eklemek anlamına gelebilir veya iskelet ağırlıkları anlamına gelir; hesaplamaları.
user253751 23:17

3
Sanırım kafanızın büyük bir kısmı, “vertex” ve “3D” grafiklerdeki “pozisyon” terimlerinin sık sık birleştirilmesinden kaynaklanıyor. Matematiksel olarak, “3B uzayda vertex basit bir nokta değil midir?” İfadesi doğrudur, ancak oyun motorları ve grafikler alanında, hayır, bir pozisyon 3B uzayda basit bir noktadır; ve (örgü) tepe, hemen hemen her zaman bir konuma sahip olan, ancak aynı zamanda normal, tanjant, doku koordinatı, renk ve / veya başka birçok veri parçasından herhangi birine sahip olabilen bir veri parçasıdır . Bir kafes tepe noktası, yalnızca oluşturma işleminin tepe aşamasında işlenen veri yığınından ibarettir.
Slipp D. Thompson 29:17,

Yanıtlar:


29

Köşe renkleri, tamamen dokulu bir 3B ağınız olduğunda o kadar da alakalı değildir. Ancak dengesiz fakat renkli bir ağınız olduğunda ilginçleşir. Bu durumda, her köşeye bir renk atarsınız. Gölgelendirici daha sonra üç köşenin renkleri arasında araya girerek bir çokgenin her pikselini renklendirir.

Köşe renkleri de bazen dokularla birlikte ilginç olabilir. Gouraud Shading gibi bir gölgelendirme algoritması kullanmak istediğinizde , her köşedeki ışık yoğunluğunu hesaplar, ışık rengini köşeye renk olarak atarsınız ve dokuyu oluştururken her doku pikselinin renk değerini ile çarpın enterpolasyonlu renkler. Bu, piksel gölgelendirici yerine tepe gölgelendiricideki ışık kaynaklarını hesaplamanıza olanak tanır. Bu genellikle çok daha hızlıdır çünkü tepe gölgelendiricisi genellikle çok daha az sıklıkta çalıştırılır.


2
btw, tepe rengi, herhangi bir dinamik yıldırım / gölgesi olmayan bazı eski oyunlarda kullanılmıştır. Örneğin, 2004'ten itibaren Richard Burns Rally farklı görünümlü dokular oluşturmak ve gölgeler uygulamak için köşe rengini kullanıyor.
martin

Tanık, köşe renklerini ve ışık haritalarını yoğun olarak kullanan, ancak pek çok dokuyu kullanmayan yeni bir oyundur.
user253751

@Philipp "Köşe gölgelendiricisi genellikle daha az sıklıkta çalıştırıldığı için" Neden? Köşe gölgelendirici, işleme hattının bir parçası değil ve bu nedenle her kareyi gerçekleştirmiyor mu? Neden bu kadar az sıklıkta? "Renk" tepe noktasının her karenin de, tıpkı piksel gölgelendiricideki gibi hesaplanması gerekmez mi?
Nikos

1
@ Nikos Bir köşe gölgelendirici, köşe başına bir kez çağrılır. Bir piksel gölgelendiricisi daha sonra piksel başına bir kez çağrılır. 3 köşeli bir çokgen genellikle 3'ten fazla ekran pikseline neden olur (oyununuz 3 pikselden daha azını kaplayan çok sayıda poligon hesaplamayı tamamlarsa, toparlanma ve LOD ile ilgili neler yapabileceğinizi görmek isteyebilirsiniz).
Philipp

25

Teoride Vertex Color, bir modeli dokularla uğraşmadan renklendirmeye izin verir. Bu CAD'de oldukça yaygındır.

enter image description here enter image description here enter image description here enter image description here

Uygulamada, verileri tepe noktasına yerleştirmek için kullanabileceğiniz sadece bir yuva daha sonra tepe gölgelendiricisinde çılgınca şeyler yapmak için kullanabilirsiniz .

"3B alanda köşe basit bir nokta değil mi?"

3B ile ilk başladığımda bunu düşünürdüm. Hızlıca yanıldığımı öğrendim .

Bir köşeyi, ekranda boyamak istediğiniz üçgenin bir köşesini oluşturan bir veri bloğu olarak düşünebilirsiniz (ve "köşe" kısmı veya "üçgen", "boya" veya "ekran" kısımları her zaman doğru değildir. ). Konum tek seçenekli - bu veri bloğunun yönü Vertex diyoruz.

Köşeye ek veriler ekleyerek yapabileceğiniz çok şey var. En ünlü örnek, bu üçgene doku çizmek için uv koordinatları ekleyebilmenizdir. Bir noktanız varsa, genellikle bir dokunun hangi kısmını üçgen üzerinde çizeceğinize karar veremezsiniz - doku koordinatlarına da ihtiyacınız var.

Bu blobda olanların diğer standart örnekleri normal ve teğetdir. Önemli olan, pozisyon da dahil olmak üzere hepsinin isteğe bağlı olmasıdır. Vertex Color, ekranda güzel bir resim oluşturmak için kullanabileceğiniz veya kötüye kullandığınız bu isteğe bağlı girdilerden yalnızca bir tanesidir.


2
“.. bir üçgenin kenarını oluşturan bir veri bloğu olarak”, mutlaka olması gerekmiyor. Köşeler sadece iyi noktalar olarak gösterilebilir.
Kromster Monica

3
Köşe renklerini kullanarak elde edebileceğiniz gölgelendirici efektlerinin bazı harika örnekleri için Natalie Burke'ün GDC konuşmasını geçen yıl "Matematikle Animasyonla" (video şu anda yalnızca üyeler var, ancak slaytlar burada ücretsiz ) denemenizi tavsiye ederim. . Destiny'nin vitrindeki, karakter saçlarındaki ve kumaşlarındaki animasyonların, düşmanlarının ve ortamlarının bir kısmının, tepe renk kanalları ile şekillendirilmiş ve kontrol edilen tepe gölgeleri kullanılarak elde edildiğini gösteriyor.
DMGregory

5
Bunun köşe renkleri değil, daha kolay algılanması için renkler olarak gösterilen köşe özelliklerinin olduğunu iddia ediyorum .
Kromster Monica

FortNite ile ilgili bu konuşmada , köşe gölgelendiricilerin benzer şekilde yaratıcı kullanımları var , ancak doğru hatırlıyorsam, çoğunlukla renk kanallarından ziyade tepe noktalarının UV kanallarını kullandıklarını düşünüyorum.
DMGregory

3
Kesin olarak geometri / matematik temelli bir bakış açısıyla konuşmak gerekirse, bir tepe noktası uzayda sadece bir noktadır. 'Köşe rengi', GPU'lar tarafından kullanılan bir köşenin 'fikri' ile oraya uygulanan bir niteliktir. Rengi olan veya olmayan bir daireyle aynı. Bir dairenin geometrik / matematiksel 'fikri' bir renge sahip değildir, fakat bir dairenin oluşturma yazılımı 'fikri' bir rengi daireye bağlar. Dolayısıyla @ Kromster'ın argümanı teknik olarak daha doğru.
Pharap

8

Vertices renkleri olabilir, bu normal bir özelliktir.

3B ortamlarda bir üçgen, köşelerinin renk bilgilerine göre renklendirilir. A köşesine en yakın parçalar rengini alır, B köşesine yakınlar B rengini alır ve renk 2 arasında enterpolasyon yapar.

Dikey köşe aydınlatması ile aynı şekilde çalışır

Doku kullanmadan modele renk eklemenin kolay bir yoludur.


Benzer bir tepe noktası özelliğinin (umarım) tanıdık bir örneğini vermek için +1
AC

Köşe renkleri ve normları ile ilgili sorun, tepe noktasının bir ağın parçası olduğunu varsaymalarıdır (eğri bir yüzeye yaklaşma). Keskin kenarlar veya farklı renkli yüzler istiyorsanız (bir küpte olduğu gibi), her yüz için ayrı bellekler gerekir; bu, bellek kullanımını büyük ölçüde artırır (ve görüntülemeyi yavaşlatır).
17'de

@aml Gölgelemenin düz görünmesini sağlamak için glsl düz "işlecini" kullanabilirsiniz. Aynı şey tamamlanmadı ama işe yarıyor.
Bálint

diğer enterpolasyonlu özellik: doku koordinatı ve z-tamponu! Üçgenin 3 köşesinin her biri için bazı verileri hesaplayan tepe gölgelendiricisine sahibiz, bunlar üçgeni ekranda çizerken enterpolasyonludur (veya bazı tamponda) ve piksel gölgelendiricisine çizilen her piksel için enterpolasyonlu değer ile çağrılır
user1952009

@aml Tabii ki x2 darboğaz değil. Ve bunun için geometri gölgelendiricileri yapılır, derdim (örneğin: derinlik dokusunu üçgenlere dönüştürmek )
user1952009 24:17, 24:17

2

Burada zaten çok katı cevaplar var - Sadece kullanılan köşe renklerini göreceğiniz ortak bir yöntemle chime istiyorum:

Tek bir toplu iş / çizim çağrısında değişen nesne renkleri (veya diğer özellikler).

Bunu partikül sistemlerinde, metinlerde ve toplu (genellikle atlassed) sprite oluşturmada göreceksiniz.

Bir parçacıkları rasgele bir başlangıç ​​rengiyle açan veya parçacıkların ömrü boyunca 0 alfaya çıkan bir parçacık yayıcıya sahip olduğunuzu hayal edin. Bu renk verilerini göndermek için gölgelendirici üniformaları kullanacak olsaydık, her farklı renkteki parçacığı kendi çizim çağrısına çekmemiz gerekirdi ve bu da parçacık sistemini çok daha pahalı hale getirdi. Bunun yerine, bu renkleri partiküllerin vertex verilerine ekleyebilir ve tüm partiyi tek bir çağrıda bir araya getirebiliriz.

Unity, bu tekniği partikül renk değişimi için ve bir toplu iş içinde birlikte oluşturulan bir TextMesh veya Sprite karakterindeki karakterleri tek tek renklendirmek için kullanıyor gibi görünüyor.

Geometri incelemesiyle benzer bir şey yapabileceğinizi düşünüyorum, ancak ikisinin performansta nasıl karşılaştırıldığını bilmiyorum. Bugün, köşe tiplerinde bu tür bir ince ayar yapmak, modern PC'ler için en iyi uygulamadan ziyade, bazı mobil cihazlar gibi OpenGL 3.1 / DX9 öncesi donanımları desteklemekte daha fazla bekletme olabilir. Bu tekniklerin bu amaçla vertex renklerinin yerini alıp almadığını açıklığa kavuşturmak için partilerle ve örneklerle daha fazla performans gösteren insanlardan gelen yorumları memnuniyetle karşılıyoruz. :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.