gölgelendirici - Shader

Gölgelendiriciler en yaygın olarak 3B modellerin oluşturulmasında aydınlatılmış ve gölgeli alanlar oluşturmak için kullanılır . Phong gölgeleme (sağda) Gouraud gölgelemede bir iyileştirmedir ve temel düz gölgelendiriciden (solda) sonra geliştirilen ilk bilgisayar gölgelendirme modellerinden biridir ve işlemelerde kavisli yüzeylerin görünümünü büyük ölçüde iyileştirir.
Gölgelendiricilerin başka bir kullanımı, örneğin bir web kamerasından bir fotoğraf gibi 2D görüntülerde bile özel efektler içindir . Değiştirilmemiş, gölgelenmemiş görüntü solda ve aynı görüntünün sağında bir gölgelendirici uygulanmış. Bu gölgelendirici, görüntünün tüm açık alanlarını beyazla ve tüm karanlık alanları parlak renkli bir dokuyla değiştirerek çalışır.

Gelen bilgisayar grafikleri , bir gölgelendirici türüdür bilgisayar programı başlangıçta kullanılan gölgelendirerek içinde 3D sahneler (uygun düzeylerde üretimini ışığında , karanlığın ve renk bir hale görüntüde). Artık bilgisayar grafikleri özel efektleri kategorisindeki çeşitli alanlarda çeşitli özel işlevler yerine getiriyorlar veya gölgeleme ile ilgili olmayan video son işlemesi yapıyorlar , hatta grafiklerle ilgisi olmayan işlevleri gerçekleştiriyorlar .

Geleneksel gölgelendiriciler , grafik donanımı üzerindeki oluşturma etkilerini yüksek derecede esneklikle hesaplar . Çoğu gölgelendirici, bir grafik işleme birimi (GPU) için kodlanmıştır (ve üzerinde çalışır ), ancak bu kesin bir gereklilik değildir. Gölgeleme dilleri , geçmişte yalnızca ortak geometri dönüştürme ve piksel gölgeleme işlevlerine izin veren sabit işlevli işlem hattının yerini alan GPU'nun oluşturma işlem hattını programlamak için kullanılır ; gölgelendiriciler ile özelleştirilmiş efektler kullanılabilir. Konum ve renk ( renk , doygunluk , parlaklık ve kontrast tüm) piksel , köşe ve / veya dokular , bir son hale görüntü oluşturmak için kullanılır kullanılarak değiştirilebilir algoritmaları bir gölgelendirici tanımlanan ve dış tarafından değiştirilebilir değişkenler ya da dokular gölgelendiriciyi çağıran bilgisayar programı tarafından tanıtıldı.

Gölgelendiriciler, çeşitli efektler üretmek için sinema sonrası işleme , bilgisayar tarafından oluşturulan görüntüler ve video oyunlarında yaygın olarak kullanılmaktadır . Basit aydınlatma modellerinin ötesinde, gölgelendiricilerin daha karmaşık kullanımları şunları içerir: bir görüntünün renk tonunu , doygunluğunu , parlaklığını ( HSL/HSV ) veya kontrastını değiştirmek ; üretim bulanıklık , ışık çiçek , hacimsel aydınlatma , normal harita (derinlik etkileri için), boke , cel gölgeleme , posterleştirme , eşleme yumru , bozulma , renk anahtarlama (sözde "bluescreen / için greenscreen " etkileri), kenar ve hareket algılama gibi demoscene'de görülenler gibi psychedelic etkilerin yanı sıra .

Tarih

"Shader" teriminin bu kullanımı , ilk olarak Mayıs 1988'de yayınlanan RenderMan Arayüz Spesifikasyonunun 3.0 sürümü ile Pixar tarafından halka tanıtıldı .

Gibi grafik birimleri işlenirken gelişti, büyük grafik yazılım kütüphaneleri gibi OpenGL ve Direct3D desteği shaderlara başladı. İlk gölgelendirici özellikli GPU'lar yalnızca piksel gölgelendirmeyi destekledi , ancak geliştiriciler gölgelendiricilerin gücünü fark ettikten sonra köşe gölgelendiricileri hızla tanıtıldı. Programlanabilir piksel gölgelendiriciye sahip ilk ekran kartı 2001 yılında piyasaya sürülen Nvidia GeForce 3 (NV20) idi. Geometri gölgelendiricileri Direct3D 10 ve OpenGL 3.2 ile tanıtıldı. Sonunda, grafik donanımı birleşik bir gölgelendirici modeline doğru gelişti .

Tasarım

Gölgelendiriciler, bir tepe noktasının veya bir pikselin özelliklerini tanımlayan basit programlardır . Köşe gölgelendiricileri bir köşenin özelliklerini (konum, doku koordinatları , renkler vb.) tanımlarken piksel gölgelendiriciler bir pikselin özelliklerini (renk, z-derinliği ve alfa değeri) tanımlar . Bir köşe gölgelendiricisinin her köşe için çağrılır ilkel (muhtemelen sonra mozaiğine ); böylece bir köşe girişi, bir (güncellenmiş) köşe çıkışı. Her bir köşe noktası daha sonra bir yüzey (bellek bloğu) üzerinde bir dizi piksel olarak işlenir ve sonunda ekrana gönderilir.

Gölgelendiriciler, sabit kodlanmış bir şekilde aydınlatma ve doku eşleme gerçekleştirdiği için, tipik olarak Sabit İşlev Ardışık Düzeni (FFP) olarak adlandırılan grafik donanımının bir bölümünün yerini alır. Gölgelendiriciler, bu sabit kodlanmış yaklaşıma programlanabilir bir alternatif sunar.

Temel grafik işlem hattı aşağıdaki gibidir:

  • CPU, talimatları (derlenmiş gölgeleme dili programları) ve geometri verilerini grafik kartında bulunan grafik işlem birimine gönderir .
  • Köşe gölgelendirici içinde geometri dönüştürülür.
  • Grafik işleme biriminde bir geometri gölgelendiricisi varsa ve etkinse, sahnedeki geometrilerde bazı değişiklikler yapılır.
  • Bir mozaik gölgelendirici grafik işleme birimindeyse ve etkinse, sahnedeki geometriler alt bölümlere ayrılabilir .
  • Hesaplanan geometri üçgenlenir (üçgenlere bölünür).
  • Üçgenler, parça dörtlülerine bölünür (bir parça dörtlü, 2 × 2 parça ilkeldir).
  • Parça dörtlü, parça gölgelendiriciye göre değiştirilir.
  • Derinlik testi yapılır; geçen parçalar ekrana yazılır ve çerçeve arabelleğine karışabilir .

Grafik ardışık düzeni, üç boyutlu (veya iki boyutlu) verileri görüntülemek için kullanışlı iki boyutlu verilere dönüştürmek için bu adımları kullanır. Genel olarak, bu büyük bir piksel matrisidir veya " çerçeve arabelleğidir ".

Türler

Yaygın olarak kullanılan üç tür gölgelendirici vardır (piksel, tepe noktası ve geometri gölgelendiricileri), birkaçı daha yakın zamanda eklenmiştir. Eski grafik kartları, her bir gölgelendirici türü için ayrı işlem birimleri kullanırken, daha yeni kartlar, her tür gölgelendiriciyi çalıştırabilen birleşik gölgelendiricilere sahiptir. Bu, grafik kartlarının işlem gücünü daha verimli kullanmasını sağlar.

2D gölgelendiriciler

2D gölgelendiriciler , bilgisayar grafikleri alanında dokular olarak da adlandırılan dijital görüntüler üzerinde hareket eder . Piksellerin niteliklerini değiştirirler . 2B gölgelendiriciler, 3B geometrinin oluşturulmasında yer alabilir . Şu anda 2B gölgelendiricinin tek türü bir piksel gölgelendiricidir.

Piksel gölgelendiriciler

Parça gölgelendiricileri olarak da bilinen piksel gölgelendiriciler, her "parçanın" rengini ve diğer özelliklerini hesaplar : en fazla tek bir çıktı pikselini etkileyen bir işleme çalışması birimi . En basit piksel gölgelendirici türleri, renk değeri olarak bir ekran pikseli verir; birden çok giriş/çıkış ile daha karmaşık gölgelendiriciler de mümkündür. Piksel gölgelendiriciler, her zaman aynı rengin çıktısını vermekten, bir aydınlatma değeri uygulamaya , çarpma eşleme , gölgeler , aynasal vurgular , yarı saydamlık ve diğer fenomenlere kadar çeşitlilik gösterir . Parçanın derinliğini değiştirebilirler ( Z-arabelleğe alma için ) veya birden fazla işleme hedefi etkinse birden fazla renk çıktısı alabilirler . 3D grafiklerde, bir piksel gölgelendirici tek başına bazı karmaşık efektler üretemez çünkü sahnenin geometrisi (yani tepe noktası verileri) bilgisi olmadan yalnızca tek bir parça üzerinde çalışır. Ancak piksel gölgelendiriciler, çizilen ekran koordinatı hakkında bilgi sahibidir ve tüm ekranın içeriği gölgelendiriciye bir doku olarak iletilirse ekranı ve yakındaki pikselleri örnekleyebilir. Bu teknik, çizgi film/cel gölgelendiriciler için bulanıklık veya kenar algılama /geliştirme gibi çok çeşitli iki boyutlu son işleme efektlerini etkinleştirebilir . Piksel shaderlar da uygulanabilir ara ürün herhangi bir iki boyutlu görüntüleri-, aşamalar Sprite'lara veya dokular -in boru hattı ise, tepe gölgelendiriciler her zaman 3D sahne gerektirir. Örneğin, piksel gölgelendirici, rasterleştirildikten sonra bir video akışı için son işlemci veya filtre görevi görebilen tek gölgelendirici türüdür .

3D gölgelendiriciler

3B gölgelendiriciler, 3B modeller veya diğer geometriler üzerinde hareket eder, ancak modeli veya ağı çizmek için kullanılan renklere ve dokulara da erişebilir . Köşe gölgelendiricileri, genellikle her köşe temelinde değişiklik yapan en eski 3B gölgelendirici türüdür. Daha yeni geometri gölgelendiricileri, gölgelendiricinin içinden yeni köşeler oluşturabilir. Mozaik gölgelendiriciler en yeni 3B gölgelendiricilerdir; ayrıntı eklemek için bir kerede tepe noktaları yığınları üzerinde hareket ederler; örneğin çalışma zamanında bir modeli daha küçük üçgen gruplarına veya diğer ilkel öğelere bölmek, eğriler ve tümsekler gibi şeyleri iyileştirmek veya diğer nitelikleri değiştirmek gibi .

Vertex gölgelendiriciler

Köşe gölgelendiricileri, en yerleşik ve yaygın 3B gölgelendirici türüdür ve grafik işlemcisine verilen her köşe için bir kez çalıştırılır . Amaç, sanal uzaydaki her bir tepe noktasının 3B konumunu, ekranda göründüğü 2B koordinata (ayrıca Z-tamponu için bir derinlik değeri) dönüştürmektir. Köşe gölgelendiricileri konum, renk ve doku koordinatları gibi özellikleri değiştirebilir, ancak yeni köşeler oluşturamaz. Köşe gölgelendiricisinin çıktısı, işlem hattında, varsa bir geometri gölgelendiricisi veya rasterleştirici olan sonraki aşamaya gider . Vertex gölgelendiriciler, 3D modelleri içeren herhangi bir sahnede konum, hareket, aydınlatma ve renk ayrıntıları üzerinde güçlü kontrol sağlayabilir .

Geometri gölgelendiriciler

Geometri gölgelendiricileri Direct3D 10 ve OpenGL 3.2'de tanıtıldı; eskiden OpenGL 2.0+'da uzantıların kullanımıyla mevcuttu. Bu tür gölgelendirici , grafik ardışık düzeninin başına gönderilen ilkellerden noktalar, çizgiler ve üçgenler gibi yeni grafik temel öğeleri oluşturabilir .

Geometri gölgelendirici programları, köşe gölgelendiricilerinden sonra yürütülür. Girdi olarak, muhtemelen bitişik bilgilerle birlikte, bütün bir ilkel alırlar. Örneğin, üçgenler üzerinde çalışırken, üç köşe geometri gölgelendiricisinin girişidir. Gölgelendirici daha sonra sıfır veya daha fazla ilkel yayınlayabilir, bunlar rasterleştirilir ve bunların parçaları en sonunda bir piksel gölgelendiricisine iletilir .

Geometri gölgelendiricinin tipik kullanımları arasında nokta hareketli grafik oluşturma, geometri mozaikleme , gölge hacmi ekstrüzyonu ve bir küp haritasına tek geçişli işleme yer alır . Geometri gölgelendiricilerin faydalarının tipik bir gerçek dünya örneği, otomatik ağ karmaşıklığı modifikasyonu olacaktır. Bir eğri için kontrol noktalarını temsil eden bir dizi çizgi şeridi geometri gölgelendiricisine iletilir ve gerekli karmaşıklığa bağlı olarak gölgelendirici otomatik olarak her biri bir eğrinin daha iyi bir yaklaşımını sağlayan ekstra çizgiler oluşturabilir.

Mozaik gölgelendiriciler

OpenGL 4.0 ve Direct3D 11'den itibaren mozaik gölgelendirici adı verilen yeni bir gölgelendirici sınıfı eklenmiştir. Geleneksel modele iki yeni gölgelendirici aşaması ekler: mozaikleme kontrol gölgelendiricileri (gövde gölgelendiricileri olarak da bilinir) ve mozaikleme değerlendirme gölgelendiricileri (Domain Gölgelendiricileri olarak da bilinir), birlikte daha basit kafeslerin çalışma zamanında daha ince kafeslere bölünmesine izin verir. matematiksel bir fonksiyona İşlev, çeşitli değişkenlerle, özellikle de aktif ayrıntı düzeyi ölçeklendirmeye izin vermek için izleme kamerasına olan mesafeyle ilişkilendirilebilir . Bu, kameraya yakın nesnelerin ince ayrıntılara sahip olmasını sağlarken, daha uzaktaki nesneler daha kaba ağlara sahip olabilir, ancak kalite açısından karşılaştırılabilir görünebilir. Ayrıca, çok karmaşık olanları bellekten aşağı örneklemek yerine, ağların gölgelendirici birimleri içinde bir kez iyileştirilmesine izin vererek gerekli ağ bant genişliğini önemli ölçüde azaltabilir. Bazı algoritmalar herhangi bir rasgele ağı örnekleyebilirken, diğerleri ağlarda en karakteristik köşeleri ve kenarları dikte etmek için "ipuçları" verilmesine izin verir.

İlkel ve Mesh gölgelendiriciler

2017 dolaylarında, AMD Vega mikromimarisi , geometriyi işlemek için gerekli verilere erişimi olan hesaplama gölgelendiricilerine benzer şekilde yeni bir gölgelendirici aşaması – ilkel gölgelendiriciler için destek ekledi. Benzer şekilde Nvidia , 2018'de Turing mikro mimarisiyle benzer işlevsellik sağlayan ve AMD'nin ilkel gölgelendiricileri gibi bilgisayar gölgelendiricilerinden sonra modellenen ağ ve görev gölgelendiricilerini tanıttı .

2020'de AMD ve Nvidia , DirectX 12 Ultimate aracılığıyla ağ gölgelemeyi destekleyen RDNA 2 ve Ampere mikro mimarilerini piyasaya sürdü . Bu ağ gölgelendiriciler, GPU'nun daha karmaşık algoritmaları işlemesine, CPU'dan GPU'ya daha fazla iş yüklemesine ve algoritma yoğun işlemede, bir sahnedeki kare hızını veya üçgen sayısını büyüklük sırasına göre artırmasına olanak tanır. Intel, 2022 yılının ilk çeyreğinde gönderilen Intel Arc Alchemist GPU'larının mesh gölgelendiricileri destekleyeceğini duyurdu.

Işın izleme gölgelendiricileri

Ray tracing gölgelendiriciler tarafından desteklenen Microsoft aracılığıyla DirectX Raytracing tarafından, Khronos Group aracılığıyla Vulkan , GLSL ve SPIR-V tarafından, Apple aracılığıyla Metal .

Hesaplama gölgelendiricileri

Hesaplama gölgelendiricileri , grafik uygulamalarıyla sınırlı değildir, ancak GPGPU için aynı yürütme kaynaklarını kullanır . Örneğin, animasyon veya aydınlatma algoritmalarındaki ek aşamalar için grafik ardışık düzenlerinde kullanılabilirler (örneğin, döşemeli ileri işleme ). Bazı işleme API'leri, bilgi işlem gölgelendiricilerinin veri kaynaklarını grafik ardışık düzeniyle kolayca paylaşmasına olanak tanır.

paralel işleme

Gölgelendiriciler, örneğin ekranın bir alanındaki her piksele veya bir modelin her köşesine bir seferde büyük bir öğe kümesine dönüşümler uygulamak için yazılır. Bu, paralel işleme için çok uygundur ve çoğu modern GPU'da bunu kolaylaştırmak için birden fazla gölgelendirici ardışık düzen bulunur ve bu da hesaplama verimini büyük ölçüde artırır.

Gölgelendiricili bir programlama modeli, oluşturma, gölgelendiricileri argüman olarak alma ve ara sonuçlar arasında belirli bir veri akışı sağlama , hem veri paralelliğini (pikseller, tepe noktaları vb.) hem de ardışık düzen paralelliğini (aşamalar arasında ) etkinleştirmeye yönelik daha yüksek dereceli bir işleve benzer . (ayrıca bkz . harita küçültme ).

Programlama

Gölgelendiricilerin programlandığı dil, hedef ortama bağlıdır. Resmi OpenGL ve OpenGL ES gölgeleme dili, GLSL olarak da bilinen OpenGL Shading Language'dir ve resmi Direct3D gölgeleme dili, HLSL olarak da bilinen High Level Shader Language'dir . Hem OpenGL hem de Direct3D gölgelendiriciler üreten bir üçüncü taraf gölgeleme dili olan Cg , Nvidia tarafından geliştirilmiştir ; ancak 2012'den beri kullanımdan kaldırılmıştır. Apple , Metal çerçevesinin bir parçası olarak Metal Shading Language adlı kendi gölgeleme dilini yayınladı .

GUI gölgelendirici düzenleyicileri

Unity ve Unreal Engine gibi modern video oyunu geliştirme platformları , gerçek koda ihtiyaç duymadan gölgelendiriciler oluşturabilen düğüm tabanlı düzenleyicileri giderek daha fazla içeriyor ; bunun yerine kullanıcıya, kullanıcıların çeşitli dokuları, haritaları ve matematiksel işlevleri dağınık renk, aynasal renk ve yoğunluk, pürüzlülük/metallik, yükseklik, normal vb. çıktı değerlerine yönlendirmesine olanak tanıyan, bağlantılı düğümlerin yönlendirilmiş bir grafiği sunulur . . Otomatik derleme daha sonra grafiği gerçek, derlenmiş bir gölgelendiriciye dönüştürür.

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar