Divine Skins
Divine Skins Wiki

Bin & Particle Dictionary

Bir League of Legends VFX bin dosyasındaki özelliklerin, her birinin gerçekte ait olduğu sınıfa göre düzenlenmiş referansı.

Yazan DAKA

Bu bölümdeki diğer sayfalar sana bir şeyi nasıl yapacağını öğretir. Bu sayfa ise bir .py dökümünde gezinirken hiç görmediğin bir özelliğe rastladığın ve sadece onun ne olduğunu ve nerede durduğunu bilmek istediğin an içindir.

Girdiler onlara sahip olan sınıfa göre gruplanmıştır, çünkü bir bin içinde aynı isim birden fazla sınıfta görünebilir ve hangisinin içinde olduğunu bilmek değerin ne yaptığını belirler.

Bunu Ruby ile yan yana oku

Bu özelliklerin çoğunu okuyarak değil, oynayarak daha hızlı anlarsın. Ruby herhangi bir şampiyonda VFX önizler ve içinde bin düzenleyici vardır, yani bir değeri değiştirip ne yaptığını öğrenmek için mod paketlemek yerine doğrudan viewport'a bakabilirsin.

Bu isimler nereden geliyor

Bu sayfadaki her sınıf, özellik ve tip doğrudan motorun kendi kayıtlı sınıf düzeninden okundu ve 16.16 yamasına karşı doğrulandı. Artık var olmayan alan isimleri kaldırıldı, beklediğinden farklı bir sınıfta yaşayanlar ise gerçekte nerede olduklarıyla birlikte işaretlendi. Motorun, özelliğin adının ima ettiğinden başka bir şey yaptığı yerlerde birkaç davranış ayrıca not edildi.

Yapısal veriyi buradan bulabilirsin: lol-meta-classes. Meta sınıfları ve özellikleri hakkındaki dokümantasyonu da lol-meta-wiki üzerinde bulabilirsin.


Bir bin nasıl okunur

Bir VFX bin bir ağaçtır. Omurgası şöyle görünür:

VfxSystemDefinitionData              tek bir tam efekt, örn. bir recall ya da bir Q
└── complexEmitterDefinitionData     sistemin sahip olduğu yayıcı listesi
    └── VfxEmitterDefinitionData     tek bir yayıcı: bir iz, bir parlama, kıvılcımlar
        ├── primitive                her partikülün ne çizdiği
        └── *Definition işaretçileri erozyon, palet, distorsiyon, çocuklar, ...

VfxSystemDefinitionData kapsayıcıdır. Bir yetenek sırasında oynatılan sistemin içinde olmayan bir özellik, o yetenek sırasında ekranda görünmez.

Zamanının çoğunu yayıcıda geçirirsin. Tek başına 145'e yakın, tam olarak 135 kayıtlı alan taşır ve işaretçiler üzerinden bir düzine isteğe bağlı alt tanım nesnesi asar. Boş bir işaretçi o özelliğin tamamen kapalı olduğu anlamına gelir, bir bloğu silmenin çoğu zaman bir şeyi kapatmanın doğru yolu olmasının sebebi budur.

Değer sarmalayıcıları

Sayısal özellikler genelde sarmalanır ki motor onları sabit tutabilsin ya da değiştirebilsin:

rate: embed = ValueFloat {
    constantValue: f32 = 20
}

Sarmalayıcılar ValueFloat, ValueColor, ValueVector2 ve ValueVector3. Her biri bir constantValue ve isteğe bağlı bir dynamics işaretçisi tutar. Bunlar aynı alanın iki yazımı değil, iki ayrı alandır: sabit her zaman oradadır, dynamics ise ona asılmış fazladan bir nesnedir.

AnahtarNerede yaşarNe olduğu
constantValuesarmalayıcıdaYazılmış değer. Tip sarmalayıcıya göre: f32, vec4, vec2, vec3
dynamicssarmalayıcıdaAnimasyonlu değişken nesnesine işaretçi. Boşsa sabit olduğu gibi kullanılır
timesdynamics nesnesindeEğri boyunca konumlar
valuesdynamics nesnesindetimes içindeki her eşleşen girdideki değer
probabilityTablesdynamics nesnesindePartikül başına rastgelelik. Aşağıya bak
probabilityTables çarpar, seçmez

Bir olasılık tablosu çoğu zaman "bu değerlerden birini rastgele seç" diye okunur. Öyle değil. Her tablo düzgün dağılımlı bir rastgele çekilişi kendi keyTimes ile keyValues eğrisinden geçirir ve bir çarpan döndürür, o da constantValue üzerine uygulanır. Çekiliş partikül başına bir kez, doğumda gerçekleşir.

Yani 0.5 ile 1 aralığını döndüren bir tabloyla 5 olan bir constantValue her partiküle 2.5 ile 5 arasında bir değer verir. keyValues değerleri sıfırı geçen bir tablo, örneğin -1 ile 1, partiküllerin kabaca yarısında işareti ters çevirir. Bazı partiküllerin diğerlerinin tersine kayması ya da dönmesinin alışılmış açıklaması budur.

Bir olasılık tablosundaki keyTimes değerinin partikülün yaşı değil, çekiliş ekseni olduğunu unutma.

Doğum özellikleri ve ömür boyu ortakları

Birçok özellik çift halinde gelir. birth* olanı partikül doğduğunda bir kez hesaplanır. Ön eki olmayan ortağı ise partikülün ömrü boyunca etki etmeye devam eder ve doğum değerinin yerine geçmek yerine onunla çarpılır.

DoğumdaÖmür boyunca
birthColorColor
birthScale0scale0
birthRotation0rotation0
birthVelocityvelocity
birthAccelerationacceleration
birthDragdrag

Bir değer yanlış görünüyorsa ve çiftin yalnızca bir yarısı yazılmışsa, herhangi bir şeyi değiştirmeden önce diğer yarısına bak.

Birimler

Dönüşler ve dönüş hızları derece ve saniyede derece cinsindendir. Ömürler, periyotlar ve gecikmeler saniye cinsindendir. UV kaydırma hızları saniyede UV, UV dönüşü ise derece cinsindendir. Renk kanalları 0 ile 1 arasındadır.

Rastgelelik ve 0 soneki

Birkaç doğum özelliği 0 ile biter, birthScale0 ve birthRotation0 gibi. Bu bir isimlendirme kalıntısıdır, minimum-maksimum çifti değildir. Güncel yayıcı sınıfında eşleşen bir birthScale1 yoktur. Partikül başına değişkenlik yukarıdaki gibi probabilityTables üzerinden gelir.

Bayrak baytları

Birçok boolean ayrı alan değildir. Bunlar yayıcıdaki paylaşılan bayrak baytlarına paketlenmiş tekil bitlerdir. Metin araçları onları flag olarak tek tek gösterir, yani birer birer yazarsın, ama bayt başına dört ya da sekiz tanesi yaşar. Tam liste Yayıcı bayrakları bölümünde.


Sistem seviyesi

VfxSystemDefinitionData, en dıştaki kapsayıcı. 16.16 yamasında 33 kayıtlı alan.

ÖzellikTipNe yapar
particleNamestringTüm sistemin okunabilir adı. Güvenle yeniden adlandırılır ve kapsayıcının hash'i çözülmediğinde aranacak en güvenilir şeydir
particlePathstringMotorun sistemleri düzenlemek için kullandığı yol gruplaması
complexEmitterDefinitionDatalist[embed]Bu sistemin sahip olduğu yayıcılar. Efektin asıl gövdesi
simpleEmitterDefinitionDatalist[embed]Daha eski yayıcı listesi. Legacy sistemlerde hâlâ mevcut
materialOverrideDefinitionslist[embed]Sistem genelinde materyal geçersiz kılmaları. Yayıcının aynı isimde kendi listesi var
transformmtx44Tüm sisteme uygulanır; onu tek parça olarak ölçeklemek, taşımak ve döndürmek için. Bak Matrix Scaling
flagsu16Sistem seviyesi bit bayrakları. İkisi biliniyor: 0x100 hız ve drag'i kapalı formda bir çözüme geçirir, 0x800 ise agresif düşük donanım modudur. Varsayılan 212
mEyeCandyboolSistemi göz süsü olarak işaretler, böylece oyuncu Göz Süsünü Gizle'yi açtığında kaybolur
buildUpTimef32Sistemin ısınma süresi
visibilityRadiusf32Culling yarıçapı
overrideScaleCapoption[f32]Sistemin ne kadar ölçeklenebileceğini sınırlar
scaleDynamicallyWithAttachedBoneboolSistem ölçeği bağlı olduğu kemiği takip eder
objectPathhashNesne yolu tanımlayıcısı. 16.16 yamasında eklendi
drawingLayeru8Sistemin hangi katmana çizdiği
ClockToUseu8Sistemin zamanını hangi saatin sürdüğü
selfIlluminationf32Kendi kendine aydınlanma miktarı
assetRemappingTablelist[embed]Sistem içinde uygulanan asset yeniden eşlemeleri
soundOnCreateDefaultstringSistem oluşturulduğunda çalan ses
voiceOverOnCreateDefaultstringOluşturulduğunda çalan seslendirme
soundPersistentDefaultstringSistemin ömrü boyunca döngüde çalan ses
mEyeCandy bir sistem özelliğidir

Yayıcıda değil VfxSystemDefinitionData üzerinde durur, bu yüzden bloğun yayıcı render ayarlarının yanında değil sistem seviyesinde yer alır.


Yayıcı: kimlik ve ömür

VfxEmitterDefinitionData. Buradan Yayıcı bayrakları bölümüne kadar her şey, bir satır aksini söylemedikçe bu sınıftadır.

ÖzellikTipNe yapar
emitterNamestringTek bir yayıcının okunabilir adı. Güvenle yeniden adlandırılır ve buna değer
disabledboolYayıcıyı silmeden kapatır
importanceu8Kalite culling önceliği, Efekt Kalitesi video ayarına karşı kontrol edilir. Aşağıdaki tabloya bak. Varsayılan 2
particleLifetimeValueFloatHer partikülün yayıldıktan sonra ne kadar yaşadığı. Yoksa varsayılan 3.0. -1 bir nöbetçi değerdir, aşağıdaki uyarıya bak
lifetimeoption[f32]Yayıcının kendisinin ne kadar çalıştığı
particleLingeroption[f32]Yayıcı bittikten sonra partiküllerin görünür kaldığı ek saniyeler. Yoksa varsayılan sıfır değil, particleLifetime + 10
emitterLingeroption[f32]Yayıcının kendisinin oyalandığı ek saniyeler
particleLingerTypeu8Hangi oyalanma davranışının kullanıldığı
LingerpointerBir VfxLingerDefinitionData; kaybolmayı sadece geciktirmek yerine partikülü değiştiren oyalanma için
flexParticleLifetimepointerPartikül ömrü için flex geçersiz kılma
particleLifetime -1 birbirine zıt iki şey demektir

-1 "sonsuz partikül" demek değildir. "Yayıcı durana kadar yaşa" demektir ve bunun sana ne verdiği tamamen isSingleParticle değerine bağlıdır.

isSingleParticle açıkken yayma penceresi kısıtlaması atlanır, pencere sınırsız kalır, yayıcı asla tamamlanmaz ve partikül süresiz olarak var olmaya devam eder. Kalıcı olarak takılı bir aksesuar böyle kurulur.

isSingleParticle olmadan kısıtlama dalı hiç çalışmaz ve yayma penceresi yazılı lifetime değerinde kalır. Yayıcı orada durur ve partiküllerini de beraberinde götürür, yani sürekli bir -1 kalıcı olmak yerine kaybolur.

Yazılmış bir 9999 da -1 ile aynı davranır.

importance nasıl eler

importance, sistem yayıcılarını kurarken oyuncunun Efekt Kalitesi ayarına karşı kontrol edilir. Bu bir ölçek değil, bir kategoridir ve iki değer adının ima ettiğinden farklı davranır.

Efekt KalitesiElenen importance değerleri
0 ile 1, Çok Düşük ve Düşük0, 1, 5
2, Orta0, 1
3, Yüksek0, 4
4, Çok Yüksek4

Yani 0 ile 3 öncelikte yükselir ve 3 oynanış için kritiktir, asla elenmez. 4, yalnızca düşük ayarlarda gösterilen düşük kaliteli bir yedektir, 5 ise tersi, yalnızca Orta ve üstünde gösterilir. Bir 4 yayıcısını bir 5 yayıcısıyla eşlemek, tek bir efektin kendisinin iki sürümünü göndermesinin yoludur.

Bir yayıcının var olup olmadığını dört şey daha belirler: disabled, colorblindVisibility, ChanceToNotExist ve sistem flags bitinin 0x800 değeri, ki bu importance 3 ve 4 dışında her şeyi söker.

rate, lifetime, particleLifetime ve particleLinger ekran görüntüleriyle Emitter Library sayfasında gösteriliyor.


Yayıcı: yayma ve zamanlama

ÖzellikTipNe yapar
rateValueFloatSaniyede yayılan partikül. isSingleParticle olan bir yayıcıda bunun yerine partikül sayısını belirler
flexRatepointerOran için flex geçersiz kılma
rateByVelocityFunctionValueVector2Oranı yayıcının hareket hızına göre ölçekler
MaximumRateByVelocityoption[f32]Yukarıdaki için üst sınır
timeBeforeFirstEmissionf32Herhangi bir şey doğmadan önceki gecikme. Bir sistemi aşamalara yaymak için işe yarar
periodoption[f32]Bir yayma döngüsünün uzunluğu
timeActiveDuringPeriodoption[f32]Her period içinde yayıcının gerçekte ne kadar yaydığı
ChanceToNotExistf32Yayıcının doğuşta tamamen atlanma olasılığı
SpawnShapepointerPartiküllerin içinde doğduğu hacmi veren bir IVfxShape
FlexShapeDefinitionpointerDoğum şeklinin flex varyantı
emissionSurfaceDefinitionpointerHacim yerine bir yüzey üzerinde doğma
emissionMeshNamestringYayma şekli olarak kullanılan bir mesh
emissionMeshScalef32O yayma mesh'ini ölçekler
period ve timeActiveDuringPeriod patlamalar böyle yapılır

period değerini döngü uzunluğuna, timeActiveDuringPeriod değerini daha kısa bir değere ayarla; yayıcı sürekli çalışmak yerine nabız gibi atar. İkisini de boş bırakmak düzenli bir akış verir.


Yayıcı: yerleşim ve yönelim

ÖzellikTipNe yapar
EmitterPositionValueVector3Partiküllerin yayıcının orijinine göre nerede doğduğu. Pozitif Y yukarıdır
translationOverridevec3Yayıcıyı bir bütün olarak kaydırır
rotationOverridevec3Yayıcıyı bir bütün olarak döndürür
scaleOverridevec3Yayıcıyı bir bütün olarak ölçekler
FlexInstanceScalepointerÖrnek ölçeği için flex geçersiz kılma
bindWeightValueFloatPartikülün bağlı olduğu şeyi ne kadar takip ettiği. 1 tamamen takip eder, 0 onu dünya uzayında geride bırakır
postRotateOrientationAxisvec3hasPostRotateOrientation açıkken kullanılan eksen
offsetLifetimeScalingvec3Partikülün ömrünü, yayıcıdan ne kadar uzakta doğduğuna göre eksen bazında ölçekler
offsetLifeScalingSymmetryModeu8Yukarıdaki için simetri modu
EmitterPosition mı translationOverride mı?

EmitterPosition partiküllerin yayıcı içinde nerede doğduğunu taşır. translationOverride yayıcıyı bir bütün olarak kaydırır. Bir yayıcı yanlış yerdeyse ikincisini, aksi halde doğru olan bir yayıcının içinde partiküller yanlış yerdeyse birincisini kullan.


Yayıcı: doğum özellikleri

Partiküle doğduğu anda verilen durum. birth* adını taşıyan her şey bir başlangıç koşuludur, süregelen bir koşul değil.

ÖzellikTipNe yapar
birthColorValueColorBaşlangıç rengi, RGBA
birthScale0ValueVector3Başlangıç boyutu
birthRotation0ValueVector3Başlangıç dönüşü
birthRotationalVelocity0ValueVector3Başlangıç dönme hızı
birthRotationalAccelerationValueVector3Başlangıç dönme ivmesi
birthVelocityValueVector3Başlangıç hızı
birthAccelerationValueVector3Başlangıç ivmesi
birthDragValueVector3Başlangıç drag'i
birthOrbitalVelocityValueVector3Yörünge dönüşü. Aşağıdaki uyarıya bak
birthFrameRateValueFloatAnimasyonlu bir doku için başlangıç oynatma hızı
birthUVOffsetValueVector2Doku içindeki başlangıç kayması. Aynı sayfayı paylaşan partikülleri senkronize olmaktan çıkarmak için işe yarar
birthUvScrollRateValueVector2Başlangıç UV kaydırma hızı
birthUvRotateRateValueFloatBaşlangıç UV dönüş hızı

Bunların her birinin bir flex* kardeşi vardır (flexBirthVelocity, flexBirthUVOffset, flexScaleBirthScale ve benzeri) ve bir flex değeri verildiğinde onu geçersiz kılar.

birthOrbitalVelocity hiç hız eklemez

Adına rağmen bu, partikülün hızına hiçbir şey katmaz. Yalnızca dönüşümle ilgilidir: partikülün kendi matrisini döndürürken saklanan konumu yalnızca birthVelocity ve kuvvetlerle ilerlemeye devam eder.

Bir partikülün ne kadar yol aldığı üzerine düşünüyorsan bu önemlidir. Bunu dönüşün üzerine eklenen teğetsel bir hız gibi ele almak hareketi iki kez sayar ve yol uzunluğunu tam olarak iki katına çıkarır.


Yayıcı: ömür boyunca hareket

birth* başlangıç durumunu belirlerken bunlar etki etmeye devam eder.

ÖzellikTipNe yapar
velocityValueVector3Partikülün ömrü boyunca hız
accelerationValueVector3Ömür boyunca ivme
worldAccelerationIntegratedValueVector3Partikülün yöneliminden bağımsız olarak dünya uzayında ivme. Yerçekimi negatif Y olarak burada yaşar
dragValueVector3Ömür boyunca drag
scale0ValueVector3Ömür boyunca ölçek, birthScale0 ile çarpılır
rotation0IntegratedValueVector3Ömür boyunca dönüş
directionVelocityScalef32Partikülün hızla birlikte hareket yönünde ne kadar uzadığı. isDirectionOriented ile kullanılır
directionVelocityMinScalef32Bu uzamanın alt sınırı
fieldCollectionDefinitionpointerKuvvet alanları. Bak Kuvvet alanları

Yayıcı: renk

ÖzellikTipNe yapar
birthColorValueColorDoğuştaki renk
ColorValueColorPartikülün ömrü boyunca renk, birthColor ile çarpılır. Varsayılan beyaz
colorLookUpTypeX / colorLookUpTypeYu8particleColorTexture okumasının her eksenini neyin sürdüğü, örneğin partikülün yaşı
colorLookUpScalesvec2Bu okuma koordinatlarına uygulanan ölçek. Varsayılan 1, 1
colorLookUpOffsetsvec2Bu okuma koordinatlarına uygulanan kayma
colorRenderFlagsu8Rengin render sırasında nasıl uygulandığını etkileyen bit bayrakları
modulationFactorvec4Nihai renge uygulanan modülasyon
censorModulateValuevec4İçerik bir bölge için sansürlendiğinde kullanılan renk
paletteDefinitionpointerBir VfxPaletteDefinitionData. Bak Palet
colorblindVisibilityu80 her zaman görünür, 1 yalnızca normal modda, 2 yalnızca renk körü modunda

Bir RGBA değeri okumak

birthColor: embed = ValueColor {
    constantValue: vec4 = { 1, 0.7059, 0, 1 }
}

Kanallar 0 ile 255 yerine 0 ile 1 arasındadır. Dönüştürmek için 255'e böl. Yukarıdaki yeşil kanal 180, ve 180 / 255 sonucu 0.7059 verir.

Dördüncü değer alfadır; 0 tamamen saydam, 1 tamamen opaktır.

Pratikte yeniden renklendirme için Quartz hesabı senin yerine yapar.


Yayıcı: doku ve UV

ÖzellikTipNe yapar
texturestringYayıcının çizdiği .dds ya da .tex. Bak File Formats
particleColorTexturestringPartikülleri renklendirmek için örneklenen gradyan, genelde ömürleri boyunca. colorLookUp* alanlarıyla nişanlanır
falloffTexturestringSönümlenme rampası dokusu
textureMultpointerBir VfxTextureMultDefinitionData, düz bir string değil. Bak Texture mult
texDivvec2Dokuyu bir ızgaraya böler, sayfa animasyonu için
startFrameu16Animasyonlu bir sayfanın ilk karesi
numFramesu16Sayfanın kaç kare tuttuğu
frameRatef32O karelerin ne hızda oynadığı
uvModeu8UV koordinatlarının nasıl yorumlandığı
texAddressModeBaseu8Temel doku için sarma, clamp ya da ayna
uvRotationValueFloatDokuyu döndürür
uvScaleValueVector2Dokuyu ölçekler
uvTransformCentervec2UV dönüşü ve ölçeği için pivot
uvParallaxScalef32UV'lerdeki paralaks miktarı
emitterUvScrollRatevec2Yayıcı başına uygulanan kaydırma hızı
particleUVScrollRateIntegratedValueVector2Partikül başına uygulanan kaydırma hızı
particleUVRotateRateIntegratedValueFloatPartikül başına uygulanan dönüş hızı
isTexturePixelatedboolYumuşak filtreleme yerine en yakın komşu örnekleme
Düz bir scrollRate yok

Kaydırma her zaman neyi etkilediğine göre daraltılmıştır. Modern yayıcıda alanlar birthUvScrollRate, emitterUvScrollRate ve particleUVScrollRate. Çıplak bir uvScrollRate yalnızca Legacy bileşen modeli bölümünde anlatılan legacy sınıfta bulunur.


Yayıcı: render durumu

ÖzellikTipNe yapar
blendModeu8Partikülün arkasındakiyle nasıl karıştığı. Tam tablo aşağıda
miscRenderFlagsu8Derinlik ve karışım durumu bitleri. Aşağıdaki uyarıya bak
meshRenderFlagsu8Mesh primitifleri için render bayrakları
colorRenderFlagsu8Rengi etkileyen render bayrakları
passi16Çizim sırası. Düşük olan önce çizilir ve altta kalır
renderPhaseOverrideu8Yayıcıyı belirli bir render fazına zorlar. Varsayılan 7, yani geçersiz kılma yok
depthBiasFactorsvec2Eş düzlemli yüzeylerin çakışmaması için derinliği hafifçe iter
DepthPushPullf32Partikülü derinlik boyunca iter ya da çeker. Varsayılan 0. Shader buna PARTICLE_DEPTH_PUSH_PULL diyor
alphaRefu8Alfa test eşiği, 0 ile 255. Altında kalan pikseller atılır. Varsayılan 5
stencilModeu8Stencil davranışı
stencilRefu8Stencil referans değeri
StencilReferenceIdhashAdlandırılmış stencil referansı
disableBackfaceCullboolHer yüzün iki tarafını da çizer
softParticleParamspointerBir VfxSoftParticleDefinitionData. Bak Soft particles
sliceTechniqueRangef32Slice tekniğinin menzili
CustomMaterialpointerVarsayılan materyalin yerine geçen bir VfxMaterialDefinitionData
materialOverrideDefinitionslist[embed]Bu yayıcı için materyal bazlı geçersiz kılmalar
FilteringpointerYayıcının nerede görünmesine izin verildiğini kontrol eden bir VfxEmitterFiltering
AudiopointerBir VfxEmitterAudio

blendMode değerleri

Bunlar sabittir ve her primitif için aynıdır. Her mod bir kaynak ve hedef karışım faktörü ile bir karışım işlemi seçer.

ModSrcDestİşlemDerinlik yazarKarışım
0ONEONEADDhayırevet
1SRC_ALPHAINV_SRC_ALPHAADDhayırevet
2ZEROINV_SRC_COLORADDhayırevet
3evethayır
4SRC_ALPHAONEADDhayırevet
5ONEINV_SRC_ALPHAADDhayırevet
6ONEONEMINhayırevet
7ONEONEMAXhayırevet
8INV_DEST_ALPHADEST_ALPHAADDhayırevet

Bu tabloyu pratikte okumak:

  • 0 ve 4 toplamalı modlardır. Siyah hiçbir şey katmaz, dolayısıyla siyaha doğru yeniden renklendirmek için güvenli olanlar bunlardır.
  • 1 standart alfa karışımıdır, "normal" denilen şeye en yakın olan.
  • 2 karartır, çünkü kaynak rengin tersiyle çarpar.
  • 3 opak moddur. Derinlik yazan tek mod ve hiç karıştırmayan tek mod odur.
  • 6 ve 7 toplamak yerine kaynak ile hedefin minimum ya da maksimum değerini alır.
miscRenderFlags bit 0 derinlik testini kapatır, ters olarak

Bit 0, depth-stencil durumundaki DepthEnable değerine karşılık gelir ve terstir: bit açıkken derinlik testi kapalıdır. miscRenderFlags değerini 1 yapmak, bir partikülün geometrinin içinden çizilmesini sağlayan şeydir.

Bu bir yüz ters çevirme bayrağı değildir ve 4 değerinin testi açık bırakarak derinlik yazmayı kapattığı okuması geçerli değildir. Derinlik yazımına blendMode karar verir ve yalnızca mod 3 onu açar.

Kullanılan karşılaştırma LESS değil LESS_EQUAL'dir; eş düzlemli bir yer decal'ının çizilebilmesini sağlayan da budur.


Yayıcı bayrakları

Yayıcıda dört bayt, her biri sekize kadar adlandırılmış bit taşır. Metin araçları onları flag olarak tek tek gösterir.

BayrakNe yapar
TextureFlipU / TextureFlipVDokuyu her eksende aynalar
particleIsLocalOrientationPartikül yönelimi yerel uzayda okunur
isLocalOrientationYayıcı yönelimi yerel uzayda okunur
isDirectionOrientedPartiküller hareket yönleri boyunca yönelir
isUniformScaleÖlçek tüm eksenler için tek bir değere kilitlenir
hasPostRotateOrientationDönüşten sonra postRotateOrientationAxis uygular
isRandomStartFrameHer partikül sayfanın rastgele bir karesinde başlar
doesCastShadowYayıcı gölgelere katkıda bulunur
isRotationEnabledDönüşü tümden etkinleştirir
uvScrollClampUV kaydırmayı sarmak yerine clamp'ler
isFollowingTerrainPartiküller arazi yüksekliğini takip eder
isGroundLayerYer katmanı olarak çizer
useEmissionMeshNormalForBirthPartiküller yayma mesh'inin normalleri boyunca fırlar
useNavmeshMaskEfekti araziye karşı maskeler, böylece duvarların üzerine taşmaz
ParticlesShareRandomValueTüm partiküller aynı rastgele değeri çeker
SortEmittersByPosYayıcıları konuma göre sıralar
IsEmitterSpacePartiküller dünya uzayı yerine yayıcı uzayında simüle edilir
HasVariableStartTimeBaşlangıç zamanı partikül başına değişir
isSingleParticleAkış yerine tam olarak tek bir partikül
doesParticleLifetimeScalePartikül ömrü sistemle birlikte ölçeklenir
doesLifetimeScaleYayıcı ömrü sistemle birlikte ölçeklenir
WriteAlphaOnlyYalnızca alfa kanalını yazar

Primitifler

primitive, her partikülün ne çizdiğine karar veren bir işaretçidir. Boş bırakmak varsayılan kameraya dönük billboard quad'ı verir.

SınıfNe çizer
VfxPrimitiveCameraQuadHer zaman kameraya dönük düz bir quad. Varsayılan ve karşılaşacağın partiküllerin çoğu
VfxPrimitiveCameraUnitQuadBirim boyutta kameraya dönük bir quad
VfxPrimitiveArbitraryQuadKameraya dönmeyen, sabit yönelimli bir quad
VfxPrimitiveMeshBir mesh
VfxPrimitiveAttachedMeshBir kemiğe bağlı mesh. UseAvatarSpecificSubmeshMask ekler
VfxPrimitiveCameraTrailKameraya dönük bir iz
VfxPrimitiveArbitraryTrailSabit yönelimli bir iz
VfxPrimitiveRibbonBir şerit
VfxPrimitiveBeamİki nokta arasında bir ışın
VfxPrimitiveCameraSegmentBeamKameraya dönük, parçalı bir ışın
VfxPrimitiveCameraSegmentSeriesBeamParçalı ışın serisi
VfxPrimitiveLaserBir lazer
VfxPrimitivePlanarProjectionDokuyu bir düzleme yansıtır. Yer decal'ları
VfxPrimitiveRayBir ışın
VfxPrimitiveNonRenderableHiçbir şey çizmez. Yalnızca çocuk doğurmak ya da mantık sürmek için var olan yayıcılarda kullanılır

Mesh alanları

Mesh primitifleri mMesh içinde bir VfxMeshDefinitionData taşır. m ön eklerine dikkat: bunlar yayıcının kendi alanları gibi yazılmaz.

ÖzellikTipNe yapar
mMeshNamestringÇizilecek mesh
mMeshSkeletonNamestringAnimasyonlu bir mesh için iskelet
mSimpleMeshNamestringBasit bir .scb ya da .sco mesh
mSubmeshesToDrawlist[string]Hangi submesh'lerin render edildiği
mSubmeshesToDrawAlwayslist[string]Her zaman render edilen submesh'ler
mLockMeshToAttachmentboolMesh'i bağlantı noktasına kilitler
mAnimationNamestringMesh üzerinde oynatılacak animasyon
mAnimationVariantslist[string]Alternatif animasyonlar

Mesh primitifleri ayrıca VfxPrimitiveMeshBase üzerinde AlignPitchToCamera ve AlignYawToCamera taşır.

Mesh dosya tipleri

UzantıNe olduğu
.scbStatik mesh, ikili
.scoStatik mesh, ASCII metin, joint ve materyal taşır
.sknRig'li mesh, şampiyon modelleri için standart
.sklBir .skn ile eşleşen iskelet

Bir partikül klasöründe .skn ve .skl çifti animasyonlu bir mesh demektir. Bak Meshes as Particles.

İz ve şerit

VfxPrimitiveTrailBase, mTrail içinde bir VfxTrailDefinitionData taşır:

ÖzellikTipNe yapar
mBirthTilingSizeValueVector3Doğumdaki döşeme boyutu
mCutofff32İzin uzatılmayı bıraktığı yay uzunluğu
mMaxAddedPerFramei32Kare başına eklenen nokta sınırı
mSmoothingModeu8İz boyunca uygulanan yumuşatma
mModeu8İz modu

VfxRibbonDefinitionData, birthTilingSize değerini ValueVector2 olarak taşır.


Alt tanım sınıfları

Bunların her biri yayıcıdaki bir işaretçiye asılır. Boş olması özelliğin tamamen kapalı olduğu anlamına gelir.

Texture mult

VfxTextureMultDefinitionData. Temel dokunun üzerine çarpılan ikinci bir doku, bir görsel düzenleyicideki Multiply ile aynı fikir. Yayıcının textureMult alanı bu nesneyi işaret eder, asıl dosya adı ise onun içindeki textureMult string'idir.

ÖzellikTipNe yapar
textureMultstringÇarpma dokusu
texDivMultvec2Çarpma dokusu için ızgara bölümü
texAddressModeMultu8Sarma modu
uvScaleMultValueVector2Çarpma UV'lerinde ölçek
UvRotationMultValueFloatÇarpma UV'lerinde dönüş
uvTransformCenterMultvec2Bu dönüş ve ölçek için pivot
birthUvScrollRateMultValueVector2Doğumdaki kaydırma hızı
emitterUvScrollRateMultvec2Yayıcı başına kaydırma hızı
birthUVOffsetMultValueVector2Başlangıç UV kayması
birthUvRotateRateMultValueFloatBaşlangıç UV dönüş hızı
ParticleIntegratedUvScrollMultIntegratedValueVector2Partikül başına kaydırma
ParticleIntegratedUvRotateMultIntegratedValueFloatPartikül başına dönüş

Bayrak baytı uvScrollAlphaMult, uvScrollClampMult, TextureMultFilpU, TextureMultFilpV ve isRandomStartFrameMult taşır. Son ikisi motorda gerçekten böyle yazılıyor, yani onları ararken "Flip" değil "Filp" ara.

Palet

VfxPaletteDefinitionData. Düz bir değer kullanmak yerine bir gradyan dokusundan örnekleyerek partikülleri renklendirir.

ÖzellikTipNe yapar
paletteTexturestringGradyan görüntüsü
PaletteTextureAddressModeu8Gradyan için sarma modu
paletteSelectorValueVector3Palette nereden örnekleneceği
palleteSrcMixColorValueColorÖrneklenen sonuca karıştırılan renk
PaletteUAnimationCurveValueFloatU koordinatını animasyonlar
PaletteVAnimationCurveValueFloatV koordinatını animasyonlar
paletteCounti32Dokudaki palet sayısı
Palette mi Pallete mi?

Sınıf ve alanların çoğu doğru yazımı kullanır. Motorun kendi yazım hatası tam olarak tek bir alanda hayatta kalıyor: palleteSrcMixColor. Yani bir binde "pallete" aramak neredeyse her şeyi kaçırır. "palette" ara.

Alfa erozyonu

VfxAlphaErosionDefinitionData. Partikülü bir harita kullanarak çözer. Neredeyse her yanıp yok olma ya da silinme efekti böyle kurulur.

ÖzellikTipNe yapar
erosionMapNamestringErozyon dokusu
erosionMapAddressModeu8Harita için sarma modu
erosionMapChannelMixerValueColorHaritanın hangi kanallarının, ne oranda kullanıldığı
erosionDriveCurveValueFloatErozyonun nasıl ilerlediği
erosionDriveSourceu8Onu neyin sürdüğü, örneğin partikülün yaşı
erosionFeatherIn / erosionFeatherOutf32Sınırın her kenarındaki yumuşaklık
erosionSliceWidthf32Aşınan bandın genişliği
LingerErosionDriveCurveValueFloatOyalanma sırasında kullanılan ayrı bir eğri
UseLingerErosionDriveCurveboolO ayrı eğriyi etkinleştirir

Bir erozyon haritası genelde gri tonlamadır; beyaz önce aşınır, siyah en son. Çok kanallı haritalar her renk kanalında bağımsız bir desen taşır ve erosionMapChannelMixer aralarından seçer.

Distorsiyon

VfxDistortionDefinitionData. Partikülün arkasında çizileni büker. Şok dalgaları ve sıcaklık titremesi.

ÖzellikTipNe yapar
normalMapTexturestringDistorsiyonu süren normal map
distortionf32Şiddet
distortionModeu8Hangi distorsiyon modunun kullanıldığı

Yansıma ve fresnel

VfxReflectionDefinitionData. Kenar parlaması ve yansıma bloğu. fresnel yayıcıda değil burada yaşar.

ÖzellikTipNe yapar
reflectionMapTexturestringYansıma haritası
reflectionOpacityDirectf32Karşıdan bakışta yansıma şiddeti
reflectionOpacityGlancingf32Sıyırma açılarında yansıma şiddeti
reflectionFresnelf32Yansıma için fresnel terimi
reflectionFresnelColorvec4O terimin rengi
fresnelf32Fresnel şiddeti, sıyırma açılarındaki kenar parlaması
fresnelColorvec4O kenar parlamasının rengi

Soft particles

VfxSoftParticleDefinitionData. Bir partikülün geometriyle kesiştiği sert dikişi yumuşatır.

ÖzellikTipNe yapar
beginInf32İçeri doğru solmanın başlamasından önceki kayma
beginOutf32Dışarı doğru solmanın başlamasından önceki kayma
deltaInf32İçeri doğru solmanın kapsadığı mesafe
deltaOutf32Dışarı doğru solmanın kapsadığı mesafe

İki solmadan hangisinin uygulanacağını seçen beşinci bir mod baytı var. Boş bir softParticleParams işaretçisi özelliği tamamen kapatır, ayrı bir açma/kapama alanı yoktur.

Linger

VfxLingerDefinitionData. Kaldırılmayı sadece geciktirmek yerine oyalanma aşamasında partikülü değiştirir.

ÖzellikTipNe yapar
LingerRotationValueVector3Oyalanma sırasında uygulanan dönüş
LingerScaleValueVector3Oyalanma sırasında uygulanan ölçek
KeyedLingerVelocityValueVector3Oyalanma sırasında hız
KeyedLingerAccelerationValueVector3Oyalanma sırasında ivme
KeyedLingerDragValueVector3Oyalanma sırasında drag
SeparateLingerColorValueColorOyalanma sırasında farklı bir renk

Her birinin eşleşen bir Use* bayrağı var: UseLingerRotation, UseLingerScale, UseKeyedLingerVelocity, UseKeyedLingerAcceleration, UseKeyedLingerDrag ve UseSeparateLingerColor. Bayrağı olmadan değeri yazmak hiçbir şey yapmaz.

Materyaller ve sürücüler

VfxMaterialDefinitionData bir Material bağlantısı ve bir materialDrivers haritası tutar. Sürücüler bir materyal parametresini sabit tutmak yerine animasyonlar.

SınıfNe yapar
VfxColorOverLifeMaterialDriverPartikülün ömrü boyunca bir rengi sürer
VfxFloatOverLifeMaterialDriverÖmür boyunca tek bir float'ı sürer
VfxSineMaterialDriverBir değeri sinüs dalgasında salındırır, nabız etkisi için

Glow ve toon shader işleri için bak Static Materials.


Kuvvet alanları

VfxFieldCollectionDefinitionData, yayıcının fieldCollectionDefinition alanı üzerinden erişilir. birthVelocity bir partikülü harekete geçirirken bir alan ona etki etmeye devam eder.

ÖzellikTipNe yapar
fieldAccelerationDefinitionslist[embed]Sabit ivme, örneğin yerçekimi
fieldAttractionDefinitionslist[embed]Partikülleri bir noktaya çeker
fieldDragDefinitionslist[embed]Partikülleri yavaşlatır
fieldNoiseDefinitionslist[embed]Türbülans ekler
fieldOrbitalDefinitionslist[embed]Partikülleri bir eksen etrafında döndürür

Yayma şekilleri

SpawnShape bir IVfxShape işaret eder.

SınıfNe yapar
VfxShapeSphereBir küre içinde doğma, bir radius ile
VfxShapeBoxBir kutu içinde doğma
VfxShapeCylinderBir silindir içinde doğma
VfxShapeVolumeOrtak hacim davranışı, kendi flags değerini taşır
VfxShapeLegacyDaha eski şekil sistemi, birçok efektte hâlâ var

VfxEmissionMeshData bir mesh'ten doğmayı yönetir; meshName, skeletonName, AnimationName, meshScale, maxJointWeights, Submeshes ve useSurfaceNormalForBirthPhysics ile.


Çocuk partiküller

VfxChildParticleSetDefinitionData, yayıcının childParticleSetDefinition alanı üzerinden erişilir. Bir izin kıvılcım saçması ya da bir patlamanın enkaz fırlatması böyle olur.

ÖzellikTipNe yapar
childrenIdentifierslist[embed]Doğurulacak çocuk sistemler, VfxChildIdentifier girdileri olarak
boneToSpawnAtlist[string]Çocukların doğduğu kemikler
childrenProbabilityValueFloatBir çocuğun doğma ihtimali
childEmitOnDeathboolÇocuğu, ebeveyn partikül doğduğunda değil öldüğünde doğur
ParentInheritanceDefinitionpointerÇocuğun neyi miras aldığına karar veren bir VfxParentInheritanceParams

VfxChildIdentifier içinde effect (bir bağlantı), effectKey (bir hash) ve effectName (bir string) bulunur.

VfxParentInheritanceParams içinde Mode ve RelativeOffset bulunur. Bu kayma, çocuğun kendi EmitterPosition değerinden ayrı, tam anlamıyla ebeveyne göreli bir kanaldır.

Çocuklar bir kez, doğumda doğar

Ebeveynden çocuğa sürekli bir besleme yoktur. Bir çocuk sistem tam olarak bir kez, onu taşıyan partikülün doğduğu anda oluşturulur ve o andan itibaren kendi saatinde bağımsız bir sistem olarak çalışır. Tek sökülme, taşıyıcı partikülün ölmesidir.

Bilmeye değer bir sonuç: isSingleParticle olan bir taşıyıcı için tam olarak tek bir partikül ve dolayısıyla tam olarak tek bir çocuk oluşturma vardır ve ebeveynin yayma penceresinin kapanması bunu durduramaz.

Miras bir moddur, sabit bir zincir değil

Bir çocuğun ebeveyninden neyi miras aldığına VfxParentInheritanceParams üzerindeki Mode değeri karar verir. Hiçbir ParentInheritanceDefinition yazılmadığında çocuk varsayılan modda çalışır. Sabit bir miras kümesi varsayan her zihinsel model varsayılan için doğru, gerisi için yanlış olur.

Çocuk sistemler iç içe geçer ve motor onları derinlik öncelikli dolaşır, yani üç seviyeli bir iç içe geçme her seviyede birleşir.

Sık görülen bir kalıp, VfxPrimitiveNonRenderable kullanan bir ebeveyn yayıcıdır: hiçbir şey çizmez ve yalnızca çocuklarını yerleştirmek için vardır.


Legacy bileşen modeli

Daha eski efektler, motorda hâlâ gelen ikinci bir bileşen tabanlı yayıcı modeli kullanır. Uzun süredir var olan şampiyonlarda karşına çıkacak. Burada onu tanıyabilmen için belgelendi, yeni işleri onunla yazasın diye değil.

SınıfBoyutRolü
VfxEmitterLegacySimple13 alanBasit legacy yayıcı, yayıcının LegacySimple işaretçisi üzerinden erişilir
VfxLegacyRenderComponent66 alanLegacy render durumu
VfxLegacyPhysicsComponent37 alanLegacy hareket ve yerleşim
VfxLegacyLifetimeComponent17 alanLegacy zamanlama
VfxLegacyGeometryComponent1 alanLegacy geometri

Birçok isim her iki modelde de görünür. blendMode, texture, bindWeight, birthVelocity, particleLifetime ve diğerleri modern yayıcıda ve bir legacy bileşende, farklı offsetlerde bulunur. Bir değer etkisiz görünüyorsa, aslında hangisini düzenlediğine bak.

Üç isim yalnızca legacy modelde bulunur:

ÖzellikTipNerede yaşar
uvScrollRatevec2VfxEmitterLegacySimple
particleBindvec2VfxEmitterLegacySimple
lockedToEmitterboolVfxEmitterLegacySimple

VfxEmitterLegacySimple ayrıca birthScale, scale, birthRotation, birthRotationalVelocity, rotation, scaleBias, orientation, fixedOrbitType, hasFixedOrbit ve scaleUpFromOrigin taşır. Buradaki soneksiz birthScale ve birthRotation ile modern yayıcıdaki birthScale0 ve birthRotation0 arasındaki farka dikkat et.

LegacySimple işaretçisi, sistemin simpleEmitterDefinitionData listesindeki yayıcıların kullandığı şeydir. Bir sistem complexEmitterDefinitionData yerine o listeyi dolduruyorsa, yayıcılarının okuduğu blok budur.

Yayıcının kaybettiği özellikler

Dört yayıcı özelliği emekliye ayrıldı ve artık yalnızca eski binlerde ya da eski dokümantasyonda karşına çıkar.

ÖzellikKaldırıldığı sürümYerine geçen
shape14.1SpawnShape
Material14.1CustomMaterial ve materialOverrideDefinitions
materialDrivers14.1VfxMaterialDefinitionData üzerindeki materialDrivers haritası
flexOffset15.11Doğrudan bir karşılığı yok

assetCategory, VfxSystemDefinitionData üzerinden 14.15'te kaldırıldı.


Kolayca yanlış anlaşılan şeyler

En çok zaman kaybettiren yanlış okumaların kısa bir listesi.

VarsayımGerçekte doğru olan
birthScale0 ve birthScale1 bir min-maks çiftidirbirthScale1 diye bir şey yok. 0 bir isimlendirme kalıntısı, rastgelelik ise probabilityTables üzerinden gelir
probabilityTables bir kümeden bir değer seçerconstantValue değerini bir rastgele çekilişle çarpar, partikül başına bir kez
birthOrbitalVelocity yörüngesel hareket eklerYalnızca dönüşümle ilgilidir ve hiç hız katmaz
miscRenderFlags yüzleri ters çevirirBit 0 derinlik testini ters mantıkla kapatır, yani 1 test kapalı demektir
blendMode anlamları primitife göre değişirKarışım durumu her primitif için aynıdır. Yalnızca mod 3 derinlik yazar
textureMult bir dosya adıdırKoca bir tanım sınıfına işaretçidir. Dosya adı onun içindeki bir alandır
mEyeCandy bir yayıcı ayarıdırSistemdedir
Düz bir scrollRate vardırYalnızca daraltılmış varyantlar vardır, artı yalnızca legacy olan bir uvScrollRate
Bir soft particle açma/kapama alanı vardırBoş bir softParticleParams işaretçisi anahtardır
particleLifetime değerinin -1 olması sonsuz partikül demektir"Yayıcı durana kadar yaşa" demektir. Yalnızca isSingleParticle ile birlikte kalıcıdır
Eksik bir particleLinger sıfır demektirVarsayılanı particleLifetime + 10
Ebeveyn yayıcının penceresi kapanınca çocuk ölürÇocuk bağımsız bir sistemdir. Kendi yayıcıları tükendiğinde ya da taşıyıcı partikülü kaldırıldığında biter

Bu sayfadaki isimler ve tipler, 16.16 yaması için motorun kayıtlı sınıf düzeninden okundu. Bir özellik eksikse ya da bir açıklama yanlışsa, düzeltmeye değer: bak Nasıl katkıda bulunulur.