Render Reference - Stencils
Render Kütüphanesi Referansları
Bu sayfa, Render Kütüphanesini belgelemeye adanmış bir dizi sayfadan oluşan Render Referansının bir parçasıdır.
Diğer Render Referansları sayfaları şunlardır:
Giriş
Şablonlar hakkında bilgi edinmeden önce, Render Hedefleri hakkında temel bilgilere sahip olmanızda fayda vardır. Uzman olmanız gerekmez, ancak temel bilgileri anlamak bu sayfadaki her şeyi daha kolay takip etmenizi sağlayacaktır.
Ayrıca, bu kılavuzda sık sık byte kelimesini, 0 ve 255arasındaki bir tamsayıyı ifade etmek için kullanacağız. Bu, 8 bitlik bir veriyi temsil eder. Lua bu terimi özel olarak kullanmasa da, programlamada yaygın bir kavramdır, bu yüzden işleri basitleştirmek için kullanıyoruz.
Şablonlar nedir?
Şablonlar, Render Hedefleri üzerindeki çizim işlemlerini piksel bazında kontrol etmenizi (veya "maskelemenizi") sağlayan bir sistemdir.
Render Hedefine (ana oyun
görünümü gibi) bir şey çizildiğinde, Şablon sistemi değiştirilmek üzere olan her piksel için mantıksal kontroller (bunları daha sonra ele alacağız) gerçekleştirir. Ardından, o pikselin çizim işlemiyle güncellenmesi mi yoksa olduğu gibi bırakılması mı gerektiğine karar verir.
Şablonlar genellikle 3D efektler için kullanılır, ancak bunların tamamen 2D olarak çalıştığını anlamak önemlidir. Şablonlar 2D piksellerle çalışır ve 3D nesnelerle yalnızca bu nesneler 2D Render Hedefine çizildiğinde (veya "rasterize edildiğinde") etkileşime girer.
Şablonlar Ne İçin Kullanılır?
Şablonlar, aşağıdakiler dahil olmak üzere her türlü yaratıcı efekt için kullanılmıştır:
- İçeriden dışarıdan daha büyük görünen imkansız odalar.
- Oyuncuların içinden görebildiği kurşun delikleri.
- Başlangıçta penceresi olmayan duvarlara pencere eklemek.
- Portal oyunundaki gibi portallar
Şablon Sisteminin Parçaları Nelerdir?
Bu Bölümü Okuma
Aşağıdaki bölümde, kullanılabilir Stencil işlevleri, işlemleri ve kavramları, çizim işlemi sırasında yürütüldükleri sırayla tanımlanmakta ve açıklanmaktadır. Çizim işleminden
etkilenen her piksel, diğer piksellerden bağımsız olarak, tam olarak aynı mantığa tabidir.
Bu bölümü, for
etkilenen her piksel üzerinde yinelenen bir döngü olarak düşünebilirsiniz. Bir pikselin bu mantıkta izleyebileceği üç (3) olası yol vardır
. Her yolun sonunda, döngü bir sonraki piksele devam eder.
Döngünün hangi noktasında
olduğumuza dair notlar for gösterilecektir [In this Format]
Şablon Sisteminin Parçaları
[Prior to the draw operation]
- Şablon Tamponu, ait olduğu Render Hedefi üzerindeki her bir piksel için bir
byte(Burada "Şablon değeri" veya "Şablon Tamponu değeri" olarak adlandırılır) tutar.- Varsayılan olarak, her pikselin Stencil değeri
0.
- Varsayılan olarak, her pikselin Stencil değeri
- Referans Değeri,
byteŞablon Tamponu değerlerinin karşılaştırıldığı bir değerdir.
Bir çizim işlemi gerçekleştirildiğinde, etkilenen her pikselin Stencil Tampon değeri Referans Değeri ile karşılaştırılır.
[A draw operation has just been executed]
[At this point, the Stencil configuration cannot be changed.]
[This is the start of the loop that iterates over the pixels affected by the draw operation]
- Karşılaştırma İşlevi
, bir pikselin Stencil Tampon değeri ile mevcut Referans Değeri arasındaki olası ilişkilerden hangisinin (büyük, küçük, eşit vb.) "Geçer
" ve hangisinin "Kalır
" olarak değerlendirileceğini belirler.
Olası Karşılaştırma
İşlevlerinin tam listesi burada bulunabilir - Test Maskesi, Stencil Tamponundan okunan tüm değerlerle bitwise AND işlemi yapılacak bir
byteŞablon Tamponundan okunan tüm değerlerle bitwise AND işlemi yapılır.- Varsayılan olarak, Okuma Maskesi okunan değerlerde herhangi bir değişiklik yapmayacak şekilde ayarlanmıştır.
Bir pikselin Karşılaştırma İşlevini Geçip Geçmediğine bağlı olarak, değeri mevcut Stencil yapılandırmasına bağlı olarak potansiyel olarak değiştirilebilir.
- İşlemler
, belirli bir pikselin Geçti veya Kaldı durumuna bağlı olarak Stencil Tampon değerini değiştirir.
İşlemler arasında mevcut değeri bir (1) artırmak, mevcut değeri Referans Değeri ile değiştirmek, hiçbir değişiklik yapmamak ve diğerleri bulunur.
Olası
İşlemlerin tam listesi burada bulunabilir - Yazma Maskesi
byteStencil Tamponuna yazılmadan önce tüm değerlerle bitwise AND işlemi uygulanacak bir maske.- Varsayılan olarak, Yazma Maskesi yazılan değerlerde herhangi bir değişiklik yapmayacak şekilde ayarlanmıştır.
- Başarısız İşlem
, Karşılaştırma İşlevini Geçemeyen pikseller üzerinde gerçekleştirilir.
[This pixel is done and the next one can be processed.]
Karşılaştırma İşlevini geçen pikseller için, çizim işlemiyle değiştirilmeden önce geçmeleri gereken ek bir kontrol daha vardır.
- Derinlik Testi (veya "Z testi"), pikselin mevcut Derinlik Tamponu değerini çizim işleminin Derinlik değeriyle karşılaştırır.
Karşılaştırma İşlevi'nden farklı olarak, bu karşılaştırma sabittir ve yapılandırılamaz.
- Z Başarısız İşlemi
, mevcut Derinlik Tamponu değeri çizim işleminin önerilen derinlik değerinden düşük olan pikseller için Şablon Tamponu üzerinde gerçekleştirilir. Bu, çizim işleminin mevcut pikselin arkasında çizildiği için bu pikselde görünmemesi gerektiğini gösterir.
[The next pixel can be processed.]
Bir piksel hem Karşılaştırma İşlevi hem de Derinlik Testini geçerse, Geçti olarak kabul edilir ve içeriği çizim işlemiyle değiştirilir/düzenlenir. Bu, pikselin Renk, Derinlik ve Şablon Tamponu değerlerini etkiler.
- Geçiş İşlemi
, Karşılaştırma İşlevi ve Derinlik Testini geçen ve çizim işlemi tarafından güncellenen pikseller için Şablon Tamponunda gerçekleştirilir.
[The next pixel can be processed.]
Aşağıdaki akış şeması, anlaşılmasını kolaylaştırmak için yukarıdaki metinle aynı bilgileri özetlemektedir.

Bu Parçalar Ne Yapmak İçin Kullanılabilir?
Yaygın Kullanım Modeli
Pratik uygulamalarda, Stenciler aşağıdaki şekilde kullanılır:
- Şablon sistemini yapılandırın
- Şablon Tampon değerlerini ayarlamak için çizim işlemleri gerçekleştirin
- Şablon sistemini yeniden yapılandırın
- 1-2. adımlardaki Stencil Tampon değerleri ile maskelenen çizim işlemlerini gerçekleştirin
Stencil Tamponunu tek bir geçişle yapılandırılamayacak şekilde yapılandırmak için 1-2. adımların ve 3-4. adımların birden çok kez tekrarlanması oldukça yaygındır (buna "geçiş" denir ve bir pikselin başarılı/başarısız durumunu belirtmek için kullanılan terimle karıştırılmamalıdır).
Örnek: Basit 2D Maskeleme
Bu örnek, yukarıda özetlenen Yaygın Kullanım Desenini izleyen 2D içerik üzerinde basit bir maskeleme işlemini göstermektedir.
- İlk olarak, Stencil sistemini, kullanmadığımız parçalar da dahil olmak üzere yapılandıracağız, çünkü diğer eklentilerin Stencil sistemini kullandıklarında kendi arkalarını temizleyeceklerine güvenemiyoruz ve onların yapılandırmalarının sonuçlarımızı etkilemesini istemiyoruz.
- Ardından, ekrana hiçbir şey çizmeden, çizmek istediğimiz piksellerin Stencil Tampon değerlerini değiştirecek bir çizim işlemi gerçekleştirerek maskemizi oluşturacağız.
- Sonra, yeni oluşturduğumuz maskeyi bozmak istemediğimiz için, çizim işlemleri sırasında Stencil Tamponunu değiştirmeyi durdurmak üzere Stencil sistemini yeniden yapılandıracağız.
- Son olarak, Stencil Tamponundaki değerlerle maskelenmiş olarak, ekranda görüntülemek istediğimiz içeriği çizeceğiz.
Örnek: İmkansız Bir Alan Oluşturmak
Bu örnek, Stencil'lerin yaygın olarak kullanıldığı alanlardan birini göstermektedir: İmkansız alanlar (aynı zamanda "içeriden daha büyük" veya "Öklid dışı geometri" olarak da adlandırılır)
Temel kavram şudur:
- İmkansız alanın dışını çizin.
- Başka bir boyuta açılan bir kapı yapıyorsanız, bu, efekti yerleştireceğiniz kapı çerçevesi olacaktır.
- Efekti görmek istediğiniz açıklığın boyut ve şekline uygun bir maske oluşturun.
- Bir kapı söz konusu olduğunda, bu kapının boyut ve şekline sahip bir şey olacaktır.
- Dörtgenler, standart bir özellik olarak arka yüz kesme özelliğine sahip oldukları için bu rol için kolay bir seçimdir.
- Daha önce oluşturduğumuz maskeyi kullanarak iç alanı (iç kısımdaki daha büyük olan) çizin.
- Aşağıdaki örnekte iç alan kısa bir tüneldir, ancak bu herhangi bir şey olabilir.
- İlginç bilgi: Portal oyunundaki portallarda bu, bir "iç" alan değil, karşı portaldan dışarıya bakan bir manzaraydı.
İmkansız alana açılan açıklığın maskesi
Açıklığın "içine" yerleştirmek istediğimiz iç alan
Sadece açıklığın olduğu yerde çizilmek üzere maskelenmiş iç mekan
Çizilen varlık ile maskeli iç mekan

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord