gölgeleme dili - Shading language
Bir gölge dili bir grafik olan bir dil programlama programlama için uyarlanmış gölgelendirici etkileri (yüzeyleri, birimleri ve nesne karakterize). Bu tür dil biçimleri genellikle "vektör", " matriks ", "renk" ve " normal " gibi özel veri türlerinden oluşur . 3D bilgisayar grafikleri için hedef pazarların çeşitliliği nedeniyle , farklı gölgeleme dilleri geliştirilmiştir.
Çevrimdışı oluşturma
Çevrimdışı işlemede kullanılan gölgeleme dilleri, maksimum görüntü kalitesi üretir. Malzeme özellikleri tamamen soyuttur, çok az programlama becerisine sahiptir ve herhangi bir donanım bilgisi gerektirmez. Bu tür gölgelendiriciler genellikle sanatçılar tarafından tıpkı doku eşleme, aydınlatma ve çalışmalarının diğer yönleri gibi doğru "görünümü" elde etmek için geliştirilir.
Bu tür gölgelendiricileri işlemek zaman alıcıdır. Fotogerçekçi sonuçlar üretme yetenekleri nedeniyle gereken hesaplama gücü pahalı olabilir. Çoğu zaman, üretim işleme büyük bilgisayar kümelerinde çalıştırılır .
RenderMan Gölgelendirme Dili
RenderMan'in Gölgelendirme Dil tanımlanmıştır (sıklıkla kısaca, RSL veya SL olarak başvurulan), RenderMan'in Arayüz Şartname üretim kalitesinde render için en yaygın gölgeleme dilidir. Aynı zamanda şimdiye kadar uygulanan ilk gölgeleme dillerinden biridir.
Dil altı ana gölgelendirici türünü tanımlar:
- Işık kaynağı gölgelendiricileri , ışık kaynağı üzerindeki bir noktadan hedef yüzeydeki bir noktaya doğru yayılan ışığın rengini hesaplar.
- Yüzey gölgelendiriciler , aydınlatılmış bir nesnenin optik özelliklerini modeller. Gelen ışığı ve nesnenin fiziksel özelliklerini göz önünde bulundurarak noktanın son rengini ve konumunu çıkarırlar.
- Yer değiştirme gölgelendiricileri , renkten bağımsız olarak yüzey geometrisini değiştirir.
- Deformasyon gölgelendiricileri , bir geometrinin tüm alanını dönüştürür. Yalnızca bir RenderMan uygulaması, SiTex Graphics'in AIR oluşturucusu , alana uygulanan yalnızca tek bir doğrusal dönüşümü destekleyerek bu gölgelendirici türünü uyguladı (böyle bir tür varsa, bu daha çok bir Dönüşüm gölgelendiricisine benziyordu).
- Hacim gölgelendiricileri , bir hacimden geçerken ışığın rengini değiştirir. Sis gibi efektler oluştururlar .
- Görüntüleyici gölgelendiriciler , son piksel değerlerine bir renk dönüşümünü tanımlar. Bu, bir görüntü filtresine çok benzer , ancak görüntüleyici gölgelendirici nicelemeden önce veriler üzerinde çalışır . Bu tür veriler, tipik bir çıktı aygıtında görüntülenebilecek olandan daha büyük bir dinamik aralığa ve renk çözünürlüğüne sahiptir.
Houdini VEX Gölgelendirme Dili
Houdini VEX (Vektör İfadeleri) gölgeleme dili (genellikle "VEX" olarak kısaltılır) RenderMan'dan sonra yakından modellenmiştir. Bununla birlikte, eksiksiz bir 3B pakete entegrasyonu, gölgelendirici yazarının gölgelendirici içindeki bilgilere erişebileceği anlamına gelir; bu, genellikle işleme bağlamında mevcut olmayan bir özelliktir. RSL ve VEX arasındaki dil farklılıkları, birkaç shadeop isminin isimleriyle ilgili farklılıklara ek olarak, esas olarak sözdizimseldir .
Gelato Gölgelendirme Dili
Gelato 'ın gölgeleme dili gibi Houdini'nin VEX yakından RenderMan'in örnek alındı. Gelato Shading Language ve RSL arasındaki farklar esas olarak sözdizimseldir - Gelato, fonksiyon tanımlarında argümanları ayırmak için virgül yerine noktalı virgül kullanır ve birkaç shadeop'un farklı adları ve parametreleri vardır.
Açık Gölgelendirme Dili
Open Shading Language (OSL), Sony Pictures Imageworks tarafından Arnold Renderer'ında kullanılmak üzere geliştirilmiştir . Ayrıca Blender'ın Cycles render motoru tarafından da kullanılır . OSL'nin yüzey ve hacim gölgelendiricileri, yüzeylerin veya hacimlerin, önem örneklemesine izin verecek şekilde ışığı nasıl dağıttığını tanımlar; bu nedenle, ışın izlemeyi ve küresel aydınlatmayı destekleyen fiziksel tabanlı oluşturucular için çok uygundur .
Gerçek zamanlı oluşturma
Gerçek zamanlı işleme için gölgeleme dilleri artık yaygın. Dönüşüm ve gölgeleme denklemlerini kodlayan önceki paradigmalardan hem daha yüksek donanım soyutlaması hem de daha esnek bir programlama modeli sağlarlar. Bu, programcıya işleme süreci üzerinde daha fazla kontrol sağlar ve daha düşük ek yükte daha zengin içerik sunar.
Doğrudan GPU üzerinde yürütülmek üzere tasarlanan gölgelendiriciler, akış programlama modelleri nedeniyle yüksek verimli genel işleme için kullanışlı hale geldi ; bu , benzer donanımlarda çalışan bilgi işlem gölgelendiricilerinin geliştirilmesine yol açtı (ayrıca bakınız: GPGPU ).
Tarihsel olarak, bu tür dillerden yalnızca birkaçı hem kendilerini oluşturmada hem de güçlü pazar konumunu korumada başarılı olmuştur; bu dillerin kısa bir açıklaması aşağıdadır.
ARB derleme dili
OpenGL Mimarlık İnceleme Kurulu kuruldu ARB montaj dili programlanabilir grafik işlemcileri için standart bir alt düzey talimat seti olarak 2002 yılında.
Üst düzey OpenGL gölgeleme dilleri, genellikle yükleme ve yürütme için ARB derlemesine derlenir. Yüksek seviyeli gölgeleme dillerinden farklı olarak ARB derlemesi, kontrol akışını veya dallanmayı desteklemez. Ancak, çapraz GPU taşınabilirliği gerektiğinde kullanılmaya devam eder.
OpenGL gölgeleme dili
GLSL veya glslang olarak da bilinen bu standartlaştırılmış gölgeleme dilinin OpenGL ile kullanılması amaçlanmıştır .
Dil, köşe ve parça işlemeyi tek bir komut setinde birleştirerek koşullu döngülere ve (daha genel olarak) dallara izin verir . Tarihsel olarak, GLSL'den önce ARB montaj dili gelirdi .
Cg programlama dili
NVIDIA tarafından geliştirilen programlama dili Cg , kolay ve verimli üretim boru hattı entegrasyonu için tasarlanmıştır. Dil, API bağımsızlığına sahiptir ve varlık yönetimini geliştirmek için çok çeşitli ücretsiz araçlarla birlikte gelir. Cg'nin geliştirilmesi 2012'de durduruldu ve dil artık kullanımdan kaldırıldı.
DirectX Shader Montaj Dili
Direct3D 8 ve 9'da Shader çevirici dili ana programlama dilidir köşe ve pixel shader içinde Shader Model 1.0 / 1.1, 2.0, ve 3.0. Gölgelendirici derleme dili, yürütme için grafik sürücüsüne iletilen ara gölgelendirici bayt kodunun doğrudan bir temsilidir.
Gölgelendirici derleme dili, birleştirilmiş Shader Model 4.0, 4.1, 5.0 ve 5.1'i programlamak için doğrudan kullanılamaz, ancak hata ayıklama amacıyla ara bayt kodunun bir temsili olarak işlevini korur.
DirectX High-Level Shader Dili
Yüksek Düzey Gölgelendirme Dil (kısa için HLSL denir) için bir C-tarzı shader dildir DirectX 9 ve üstü ve Xbox oyun konsolları. Nvidia'nın Cg'si ile ilgilidir ancak yalnızca DirectX ve Xbox tarafından desteklenir. HLSL programları, DirectX gölgelendirici derleme dilinin bayt kodu eşdeğerinde derlenir.
HLSL, Direct3D 9'da gölgelendirici derleme diline isteğe bağlı bir alternatif olarak sunuldu, ancak gölgelendirici derleme dilinin kullanımdan kaldırıldığı Direct3d 10 ve sonraki sürümlerinde bir gereklilik haline geldi.
Adobe Pixel Bender ve Adobe Graphics Assembly Dili
Adobe Systems , Adobe Flash 10 API'nin bir parçası olarak Pixel Bender'ı ekledi . Pixel Bender yalnızca pikseli işleyebilir, ancak 3D tepe verilerini işleyemez. Flash 11 , tam 3B hızlandırma desteği sunan Adobe Graphics Assembly Language (AGAL) adlı kendi gölgeleme dilini kullanan Stage3D adlı tamamen yeni bir 3B API'yi tanıttı . Pixel Bender için GPU hızlandırması Flash 11.8'de kaldırıldı.
AGAL düşük seviyeli ama, örneğin, derlenebilir platformdan bağımsız gölgeleme dili olduğu için ARB birleştirici dili veya GLSL .
PlayStation Gölgelendirici Dili
Sony , PSSL'yi ( PlayStation Shader Language ) PlayStation 4 için Cg/HLSL'ye benzer, platforma özel bir gölgeleme dili olarak duyurdu . PC'deki HLSL gölgelendiricilerle büyük ölçüde uyumlu olduğu, ancak PS4 platformu için ek özelliklere sahip olduğu söyleniyor.
Metal Gölgeleme Dili
Apple, 2012'den beri üretilen çoğu Mac'te, 5S'den beri iPhone'larda ve iPad Air'den beri iPad'lerde çalışan Metal adlı düşük seviyeli bir grafik API'si oluşturdu . Metal, C++14'e dayanan ve clang ve LLVM kullanılarak uygulanan Metal Shading Language (MSL) adlı kendi gölgeleme dilini sunar . MSL tepe noktası, parça ve işlem işlemeyi birleştirir.
Tercüme
Gittikçe daha fazla grafik API'si kullanıma sunuldukça geliştiriciler, gölgelendiricileri bir gölgelendirme dilinden diğerine taşıma sorunuyla karşı karşıyadır. Birkaç yaklaşım kullanılır:
- C önişlemci (CPP) deyimlerini kullanarak manuel geçiş . Cg/HLSL, GLSL ve MSL'nin tümü CPP makrolarını uygular, böylece tüm farklı işlemleri ortak bir arabirime sarmak mümkündür. Valve'ın Source 2'si ve NVIDIA'nın FXAA 3.11'i bunu yapıyor.
- Bir dili diğerine çevirin. DirectX bayt kodu kısmen HLSLcc aracılığıyla GLSL'ye dönüştürülebilir ve GLSL'yi HLSL'ye dönüştürmek için ANGLE ve HLSL2GLSL gibi çeşitli araçlar mevcuttur.
- Farklı bir ara dil tanımlayın. SPIR-V kısmen bu amaç için tasarlanmıştır. HLSL veya GLSL'den üretilebilir ve HLSL, GLSL veya MSL'ye dönüştürülebilir.
Referanslar
Notlar
- ^ OpenGL için önceki köşe gölgeleme dilleri (belirli bir sırayla değil)EXT_vertex_shader,NV_vertex_program, yukarıda bahsedilenARB_vertex_program,NV_vertex_program2veNV_vertex_program3'ü içerir.
- ^ İçin parça gölgelemenvparsedayalı yüksek seviyeli soyutlama sahip ilk gölgeleme dili muhtemelen olduğuNV_register_combiners,NV_register_combiners2piksel matematik ve içinNV_texture_shader,NV_texture_shader2veNV_texture_shader3doku aramaları için. ATI_fragment_shader"dize yönelimli" bir ayrıştırma olanağı bile sağlamadı (daha sonraATI_text_fragment_shadertarafından eklenmiş olmasına rağmen). ARB_fragment_program, çok başarılı oldu. NV_fragment_programveNV_fragment_program2aslında benzerdir, ancak ikincisi diğerlerine göre çok daha gelişmiş işlevsellik sağlar.
- ^ NVIDIA ana sayfasından Fx oluşturucu,http://developer.nvidia.com/object/fx_composer_home.html
- Rudy Cortes ve Saty Raghavachary : RenderMan Shading Language Guide , Course Technology PTR, 1 edition (27 Aralık 2007), ISBN 1-59863-286-8