Oyundaki gölgelendiriciler nelerdir? Minecraft'a gölgelendiriciler nasıl kurulur? Hangi gölgelendiriciler cevap verir.

Küresel bilgisayarlaşma ile dünyamıza çok sayıda anlaşılmaz terim geldi. Hepsiyle başa çıkmak ilk bakışta göründüğü kadar kolay değil. Birçoğu isim olarak benzer, birçoğunun geniş bir işlevi var. Bir gölgelendiricinin ne olduğunu, nereden geldiğini, ne işe yaradığını ve ne olduğunu öğrenmenin zamanı geldi.

Optimize Edici

Büyük olasılıkla, hevesli bir Minecraft oyuncususunuz ve bu yüzden ne olduğunu bulmaya geldiniz. Hemen not edilmelidir ki, "gölgelendirici" kavramı bu oyundan kolaylıkla ayrılmaktadır ve ondan ayrı olarak "yaşayabilmektedir". Tıpkı modlar gibi. Bu nedenle, bu iki kavramı sıkı sıkıya bağlamaya değmez.

Genel olarak, gölgelendirici programlamadan gelir, uzmanların asistanı olarak ortaya çıktı. Bu araca optimize edici demek muhtemelen gürültülü olacaktır, ancak oyunlardaki görüntüyü gerçekten iyileştiriyor. Öyleyse, kabaca ne olduğunu anlamaya başladığınızda, doğru bir yoruma geçelim.

Tercüme

gölgelendirici nedir? hangi video kartı işlemcileri tarafından yürütülür. Bu araçlar özel bir dilde geliştirilmiştir. Amaca bağlı olarak, farklı olabilir. Bundan sonra, gölgelendiriciler koşullu olarak grafik hızlandırıcı işlemciler için talimatlara dönüştürülür.

Başvuru

Uygulamanın bir bütün olarak amaca göre önceden belirlendiğini hemen söylemek gerekir. Programlar, video kartı işlemcilerine yerleştirilmiştir, bu, üç boyutlu grafiklerin nesnelerinin ve görüntülerinin parametreleri üzerinde çalıştıkları anlamına gelir. Yansıma, kırılma, karartma, kesme etkileri vb. ile çalışmak dahil olmak üzere çeşitli görevleri yerine getirebilirler.

Öncül

İnsanlar uzun zamandır bir gölgelendiricinin ne olduğunu bulmaya çalışıyorlar. Bu programlardan önce bile geliştiriciler her şeyi elle yaptılar. Bazı nesnelerden bir görüntü oluşturma süreci otomatik değildi. Oyun doğmadan önce, geliştiriciler render işlemini kendileri yaptı. Bir algoritma ile çalıştılar, onu farklı görevler için oluşturdular. Bu yüzden dokular, video efektleri vb. Uygulamak için talimatlar vardı.

Tabii ki, bazı işlemler hala video kartlarının çalışmasına dahil edildi. Bu tür algoritmalar geliştiriciler tarafından kullanılabilir. Ancak algoritmalarını video kartına empoze etmeyi başaramadılar. Standart olmayan talimatlar, GPU'dan daha yavaş olan CPU tarafından yürütülebilir.

Örnek

Farkı anlamak için birkaç örneğe bakmaya değer. Açıkçası, bir oyunda işleme, donanım ve yazılım olabilir. Örneğin, hepimiz ünlü Quake 2'yi hatırlıyoruz. Yani, oyundaki su, donanım oluşturma söz konusu olduğunda sadece mavi bir filtre olabilir. Ancak yazılım müdahalesi ile bir su sıçraması ortaya çıktı. CS 1.6 ile aynı hikaye. Yazılım işleme pikselli bir ekran eklerken, donanım oluşturma yalnızca beyaz bir flaş verdi.

Erişim

Böylece bu tür sorunları çözmenin gerekli olduğu ortaya çıktı. Grafik hızlandırıcılar, geliştiriciler arasında popüler olan algoritmaların sayısını artırmaya başladı. Her şeyi "doldurmanın" imkansız olduğu ortaya çıktı. Video kartı uzmanlarına erişimi açmak gerekliydi.

Modlar ve gölgelendiriciler içeren "Minecraft" gibi oyunlar bulunmadan önce, geliştiricilere, farklı talimatlardan sorumlu olabilecek boru hatlarında GPU bloklarıyla çalışma fırsatı verildi. "Shader" adlı programlar bu şekilde bilinir hale geldi. Bunları oluşturmak için programlama dilleri özel olarak geliştirildi. Böylece, video kartları yalnızca standart "geometri" ile değil, aynı zamanda işlemci talimatlarıyla da yüklenmeye başladı.

Böyle bir erişim mümkün olduğunda, yeni programlama olanakları açılmaya başladı. Uzmanlar GPU'daki matematiksel problemleri çözebilir. Bu hesaplamalar GPGPU olarak bilinir hale geldi. Bu işlem özel aletler gerektiriyordu. nVidia CUDA'dan, Microsoft DirectCompute'tan ve OpenCL çerçevesinden.

Türler

Gölgelendiricilerin ne olduğunu ne kadar çok insan öğrenirse, onlar ve yetenekleri hakkında o kadar fazla bilgi ortaya çıktı. Başlangıçta, hızlandırıcıların üç işlemcisi vardı. Herkes kendi gölgelendirici türünden sorumluydu. Zamanla, evrensel olanla değiştirildiler. Her birinin, aynı anda üç tür gölgelendiriciye sahip belirli bir dizi talimatı vardı. Eserin birleştirilmesine rağmen, bu güne kadar her türün bir açıklaması hayatta kaldı.

Köşe tipi, birçok yüzü olan şekillerin köşeleriyle çalıştı. İlgili birçok araç var. Örneğin, doku koordinatlarından, teğet vektörlerinden, binormal veya normalden bahsediyoruz.

Geometrik tip sadece bir köşe ile değil, aynı zamanda bütün bir ilkel ile de çalıştı. Pixel, genel olarak bitmap çizimlerinin ve dokularının parçalarını işlemek için tasarlanmıştır.

oyunlarda

"Minecraft 1.5.2" için gölgelendirici arıyorsanız, büyük olasılıkla oyundaki resmi iyileştirmek istiyorsunuz. Bunu mümkün kılmak için programlar "yangın, su ve bakır borulardan" geçti. Gölgelendiriciler test edildi ve rafine edildi. Sonuç olarak, bu aracın avantajları ve dezavantajları olduğu ortaya çıktı.

Tabii ki, çeşitli algoritmaları derlemenin basitliği büyük bir artı. Bu, oyun geliştirme sürecinde hem esneklik hem de gözle görülür bir basitleştirme ve dolayısıyla maliyette bir azalmadır. Ortaya çıkan sanal sahneler daha karmaşık ve gerçekçi hale gelir. Ayrıca, geliştirme sürecinin kendisi birçok kez daha hızlı hale gelir.

Eksiklikler arasında, yalnızca programlama dillerinden birini öğrenmeniz gerekeceğini ve farklı video kartı modellerinde farklı algoritma kümelerinin bulunduğunu dikkate almanız gerektiğini belirtmekte fayda var.

Kurulum

Minecraft için bir gölgelendirici paketi bulduysanız, kurulumunda birçok tuzak olduğunu anlamanız gerekir. Bu oyunun zaten solan popülaritesine rağmen, sadık hayranları hala varlığını sürdürüyor. Özellikle 2017'de herkes grafikleri sevmiyor. Bazı insanlar gölgelendiriciler sayesinde onu iyileştirebileceklerini düşünüyor. Teoride, bu ifade doğrudur. Ancak pratikte çok fazla değişmeyeceksiniz.

Ancak hala "Minecraft 1.7" ile ilgili yollar arıyorsanız, o zaman her şeyden önce dikkatli olun. Sürecin kendisi karmaşık değil. Ek olarak, indirilebilir herhangi bir dosya ile birlikte kurulumu için bir talimat vardır. Ana şey, oyunun ve gölgelendiricinin sürümlerini kontrol etmektir. Aksi takdirde, optimize edici başarısız olur.

İnternette böyle bir aracı kurabileceğiniz ve indirebileceğiniz birçok yer var. Ardından, arşivi herhangi bir klasöre açmanız gerekir. Orada "GLSL-Shaders-Mod-1.7-Installer.jar" dosyasını bulacaksınız. Başladıktan sonra, oyunun yolu size gösterilecek, eğer doğruysa, sonraki tüm talimatları kabul edin.

Ardından "shaderpacks" klasörünü ".minecraft" klasörüne taşımanız gerekir. Şimdi, başlatıcıyı başlattığınızda, ayarlara gitmeniz gerekecek. Burada, kurulum doğruysa, "Shader" satırı görünecektir. Tüm listeden istediğiniz paketi seçebilirsiniz.

Minecraft 1.7.10 için gölgelendiricilere ihtiyacınız varsa, gerekli sürümün gölgelendirici paketini bulun ve aynısını yapın. Kararsız sürümler internette bulunabilir. Bazen değiştirmeniz, yeniden yüklemeniz ve uygun bir tane aramanız gerekir. İncelemelere bakmak ve en popüler olanları seçmek daha iyidir.

Tanıtım

Oyunlar da dahil olmak üzere 3D grafik dünyası terimlerle doludur. Her zaman tek doğru tanımı olmayan terimler. Bazen aynı şeylere farklı denir ve tam tersi, aynı efekt oyun ayarlarında "HDR", "Bloom", "Glow", ardından "Postprocessing" olarak adlandırılabilir. Geliştiricilerin grafik motorlarına yerleştirdikleri şeylerle övünmesi dışında çoğu insanın gerçekte ne anlama geldikleri konusunda kafası karışır.

Makale, bu gibi durumlarda en sık kullanılan bazı kelimelerin ne anlama geldiğini anlamanıza yardımcı olmayı amaçlamaktadır. Bu yazı çerçevesinde, 3D grafiklerin tüm terimlerinden değil, sadece son yıllarda oyun grafik motorlarında kullanılan ayırt edici özellikler ve teknolojiler ve modern oyunların grafik ayarlarının isimleri olarak yaygınlaşanlardan bahsedeceğiz. . Başlangıç ​​olarak, kendinizi tanımanızı şiddetle tavsiye ederim.

Bu makaledeki ve Alexander'ın makalelerindeki bir şey sizin için net değilse, o zaman en erkenden başlamak mantıklıdır, s. Bu makaleler zaten biraz modası geçmiş, elbette, ancak temel, en başlangıç ​​ve önemli veriler orada. Sizinle daha "üst düzey" terimler hakkında konuşacağız. 3B gerçek zamanlı grafikler ve grafik işlem hattının yapısı hakkında temel bir anlayışa sahip olmalısınız. Öte yandan, matematiksel formüller, akademik kesinlik ve kod örnekleri beklemeyin - bu makalenin konusu bu değil. Şartlar

Makalede açıklanan terimlerin listesi:

gölgelendirici

Geniş anlamda gölgelendirici, bir nesnenin yüzeyini görsel olarak tanımlayan bir programdır. Bu, aydınlatma, tekstüre etme, son işleme vb.'nin bir açıklaması olabilir. Gölgelendiriciler Cook'un gölge ağaçlarından ve Perlin'in piksel akışı dilinden doğdu. RenderMan Gölgelendirme Dili şimdi en ünlüsü. Programlanabilir gölgelendiriciler ilk olarak Pixar'ın RenderMan'ında tanıtıldı, bu da çeşitli gölgelendirici türlerini tanımlar: ışık kaynağı gölgelendiricileri, yüzey gölgelendiricileri, yer değiştirme gölgelendiricileri, hacim gölgelendiricileri , görüntüleyici gölgelendiriciler.Bu gölgelendiriciler çoğunlukla evrensel işlemciler tarafından yazılımda yürütülür ve tam bir donanım uygulamasına sahip değildir.Daha sonra birçok araştırmacı RenderMan'a benzer diller tanımladı, ancak zaten donanım hızlandırma için tasarlandılar: PixelFlow sistemi (Olano ve Olano ve Lastra), Quake Shader Dili (çok geçişli oluşturmayı tanımlayan Quake III oyununun grafik motorunda id Software tarafından kullanılır) vb. birden çok işleme geçişi. RenderMan gölgelendiricileri birkaç Çerçeve arabelleğinde birleştirilen geçiş sayısı. Daha sonra DirectX ve OpenGL'de donanım hızlandırılmış gördüğümüz diller oldu. Gölgelendiriciler, gerçek zamanlı grafik uygulamaları için bu şekilde uyarlanmıştır.

İlk video çipleri programlanabilir değildi ve yalnızca önceden programlanmış eylemler (sabit işlev) gerçekleştirdi; örneğin, aydınlatma algoritması donanıma katı bir şekilde sabitlendi ve hiçbir şey değiştirilemezdi. Daha sonra, video çipi üreticileri, Microsoft DirectX API'sinde yazılım desteği almayan programlanabilirlik öğelerini yavaş yavaş çiplerine dahil ettiler, ilk başta bunlar çok zayıf yeteneklerdi (NVIDIA GeForce 256 olarak bilinen NV10, zaten bazı ilkel programları çalıştırabiliyordu), ancak zamanla, olanaklar sürekli genişliyor. Bir sonraki adım, DirectX API gölgelendiricileri için donanım desteğine sahip ilk yongalar olan NV20 (GeForce 3) ve NV2A (Microsoft Xbox oyun konsolunda kullanılan video yongası) içindi. DirectX 8'de ortaya çıkan Shader Model 1.0 / 1.1 sürümü çok sınırlıydı, her gölgelendirici (özellikle piksel olanlar için) nispeten küçük olabilir ve çok sınırlı bir dizi talimatı birleştirebilirdi. Daha sonra Shader Model 1 (kısaca SM1) Pixel Shaders 1.4 (ATI R200) ​​ile daha fazla esneklik sunan ancak aynı zamanda çok sınırlı yeteneklere sahip olan geliştirildi. O zamanın gölgelendiricileri, genel amaçlı işlemciler için Assembly diline yakın olan, Assembly shader olarak adlandırılan dilde yazılmıştır. Düşük seviyesi, özellikle program kodu büyük olduğunda, modern programlama dillerinin zarafetinden ve yapısallığından uzak olduğu için, kodun ve programlamanın anlaşılmasında bazı zorluklar getirir.

DirectX 9'da (ATI R300 video çipi tarafından desteklenen ve gölgelendirici model sürüm 2.0 desteğine sahip ilk GPU olan) ortaya çıkan Shader Model 2.0 (SM2) sürümü, gerçek zamanlı gölgelendiricilerin yeteneklerini önemli ölçüde genişletti, daha uzun ve daha karmaşık gölgelendiriciler ve önemli ölçüde genişletilmiş bir dizi talimat sunar. Piksel gölgelendiricilerde kayan nokta hesaplamaları yapma yeteneği eklendi, bu da önemli bir gelişmeydi. DirectX 9, SM2 yetenekleri karşısında, C diline çok benzeyen yüksek seviyeli gölgelendirici dilini (HLSL) de tanıttı. Ve HLSL programlarını düşük seviyeli, donanım dostu koda çeviren verimli bir derleyici. Ayrıca, farklı donanım mimarileri için çeşitli profiller mevcuttur. Artık geliştirici bir HLSL gölgelendirici kodu yazabilir ve bunu DirectX kullanarak kullanıcı tarafından kurulan video çipi için en uygun programda derleyebilir. Bundan sonra, donanım gölgelendiricilerinin yeteneklerini bir adım daha geliştiren, daha da uzun gölgelendiriciler, köşe ve piksel gölgelendiricilerinde dinamik geçişler olasılığı, köşe gölgelendiricilerinden dokuları alma yeteneği vb. ekleyen NVIDIA, NV30 ve NV40'tan yongalar piyasaya sürüldü değildi, 2006'nın sonuna doğru DirectX 10'da bekleniyorlar ...

Genel olarak, gölgelendiriciler, köşeleri dönüştürmek ve aydınlatmak ve pikselleri her belirli uygulamanın geliştiricilerinin istediği şekilde ayrı ayrı işlemek için grafik hattına birçok yeni yetenek ekledi. Yine de, donanım gölgelendiricilerinin yetenekleri uygulamalarda henüz tam olarak açıklanmadı ve her yeni nesil donanımda yetenekleri arttıkça, bir zamanlar video oyunu hızlandırıcıları için erişilemez görünen RenderMan gölgelendiricilerinin seviyesini yakında göreceğiz. Şimdiye kadar, donanım video hızlandırıcıları tarafından desteklenen gerçek zamanlı gölgelendirici modellerinde yalnızca iki tür gölgelendirici tanımlanmıştır: ve (DirectX 9 API tanımında). Gelecekte, DirectX 10 bunlara daha fazlasını eklemeyi vaat ediyor.

Köşe Gölgelendiricisi

Köşe gölgelendiricileri, köşelerle matematiksel işlemler yapan video çipleri tarafından yürütülen programlardır (köşe, oyunlarda 3B nesneler oluştururlar), başka bir deyişle, köşelerin parametrelerini ve aydınlatmalarını değiştirmek için programlanabilir algoritmalar yürütme yeteneği sağlarlar (T&L - Dönüştürme ve Aydınlatma) ... Her tepe noktası birkaç değişken tarafından tanımlanır; örneğin, bir tepe noktasının 3B uzaydaki konumu koordinatlarla belirlenir: x, y ve z. Köşeler ayrıca renk özellikleri, doku koordinatları ve benzerleriyle de tanımlanabilir. Vertex gölgelendiriciler, algoritmalara bağlı olarak, örneğin yeni koordinatları ve / veya rengi hesaplama ve yazma gibi çalışmaları sırasında bu verileri değiştirir. Yani, köşe gölgelendiricisinin girdi verileri, şu anda işlenmekte olan geometrik modelin bir köşesi hakkındaki verilerdir. Tipik olarak bunlar uzamsal koordinatlar, normal, renk bileşenleri ve doku koordinatlarıdır. Yürütülen programın elde edilen verileri, boru hattının diğer kısmı için girdi görevi görür, rasterleştirici, üçgenin yüzeyi için girdi verilerinin doğrusal enterpolasyonunu yapar ve her piksel için karşılık gelen piksel gölgelendiricisini yürütür. Çok basit ve kaba (ama net, umarım) bir örnek: bir köşe gölgelendiricisi, bir 3B küre nesnesi almanıza ve ondan yeşil bir küp yapmak için bir köşe gölgelendiricisi kullanmanıza izin verir :).

NV20 video çipinin ortaya çıkmasından önce, geliştiricilerin, köşelerin parametrelerini değiştiren kendi programlarını ve algoritmalarını kullanmanın iki yolu vardı, ancak daha sonra tüm hesaplamalar CPU (yazılım T&L) tarafından yapılacaktı veya sabit donanım dönüşümü ve aydınlatma desteği ile video çiplerinde algoritmalar (donanım T&L ). İlk DirectX gölgelendirici modeli, tepe noktalarını dönüştürmek ve aydınlatmak için sabit işlevlerden tamamen programlanabilir algoritmalara doğru büyük bir adım anlamına geliyordu. Örneğin, kaplama algoritmasını tamamen video çipleri üzerinde yürütmek mümkün hale geldi ve bundan önce tek olasılık, evrensel merkezi işlemcilerde yürütülmesiydi. Şimdi, yukarıda bahsedilen NVIDIA yongasından bu yana büyük ölçüde geliştirilmiş yeteneklerle, köşe gölgelendiricileri kullanarak köşelerle çok şey yapabilirsiniz (belki de yaratılmaları dışında) ...

Köşe gölgelendiricilerinin nasıl ve nerede uygulandığına ilişkin örnekler:

Piksel gölgelendirici

Piksel gölgelendiriciler, görüntünün her pikseli için rasterleştirme sırasında video çipi tarafından yürütülen programlardır; piksellerin renk ve derinlik değeri (Z-buffer) üzerinde doku örnekleme ve/veya matematiksel işlemler gerçekleştirirler. Tüm piksel gölgelendirici komutları, geometri dönüşümü ve aydınlatma işlemleri tamamlandıktan sonra piksel piksel yürütülür. Çalışmasının bir sonucu olarak, piksel gölgelendirici, piksel renginin son değerini ve grafik ardışık düzeninin bir sonraki aşaması olan karıştırma için Z değerini üretir. Verilebilecek en basit piksel gölgelendirici örneği: banal çoklu doku oluşturma, sadece iki dokuyu karıştırma (örneğin dağınık ve ışık haritası) ve hesaplama sonucunu bir piksele dayatma.

Piksel gölgelendiriciler için donanım desteğine sahip video çiplerinin ortaya çıkmasından önce, geliştiricilerin yalnızca geleneksel çoklu doku oluşturma ve alfa harmanlama fırsatları vardı, bu da birçok görsel efektin olanaklarını önemli ölçüde sınırladı ve şu anda mevcut olanın çoğunu yapmaya izin vermedi. Ve eğer geometri ile programlı olarak başka bir şey yapılabilirse, o zaman piksellerle - hayır. DirectX'in ilk sürümleri (7.0'a kadar) her zaman tüm hesaplamaları dikey olarak gerçekleştirdi ve en son sürümlerde piksel başına aydınlatma için son derece sınırlı işlevsellik (EMBM - ortam çarpma eşleme ve DOT3'ü unutmayın) sundu. Piksel gölgelendiriciler, geliştirici tarafından programlanan malzemeleri kullanarak herhangi bir yüzeyi piksel piksel aydınlatmayı mümkün kıldı. NV20'de ortaya çıkan piksel gölgelendiriciler 1.1 (DirectX anlamında) yalnızca çoklu doku oluşturmayı değil, aynı zamanda çok daha fazlasını da yapabildi, ancak SM1 kullanan oyunların çoğu, çoğu yüzeyde geleneksel çoklu doku oluşturmayı kullandı ve yalnızca bir bölümünde daha karmaşık piksel gölgelendiricileri çalıştırdı. yüzeyler, çeşitli özel efektler oluşturmak için (herkes bilir ki, oyunlarda piksel gölgelendirici kullanmanın en yaygın örneği sudur). Şimdi, SM3'ün ve onları destekleyen video çiplerinin ortaya çıkışından sonra, piksel gölgelendiricilerin yetenekleri, bazı sınırlamalarla da olsa ışın izlemeye izin verecek şekilde büyüdü.

Piksel gölgelendiricileri kullanma örnekleri:

Prosedürel Dokular

Prosedürel dokular, matematiksel formüllerle tanımlanan dokulardır. Bu tür dokular video belleğinde yer kaplamazlar, "anında" piksel gölgelendirici tarafından oluşturulurlar, öğelerinin her biri (teksel) karşılık gelen gölgelendirici komutlarının yürütülmesinin bir sonucu olarak elde edilir. En yaygın prosedürel dokular şunlardır: farklı gürültü türleri (örneğin, fraktal gürültü), ahşap, su, lav, duman, mermer, ateş vb., yani matematiksel olarak nispeten basit bir şekilde tanımlanabilenlerdir. Prosedürel dokular, matematiksel formüllerde yalnızca küçük bir değişiklikle animasyonlu dokular kullanmanıza da olanak tanır. Örneğin, bu şekilde yapılan bulutlar hem dinamik hem de statik olarak oldukça iyi görünüyor.

Prosedürel dokuların avantajları ayrıca her doku için sınırsız düzeyde ayrıntı içerir, pikselleşme yoktur, doku her zaman onu görüntülemek için gereken boyutta oluşturulur. Animasyonlu da büyük ilgi görüyor, yardımı ile önceden hesaplanmış animasyonlu dokular kullanmadan su üzerinde dalgalar oluşturabilirsiniz. Bu tür dokuların bir başka artısı da, bir üründe ne kadar çok kullanılırsa, sanatçılar için (programcılar için daha fazla olsa da) düzenli dokular oluşturmak için o kadar az çalışmadır.

Ne yazık ki, prosedürel dokular oyunlarda henüz düzgün bir şekilde kullanılmamıştır, gerçek uygulamalarda normal bir doku yüklemek genellikle daha kolaydır, video belleğinin hacmi sıçramalar ve sınırlarla büyüyor, en modern hızlandırıcılarda zaten 512 megabayt yüklüyorlar. bir şey ödünç almaktan daha fazlasına ihtiyaç duyulan özel video belleği. Ayrıca, genellikle tam tersini yaparlar - piksel gölgelendiricilerde matematiği hızlandırmak için, arama tabloları (LUT) kullanırlar - hesaplamalar sonucunda elde edilen önceden hesaplanmış değerleri içeren özel dokular. Her piksel için birkaç matematik talimatını saymamak için, dokudan önceden hesaplanmış değerleri okumaları yeterlidir. Ancak daha da öte, vurgu matematiksel hesaplamalara ne kadar fazla kayarsa, aynı yeni nesil ATI video yongalarını alın: sırasıyla her 4 ve 16 doku birimi için 12 ve 48 piksel işlemciye sahip RV530 ve R580. Üstelik 3B dokulardan bahsediyorsak, çünkü iki boyutlu dokular hızlandırıcının yerel belleğine kolayca yerleştirilebiliyorsa, 3B dokular çok daha fazlasını gerektirir.

Prosedürel doku örnekleri:

Tümsek Haritalama / Aynasal Tümsek Haritalama

Bumpmapping, büyük hesaplama maliyetleri ve geometri değişiklikleri olmadan düz bir yüzey üzerinde düzensizlikleri simüle etmek (veya istediğiniz gibi mikro rölyefi modellemek) için bir tekniktir. Yüzeydeki her piksel için, bumpmap adı verilen özel bir yükseklik haritasındaki değerlere dayalı olarak bir aydınlatma hesabı yapılır. Bu genellikle 8 bitlik siyah beyaz bir dokudur ve doku renk değerleri normal dokular gibi üst üste bindirilmez, yüzeyin pürüzlülüğünü anlatmak için kullanılır. Her bir doku rengi, karşılık gelen kabartma noktasının yüksekliğini belirler, daha yüksek değerler, orijinal yüzeyin üzerinde daha yüksek yükseklik ve sırasıyla daha düşük değerler, daha düşük anlamına gelir. Ya da tam tersi.

Bir noktanın aydınlanma derecesi, ışık ışınlarının geliş açısına bağlıdır. Normal ile ışık ışını arasındaki açı ne kadar küçükse, yüzeydeki bir noktanın aydınlanması o kadar büyük olur. Yani düz bir yüzey alırsanız, her noktadaki normaller aynı olacak ve aydınlatma da aynı olacaktır. Ve eğer yüzey düzgün değilse (aslında, neredeyse tüm yüzeyler gerçekte vardır), o zaman her noktadaki normaller farklı olacaktır. Ve aydınlatma farklıdır, bir noktada daha fazla, diğerinde daha az olacaktır. Bu nedenle, çarpma eşleme ilkesi - çokgenin farklı noktaları için düzensizlikleri modellemek için, piksel başına aydınlatma hesaplanırken dikkate alınan yüzey normalleri ayarlanır. Sonuç olarak, yüzeyin daha doğal bir görüntüsü elde edilir, çarpma haritalama, modelin geometrik karmaşıklığını arttırmadan, tuğlalardaki tümsekler, derideki gözenekler vb. gibi yüzeylere daha fazla ayrıntı verir, çünkü hesaplamalar piksel seviyesi. Ayrıca ışık kaynağının konumu değiştiğinde bu düzensizliklerin aydınlatması doğru şekilde değişir.

Tabii ki, köşe aydınlatması hesaplama açısından çok daha basittir, ancak özellikle nispeten düşük poli geometri ile çok gerçekçi görünmemektedir, her piksel için renk enterpolasyonu, köşeler için hesaplanan değerlerden daha büyük değerleri yeniden üretemez. Yani üçgenin ortasındaki pikseller, tepe noktasına yakın parçalardan daha parlak olamaz. Sonuç olarak, kamaşma ve yüzeye çok yakın ışık kaynakları gibi ani aydınlatma değişiklikleri olan alanlar fiziksel olarak doğru görüntülenmeyecek ve bu özellikle dinamiklerde fark edilecektir. Elbette, modelin geometrik karmaşıklığını artırarak, onu daha fazla köşeye ve üçgene bölerek sorun kısmen çözülebilir, ancak piksel piksel aydınlatma en iyi seçenektir.

Devam etmek için aydınlatmanın bileşenlerini hatırlatmanız gerekiyor. Bir yüzey noktasının rengi, sahnedeki tüm ışık kaynaklarından (ideal olarak hepsinden, çoğu zaman çoğu kişi tarafından ihmal edilir) ortam, dağınık ve aynasal bileşenlerin toplamı olarak hesaplanır. Her bir ışık kaynağının bu değere katkısı, ışık kaynağı ile yüzeydeki bir nokta arasındaki mesafeye bağlıdır.

Aydınlatma bileşenleri:

Şimdi buna biraz çarpma eşlemesi ekleyelim:

Aydınlatmanın tek tip (ortam) bileşeni, sahnenin her noktası için, tüm noktaların eşit olarak aydınlatıldığı ve aydınlatmanın diğer faktörlere bağlı olmadığı bir "ilk" aydınlatmadır.
Işığın dağınık bileşeni, ışık kaynağının konumuna ve yüzey normaline bağlıdır. Bu aydınlatma bileşeni, nesnenin her bir köşesi için farklıdır ve bu da onlara hacim kazandırır. Işık artık yüzeyi aynı gölgeyle doldurmaz.
Aydınlatmanın aynasal bileşeni, ışık ışınlarının yüzeyden yansımasında kendini gösterir. Hesaplanması için, ışık kaynağının konumu ve normalin vektörüne ek olarak, iki vektör daha kullanılır: bakış yönünün vektörü ve yansıma vektörü. Aynasal aydınlatma modeli ilk olarak Phong Bui-Tong tarafından önerildi. Bu parlamalar görüntünün gerçekçiliğini önemli ölçüde artırır, çünkü nadir gerçek yüzeyler ışığı yansıtmaz, bu nedenle aynasal bileşen çok önemlidir. Özellikle hareket halinde, çünkü kamaşma hemen kameranın konumundaki veya nesnenin kendisindeki değişikliği gösterir. Daha sonra araştırmacılar, ışık enerjisinin dağılımını, malzemeler tarafından emilimini ve dağınık bir bileşen şeklinde saçılmayı dikkate alarak bu bileşeni hesaplamak için daha karmaşık (Blinn, Cook-Torrance, Ward) başka yollar buldular.

Böylece, Specular Bump Mapping şu şekilde elde edilir:

Aynı şeyi Call of Duty 2 oyun örneğinde de görelim:


Resmin ilk parçası, çarpma eşleme olmadan () görüntüleniyor, ikincisi (sağ üst) aynasal bileşen olmadan çarpma eşleme yapıyor, üçüncüsü oyunda kullanılan normal büyüklükteki aynasal bir bileşenle ve sonuncusu , sağ alttan, mümkün olan maksimum aynasal bileşenle.

İlk donanım uygulamasına gelince, NVIDIA Riva TNT yongalarına dayalı video kartlarının olduğu günlerde bazı bumpmapping türleri (Emboss Bump Mapping) kullanılmaya başlandı, ancak o zamanın teknikleri son derece ilkeldi ve yaygın olarak kullanılmıyordu. Bilinen bir sonraki tür, Çevre Eşlemeli Çarpma Eşleme (EMBM) idi, ancak o zamanlar DirectX'te yalnızca Matrox video kartlarının donanım desteği vardı ve yine kullanım ciddi şekilde sınırlıydı. Sonra Dot3 Bump Mapping ortaya çıktı ve o zamanın video çipleri (GeForce 256 ve GeForce 2), aynı anda kullanılan iki doku ile sınırlı olduklarından, böyle bir matematiksel algoritmayı tamamen yürütmek için üç geçiş gerektiriyordu. NV20'den (GeForce3) başlayarak, piksel gölgelendiricileri kullanarak aynı şeyi tek geçişte yapmak mümkün hale geldi. Üstelik. gibi daha etkili teknikler kullanmaya başladılar.

Oyunlarda çarpma eşleme kullanımına örnekler:


Yer Değiştirme Eşleme, 3B nesnelere ayrıntı ekleme yöntemidir. Çarpma haritalama ve diğer piksel başına yöntemlerden farklı olarak, yalnızca bir noktanın aydınlatması yükseklik haritaları tarafından doğru bir şekilde modellendiğinde, ancak uzaydaki konumu değişmediğinde, bu yalnızca yüzey karmaşıklığında bir artış yanılsaması verir, yer değiştirme haritaları, köşelerden ve çokgenlerden gerçek karmaşık 3B nesneler, kısıtlama olmaksızın, piksel başına yöntemlerin doğasında vardır. Bu yöntem, üçgenlerin köşelerini, yer değiştirme haritalarındaki değerlere göre bir miktar normalize ederek yeniden konumlandırır. Bir yer değiştirme haritası genellikle siyah beyaz bir dokudur ve içindeki değerler bir nesnenin yüzeyindeki her noktanın yüksekliğini belirlemek için kullanılır (değerler 8 bit veya 16 bit sayılar olarak saklanabilir) , bir yumru haritasına benzer. Yer değiştirme haritaları genellikle tepeler ve vadiler içeren bir arazi oluşturmak için kullanılır (bu durumda bunlara yükseklik haritaları da denir). Arazi iki boyutlu bir yer değiştirme haritası ile tanımlandığından, bir sonraki karede yalnızca yer değiştirme haritasının değiştirilmesini ve yüzeyin buna dayalı olarak oluşturulmasını gerektirdiğinden, gerektiğinde onu deforme etmek nispeten kolaydır.

Yer değiştirme haritaları kullanılarak bir peyzajın oluşturulması resimde açıkça gösterilmektedir. Başlangıçta, 4 köşe ve 2 çokgen kullanıldı, sonuç olarak, manzaranın tam teşekküllü bir parçası ortaya çıktı.

Yer değiştirme haritalarının üst üste bindirilmesinin en büyük avantajı, yalnızca yüzeye ayrıntı ekleme yeteneği değil, aynı zamanda nesnenin neredeyse tamamen oluşturulmasıdır. Düşük polili bir nesne alınır, daha fazla köşe ve çokgene bölünür (mozalanır). Mozaikleme tarafından üretilen köşeler daha sonra yer değiştirme haritasında okunan değere dayalı olarak normal boyunca yer değiştirir. Uygun yer değiştirme haritasını kullanarak basit bir nesneden karmaşık bir 3B nesne elde ederiz:


Mozaikleme tarafından oluşturulan üçgenlerin sayısı, yer değiştirme haritası tarafından tanımlanan tüm detayları yakalamak için yeterince büyük olmalıdır. Bazen, N-yamalar veya diğer yöntemler kullanılarak otomatik olarak ek üçgenler oluşturulur. Yer değiştirme haritaları, uygun piksel piksel aydınlatmanın yeterli olduğu yerlerde ince ayrıntılar oluşturmak için çarpma haritalama ile birlikte en iyi şekilde kullanılır.

Yer değiştirme eşlemesi ilk olarak DirectX 9.0'da desteklendi. Bu, Yer Değiştirme Eşleme tekniğini destekleyen bu API'nin ilk sürümüydü. DX9, filtrelenmiş ve önceden örneklenmiş iki tür yer değiştirme eşlemesini destekler. İlk yöntem unutulmuş MATROX Parhelia video çipi ve ikincisi - ATI RADEON 9700 tarafından desteklendi. Filtrelenmiş yöntem, yer değiştirme haritaları için mip seviyelerinin kullanılmasına ve bunlar için üç doğrusal filtreleme uygulanmasına izin vermesi bakımından farklılık gösterir. Bu yöntemde, her tepe noktası için yer değiştirme haritasının mip seviyesi, tepe noktasından kameraya olan mesafeye göre seçilir, yani detay seviyesi otomatik olarak seçilir. Bu, üçgenler yaklaşık olarak aynı boyutta olduğunda sahnenin neredeyse eşit bir şekilde bölünmesini sağlar.

Yer değiştirme eşleme esasen bir geometri sıkıştırma tekniği olarak düşünülebilir; yer değiştirme eşlemelerinin kullanılması belirli bir 3B model detayı için gereken bellek miktarını azaltır. Hacimli geometri verileri, genellikle 8 bit veya 16 bit olmak üzere basit 2B yer değiştirme dokuları ile değiştirilir. Bu, günümüz sistemlerindeki en büyük kısıtlamalardan bazıları olan geometri verilerini GPU'ya iletmek için gereken bellek ve bant genişliği miktarını azaltır. Alternatif olarak, eşit bant genişliği ve depolama gereksinimleriyle, yer değiştirme eşleme çok daha karmaşık geometrik 3B modellere olanak tanır. Çok daha az karmaşık modellerin kullanılması, on binlerce veya yüzbinlerce üçgen yerine, binlerce birim kullanıldığında, animasyonlarını hızlandırmayı da mümkün kılar. Veya kumaş simülasyonu gibi daha karmaşık algoritmalar ve teknikler uygulayarak geliştirin.

Diğer bir avantaj, yer değiştirme haritalarının kullanılmasının karmaşık poligonal 3B ağları, işlenmesi daha kolay olan birden çok 2B dokulara dönüştürmesidir. Örneğin, organizasyon için, yer değiştirme haritalarını üst üste bindirmek için normal mip eşlemeyi kullanabilirsiniz. Ayrıca, üç boyutlu ağları sıkıştırmak için nispeten karmaşık algoritmalar yerine, dokuları, hatta JPEG benzeri olanları bile sıkıştırmak için olağan yöntemleri kullanabilirsiniz. Ve 3B nesnelerin prosedürel olarak oluşturulması için, 2B dokular için olağan algoritmaları kullanabilirsiniz.

Ancak yer değiştirme haritalarının da bazı sınırlamaları vardır, her durumda uygulanamazlar. Örneğin, çok fazla ince ayrıntı içermeyen düz nesneler, standart ağlar veya Bezier eğrileri gibi diğer daha yüksek seviyeli yüzeyler biçiminde daha iyi temsil edilecektir. Öte yandan, ağaçlar veya bitkiler gibi çok karmaşık modellerin de yer değiştirme haritalarıyla temsil edilmesi kolay değildir. Kullanım kolaylığı ile ilgili sorunlar da vardır, bu neredeyse her zaman özel yardımcı programlar gerektirir, çünkü doğrudan yer değiştirme haritaları oluşturmak çok zordur (peyzaj gibi basit nesnelerden bahsetmiyorsak). İki yöntem benzer bir fikrin iki farklı temsili olduğundan, yer değiştirme haritalarının yapısal sorunlarının ve sınırlamalarının çoğu aynıdır.

Gerçek oyunlardan bir örnek olarak, NVIDIA NV40 video yongalarında ve Shader Model 3.0'da ortaya çıkan bir özellik olan köşe gölgelendiricisinden doku örnekleme kullanan bir oyundan bahsedeceğim. Köşe dokulandırma, mozaikleme olmadan (daha fazla üçgene bölme) tamamen GPU tarafından gerçekleştirilen yer değiştirme haritalarını üst üste bindirmenin basit bir yöntemine uygulanabilir. Böyle bir algoritmanın kullanımı sınırlıdır, ancak haritalar dinamik ise, yani süreç içinde değişeceklerse anlamlıdırlar. Örneğin, Pacific Fighters oyununda yapılan büyük su yüzeylerinin görüntülenmesi şu şekildedir:


Normal eşleme, daha önce açıklanan çarpma eşleme tekniğinin geliştirilmiş bir sürümüdür, genişletilmiş bir sürümüdür. Bumpmapping, 1978'de Blinn tarafından geliştirildi, burada yüzey normalleri, çarpma haritalarından alınan bilgilere dayalı olarak bu arazi haritalama yöntemiyle değiştirildi. Bummapping, yüzey noktaları için sadece mevcut normali değiştirirken, normalmapping, değerlerini özel olarak hazırlanmış bir normal haritadan alarak normallerin yerini tamamen alır. Bu haritalar genellikle, 8 bit siyah beyaz yüksekliğin aksine, RGB renk bileşenleri olarak temsil edilen (ancak, sıkıştırmalı olanlar da dahil olmak üzere normal haritalar için özel formatlar da vardır) olarak temsil edilen, önceden hesaplanmış normal değerlere sahip dokulardır. yumru haritalamada haritalar.

Genel olarak, çarpma eşleme gibi, aynı zamanda, daha gerçek geometri kullanmadan, yalnızca daha gelişmiş, nispeten düşük geometrik karmaşıklığa sahip modellere ayrıntı eklemek için "ucuz" bir yöntemdir. Tekniğin en ilginç kullanımlarından biri, aynı yüksek geometrik karmaşıklık modelinin işlenmesiyle elde edilen normal haritaları kullanarak düşük poli modellerin detayını önemli ölçüde arttırmaktır. Normal haritalar, yüzeyin çarpma haritalamaya göre daha ayrıntılı bir tanımını içerir ve daha karmaşık şekilleri temsil etmenize olanak tanır. Son derece ayrıntılı nesnelerden bilgi edinme fikirleri geçen yüzyılın 90'lı yıllarının ortalarında dile getirildi, ancak daha sonra kullanım içindi. Daha sonra, 1998'de, ayrıntıların yüksek poli modellerden düşük poli modellere normal haritalar biçiminde aktarılması için fikirler sunuldu.

Normal haritalar, ayrıntılı yüzey verilerini depolamak için çok sayıda çokgen kullanmaktan daha verimli bir yol sağlar. Tek ciddi sınırlamaları, büyük ayrıntılar için çok uygun olmamalarıdır, çünkü normal haritalama aslında çokgenler eklemez veya nesnenin şeklini değiştirmez, yalnızca görünümünü yaratır. Bu sadece piksel seviyesindeki aydınlatma hesaplamalarına dayanan detayların bir simülasyonudur. Nesnenin aşırı çokgenlerinde ve yüzeyin büyük eğim açılarında bu çok fark edilir. Bu nedenle, normal haritalamayı uygulamanın en makul yolu, düşük poli modelini nesnenin temel şeklini koruyacak kadar ayrıntılı hale getirmek ve daha ince ayrıntılar eklemek için normal haritaları kullanmaktır.

Normal haritalar genellikle modelin düşük ve yüksek poli olmak üzere iki versiyonundan oluşturulur. Düşük poli modeli, minimum geometriden, nesnenin temel şekillerinden oluşur ve yüksek poli model, maksimum ayrıntı için ihtiyacınız olan her şeyi içerir. Ardından, özel araçlar kullanılarak birbirleriyle karşılaştırılır, fark hesaplanır ve normal harita adı verilen bir dokuda saklanır. Oluştururken, yüksek poli bir modelde bile modellenemeyen çok küçük ayrıntılar için (cilt gözenekleri, diğer küçük çöküntüler) ek olarak bir çarpma haritası kullanabilirsiniz.

Normal haritalar orijinal olarak, R, G ve B renk bileşenlerinin (0 ila 1) X, Y ve Z koordinatları olarak yorumlandığı normal RGB dokuları olarak temsil edildi.Normal haritadaki her bir doku, bir yüzey noktasının normali olarak temsil edilir. Normal haritalar iki tip olabilir: model uzayındaki (genel koordinat sistemi) veya teğet uzaydaki koordinatlarla (Rusça terim "teğet uzay", bir üçgenin yerel koordinat sistemidir). İkinci seçenek daha sık kullanılır. Normal haritalar model uzayında sunulduğunda, tüm yönler temsil edilebildiğinden ve yerel koordinat sisteminde, teğet uzaydayken, üç bileşene sahip olmaları gerekir, o zaman iki bileşenle geçebilir ve üçüncüyü bir pikselde alabilirsiniz. gölgelendirici.

Modern gerçek zamanlı uygulamalar, görüntü kalitesi açısından önceden oluşturulmuş animasyondan hala büyük ölçüde daha iyi performans gösteriyor; bu, her şeyden önce, aydınlatma kalitesi ve sahnelerin geometrik karmaşıklığı ile ilgilidir. Gerçek zamanlı olarak hesaplanan köşe ve üçgen sayısı sınırlıdır. Bu nedenle geometri miktarını azaltacak yöntemler çok önemlidir. Normal haritalamadan önce, bu tür birkaç yöntem geliştirildi, ancak düşük poli modeller, çarpma haritalama ile bile, daha karmaşık modellerden çok daha kötü. Normal eşlemenin birçok dezavantajı olsa da (en belirgini - model düşük-poli olarak kaldığından, bu açısal kenarlarından kolayca görülebilir), son işleme kalitesi gözle görülür şekilde iyileştirilir ve modellerin geometrik karmaşıklığı düşük bırakılır. Son zamanlarda bu tekniğin popülaritesinin artması ve tüm popüler oyun motorlarında kullanılması açıkça görülmektedir. Bunun nedeni, mükemmel sonuç kalitesi ve modellerin geometrik karmaşıklığı gereksinimlerindeki eşzamanlı azalmanın birleşimidir. Normal haritalama tekniği artık hemen hemen her yerde kullanılmaktadır, tüm yeni oyunlar bunu mümkün olduğunca yaygın olarak kullanmaktadır. İşte normal haritalama kullanan ünlü PC oyunlarının kısa bir listesi: Far Cry, Doom 3, Half-Life 2, Call of Duty 2, FEAR, Quake 4. harita normallerinin kullanımı.

Bu tekniği kullanmanın tek bir olumsuz sonucu vardır - doku hacminde bir artış. Sonuçta, normal bir harita, bir nesnenin nasıl görüneceğini güçlü bir şekilde etkiler ve yeterince büyük bir çözünürlüğe sahip olmalıdır, bu nedenle video belleği ve bant genişliği gereksinimleri iki katına çıkar (sıkıştırılmamış normal haritalar durumunda). Ancak şimdi 512 megabayt yerel belleğe sahip video kartları üretiliyor, bant genişliği sürekli artıyor, özellikle normal haritalar için sıkıştırma yöntemleri geliştirildi, bu nedenle bu küçük kısıtlamalar aslında çok önemli değil. Normal haritalamanın etkisi çok daha fazladır, nispeten düşük poli modellerin kullanılmasına izin verir, geometrik verileri depolamak için bellek gereksinimlerini azaltır, performansı artırır ve çok iyi bir görsel sonuç verir.

Paralaks Haritalama / Ofset Haritalama

1984'te geliştirilen normal haritalamayı, 1999'da Olivera ve Bishop tarafından tanıtılan Relief Texture Mapping takip etti. Derinlik bilgisine dayalı bir doku haritalama tekniğidir. Yöntem oyunlarda uygulama bulamadı, ancak fikri paralaks haritalama çalışmalarının devam etmesine ve geliştirilmesine katkıda bulundu. Kaneko, 2001 yılında, piksel bazında paralaks efekti oluşturmak için ilk verimli yöntem olan paralaks haritalamayı tanıttı. 2004'te Welsh, programlanabilir video çiplerinde paralaks eşlemenin kullanımını gösterdi.

Bu yöntem belki de en farklı isimlere sahiptir. Tanıştıklarımı sıralayacağım: Paralaks Haritalama, Ofset Haritalama, Sanal Yer Değiştirme Haritalama, Piksel Başına Yer Değiştirme Haritalama. Makalede kısa olması için ilk başlık kullanılmıştır.
Paralaks haritalama, çok fazla performans kaybetmeden size yüzey detayları hakkında daha fazla fikir veren, 3B yüzeylerin daha doğal bir görüntüsünü veren, çarpma haritalama ve normal haritalama tekniklerine başka bir alternatiftir. Bu teknik aynı anda hem yer değiştirme haritalamaya hem de normal haritalamaya benzer, arada bir yerdedir. Yöntem ayrıca orijinal geometrik modelden daha fazla yüzey detayı gösterecek şekilde tasarlanmıştır. Normal haritalamaya benzer, ancak fark, yöntemin doku koordinatlarını değiştirerek doku haritalamasını bozmasıdır, böylece yüzeye farklı açılardan baktığınızda dışbükey görünür, ancak gerçekte yüzey düzdür ve değişmez . Başka bir deyişle, Paralaks Haritalama, bakış açısındaki bir değişikliğe bağlı olarak değişen yüzey noktalarının etkisini tahmin etmeye yönelik bir tekniktir.

Teknik, yüzeyin daha hacimli görünmesi için doku koordinatlarını kaydırır (bu nedenle teknik bazen ofset haritalama olarak adlandırılır). Yöntemin arkasındaki fikir, görünüm vektörünün yüzeyle kesiştiği noktanın doku koordinatlarını döndürmektir. Bu, yükseklik haritası için ışın izleme (ışın izleme) gerektirir, ancak çok fazla değişen değerlere ("düz" veya "düzgün") sahip değilse, yaklaşımdan vazgeçilebilir. Bu yöntem, kesişimlerin ve büyük öteleme değerlerinin yanlış hesaplanması olmaksızın, düzgün bir şekilde değişen yüksekliklere sahip yüzeyler için iyidir. Böyle basit bir algoritma, yalnızca üç piksel gölgelendirici talimatıyla normal haritalamadan farklıdır: iki matematiksel talimat ve dokudan bir ek getirme. Yeni doku koordinatı hesaplandıktan sonra, diğer doku katmanlarını okumak için kullanılır: temel doku, normal harita, vb. Modern video çiplerinde bu paralaks eşleme yöntemi, neredeyse geleneksel doku eşleme kadar etkilidir ve sonucu, basit normal eşlemeden daha gerçekçi bir yüzey görüntüsüdür.

Ancak geleneksel paralaks haritalamanın kullanımı, değerlerde çok az fark olan yükseklik haritalarıyla sınırlıdır. "Dik" düzensizlikler algoritma tarafından yanlış işlenir, çeşitli eserler ortaya çıkar, dokular "yüzer", vb. Paralaks haritalama tekniğini geliştirmek için çeşitli değiştirilmiş yöntemler geliştirilmiştir. Birkaç araştırmacı (Yerex, Donnelly, Tatarchuk, Policarpo) ilk algoritmayı geliştiren yeni yöntemler tanımladı. Hemen hemen tüm fikirler, yüzey detaylarının birbiriyle kesişimini belirlemek için bir piksel gölgelendiricide ışın izlemeye dayanır. Değiştirilen teknikler birkaç farklı isim almıştır: Oklüzyonlu Paralaks Haritalama, Mesafe Fonksiyonları ile Paralaks Haritalama, Paralaks Oklüzyon Haritalama. Kısaca, hepsine Paralaks Oklüzyon Haritalaması diyeceğiz.

Paralaks Oklüzyon Haritalama yöntemleri, yükseklikleri belirlemek ve dokuların görünürlüğünü hesaba katmak için ışın izlemeyi de içerir. Nitekim, yüzeye açılı olarak bakıldığında, dokular birbirini bloke eder ve bunu akılda tutarak, paralaks etkisine daha fazla derinlik ekleyebilirsiniz. Ortaya çıkan görüntü daha gerçekçi hale gelir ve bu tür geliştirilmiş yöntemler daha derin kabartma için kullanılabilir, tuğla ve taş duvarları, kaldırımları vb. tasvir etmek için harikadır. Paralaks Haritalama ile Yer Değiştirme Haritalama arasındaki temel farkın, hesaplamaların yapılmasıdır. tümü piksel başınadır ve yüzeysel değildir. Bu nedenle yöntemin Virtual Displacement Mapping ve Per-Pixel Displacement Mapping gibi adları vardır. Resme bakın, inanması zor ama buradaki kaldırım taşları sadece piksel piksel efektler:

Yöntem, bu geometriyi uygularken gerekli olacak milyonlarca köşe ve üçgen olmadan ayrıntılı yüzeyleri etkili bir şekilde görüntülemenizi sağlar. Aynı zamanda, yüksek detay korunur (silüetler / kenarlar hariç) ve animasyon hesaplamaları büyük ölçüde basitleştirilir. Bu teknik, gerçek geometriyi kullanmaktan daha ucuzdur ve özellikle çok küçük ayrıntılara sahip durumlarda önemli ölçüde daha az çokgen kullanılır. Algoritmanın birçok uygulaması vardır ve en çok taşlar, tuğlalar ve benzerleri için uygundur.

Ayrıca, yükseklik haritalarının dinamik olarak değişebilmesi (dalgalı su yüzeyi, duvarlardaki kurşun delikleri ve çok daha fazlası) ek bir avantajdır. Yöntemin dezavantajı, geometrik olarak doğru silüetlerin (nesnenin kenarları) olmamasıdır, çünkü algoritma piksel pikseldir ve gerçek bir yer değiştirme eşlemesi değildir. Ancak, geometrinin dönüşümü, aydınlatması ve animasyonu üzerinde azaltılmış yük şeklinde performans tasarrufu sağlar. Büyük hacimli geometri verilerini depolamak için gereken video belleğinden tasarruf sağlar. Tekniğin avantajları, mevcut uygulamalara nispeten basit entegrasyon ve süreçte normal haritalama için kullanılan tanıdık yardımcı programların kullanılmasıdır.

Teknik, son zamanlarda gerçek hayattaki oyunlarda zaten kullanılıyor. Şimdiye kadar, ışın izleme ve kesişimleri hesaplamadan statik yükseklik haritalarına dayalı basit paralaks haritalama ile idare ettiler. Oyunlarda paralaks eşlemenin nasıl kullanılabileceğine dair bazı örnekler:

Rötuş

Geniş anlamda, işlem sonrası, ana görüntüleme adımlarından sonra gerçekleşen her şeydir. Diğer bir deyişle, post-processing, görüntü oluşturulduktan sonra yapılan herhangi bir değişikliktir. Son işleme, özel görsel efektler oluşturmak için bir dizi araçtır ve bunların oluşturulması, sahnenin oluşturulmasıyla ilgili ana çalışma tamamlandıktan sonra gerçekleştirilir, yani, işlem sonrası efektler oluşturulurken hazır bir raster görüntü kullanılır.

Bir fotoğraftan basit bir örnek: Açık havada yeşilliklerle dolu güzel bir gölü fotoğrafladınız. Gökyüzü çok parlak ve ağaçlar çok karanlık. Fotoğrafı bir grafik düzenleyiciye yüklersiniz ve görüntünün alanları veya resmin tamamı için parlaklık, kontrast ve diğer parametreleri değiştirmeye başlarsınız. Ancak artık kamera ayarlarını değiştirme imkanınız yok, bitmiş görüntünün işlenmesini yapıyorsunuz. Bu işlem sonrasıdır. Veya başka bir örnek: portre fotoğrafçılığında bir arka plan seçmek ve daha derin bir alan derinliği efekti için o alana bir bulanıklık filtresi uygulamak. Yani bir grafik düzenleyicide bir kareyi değiştirdiğinizde veya düzelttiğinizde, post-processing yapıyorsunuz demektir. Aynısı oyunda, gerçek zamanlı olarak yapılabilir.

İşleme sonrası görüntü işleme için birçok farklı olasılık vardır. Herkes muhtemelen grafik editörlerinde çok sayıda sözde grafik filtresi görmüştür. Bu tam olarak son filtreler olarak adlandırılan şeydir: bulanıklık, kenar algılama, keskinleştirme, parazit, pürüzsüz, kabartma, vb. Gerçek zamanlı 3B işleme uygulandığında, bu şu şekilde yapılır - tüm sahne özel bir alana dönüştürülür, işleme ana görüntü oluşturmadan sonra bu görüntü ayrıca piksel gölgelendiriciler kullanılarak işlenir ve ancak bundan sonra ekranda görüntülenir. Oyunlarda işlem sonrası efektlerden en sık kullanılanları, ,. Diğer birçok post etkisi vardır: gürültü, parlama, bozulma, sepya, vb.

Oyun uygulamalarında son işlemeye ilişkin birkaç önemli örnek:

Yüksek Dinamik Aralık (HDR)

3D grafiklere uygulanan Yüksek Dinamik Aralık (HDR), yüksek dinamik aralık oluşturmadır. HDR'nin özü, yoğunluğu ve rengi gerçek fiziksel niceliklerle tanımlamaktır. Bir görüntüyü tanımlamak için genel model, tüm renkler birincil renklerin toplamı olarak temsil edildiğinde RGB'dir: kırmızı, yeşil ve mavi, her biri için 0 ila 255 arasında olası tamsayı değerleri şeklinde farklı yoğunluklarda, ile kodlanmış. renk başına sekiz bit. Belirli bir model veya cihaz tarafından görüntülenebilen maksimum yoğunluğun minimuma oranına dinamik aralık denir. Bu nedenle, RGB modelinin dinamik aralığı 256: 1 veya 100: 1 cd / m 2'dir (iki büyüklük sırası). Renk ve yoğunluğu tanımlayan bu modele genel olarak Düşük Dinamik Aralık (LDR) adı verilir.

Tüm durumlar için olası LDR değerleri açıkça yeterli değildir, kişi özellikle düşük ışık yoğunluğunda çok daha geniş bir aralığı görebilir ve bu gibi durumlarda (ve yüksek yoğunluklarda) RGB modeli çok sınırlıdır. İnsan görüşünün dinamik aralığı 10 -6 ila 108 cd / m2, yani 10.000.000.000.000.000: 1 (14 büyüklük sırası). Tüm menzili aynı anda göremeyiz, ancak herhangi bir zamanda gözle görülebilen menzil yaklaşık 10.000:1'dir (dört büyüklük sırası). Vizyon, geceleri bir odada ışığın kapatılmasıyla ilgili bir durumla kolayca tanımlanabilen sözde uyarlamayı kullanarak aydınlatma aralığının başka bir bölümündeki değerlere kademeli olarak uyum sağlar - ilk başta gözler çok az görür, ancak zamanla değişen aydınlatma koşullarına uyum sağlarlar ve çok daha fazlasını görürler. ... Aynı şey, karanlık ortamı tekrar aydınlık olana değiştirdiğinizde de olur.

Dolayısıyla, RGB açıklama modelinin dinamik aralığı, bir kişinin gerçekte görebildiği görüntüleri temsil etmek için yeterli değildir, bu model, aralığın üst ve alt kısımlarındaki olası ışık yoğunluğu değerlerini önemli ölçüde azaltır. HDR malzemelerinde belirtilen en yaygın örnek, güneşli bir günde aydınlık bir sokakta pencereli karanlık bir odanın görüntüsüdür. Bir RGB modeliyle, pencerenin dışında ne olduğunu veya yalnızca odanın içinde ne olduğunu normal bir şekilde görüntüleyebilirsiniz. LDR'de 100 cd / m2'den büyük değerler genellikle kırpılır, bu nedenle 3D oluşturmada doğrudan kameraya yönlendirilen parlak ışık kaynaklarını doğru şekilde görüntülemenin zor olmasının nedeni budur.

Şimdiye kadar, veri görüntüleme cihazlarının kendileri ciddi şekilde geliştirilemez ve hesaplamalarda LDR'yi bırakmak mantıklıdır, gerçek fiziksel yoğunluk ve renk değerlerini (veya doğrusal orantılı) kullanabilir ve gösterebileceği maksimum değeri görüntüleyebilirsiniz. monitör. HDR gösteriminin özü, yoğunluk ve renk değerlerinin gerçek fiziksel miktarlarda veya doğrusal orantılı olarak kullanılması ve tam sayıların değil, kayan noktalı sayıların yüksek hassasiyetle (örneğin, 16 veya 32 bit) kullanılmasıdır. Bu, RGB modelinin sınırlamalarını ortadan kaldırır ve görüntünün dinamik aralığını önemli ölçüde artırır. Ancak daha sonra herhangi bir HDR görüntüsü, özel algoritmalar kullanılarak mümkün olan en yüksek kalitede herhangi bir görüntüleme ortamında (aynı RGB monitör) görüntülenebilir.

HDR oluşturma, görüntüyü oluşturduktan sonra pozlamayı değiştirmenize olanak tanır. İnsan görme adaptasyonunun etkisini simüle etmeyi mümkün kılar (parlak açık alanlardan karanlık odalara geçiş ve tam tersi), fiziksel olarak doğru aydınlatmaya izin verir ve ayrıca işlem sonrası efektlerin (parlama, parlama, çiçeklenme) uygulanması için birleşik bir çözümdür. , hareket bulanıklığı). HDR gösteriminde görüntü işleme algoritmaları, renk düzeltme, gama düzeltme, hareket bulanıklığı, çiçeklenme ve diğer son işleme yöntemleri daha iyi gerçekleştirilir.

Gerçek zamanlı 3D oluşturma uygulamalarında (çoğunlukla oyunlar), HDR oluşturma çok uzun zaman önce kullanılmaya başlandı, çünkü kayan nokta formatlarında bir oluşturma hedefi için hesaplama ve destek gerektiriyor; DirectX 9. Oyunlarda HDR işlemenin olağan yolu: bir sahneyi kayan nokta arabelleğine işleme, genişletilmiş bir renk aralığında bir görüntünün sonradan işlenmesi (değişen kontrast ve parlaklık, renk dengesi, parlama ve hareket bulanıklığı efektleri, mercek parlaması ve benzeri), son HDR görüntüsünü LDR görüntüleme cihazına çıkarmak için ton eşleme uygulayarak. Bazen HDR formatlarında ortam haritaları kullanılır, nesneler üzerindeki statik yansımalar için HDR'nin dinamik kırılmaları ve yansımaları simüle etmede kullanımı çok ilginçtir, bunun için kayan nokta formatlarındaki dinamik haritalar da kullanılabilir. Buna önceden hesaplanmış ve HDR formatında kaydedilmiş daha fazla ışık haritası ekleyebilirsiniz. Yukarıdakilerin çoğu, örneğin Half-Life 2: Lost Coast'ta yapılmıştır.

HDR işleme, geleneksel yöntemlerden daha yüksek kalitede karmaşık son işlemler için çok kullanışlıdır. Aynı çiçeklenme, HDR görünüm modelinde hesaplandığında daha gerçekçi görünecektir. Örneğin, Crytek'in Far Cry oyununda yapıldığı gibi, standart HDR işleme tekniklerini kullanır: Kawase ve ton haritalama operatörü Reinhard tarafından sağlanan çiçek filtrelerini uygulamak.

Ne yazık ki, bazı durumlarda oyun geliştiricileri HDR adı altında yalnızca normal LDR aralığında hesaplanan bir çiçeklenme filtresi gizleyebilir. Ve şu anda HDR işlemeli oyunlarda yapılanların çoğu en iyi kalitede çiçeklenme olsa da, HDR oluşturmanın faydaları bu efekt sonrası ile sınırlı değil, sadece yapılması en kolay olanı.

Gerçek zamanlı uygulamalarda HDR işlemenin diğer örnekleri:


Ton eşleme, bir HDR parlaklık aralığını monitör veya yazıcı gibi bir çıkış cihazı tarafından görüntülenen LDR aralığına dönüştürme işlemidir, çünkü bunlara HDR görüntülerin çıktısını almak HDR modelinin dinamik aralığını ve gamını karşılık gelen LDR dinamiğine dönüştürmeyi gerektirir. aralık, en yaygın olarak RGB. Sonuçta, HDR'de sunulan parlaklık aralığı çok geniştir, bir sahnede bir seferde mutlak dinamik aralığın birkaç büyüklük sırasıdır. Ve geleneksel çıkış cihazlarında (monitörler, televizyonlar) yeniden üretilebilen aralık, dinamik aralığın yalnızca iki büyüklüğü kadardır.

HDR'den LDR'ye dönüştürme, ton eşleme olarak adlandırılır ve kayıplıdır ve insan görüşünün özelliklerini taklit eder. Bu algoritmalara genellikle ton eşleme ifadeleri denir. Operatörler, tüm görüntü parlaklık değerlerini üç farklı türe ayırır: koyu, orta ve parlak. Orta tonların parlaklığının değerlendirilmesine dayalı olarak genel aydınlatma düzeltilir, çıkış aralığına girebilmek için sahnedeki piksellerin parlaklık değerleri yeniden dağıtılır, koyu pikseller aydınlatılır ve parlak olanlar karartılır. Ardından, görüntüdeki en parlak pikseller, çıktı aygıtının veya çıktı görünümü modelinin aralığına ölçeklenir. Aşağıdaki resim, bir HDR görüntüsünün LDR aralığına en basit dönüşümünü, doğrusal bir dönüşümü ve yukarıda açıklandığı gibi çalışan merkezdeki parçaya daha karmaşık bir ton eşleme operatörünün uygulandığını göstermektedir:

Yalnızca doğrusal olmayan ton eşlemenin kullanılmasıyla görüntüdeki maksimum ayrıntıyı elde edebileceğiniz ve HDR'yi LDR'ye doğrusal olarak dönüştürürseniz, birçok küçük şeyin basitçe kaybolduğu görülebilir. Tek bir doğru ton eşleme algoritması yoktur, farklı durumlarda iyi sonuçlar veren birkaç operatör vardır. İşte iki farklı ton eşleme ifadesine güzel bir örnek:

HDR oluşturma ile birlikte ton eşleme son zamanlarda oyunlarda kullanılmaya başlandı. İnsan görüşünün özelliklerini isteğe bağlı olarak simüle etmek mümkün oldu: karanlık sahnelerde netlik kaybı, çok parlak alanlardan karanlık alanlara geçişler sırasında yeni aydınlatma koşullarına uyum ve bunun tersi, kontrast değişikliklerine duyarlılık, renk ... İşte böyle Far Cry'da görme yeteneğinin uyum sağlama yeteneğinin taklidi gibi görünüyor. İlk ekran görüntüsü, oyuncunun karanlık bir odadan parlak bir şekilde aydınlatılmış açık alana dönerken gördüğü görüntüyü gösterir ve ikincisi, uyarlamadan birkaç saniye sonra aynı görüntüyü gösterir.

Çiçek açmak

Bloom, bir görüntünün en parlak kısımlarını aydınlatan sinematik son işlem efektlerinden biridir. Bu, çok parlak ışığın etkisidir, parlak yüzeylerin etrafında bir parıltı şeklinde kendini gösterir, çiçeklenme filtresi uygulandıktan sonra, bu tür yüzeyler sadece ek parlaklık almaz, onlardan gelen ışık (halo) kısmen daha koyu alanları etkiler. çerçevedeki parlak yüzeylere. Bunu göstermenin en kolay yolu bir örnekle:

3D Bloom grafiklerinde filtre, ek son işlem kullanılarak yapılır - bulanıklaştırma filtresi (tüm çerçeve veya tek tek parlak alanları, filtre genellikle birkaç kez uygulanır) tarafından bulanıklaştırılan çerçeve ve orijinal çerçeve karıştırılır. Oyunlarda ve diğer gerçek zamanlı uygulamalarda en sık kullanılan çiçeklenme sonrası filtre algoritmalarından biri:

  • Sahne bir çerçeve arabelleğine dönüştürülür, nesnelerin parlama yoğunluğu arabelleğin alfa kanalına yazılır.
  • Çerçeve arabelleği, işlenmek üzere özel bir dokuya kopyalanır.
  • Doku çözünürlüğü örneğin 4 kat azaltılır.
  • Alfa kanalında kaydedilen yoğunluk verilerine dayalı olarak, görüntüye kenar yumuşatma filtreleri (bulanıklaştırma) birkaç kez uygulanır.
  • Ortaya çıkan görüntü, çerçeve arabelleğindeki orijinal çerçeveyle karıştırılır ve sonuç görüntülenir.

Diğer son işleme türleri gibi, çiçeklenme de en iyi şekilde yüksek dinamik aralıkta (HDR) oluşturulurken kullanılır. Gerçek zamanlı 3B uygulamalardan bir çiçek filtresi ile nihai görüntünün işlenmesine ilişkin ek örnekler:

Hareket bulanıklığı

Fotoğraflarda ve filmlerde, objektif kapağı açıkken çerçevenin pozlama süresi boyunca çerçevedeki nesnelerin hareketi nedeniyle hareket bulanıklığı oluşur. Bir kamera (fotoğraf, film) tarafından çekilen bir kare, sıfır süre ile anında çekilen bir anlık görüntüyü göstermez. Teknolojik sınırlamalar nedeniyle, çerçeve belirli bir süre gösterir, bu süre zarfında çerçevedeki nesneler belirli bir mesafe hareket edebilir ve bu gerçekleşirse, lensin açık deklanşörü sırasında hareketli nesnenin tüm konumları sunulacaktır. hareket vektörü boyunca bulanık bir görüntü olarak çerçevede ... Bu, nesne kameraya göre hareket ediyorsa veya kamera nesneye göre hareket ediyorsa olur ve bulanıklık miktarı bize nesnenin hareket hızının büyüklüğü hakkında bir fikir verir.

Üç boyutlu animasyonda, herhangi bir zamanda (kare) nesneler, sonsuz hızlı bir deklanşör hızına sahip sanal bir kameraya benzer şekilde, üç boyutlu uzayda belirli koordinatlarda bulunur. Sonuç olarak, hızlı hareket eden nesnelere bakarken kamera ve insan gözünün elde ettiğine benzer bir bulanıklık yoktur. Doğal ve gerçekçi görünmüyor. Basit bir örnek düşünün: birkaç küre bir eksen etrafında dönüyor. İşte bu hareketin bulanık ve bulanık olmadan nasıl görüneceğine dair bir görüntü:

Bulanık olmayan bir görüntüden, kürelerin hareket edip etmediği bile söylenemez, hareket bulanıklığı ise nesnelerin hareket hızı ve yönü hakkında net bir fikir verir. Bu arada, filmler ve videolar aynı kare hızı parametrelerinde harika görünse de, saniyede 25-30 kare hızındaki oyunlarda hareketin sarsıntılı görünmesinin nedeni hareket bulanıklığının olmamasıdır. Hareket bulanıklığı eksikliğini telafi etmek için, ya yüksek bir kare hızı (saniyede 60 kare veya daha yüksek) ya da hareket bulanıklığının etkisini taklit etmek için ek görüntü işleme yöntemlerinin kullanılması arzu edilir. Bu, animasyonun düzgünlüğünü geliştirmek ve aynı zamanda fotoğraf ve film gerçekçiliğinin etkisi için kullanılır.

Gerçek zamanlı uygulamalar için en basit hareket bulanıklığı algoritması, mevcut kareyi oluşturmak için önceki animasyon karelerinden gelen verileri kullanmaktır. Ancak, önceki kareleri kullanmayan, ancak karedeki nesnelerin hareket vektörlerine dayanan ve aynı zamanda işleme sürecine yalnızca bir son işlem adımı ekleyen daha verimli ve modern hareket bulanıklaştırma yöntemleri vardır. Bulanıklaştırma efekti, tam ekran (genellikle işlem sonrası yapılır) veya bireysel, en hızlı hareket eden nesneler için olabilir.

Oyunlarda hareket bulanıklığı efektinin olası uygulamaları: tüm yarış oyunları (çok yüksek hareket hızı efekti oluşturmak ve TV benzeri tekrarları izlerken kullanmak için), spor oyunları (aynı tekrarlar ve oyunun kendisinde bulanıklaştırma olabilir. top veya disk gibi çok hızlı hareket eden nesnelere, dövüş oyunlarına (yakın dövüş silahlarının, kolların ve bacakların hızlı hareketleri), diğer birçok oyuna (motordaki oyun içi 3D ara sahneler sırasında) uygulanabilir. Oyunlardan hareket bulanıklığı sonrası efektinin bazı örnekleri:

Alan Derinliği (DOF)

Kısaca alan derinliği, nesnelerin kameranın odağına göre konumlarına bağlı olarak bulanıklaşmasıdır. Gerçek hayatta, fotoğraflarda ve filmlerde tüm nesneleri eşit derecede net görmüyoruz, bu, gözün yapısının özelliğinden ve kameraların ve sinema kameralarının optiklerinin yapısından kaynaklanmaktadır. Fotoğraf ve sinema optikleri belli bir mesafeye sahiptir, kameradan bu kadar uzakta bulunan nesneler odaktadır ve resimde keskin görünür ve kameradan uzaktaki veya yakınındaki nesneler bulanık görünür, aksine bulanıktır, keskinlik giderek azalır artan veya azalan mesafe ile ...

Tahmin edebileceğiniz gibi, bu bir fotoğraf, render değil. Bilgisayar grafiklerinde, hesaplamalarda lensler ve optikler taklit edilmediğinden, oluşturulan görüntünün her nesnesi mükemmel bir şekilde açıktır. Bu nedenle, fotoğraf ve film gerçekçiliğini elde etmek için, bilgisayar grafikleri için benzer bir şey yapmak için özel algoritmalar kullanılmalıdır. Bu teknikler, farklı mesafelerdeki nesnelere farklı bir odaklanmanın etkisini simüle eder.

Gerçek zamanlı işleme için yaygın tekniklerden biri, görüntüdeki pikseller için derinlik verilerine dayalı olarak orijinal kareyi ve bunun bulanık sürümünü (bulanıklaştırma filtresinin birden çok geçişi) harmanlamaktır. Oyunlarda DOF efektinin çeşitli kullanımları vardır, örneğin oyun motorundaki oyun ara sahneleri, spor ve yarış oyunlarındaki tekrarlar. Gerçek zamanlı alan derinliği örnekleri:

Ayrıntı Düzeyi (LOD)

3B uygulamalarda ayrıntı düzeyi, bir çerçeve oluşturmanın karmaşıklığını azaltma, bir sahnedeki toplam çokgen, doku ve diğer kaynakların sayısını azaltma ve genel olarak karmaşıklığını azaltma yöntemidir. Basit bir örnek: ana karakter modeli 10.000 çokgenden oluşur. İşlenen sahnede kameraya yakın konumlandığı durumlarda, tüm poligonların kullanılması önemlidir ancak kameradan çok uzak bir mesafede, son görüntüde sadece birkaç pikseli işgal edecektir ve hiçbir 10.000 poligonun tümünün işlenmesinde nokta. Belki bu durumda yüzlerce poligon, hatta birkaç poligon ve özel olarak hazırlanmış bir doku, modelin yaklaşık olarak aynı gösterimi için yeterli olacaktır. Buna göre orta mesafelerde, en basit modelden daha fazla ve en karmaşık olandan daha az üçgenden oluşan bir model kullanmak mantıklıdır.

LOD yöntemi, nesnelerin kameraya olan uzaklığıyla orantılı olarak nesneler için çeşitli karmaşıklık düzeyleri (geometrik veya başka türlü) kullanarak üç boyutlu sahneleri modellemek ve işlemek için yaygın olarak kullanılır. Teknik, oyun geliştiricileri tarafından bir sahnedeki çokgen sayısını azaltmak ve performansı artırmak için sıklıkla kullanılır. Kameraya yakın yerleştirildiğinde, mümkün olan en yüksek görüntü kalitesi için maksimum ayrıntıya (üçgen sayısı, doku boyutu, doku oluşturmanın karmaşıklığı) sahip modeller kullanılır ve modeller kameradan çıkarıldığında bunun tersi de geçerlidir. , oluşturma hızını artırmak için daha az üçgene sahip modeller kullanılır. Karmaşıklığın, özellikle de modeldeki üçgenlerin sayısının değiştirilmesi, maksimum karmaşıklığın tek bir 3B modeline veya belki de farklı ayrıntı seviyelerine sahip önceden hazırlanmış birkaç modele dayalı olarak otomatik olarak gerçekleşebilir. Farklı mesafeler için daha az ayrıntıya sahip modeller kullanılarak, genel görüntü ayrıntısında neredeyse hiç bozulma olmadan tahmini işleme karmaşıklığı azaltılır.

Yöntem, özellikle sahnedeki nesnelerin sayısı fazlaysa ve kameradan farklı mesafelerde bulunuyorsa etkilidir. Örneğin, hokey veya futbol simülatörü gibi bir spor oyununu ele alalım. Düşük poli karakterli modeller, kameradan uzakta olduklarında kullanılır ve yakınlaştırıldığında, modeller çok sayıda çokgen ile başkaları tarafından değiştirilir. Bu örnek çok basittir ve modelin iki ayrıntı düzeyine dayanan yöntemin özünü gösterir, ancak hiç kimse LOD düzeyini değiştirmenin etkisinin çok fazla fark edilmemesi için birkaç ayrıntı düzeyi oluşturma zahmetine girmez. ayrıntılar, nesne yaklaştıkça yavaş yavaş "büyür".

Kameradan uzaklığa ek olarak, LOD için diğer faktörler de önemli olabilir - ekrandaki toplam nesne sayısı (çerçevede bir veya iki karakter olduğunda, karmaşık modeller kullanılır ve 10-20 olduğunda, bunlar daha basit olanlara geçin) veya saniyedeki kare sayısı (ayrıntı seviyesinin değiştiği, örneğin 30'un altındaki FPS'de, ekrandaki modellerin karmaşıklığını azalttığımız FPS değerlerinin sınırları belirlenir ve 60'ta, aksine, artış). Ayrıntı seviyesini etkileyen diğer olası faktörler, nesnenin hareket hızıdır (hareket halindeki bir roketi düşünmek için zamanınız yoktur, ancak bir salyangoz - kolayca), karakterin oyun açısından önemi (alın aynı futbol - kontrol ettiğiniz oyuncu modeli için daha karmaşık geometri ve dokular kullanabilirsiniz, en yakın ve en sık görürsünüz). Her şey belirli bir geliştiricinin arzularına ve yeteneklerine bağlıdır. Ana şey aşırıya kaçmamaktır, detay seviyesindeki sık ve göze çarpan değişiklikler can sıkıcıdır.

Ayrıntı düzeyinin yalnızca geometriyle ilgili olmadığını hatırlatmama izin verin, yöntem diğer kaynakları korumak için de kullanılabilir: tekstüre ederken (video çipleri zaten mipmapping kullanıyor olsa da, bazen dokuları anında başkalarına değiştirmek mantıklıdır) farklı ayrıntılarla), aydınlatma teknikleri (yakın nesneler karmaşık bir algoritma kullanılarak ve uzaktakiler - basit bir algoritma kullanılarak aydınlatılır), tekstüre teknikleri (yakın yüzeylerde karmaşık paralaks haritalama kullanılır ve uzak yüzeylerde normal haritalama kullanılır), vb. .

Oyundan bir örnek göstermek o kadar kolay değil, bir yandan hemen hemen her oyunda bir dereceye kadar LOD kullanılıyor, diğer yandan bunu net bir şekilde göstermek her zaman mümkün olmuyor, aksi takdirde çok az mantıklı olurdu. LOD'un kendisinde.

Ancak bu örnekte, en yakın araba modelinin maksimum ayrıntıya sahip olduğu, sonraki iki veya üç arabanın da bu seviyeye çok yakın olduğu ve uzaktaki tüm arabaların görünür basitleştirmelere sahip olduğu hala açıktır, işte sadece en önemlileri: dikiz aynaları, plakalar, ön cam silecekleri vb. ek aydınlatma ekipmanı yok. Ve en uzak modelden yolda bir gölge bile yok. Bu, eylemdeki detay algoritmasının seviyesidir.

Küresel aydınlatma

Sahnenin gerçekçi aydınlatmasını simüle etmek zordur, gerçekte her ışık ışını tekrar tekrar yansıtılır ve kırılır, bu yansımaların sayısı sınırlı değildir. Ve 3B işlemede, yansımaların sayısı büyük ölçüde tasarım yeteneklerine bağlıdır, herhangi bir sahne hesaplaması basitleştirilmiş bir fiziksel modeldir ve ortaya çıkan görüntü yalnızca gerçeğe yakındır.

Aydınlatma algoritmaları iki modele ayrılabilir: doğrudan veya yerel aydınlatma ve küresel aydınlatma (doğrudan veya yerel aydınlatma ve küresel aydınlatma). Yerel aydınlatma modeli, doğrudan aydınlatma hesaplamasını kullanır, ışık kaynaklarından gelen ışık, ışığın opak bir yüzeyle ilk kesişimine kadar, nesnelerin birbirleriyle etkileşimi dikkate alınmaz. Bu model, arka plan veya tek tip (ortam) aydınlatma ekleyerek bunu telafi etmeye çalışsa da, bu en basit yaklaşımdır, ışık kaynaklarının yokluğunda nesnelerin aydınlatmasının rengini ve yoğunluğunu belirleyen tüm dolaylı ışık ışınlarından oldukça basitleştirilmiş bir aydınlatmadır. doğrudan ışık kaynakları.

Aynı ışın izleme, yüzeylerin yalnızca ışık kaynaklarından gelen doğrudan ışınlarla aydınlatılmasını hesaplar ve herhangi bir yüzeyin görünür olması için doğrudan bir ışık kaynağı tarafından aydınlatılması gerekir. Fotogerçekçi sonuçlar elde etmek için bu yeterli değildir, doğrudan aydınlatmaya ek olarak, diğer yüzeylerden yansıyan ışınlarla ikincil aydınlatmayı hesaba katmak gerekir. Gerçek dünyada, ışık ışınları tamamen sönene kadar yüzeylerden birkaç kez yansıtılır. Bir pencereden geçen güneş ışığı tüm odayı aydınlatır, ancak ışınlar tüm yüzeylere doğrudan ulaşamaz. Işık kaynağı ne kadar parlaksa, o kadar çok yansıtılır. Yansıtıcı yüzeyin rengi, yansıyan ışığın rengini de etkiler; örneğin kırmızı bir duvar, bitişik beyaz bir nesne üzerinde kırmızı bir noktaya neden olur. İşte net bir fark, ikincil aydınlatma olmadan ve hesaba katılarak hesaplama:

Küresel aydınlatma modelinde, küresel aydınlatma, aydınlatma, nesnelerin birbirleri üzerindeki etkisi dikkate alınarak hesaplanır, ışık ışınlarının nesne yüzeylerinden çoklu yansımaları ve kırılmaları, kostikler ve yüzey altı saçılımı dikkate alınır. Bu model, daha gerçekçi bir resim elde etmenizi sağlar, ancak önemli ölçüde daha fazla kaynak gerektiren süreci karmaşıklaştırır. Birkaç küresel aydınlatma algoritması vardır, radyositeye (dolaylı aydınlatma hesaplaması) ve foton haritalamasına (izleme kullanılarak önceden hesaplanan foton haritalarına dayalı küresel aydınlatma hesaplaması) hızlı bir göz atacağız. Bir sahnenin içindeki ışık kaynaklarının sayısına ve parlaklığına bağlı olarak genel parlaklığını değiştirmek veya yansıyan ışığı simüle etmek için sahnenin etrafına yerleştirilmiş çok sayıda nokta ışığı kullanmak gibi dolaylı aydınlatmayı simüle etmek için basitleştirilmiş yöntemler de vardır, ancak yine de bu gerçek bir algoritmadan uzaktır.

Radyosite algoritması, ışık ışınlarının bir yüzeyden diğerine ve ayrıca çevreden nesnelere ikincil yansımalarını hesaplama işlemidir. Işık kaynaklarından gelen ışınlar, güçleri belirli bir seviyenin altına düşene veya ışınlar belirli sayıda yansımaya ulaşana kadar izlenir. Bu yaygın bir GI tekniğidir, hesaplamalar genellikle oluşturmadan önce yapılır ve hesaplamanın sonuçları gerçek zamanlı oluşturma için kullanılabilir. Radyositenin temel fikirleri, ısı transferi fiziğine dayanmaktadır. Nesnelerin yüzeyleri yamalar adı verilen küçük alanlara bölünür ve yansıyan ışığın her yöne eşit olarak dağıldığı varsayılır. Işıklar için her bir ışını hesaplamak yerine, ışıkları ürettikleri enerji seviyelerine göre parçalara bölen bir ortalama alma tekniği kullanılır. Bu enerji, yüzey yamaları arasında orantılı olarak dağıtılır.

Küresel aydınlanmayı hesaplamak için Henrik Wann Jensen tarafından önerilen başka bir yöntem de foton haritalama yöntemidir. Fotonik haritalar, ışık ışınlarının bir sahnedeki nesnelerle nasıl etkileşime girdiğini simüle etmek için kullanılan başka bir ışın izlemeli küresel aydınlatma algoritmasıdır. Algoritma, ışınların ikincil yansımalarını, ışığın şeffaf yüzeylerden kırılmasını, saçılan yansımaları hesaplar. Bu yöntem, yüzeydeki noktaların aydınlatmasının iki geçişte hesaplanmasından oluşur. Birincisi, ikincil yansımalarla ışık ışınlarının doğrudan izlenmesidir, bu, ana işlemeden önce gerçekleştirilen bir ön işlemdir. Bu yöntem, ışık kaynağından sahnedeki nesnelere giden fotonların enerjisini hesaplar. Fotonlar yüzeye ulaştığında, fotonun kesişme noktası, yönü ve enerjisi foton haritası adı verilen bir önbellekte saklanır. Fotonik haritalar daha sonra kullanılmak üzere diske kaydedilebilir, böylece her karede işlenmek zorunda kalmazlar. Fotonların yansımaları, belirli sayıda yansımadan sonra veya belirli bir enerjiye ulaşıldığında iş durana kadar hesaplanır. İkinci render geçişinde, foton haritalarında depolanan veriler dikkate alınarak, sahne piksellerinin doğrudan ışınlarla aydınlatması hesaplanır, foton enerjisi doğrudan aydınlatma enerjisine eklenir.

Çok sayıda ikincil yansıma kullanan küresel aydınlatma hesaplamaları, doğrudan aydınlatma hesaplamalarından çok daha uzun sürer. Bir radyo kentinin gerçek zamanlı olarak donanım hesaplaması için, en son nesil programlanabilir video çiplerinin yeteneklerini kullanan teknikler vardır, ancak şu ana kadar gerçek zamanlı küresel aydınlatmanın hesaplandığı sahneler oldukça basit olmalıdır ve birçok basitleştirme yapılmıştır. algoritmalarda.

Ancak uzun süredir kullanılan, ışık kaynaklarının ve aydınlatmayı güçlü bir şekilde etkileyen büyük nesnelerin konumunu değiştirmeden sahneler için kabul edilebilir olan statik önceden hesaplanmış küresel aydınlatmadır. Sonuçta, küresel aydınlatmanın hesaplanması gözlemcinin konumuna bağlı değildir ve bu tür nesnelerin sahnedeki konumu ve aydınlatma kaynaklarının parametreleri sahnede değişmezse, daha önce hesaplanan aydınlatma değerleri olabilir. kullanılabilir. Bu, birçok oyunda kullanılır ve GI hesaplama verilerini ışık haritaları biçiminde depolar.

Dinamik küresel aydınlatmayı simüle etmek için kabul edilebilir algoritmalar da vardır. Örneğin, bir sahnedeki bir nesnenin dolaylı aydınlatmasını hesaplamak için gerçek zamanlı uygulamalarda kullanım için çok basit bir yöntem vardır: tüm nesnelerin azaltılmış ayrıntıya sahip (aydınlatmanın hesaplandığı nesne hariç) basitleştirilmiş olarak düşük görüntüye dönüştürülmesi. -çözünürlük küp haritası (nesnenin yüzeyindeki dinamik yansımaları görüntülemek için de kullanılabilir), ardından bu dokuyu filtrelemek (bulanıklaştırma filtresinin birkaç geçişi) ve bu nesneyi aydınlatmak için hesaplanan dokudan gelen verileri yönlendirmek için tamamlayıcı olarak uygulamak aydınlatma. Dinamik hesaplamanın çok ağır olduğu durumlarda, statik radyosite haritalarından vazgeçilebilir. Bu kadar basit bir GI taklidinin bile faydalı etkisini açıkça gösteren MotoGP 2 oyunundan bir örnek:



"itemprop =" resim ">

"Shader nedir?" Meraklı oyunculardan ve acemi oyun geliştiricilerinden çok yaygın bir sorudur. Bu yazımda sizlere bu korkunç gölgelendiricileri açık ve anlaşılır bir şekilde anlatacağım.

Bilgisayar oyunlarını, bilgisayar grafiklerinde fotogerçekçi görüntülere doğru ilerlemenin motoru olarak görüyorum, bu yüzden video oyunları bağlamında “gölgelendiricilerin” ne olduğu hakkında konuşalım.

İlk grafik hızlandırıcılar ortaya çıkmadan önce, video oyun karelerini oluşturma işinin tümü, zayıf merkezi işlemci tarafından yapıldı.

Çerçeve çizmek aslında oldukça rutin bir iştir: "geometri" - çokgen modeller (dünya, karakter, silah vb.) almanız ve rasterleştirmeniz gerekir. Rasterleştirmek nedir? 3B modelin tamamı, rasterleştiricinin piksellere dönüştüğü en küçük üçgenlerden oluşur ("rasterleştirme", piksellere dönüşmek anlamına gelir). Rasterleştirmeden sonra, doku verilerini, aydınlatma, sis vb. parametreleri alın ve oyuncuya gösterilecek olan oyun çerçevesinin ortaya çıkan her pikselini hesaplayın.

Yani, merkezi işlem birimi (CPU - Merkezi İşlem Birimi), kendisine böyle bir rutin yaptıramayacak kadar akıllı bir adamdır. Bunun yerine, daha önemli entelektüel işler yapabilmesi için CPU'yu boşaltan bir tür donanım modülü tahsis etmek mantıklıdır.

Böyle bir donanım modülü, bir grafik hızlandırıcı veya video kartıdır (GPU - Grafik İşlem Birimi). Artık CPU verileri hazırlar ve rutin işlerle bir meslektaşı yükler. GPU'nun artık sadece bir meslektaş değil, bir köle-çekirdek kalabalığı olduğu göz önüne alındığında, bu tür işlerle hemen başa çıkıyor.

Ancak ana soruya henüz bir yanıt alamadık: Gölgelendiriciler nedir? Bekle, buna geliyorum.

Güzel, ilginç ve foto-gerçekçiliğe yakın grafikler, video kartı geliştiricilerinin donanım düzeyinde birçok algoritma uygulamasını gerektirdi. Gölgeler, ışıklar, vurgular vb. Bu yaklaşım - donanımda algoritmaların uygulanmasıyla "Sabit boru hattı veya boru hattı" olarak adlandırılır ve yüksek kaliteli grafiklerin gerekli olduğu yerlerde artık bulunmaz. Onun yerini Programlanabilir Boru Hattı aldı.

Oyuncuların istekleri “Haydi, iyi bir grafonyum getirin! sürpriz! ”, oyun geliştiricilerini (ve sırasıyla ekran kartı üreticilerini) giderek daha karmaşık algoritmalara itti. Şimdiye kadar, bir noktada, onlar için çok az sayıda kablolu donanım algoritması var.

Şimdi grafik kartlarının daha akıllı hale gelme zamanı. Geliştiricilerin GPU bloklarını farklı algoritmalar uygulayan keyfi boru hatlarına programlamasına izin vermek için karar verildi. Yani oyun geliştiricileri, grafik programcıları artık ekran kartları için programlar yazabiliyorlar.

Ve nihayet asıl sorumuzun cevabına geldik.

"Shader nedir?"

Shader (İngilizce gölgelendirici - gölgeleme programı), bir nesnenin veya görüntünün son parametrelerini belirlemek için üç boyutlu grafiklerde kullanılan bir video kartı için bir programdır, ışığın soğurulması ve saçılması, doku eşlemesi, yansıma ve kırılma, gölgeleme, yüzey yer değiştirmesi vb. daha birçok parametre.

Gölgelendiriciler nelerdir? Örneğin, bu efekti elde edebilirsiniz, bu bir küreye uygulanan bir su gölgelendiricidir.

Grafik ardışık düzen

Programlanabilir ardışık düzenin selefine göre avantajı, artık programcıların kendi algoritmalarını kendi başlarına oluşturabilmeleri ve kablolu bir dizi seçenek kullanmamasıdır.

İlk başta, video kartları, farklı talimat setlerini destekleyen birkaç özel işlemciyle donatıldı. Gölgelendiriciler, hangi işlemcinin onları yürüteceğine bağlı olarak üç türe ayrıldı. Ancak daha sonra video kartları, üç tür gölgelendirici için talimat setlerini destekleyen evrensel işlemcilerle donatılmaya başlandı. Gölgelendiricilerin türlere bölünmesi, gölgelendiricinin amacını açıklamak için korunmuştur.

Bu tür akıllı ekran kartları ile grafik görevlerine ek olarak, GPU üzerinde genel amaçlı hesaplamalar (bilgisayar grafikleri ile ilgili olmayan) yapmak mümkün hale geldi.

İlk kez, GeForce 3 serisi ekran kartlarında gölgelendiriciler için tam teşekküllü destek ortaya çıktı, ancak temeller GeForce256'da (Kayıt Birleştiriciler şeklinde) uygulandı.

Gölgelendirici türleri

İşlem hattının aşamasına bağlı olarak, gölgelendiriciler birkaç türe ayrılır: tepe noktası, parça (piksel) ve geometrik. Ve en yeni boru hattı türlerinde mozaik gölgelendiriciler de vardır. Grafik boru hattını ayrıntılı olarak tartışmayacağız, hala gölgelendiriciler ve grafik programlamayı incelemeye karar verenler için bu konuda ayrı bir makale yazıp yazmamayı düşünüyorum. İlgileniyorsanız yorumlara yazın, zaman kaybetmeye değer mi bileyim.

köşe gölgelendirici

Vertex shader'lar karakterlerin, çimenlerin, ağaçların animasyonlarını yapar, su üzerinde dalgalar yaratır ve daha birçok şey. Bir köşe gölgelendiricisinde, programcı köşelerle ilgili verilere erişebilir, örneğin: uzaydaki bir köşenin koordinatları, doku koordinatları, rengi ve normal bir vektör.

geometrik gölgelendirici

Geometrik gölgelendiriciler yeni geometri oluşturma yeteneğine sahiptir ve parçacıklar oluşturmak, model ayrıntılarını anında değiştirmek, silüetler oluşturmak ve daha fazlası için kullanılabilir. Önceki tepe noktasından farklı olarak, sadece bir tepe noktasını değil, aynı zamanda bütün bir ilkeli de işleyebilirler. İlkel, bir segment (iki köşe) ve bir üçgen (üç köşe) olabilir ve bir üçgen ilkel için bitişik köşeler (İngilizce bitişiklik) hakkında bilgi varsa, altı köşeye kadar işlenebilir.

Piksel gölgelendirici

Piksel gölgelendiriciler, doku eşleme, aydınlatma ve yansıma, kırılma, sis, Çarpma Eşleme vb. gibi çeşitli doku efektleri gerçekleştirir. Piksel gölgelendiriciler ayrıca post efektler için kullanılır.

Piksel gölgelendirici, bitmap dilimleri ve dokularla çalışır - piksellerle ilişkili verileri işler (örneğin, renk, derinlik, doku koordinatları). Piksel gölgelendirici, bir görüntünün bir parçasını oluşturmak için grafik ardışık düzeninin son aşamasında kullanılır.

Gölgelendiriciler ne yazıyor?

Başlangıçta shader'lar assembler benzeri bir dilde yazılabilirdi ancak daha sonra Cg, GLSL ve HLSL gibi C diline benzer üst düzey shader dilleri ortaya çıktı.

Bu tür diller C'den çok daha basittir, çünkü onların yardımıyla çözülen görevler çok daha basittir. Bu tür dillerdeki tip sistemi, grafik programcılarının ihtiyaçlarını yansıtır. Bu nedenle programcıya özel veri türleri sağlarlar: matrisler, örnekleyiciler, vektörler vb.

RenderMan

Yukarıda tartıştığımız her şey gerçek zamanlı grafiklerle ilgilidir. Ancak gerçek zamanlı olmayan grafikler var. Fark nedir - gerçek zamanlı - gerçek zamanlı, yani burada ve şimdi - oyunda saniyede 60 kare vermek, bu gerçek zamanlı bir işlemdir. Ancak son teknoloji animasyonlar için karmaşık bir kareyi birkaç dakikalığına oluşturmak gerçek zamanlı değildir. İşin özü zamanın içindedir.

Örneğin, Pixar stüdyosunun en son animasyon filmlerinde olduğu gibi gerçek zamanlı olarak bu kalitede grafikler alamıyoruz. Çok büyük işleme çiftlikleri, tamamen farklı algoritmalar kullanarak ışık simülasyonlarını hesaplar, çok pahalıdır, ancak neredeyse fotogerçekçi görüntüler verir.

Sand piper'da süper gerçekçi grafikler

Örneğin, bu sevimli çizgi filme bakın, kum taneleri, kuş tüyleri, dalgalar, her şey inanılmaz derecede gerçek görünüyor.

* Videolar Youtube'dan yasaklanabilir, açılmazsa google pixar kum kuşu - cesur bir kum kuşu hakkında kısa bir çizgi film çok sevimli ve kabarık. Dokunacak ve bilgisayar grafiklerinin ne kadar havalı olabileceğini gösterecek.

Demek bu Pixar'dan RenderMan. İlk gölgelendirici programlama dili oldu. RenderMan API, profesyonel görüntü oluşturma için fiili standarttır ve tüm Pixar çalışmalarında ve ötesinde kullanılır.

Kullanışlı bilgi

Artık gölgelendiricilerin ne olduğunu biliyorsunuz, ancak gölgelendiricilerin yanı sıra oyun geliştirme ve bilgisayar grafiklerinde kesinlikle ilginizi çekecek çok ilginç başka konular da var:

  • modern video oyunlarında çarpıcı efektler yaratmak için kullanılan bir tekniktir. Unity3d'de efekt oluşturma hakkında öğreticiler içeren makale ve videoya genel bakış
  • - Profesyonel bir kariyer veya hobi olarak video oyunları geliştirmeyi düşünüyorsanız, bu makale "nereden başlamalı", "hangi kitapları okumalı" vb.

Eğer sorunuz varsa

Her zamanki gibi, hala herhangi bir sorunuz varsa, yorumlarda onlara sorun, her zaman cevaplayacağım. Herhangi bir tür kelime veya hataların düzeltilmesi için çok minnettar olurum.

Bu eğitim, Minecraft'a gölgelendiriciler kurmanıza ve böylece dinamik gölgeler, rüzgar ve çim gürültüsü, gerçekçi su ve çok daha fazlasını ekleyerek oyun dünyasını geliştirmenize yardımcı olacaktır.

Gölgelendiricilerin sistemi oldukça fazla yüklediğini hemen belirtmek gerekir ve zayıf veya entegre bir ekran kartınız varsa bu modu kurmaktan kaçınmanızı öneririz.

Kurulum iki aşamadan oluşur, önce modu gölgelendiricilere, ardından ek gölgelendirici paketlerine yüklemeniz gerekir.

ADIM # 1 - Gölgelendiriciler için modun yüklenmesi

  1. Java'yı indirin ve yükleyin
  2. Düzenlemek OptiFine HD
    veya ShadersMod;
  3. Ortaya çıkan arşivi herhangi bir yere açıyoruz;
  4. jar dosyasını çalıştırın, çünkü o bir tesisatçıdır;
  5. Program size oyunun yolunu gösterecek, her şey doğruysa Evet, Tamam, Tamam'ı tıklayın;
  6. git .minecraft ve orada bir klasör oluşturun gölgelendirici paketleri;
  7. Başlatıcıya gidiyoruz ve satırda "ShadersMod" adında yeni bir profil görüyoruz, değilse manuel olarak seçin.
  8. Ardından, gölgelendirici paketlerini indirmeniz gerekiyor

ADIM # 2 - Gölgelendirici paketini yükleme

  1. İlgilendiğiniz gölgelendirici paketini indirin (makalenin sonundaki liste)
  2. tuşlara basın KAZANÇ + R
  3. git .minecraft / gölgelendirici paketleri... Böyle bir klasör yoksa, oluşturun.
  4. Gölgelendirici arşivini şuraya taşıyın veya çıkarın: .minecraft / gölgelendirici paketleri... Yol şöyle görünmelidir: .minecraft / shaderpacks / SHADER_FOLDER_NAME / shader / [.fsh ve .vsh dosyaları içeride]
  5. Minecraft'ı başlatın ve gidin Ayarlar> Gölgelendiriciler... Burada mevcut gölgelendiricilerin bir listesini göreceksiniz. Gerekli olanı seçin
  6. Gölgelendirici ayarlarında "tweakBlockDamage" özelliğini etkinleştirin, "CloudShadow" ve "OldLighting"i devre dışı bırakın

Sonic Ether'in İnanılmaz Gölgelendiricileri
Sildur'un gölgelendiricileri
Chocapic13 "s Shader'lar
sensi277 "s yShaders
MrMeep_x3 "s Shader'lar
Naelego'nun Cel Shader'ları
RRe36 "s Shader'lar
DeDelner'ın CUDA Gölgelendiricileri
bruceatsr44 "s Asit Gölgelendiriciler
Beed28 "s Shader'lar
Ziipzaap'ın Shader Paketi
robobo1221 "s Shader'lar
dvv16 "s Gölgelendiriciler
Stazza85 süper gölgelendiriciler
hoo00 "s Shader paketi B
Regi24'ün Sallama Tesisleri
MrButternuss ShaderPack
Nitro Shader'larda DethRaid'in Müthiş Grafikleri
Edi "s Shader ForALLPc" ler
CrankerMan'in TME Shader'ları
Kadir Nck Shader (skate702 için)
Werrus'un Gölgelendiricileri
Knewtonwako'nun Yaşam Nexus Gölgelendiricileri
CYBOX gölgelendirici paketi
CrapDeShoes CloudShade Alpha
AirLoocke42 Gölgelendirici
CaptTatsu'nun BSL Gölgelendiricileri
Triliton'un gölgelendiricileri
ShadersMcOfficial "s Bloominx Gölgelendiriciler (Chocapic13" Gölgelendiriciler)
dotModded "s Continuum Shader'lar
Qwqx71 "s Lunar Shaders (chocapic13" s shader)

Video kartı işlemcileri (GPU) tarafından yürütülmek üzere tasarlanmıştır. Gölgelendiriciler, özel programlama dillerinden birinde derlenir (bkz.) ve GPU talimatlarında derlenir.

Başvuru

Gölgelendiricilerin kullanımından önce, prosedürel doku oluşturma (örneğin, Unreal oyununda su ve ateşin animasyonlu dokularını oluşturmak için kullanıldı) ve çoklu doku oluşturma (Quake 3 oyununda kullanılan gölgelendirici dilinin dayandığı) kullanıldı. Bu mekanizmalar, gölgelendiricilerle aynı esnekliği sağlamadı.

Yeniden yapılandırılabilir grafik ardışık düzenlerinin ortaya çıkmasıyla, GPU üzerinde matematiksel hesaplamalar (GPGPU) yapmak mümkün hale geldi. En iyi bilinen GPGPU mekanizmaları nVidia CUDA, Microsoft DirectCompute ve açık kaynaklı OpenCL'dir.

Gölgelendirici türleri

Vertex gölgelendiriciler

Köşe gölgelendiricisi, çokyüzlülerin köşeleriyle ilişkili veriler üzerinde çalışır, örneğin, uzayda bir köşenin (nokta) koordinatları, doku koordinatları, köşe rengi, teğet vektörü, binormal vektörü, normali vektör. Köşe gölgelendiricisi, köşelerin görüntülenmesi ve perspektif dönüşümü, doku koordinatlarının oluşturulması, aydınlatmanın hesaplanması vb. için kullanılabilir.

Dilde bir köşe gölgelendiricisi için örnek kod:

vs.2.0 dcl_position v0 dcl_texcoord v3 m4x4 oPos, v0, c0 mov oT0, v3

Geometrik gölgelendiriciler

Bir köşe noktasının aksine bir geometrik gölgelendirici, yalnızca bir köşeyi değil, aynı zamanda bütün bir ilkelliği de işleyebilir. İlkel, bir segment (iki köşe) ve bir üçgen (üç köşe) olabilir ve bir üçgen ilkel için bitişik köşeler (İngilizce bitişiklik) hakkında bilgi varsa, altı köşeye kadar işlenebilir. Geometri gölgelendirici, anında (merkezi işlemciyi kullanmadan) temel öğeler üretme yeteneğine sahiptir.

Geometri gölgelendiriciler ilk olarak Nvidia 8 serisi grafik kartlarında kullanıldı.

Piksel (parça) gölgelendiriciler

Piksel gölgelendirici, bitmap dilimleri ve dokularla çalışır - piksellerle ilişkili verileri işler (örneğin, renk, derinlik, doku koordinatları). Piksel gölgelendirici, bir görüntünün bir parçasını oluşturmak için grafik ardışık düzeninin son aşamasında kullanılır.

Dilde bir piksel gölgelendirici için örnek kod:

ps.1.4 metin r0, t0 çok r0, r0, v0

Avantajlar ve dezavantajlar

Avantajlar:

  • herhangi bir algoritma derleme olasılığı (program geliştirme döngüsünün maliyetinde esneklik, basitleştirme ve azalma, oluşturulan sahnelerin karmaşıklığını ve gerçekçiliğini artırma);
  • artan yürütme hızı (merkezi işlemcide yürütülen aynı algoritmanın yürütme hızına kıyasla).

Dezavantajları:

  • yeni bir programlama dili öğrenme ihtiyacı;
  • farklı üreticilerin GPU'ları için farklı talimat setlerinin varlığı.

Programlama dilleri

Piyasanın farklı ihtiyaçlarını karşılamak için çok sayıda shader programlama dili oluşturulmuştur (bilgisayar grafiklerinin birçok uygulama alanı vardır).

Genellikle, gölgelendirici yazma dilleri, programcıya özel veri türleri (matrisler, örnekleyiciler, vektörler vb.), bir dizi yerleşik değişken ve sabit (3D API'nin standart işlevselliği ile etkileşim için) sağlar.

Profesyonel render

Aşağıdakiler, maksimum işleme kalitesi elde etmeye odaklanan gölgelendirici programlama dilleridir. Bu tür dillerde, malzemelerin özellikleri soyutlamalar kullanılarak tanımlanır. Bu, özel programlama becerilerine sahip olmayan ve donanım uygulamalarının özelliklerini bilmeyen kişilerin kod yazmasına olanak tanır. Örneğin, sanatçılar bu gölgelendiricileri "doğru görünümü" (doku eşleme, ışık yerleştirme vb.) sağlamak için yazabilirler.

Genellikle, bu tür gölgelendiricilerin işlenmesi oldukça kaynak yoğundur: fotogerçekçi görüntüler oluşturmak çok fazla bilgi işlem gücü gerektirir. Tipik olarak, hesaplamanın çoğu büyük bilgisayar kümeleri veya bıçak sistemleri tarafından yapılır.

RenderMan Pixar'ın RenderMan yazılımında uygulanan gölgelendirici programlama dili, ilk gölgelendirici programlama diliydi. Rob Cook tarafından geliştirilen ve RenderMan Arayüz Spesifikasyonunda açıklanan RenderMan API, Pixar'ın çalışması boyunca kullanılan profesyonel işleme için fiili standarttır. OSL OSL - müh. Open Shading Language, şirket tarafından geliştirilen bir gölgelendirici programlama dilidir. Sony Pictures Imageworks ve dile benzer. "Sony Pictures Imageworks" tarafından geliştirilen ve işleme amaçlı tescilli "Arnold" programında ve üç boyutlu bilgisayar grafikleri oluşturmaya yönelik ücretsiz Blender programında kullanılır. Gerçek zamanlı oluşturma GLSL GLSL açık GL S sahip olmak L dil), OpenGL standardında açıklanan ve ANSI C standardında açıklanan dilin sürümünü temel alan bir gölgelendirici programlama dilidir. Dil, ANSI C özelliklerinin çoğunu destekler, üç boyutlu grafiklerle (vektörler, matrisler) çalışırken sıklıkla kullanılan veri türlerini destekler. GLSL'deki "shader" kelimesi, bu dilde yazılmış, bağımsız olarak derlenmiş bir birime atıfta bulunur. "Program" kelimesi, birbirine bağlı derlenmiş gölgelendiriciler koleksiyonunu ifade eder. Cg (İng. C için G grafik) Microsoft ile birlikte nVidia tarafından geliştirilen bir gölgelendirici programlama dilidir. Dil, dile ve Microsoft tarafından geliştirilen ve aşağıdakilere dahil edilen HLSL diline benzer. Directx 9... Dil "int", "float", "half" türlerini kullanır (16 bitlik kayan nokta sayısı). Dil, işlevleri ve yapıları destekler. Dilin "paketlenmiş diziler" (