Model biçimleri için malzeme eşleme
Bir kaynak varlık model olarak dönüştürüldüğünde, dönüştürücü her ağ için malzeme oluşturur. Malzemelerin oluşturulma şekli geçersiz kılınabilir. Ancak dönüştürme varsayılan olarak PBR malzemeleri oluşturur. FBX gibi her kaynak dosya biçimi malzemeleri tanımlamak için kendi kurallarını kullandığından, bu kuralların Azure Uzaktan İşleme'nin PBR malzeme parametrelerine eşlenmesi gerekir.
Bu makalede, malzemeleri kaynak varlıklardan çalışma zamanı malzemelerine dönüştürmek için kullanılan tam eşlemeler listelenir.
glTF
EmissiveFactor ve EmissiveTexture dışında glTF 2.0 belirtimindeki neredeyse her şey Azure Remote Rendering'de desteklenir.
Aşağıdaki tabloda eşleme gösterilmektedir:
glTF | Azure Remote Rendering |
---|---|
baseColorFactor | albedoColor |
baseColorTexture | albedoMap |
metallicFactor | metallik |
metallicTexture | metalnessMap |
roughnessFactor | Pürüz |
roughnessTexture | roughnessMap |
occlusionFactor | Tıkanık -lığı |
occlusionTexture | occlusionMap |
normalTexture | normalMap |
normalTextureInfo.scale | normalMapScale |
alphaCutoff | alphaClipThreshold |
alphaMode.OPAQUE | alphaClipEnabled = false, isTransparent = false |
alphaMode.MASK | alphaClipEnabled = true, isTransparent = false |
alphaMode.BLEND | isTransparent = true |
doubleSided | isDoubleSided |
emissiveFactor | - |
emissiveTexture | - |
glTF'deki her doku, Azure Uzaktan İşleme malzemelerinde de desteklenen bir texCoord
değere sahip olabilir.
Katıştırılmış dokular
*.bin veya *.glb dosyalarına eklenmiş dokular desteklenir.
Desteklenen glTF uzantısı
Temel özellik kümesine ek olarak, Azure Remote Rendering aşağıdaki glTF uzantılarını destekler:
- MSFT_packing_occlusionRoughnessMetallic
- KHR_materials_unlit: Renk malzemelerine karşılık gelir. Yardımcı malzemeler için bu uzantının kullanılması önerilir.
- KHR_materials_pbrSpecularGlossiness: Metalik pürüzlü dokular yerine, diffüz-specular-glossiness dokuları sağlayabilirsiniz. Azure Uzaktan İşleme uygulaması doğrudan uzantıdaki dönüştürme formüllerini izler.
FBX
FBX biçimi kapalı kaynaklıdır ve FBX malzemeleri genel olarak PBR malzemeleriyle uyumlu değildir. FBX, birçok benzersiz parametre ve özelliğe sahip yüzeylerin karmaşık bir açıklamasını kullanır ve bunların tümü Azure Uzaktan İşleme işlem hattı tarafından kullanılmaz.
Önemli
Azure Uzaktan İşleme modeli dönüştürme işlem hattı yalnızca FBX 2011 ve üzerini destekler.
FBX biçimi malzemeler için muhafazakar bir yaklaşım tanımlar, resmi FBX belirtiminde yalnızca iki tür vardır:
- Lambert - Yaygın olarak zaten bir süredir kullanılmasa da, dönüştürme zamanında Phong'a dönüştürülerek hala desteklenmektedir.
- Phong - Neredeyse tüm malzemeler ve çoğu içerik aracı bu türü kullanır.
Phong modeli daha doğru ve FBX malzemeleri için tek model olarak kullanılır. Aşağıda FBX Malzemesi olarak anılacaktır.
Maya, bir malzemenin PBR ve Stingray türleri için özel özellikler tanımlayarak FBX için iki özel uzantı kullanır. Bu ayrıntılar FBX belirtiminde yer almadığından şu anda Azure Uzaktan İşleme tarafından desteklenmemektedir.
FBX Malzemeleri Diffuse-Specular-SpecularLevel kavramını kullanır, bu nedenle dağınık bir dokudan albedo haritasına dönüştürmek için diğer parametreleri hesaplamamız gerekir.
FBX'teki tüm renkler ve dokular sRGB alanındadır (Gama alanı olarak da bilinir) ancak Azure Uzaktan İşleme görselleştirme sırasında doğrusal boşlukla çalışır ve çerçevenin sonunda her şeyi sRGB alanına dönüştürür. Azure Remote Rendering varlık işlem hattı, hazır veri olarak işleyiciye göndermek için her şeyi doğrusal alana dönüştürür.
Bu tabloda dokuların FBX Malzemelerinden Azure Uzaktan İşleme malzemelerine nasıl eşlendiği gösterilmektedir. Bazıları doğrudan kullanılmaz, ancak formüllere katılan diğer dokularla (örneğin, dağınık doku) birlikte kullanılır:
FBX | Azure Remote Rendering |
---|---|
AmbientColor | Tıkanıklık Haritası |
DiffuseColor | Albedo, Metalness için kullanılır |
Transparentcolor | Albedo'nun alfa kanalı için kullanılır |
TransparencyFactor | Albedo'nun alfa kanalı için kullanılır |
Opak -lık | Albedo'nun alfa kanalı için kullanılır |
SpecularColor | Albedo, Metalness, Pürüzlülük için kullanılır |
SpecularFactor | Albedo, Metalness, Pürüzlülük için kullanılır |
ShininessExponent | Albedo, Metalness, Pürüzlülük için kullanılır |
NormalMap | NormalMap |
Yumru | NormalMap'e dönüştürüldü |
EmissiveColor | - |
EmissiveFactor | - |
Düşünceler ionColor | - |
DisplacementColor | - |
Yukarıdaki eşleme, yapılması gereken birçok varsayım nedeniyle malzeme dönüştürmenin en karmaşık kısmıdır. Bu varsayımları aşağıda ele alıyoruz.
Aşağıda kullanılan bazı tanımlar:
Specular
=SpecularColor
*SpecularFactor
SpecularIntensity
=Specular
. Kırmızı ∗ 0,2125 +Specular
. Yeşil ∗ 0.7154 +Specular
. Mavi ∗ 0.0721DiffuseBrightness
= 0,299 *Diffuse
. Kırmızı2 + 0,587 *Diffuse
. Yeşil2 + 0,114 *Diffuse
. Mavi2SpecularBrightness
= 0,299 *Specular
. Kırmızı2 + 0,587 *Specular
. Yeşil2 + 0,114 *Specular
. Mavi2SpecularStrength
= max(Specular
. Kırmızı,Specular
. Yeşil,Specular
. Mavi)
SpecularIntensity formülü buradan elde edilir. Parlaklık formülü bu belirtimde açıklanmıştır.
Pürüz
Roughness
bu formülden Specular
hesaplanır ve ShininessExponent
kullanılır. Formül, Phong specular üssünden pürüzlülüğün yaklaşık bir tahminidir:
Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))
Metallik
Metalness
glTF belirtiminden bu formülden Diffuse
hesaplanır ve Specular
kullanılır.
Buradaki fikir, denklemi çözmemizdir: Ax2 + Bx + C = 0. Temel olarak dielektrik yüzeyler ışığın yaklaşık %4'ünün belirli bir şekilde yansıtılır ve gerisi dağınıktır. Metalik yüzeyler dağınık bir şekilde ışığı yansıtmaz, ancak her şeyi belirli bir şekilde yansıtır. Parlak plastik ve parlak metalik yüzeyleri ayırt etmenin bir yolu olmadığından bu formülün birkaç dezavantajı vardır. Çoğu zaman yüzeyin metalik özelliklere sahip olduğunu varsayıyoruz ve bu nedenle parlak plastik/kauçuk yüzeyler beklendiği gibi görünmeyebilir.
dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength
A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);
Albedo
Albedo
, Specular
ve Metalness
kaynaklarından Diffuse
hesaplanır.
Metalness bölümünde açıklandığı gibi dielektrik yüzeyler ışığın yaklaşık %4'lük kısmını yansıtır.
Buradaki fikir, bir faktör olarak değer kullanarak Metalness
ve Metal
renkleri arasında Dielectric
doğrusal olarak ilişkilendirmektir. Metallik ise 0.0
, benekliye bağlı olarak koyu bir renk olur (belirtim yüksekse) veya yayılma değişmez (herhangi bir belirtim yoksa). Metallik büyük bir değerse, yayma rengi belirtik renk yerine kaybolur.
dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength
dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);
AlbedoRGB
yukarıdaki formül tarafından hesaplanmıştır, ancak alfa kanalı daha fazla hesaplama gerektirir. FBX biçimi saydamlık konusunda belirsizdir ve bunu tanımlamanın birçok yolu vardır. Farklı içerik araçları farklı yöntemler kullanır. Buradaki fikir, bunları tek bir formülde birleştirmektir. Ancak bazı varlıklar ortak bir şekilde oluşturulmamışsa yanlış şekilde saydam hale gelir.
Bu, , TransparencyFactor
, Opacity
ile TransparentColor
hesaplanır:
tanımlanırsa Opacity
doğrudan kullanın: = AlbedoAlpha
Opacity
else
tanımlanmışsa, = 1.0 - ((TransparentColor.Blue
+ + TransparentColor.Red
TransparentColor.Green
) / 3.0) değilse AlbedoAlpha
TransparencyColor
if , TransparencyFactor
then AlbedoAlpha
= 1.0 - TransparencyFactor
Son Albedo
renk, ile birleştirerek AlbedoRGB
dört kanala AlbedoAlpha
sahiptir.
Özet
Burada özetlemek gerekirse, Albedo
sıfıra yakınsa Specular
özgün Diffuse
öğesine çok yakın olacaktır. Aksi takdirde yüzey metalik bir yüzey gibi görünür ve yayma rengini kaybeder. Yüzey yeterince büyükse ve parlaksa ShininessExponent
daha parlak ve Specular
yansıtıcı görünecektir. Aksi takdirde yüzey pürüzlü görünür ve ortamı neredeyse hiç yansıtmaz.
Bilinen sorunlar
- Geçerli formül basit renkli geometri için iyi çalışmıyor. Yeterince parlaksa
Specular
, tüm geometriler herhangi bir renk olmadan yansıtıcı metalik yüzeyler haline gelir. Bu durumda geçici çözüm, özgün sürümden %30'a düşürmekSpecular
veya fbxAssumeMetallic dönüştürme ayarını kullanmaktır. - PBR malzemeleri kısa süre önce ve
3DS Max
içerik oluşturma araçlarınaMaya
eklendi. FBX'e geçirmek için kullanıcı tanımlı özel kara kutu özelliklerini kullanırlar. Azure Uzaktan İşleme belgelenmediğinden ve biçim kapalı kaynak olduğundan bu özellikleri okumaz.