Sceneform, geliştiricilerin harika sonuçlar almalarını kolaylaştırmak için varsayılan materyal tanımları (.sfm
) sağlar. Öğelerinin görünümünü ayrıntılı bir şekilde özelleştirmek isteyen geliştiriciler kendi malzeme tanımlarını (*.mat
dosyaları) oluşturabilir ve öğe tanımında source
özelliğini belirterek bu öğeleri öğelerine uygulayabilirler.
Temel kavramlar
- Materyal
- Bir malzeme, yüzeyin görsel görünümünü tanımlar. Bir yüzeyi tamamen açıklamak ve oluşturmak için malzeme aşağıdaki bilgileri sağlar:
- Malzeme modeli
- Kullanım tarafından kontrol edilen adlandırılmış parametreler grubu
- Raster durumu (karma mod, arka yüz toplama vb.)
- Vertex gölgelendirici kodu
- Parça gölgelendirici kodu
- Malzeme modeli
- Gölgelendirme modeli veya aydınlatma modeli olarak da adlandırılan malzeme modeli, bir yüzeyin içsel özelliklerini tanımlar. Bu özellikler, aydınlatmanın hesaplanma yöntemi ve dolayısıyla yüzeyin görünümü üzerinde doğrudan etkilidir.
- Malzeme tanımı
- Bir malzemenin gerektirdiği tüm bilgileri açıklayan metin dosyasıdır. Bu sayfada, (
*.mat
) materyal tanımı dosyalarının yapısı ve biçimi açıklanmaktadır.
Malzeme tanımları
Materyal tanım, bir materyal için gereken tüm bilgileri açıklayan bir metin dosyasıdır:
- Ad
- Kullanıcı parametreleri
- Malzeme modeli
- Gerekli özellikler
- İnterpolantlar (değişkenler olarak adlandırılır)
- Kadro durumu (karma mod vb.)
- Gölge kodu (parça gölgelendirici, isteğe bağlı olarak gölgelendirici)
Biçim
Malzeme tanımı biçimi, JSON adını verdiğimiz JSON temelli genel bir biçimdir. Üst düzeyde, materyal tanımı JSON nesne gösterimini kullanan 3 farklı bloktan oluşur:
material {
// material properties
}
vertex {
// vertex shader, optional
}
fragment {
// fragment shader
}
Minimum uygulanabilir materyal tanımı material
blok ve fragment
blok içermelidir. vertex
bloğu isteğe bağlıdır.
JSON ile arasındaki farklar
JSON'da bir nesne anahtar/değer eşlemelerinden oluşur. JSON çifti aşağıdaki söz dizimine sahiptir:
"key" : value
Değerin bir dize, sayı, nesne, dizi veya değişmez değer (true
, false
veya null
) olabileceği durumlarda. Bu söz dizimi, malzeme tanımında mükemmel bir şekilde geçerlidir ancak dizelerin başında ve sonunda tırnak işareti bulunmayan bir varyant, JSON dilinde de kabul edilir:
key : value
Dizede boşluk varsa tırnak işareti kullanımı zorunludur.
vertex
ve fragment
blokları, JSON'da geçerli olmayan çıkış karaktersiz, alıntılanmamış GLSL kodu içerir.
Tek satırdan oluşan C++ stili yorumlara izin verilir.
Çiftin anahtarı büyük/küçük harfe duyarlıdır.
Çiftin değeri büyük/küçük harfe duyarlı değildir.
Örnek
Aşağıdaki kod listesinde geçerli bir malzeme tanımı örneği verilmiştir. Bu tanım, aydınlatılmış malzeme modelini, varsayılan opak harmanlama modunu kullanır, oluşturulan örgüde bir UV koordinatları kümesinin sunulmasını gerektirir ve 3 kullanıcı parametresini tanımlar. Bu dokümanın aşağıdaki bölümlerinde, material
ve fragment
engellemeleri ayrıntılı olarak açıklanmaktadır.
material {
name : "Textured material",
parameters : [
{
type : sampler2d,
name : texture
},
{
type : float,
name : metallic
},
{
type : float,
name : roughness
}
],
requires : [
uv0
],
shadingModel : lit,
blending : opaque
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor = texture(materialParams_texture, getUV0());
material.metallic = materialParams.metallic;
material.roughness = materialParams.roughness;
}
}
Malzeme bloğu
Malzeme bloğu, gölgelendirici olmayan tüm verileri açıklayan özellik çiftlerinin listesini içeren zorunlu bir bloktur.
name
- Tür
string
- Değer
- Herhangi bir dize. Ad alanında boşluk varsa çift tırnak kullanılması gerekir.
- Açıklama
- Malzemenin adını belirler. Bu ad, hata ayıklama amacıyla çalışma zamanında saklanır.
material {
name : stone
}
material {
name : "Wet pavement"
}
shadingModel
- Tür
string
- Değer
- Herhangi bir
lit
,cloth
,unlit
. Varsayılan olaraklit
değerine ayarlanır. - Açıklama
- Malzeme modelini, Malzeme modelleri bölümünde açıklandığı şekilde seçer.
material {
shadingModel : unlit
}
Parametreler
- Tür
- parametre nesnelerinin dizisi
- Değer
Her giriş,
string
ve her ikisi dename
vetype
özelliklerine sahip bir nesnedir. Ad, geçerli bir GLSL tanımlayıcısı olmalıdır. Tür, aşağıdaki tabloda açıklanan türlerden biri olmalıdır.Tür Açıklama bool Tek boole Bool2 2 boole vektörü Bool3 3 boole vektörü Bool4 4 boole vektörü kayan noktalı Tek kayan kayan noktalı2 2 kayanın vektörü kayan noktalı3 3 kayanın vektörü kayan noktalı4 4 yüzen vektör int Tek bir tam sayı int2 2 tam sayı vektörü int3 3 tam sayı vektörü int4 4 tam sayı vektörü numune 2 2D doku ÖrnekleyiciHarici Dış doku. Daha fazla bilgi için ExternalTexture ve setExternalTexture() bölümlerine bakın - Numuneler
Örnekleyici türleri,
format
(varsayılan olarakfloat
) veprecision
(varsayılan olarakdefault
olur) değerlerini de belirtebilir. Biçim,int
,float
olabilir. Hassasiyet şunlardan biri olabilir:default
(platform için en iyi hassasiyet; genellikle masaüstündehigh
, mobil cihazlardamedium
),low
,medium
vehigh
.- Açıklama
Malzemenizin gerektirdiği parametreleri listeler. Bu parametreler, Sceneform&s API materyali kullanılarak çalışma zamanında ayarlanabilir. Şekillendiricilerden parametrelere erişim, parametrenin türüne bağlı olarak değişiklik gösterir:
- Örnekleyici türleri:
materialParams_
ön ekine sahip parametre adını kullanın. Örneğin,materialParams_myTexture
. - Diğer türler: Parametre adını,
materialParams
adlı bir yapının alanı olarak kullanın. Örneğin,materialParams.myColor
.
- Örnekleyici türleri:
material {
parameters : [
{
type : float4,
name : albedo
},
{
type : sampler2d,
format : float,
precision : high,
name : roughness
},
{
type : float2,
name : metallicReflectance
}
],
requires : [
uv0
],
shadingModel : lit,
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor = materialParams.albedo;
material.roughness = texture(materialParams_roughness, getUV0());
material.metallic = materialParams.metallicReflectance.x;
material.reflectance = materialParams.metallicReflectance.y;
}
}
gerektirir
- Tür
string
dizisi- Değer
- Her giriş;
uv0
,uv1
,color
,tangents
olmalıdır. - Açıklama
- Malzemenin gerektirdiği tepe noktası özelliklerini listeler.
position
özelliği otomatik olarak eklenir ve belirtilmesi gerekmez.unlit
olmayan gölgeleme modeli seçerkentangents
özelliği otomatik olarak gereklidir. Gölgelendiricilerden bu özelliklere nasıl erişileceği hakkında daha fazla bilgi için bu dokümanın gölgelendirici bölümlerine bakın.
material {
parameters : [
{
type : sampler2d,
name : texture
},
],
requires : [
uv0
],
shadingModel : lit,
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor = texture(materialParams_texture, getUV0());
}
}
variables
- Tür
string
dizisi- Değer
- Her biri geçerli bir GLSL tanımlayıcısı olan en fazla 4 dize.
- Açıklama
- Malzemenin gölgelendirici tarafından üretilen özel interpolantları (veya değişkenleri) tanımlar. Dizideki her giriş, kesişimin adını tanımlar.
Parça gölgelendiricinin tam adı,
variable_
ön eki olan artımlı addır. Örneğin,eyeDirection
adlı bir değişken bildirirseniz değişkenevariable_eyeDirection
kullanarak parça parça gölgesinde erişebilirsiniz. Köşe gölgeleyicide, polarizma adı sadeceMaterialVertexInputs
yapısının bir üyesidir (örneğin,material.eyeDirection
). Her bağlayıcı, gölgelendiricilerdefloat4
(vec4
) türündedir.
material {
name : Skybox,
parameters : [
{
type : sampler2d,
name : skybox
}
],
variables : [
eyeDirection
],
vertexDomain : device,
depthWrite : false,
shadingModel : unlit
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
float theta = acos(variable_eyeDirection.y);
float phi = atan(variable_eyeDirection.z / variable_eyeDirection.x) +
(variable_eyeDirection.x > 0.0 ? 0.0 : PI);
material.baseColor = texture(materialParams_skybox,
vec2((phi + PI / 2.0) / (2.0 * PI), theta / PI));
}
}
vertex {
void materialVertex(inout MaterialVertexInputs material) {
float3 p = getPosition().xyz;
float3 u = mulMat4x4Float3(getViewFromClipMatrix(), p).xyz;
material.eyeDirection.xyz = mulMat3x3Float3(getWorldFromViewMatrix(), u);
}
}
karışım
- Tür
string
- Değer
- Herhangi bir
opaque
,transparent
,fade
,add
,masked
. Varsayılan olarakopaque
değerine ayarlanır. - Açıklama
Oluşturulan nesnenin, oluşturma hedefinin içeriğiyle nasıl harmanlanıp birleştirilmeyeceğini tanımlar. Olası karıştırma modları şunlardır:
- Opak: Karıştırma devre dışıdır, malzemenin çıkışının alfa kanalı yok sayılır.
- Şeffaf: Karıştırma etkin. Malzemenin çıkışı, oluşturma hedefiyle birleştirilir ve Porter-Duff'ın kaynak üzeri kuralı kullanılarak oluşturulur. Bu harmanlama modu, önceden çarpılmış alfa olduğunu varsayar.
- Şeffaflaştır:
transparent
işlevi görür ancak spekülatif aydınlatmaya da uygulanır.transparent
modunda, malzemenin alfa değerleri yalnızca dağınık ışıklandırma için geçerlidir. Bu harmanlama modu, ışıklı nesneleri soluklaştırıp kapatmak için yararlıdır. - Ekle: Harmanlama etkin. Malzemenin çıkışı, oluşturma hedefinin içeriğine eklenir.
- Maskelenmiş: Harmanlama devre dışıdır. Bu harmanlama modu alfa maskelemeyi etkinleştirir. Malzemenin çıkışının alfa kanalı, bir parçanın silinip silinmeyeceğini belirler. Daha fazla bilgi için maskThrholdhold bölümüne bakın.
material {
blending : transparent
}
vertexAlan Adı
- Tür
string
- Değer
- Herhangi bir
object
,world
,view
,device
. Varsayılan olarakobject
değerine ayarlanır. - Açıklama
Oluşturulan ağın alanını (veya koordinat alanını) tanımlar. Alan, köşelerin gölgelendiricide nasıl köşe dönüştürüleceğini etkiler. Olası alanlar şunlardır:
- Nesne: Köşeler, nesne (veya model) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşüm matrisi kullanılarak dönüştürülür
- Dünya: Köşeler, dünya koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
- Görünüm: Köşeler, görünümde (veya göz ya da kamera) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
- Cihaz: Köşeler, normalleştirilmiş cihaz (veya klip) koordinat alanında tanımlanır. Köşeler, oluşturulan nesne dönüşümü kullanılarak dönüştürülmez.
material {
vertexDomain : device
}
interpolasyon
- Tür
string
- Değer
- Herhangi bir
smooth
,flat
. Varsayılan olaraksmooth
değerine ayarlanır. - Açıklama
- Köşeler arasında (veya değişkenlerde) tepe noktaları arasında nasıl interpolasyon yapıldığını tanımlar.
Bu özellik
smooth
olarak ayarlandığında, her kesişimde perspektif doğru bir interpolasyon gerçekleştirilir.flat
olarak ayarlandığında, interpolasyon yapılmaz ve belirli bir üçgenin tüm parçaları aynı gölgeye sahip olur.
material {
interpolation : flat
}
kürekli
- Tür
string
- Değer
- Herhangi bir
none
,front
,back
,frontAndBack
. Varsayılan olarakback
değerine ayarlanır. - Açıklama
- Hangi üçgenlerin kırpılacağını tanımlar: yok, öne bakan üçgenler, arka yüzdeki üçgenler veya hepsi.
material {
culling : none
}
renkle yazma
- Tür
boolean
- Değer
true
veyafalse
. Varsayılan olaraktrue
değerine ayarlanır.- Açıklama
- Renk arabelleğine yazma işlemlerini etkinleştirir veya devre dışı bırakır.
material {
colorWrite : false
}
Derin Yaz
- Tür
boolean
- Değer
true
veyafalse
. Varsayılan olaraktrue
değerine ayarlanır.- Açıklama
- Derinlik arabelleğine yazma işlemlerini etkinleştirir veya devre dışı bırakır.
material {
depthWrite : false
}
Derinlik Kültürü
- Tür
boolean
- Değer
true
veyafalse
. Varsayılan olaraktrue
değerine ayarlanır.- Açıklama
- Derinlik testini etkinleştirir veya devre dışı bırakır. Derinlik testi devre dışı bırakıldığında bu malzemeyle oluşturulan bir nesne her zaman diğer opak nesnelerin üzerinde görünür.
material {
depthCulling : false
}
Çift taraflı
- Tür
boolean
- Değer
true
veyafalse
. Varsayılan olarakfalse
değerine ayarlanır.- Açıklama
- İki taraflı oluşturmayı etkinleştirir veya devre dışı bırakır.
true
değerine ayarlandığında,culling
otomatik olaraknone
değerine ayarlanır. Üçgenin arkası açıksa, üçgenin normal görünümü öne dönük olacak şekilde otomatik olarak çevrilir.
material {
doubleSided : true
}
şeffaflık
- Tür
string
- Değer
default
,twoPassesOneSide
veyatwoPassesTwoSides
. Varsayılan olarakdefault
değerine ayarlanır.- Açıklama
- Şeffaf nesnelerin nasıl oluşturulduğunu kontrol eder. Yalnızca
blending
moduopaque
olmadığında geçerlidir. Bu yöntemlerin hiçbiri kesin bir geometri oluşturmaz ancak genellikle yeterince iyidirler.
Olası üç şeffaflık modu şunlardır:
default
: Şeffaf nesne,culling
modu dikkate alınarak normal şekilde oluşturulur.twoPassesOneSide
: Şeffaf nesne önce derinlik arabelleğinde, ardından tekrarcullling
renk moduna göre renk arabelleğinde oluşturulur. Bu işlem, aşağıda gösterildiği gibi şeffaf nesnenin yalnızca yarısını etkili bir şekilde oluşturur.twoPassesTwoSides
: şeffaf nesne renk arabelleğinde iki kez oluşturulur: önce arka yüzleri, ardından ön yüzleri. Bu mod, aşağıda gösterildiği gibi sıralama sorunlarını azaltırken veya ortadan kaldırırken iki yüz grubunu da oluşturmanıza olanak tanır. Daha iyi etki içintwoPassesTwoSides
doubleSided
ile birleştirilebilir.
material {
transparency : twoPassesOneSide
}
Maske Eşiği
- Tür
number
- Değer
0.0
ile1.0
arasında bir değer. Varsayılan olarak0.4
değerine ayarlanır.- Açıklama
blending
modumasked
olarak ayarlandığında parçaların silinmemesi gereken minimum alfa değerini belirler. Harmanlama modumasked
olmadığında bu değer yok sayılır. Bu değer, alfa maskeli nesnelerin görünümünü kontrol etmek için kullanılabilir.
material {
blending : masked,
maskThreshold : 0.5
}
gölgeÇarpanı
- Tür
boolean
- Değer
true
veyafalse
. Varsayılan olarakfalse
değerine ayarlanır.- Açıklama
- Yalnızca
unlit
gölgelendirme modelinde kullanılabilir. Bu özellik etkinse malzeme tarafından hesaplanan nihai renk gölgeleme faktörü (veya görünürlük) ile çarpılır. Bu, şeffaf gölge alma nesneleri (örneğin, Artırılmış Gerçeklik'te görünmez bir yer düzlemi) oluşturmaya olanak tanır.
material {
name : "Invisible shadow plane",
shadingModel : unlit,
shadowMultiplier : true,
blending : transparent
}
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
// baseColor defines the color and opacity of the final shadow
material.baseColor = vec4(0.0, 0.0, 0.0, 0.7);
}
}
varyantFiltre
- Tür
string
dizisi- Değer
- Her giriş
dynamicLighting
,directionalLighting
,shadowReceiver
veyaskinning
olmalıdır. - Açıklama
- Uygulamanın hiçbir zaman ihtiyaç duymayacağı gölgelendirici varyantlarının listesini belirtmek için kullanılır. Bu gölgelendirici varyantları kod oluşturma aşamasında atlanarak malzemenin genel boyutu küçültülür. Bazı varyantların otomatik olarak filtrelenebileceğini unutmayın. Örneğin, bir
unlit
malzemesi derlenirken aydınlatmayla ilgili tüm varyantlar (directionalLighting
vb.) filtrelenir. Varyant filtresini kullanırken dikkatli olun. Çalışma zamanında gereken bir varyantın filtrelenmesi çökmeye neden olabilir.
Varyantların açıklaması: - directionalLighting
, sahnede bir yön ışığı olduğunda kullanılır - dynamicLighting
, sahnede yönlü olmayan bir ışık (nokta, nokta vb.) bulunduğunda kullanılır - shadowReceiver
, bir nesne gölge aldığında
kullanılabilir skinning
- bir nesne GPU ciltleme işlemi ile canlandırıldığında kullanılır
skinning
material {
name : "Invisible shadow plane",
shadingModel : unlit,
shadowMultiplier : true,
blending : transparent,
variantFilter : [ skinning ]
}
Köşe bloğu
Köşe blokları isteğe bağlıdır ve malzemenin tepe noktası gölgelendirme aşamasını kontrol etmek için kullanılabilir. Köşe bloku geçerli bir ESSL 3.0 kodu (OpenGL ES 3.0'da desteklenen GLSL sürümünü) içermelidir. Köşe bloğunda birden fazla işlev oluşturabilirsiniz ancak materialVertex
işlevini bildirmeniz gerekir:
vertex {
void materialVertex(inout MaterialVertexInputs material) {
// vertex shading code
}
}
Bu işlev, gölgelendirme sistemi tarafından çalışma zamanında otomatik olarak çağrılır ve size MaterialVertexInputs
yapısını kullanarak malzeme özelliklerini okuma ve değiştirme olanağı tanır. Yapının tam tanımını Malzeme tepe noktaları girişleri bölümünde bulabilirsiniz.
Bu yapıyı, özelleştirilebilen değişkenlerinizi/birlikte çalışabilirliklerinizi hesaplamak veya özelliklerin değerini değiştirmek için kullanabilirsiniz. Örneğin, aşağıdaki tepe noktalarındaki bloklar hem rengi hem de UV koordinatlarını zamanla değiştirir:
material {
requires : [uv0, color]
}
vertex {
void materialVertex(inout MaterialVertexInputs material) {
material.color *= sin(getTime());
material.uv0 *= sin(frameUniforms.time);
}
}
MaterialVertexInputs
yapısına ek olarak, gölgelendirme gölgelendirme kodunuz Genel gölge API'leri bölümünde listelenen tüm herkese açık API'leri kullanabilir.
Malzeme köşe noktası girişleri
struct MaterialVertexInputs {
float4 color; // if the color attribute is required
float2 uv0; // if the uv0 attribute is required
float2 uv1; // if the uv1 attribute is required
float3 worldNormal; // only if the shading model is not unlit
float4 worldPosition; // always available
// variable* names are replaced with actual names
float4 variable0; // if 1 or more variables is defined
float4 variable1; // if 2 or more variables is defined
float4 variable2; // if 3 or more variables is defined
float4 variable3; // if 4 or more variables is defined
};
Parça bloğu
Parça bloğu, malzemenin parça gölgelendirme aşamasını kontrol etmek için kullanılmalıdır. Parça bloğu geçerli bir ESSL 3.0 kodu (OpenGL ES 3.0'da desteklenen GLSL sürümü) içermelidir. Köşe bloğunda birden fazla işlev oluşturabilirsiniz ancak material
işlevini bildirmeniz gerekir:
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
// fragment shading code
}
}
Bu işlev, gölgelendirme sistemi tarafından çalışma zamanında otomatik olarak çağrılır ve size MaterialInputs
yapısını kullanarak malzeme özelliklerini okuma ve değiştirme olanağı tanır. Yapının tam tanımını Materyal parça girişleri bölümünde bulabilirsiniz. Yapının çeşitli üyelerinin tam tanımını bu dokümanın Materyal modeller bölümünde bulabilirsiniz.
material()
işlevinin amacı, seçilen gölgeleme modeline özgü malzeme özelliklerini hesaplamaktır. Örneğin, standart ışıklandırma gölgelendirme modelini kullanarak parlak kırmızı bir metal oluşturan bir parça bloğunu aşağıda görebilirsiniz:
fragment {
void material(inout MaterialInputs material) {
prepareMaterial(material);
material.baseColor.rgb = vec3(1.0, 0.0, 0.0);
material.metallic = 1.0;
material.roughness = 0.0;
}
}
hazır Malzeme işlevi
material()
işlevinden çıkmadan önce prepareMaterial(material)
işlevini çağırmanız gerektiğini unutmayın. Bu prepareMaterial
işlevi, malzeme modelinin dahili durumunu ayarlar. Parça API'leri bölümünde açıklanan bazı API'lere (örneğin, shading_normal
gibi) yalnızca prepareMaterial()
çağrıldıktan sonra erişilebilir.
Malzeme parçası girişleri bölümünde açıklanan şekilde normal
özelliğinin, prepareMaterial()
çağrısından önce değiştirildiğinde de etkisi olduğunu unutmamak da önemlidir. normal
özelliğini düzgün bir şekilde değiştiren parçalı plastik uygulamak için düzgün bir şekilde değiştiren parça parça gölgelendirici örneği aşağıda verilmiştir:
fragment {
void material(inout MaterialInputs material) {
// fetch the normal in tangent space
vec3 normal = texture(materialParams_normalMap, getUV0()).xyz;
material.normal = normal * 2.0 - 1.0;
// prepare the material
prepareMaterial(material);
// from now on, shading_normal, etc. can be accessed
material.baseColor.rgb = vec3(1.0, 0.0, 0.0);
material.metallic = 0.0;
material.roughness = 1.0;
}
}
Malzeme parçası girişleri
struct MaterialInputs {
float4 baseColor; // default: float4(1.0)
float4 emissive; // default: float4(0.0)
// no other field is available with the unlit shading model
float roughness; // default: 1.0
float metallic; // default: 0.0, not available with cloth
float reflectance; // default: 0.5, not available with cloth
float ambientOcclusion; // default: 0.0
// not available when the shading model is cloth
float clearCoat; // default: 1.0
float clearCoatRoughness; // default: 0.0
float3 clearCoatNormal; // default: float3(0.0, 0.0, 1.0)
float anisotropy; // default: 0.0
float3 anisotropyDirection; // default: float3(1.0, 0.0, 0.0)
// only available when the shading model is cloth
float3 sheenColor; // default: sqrt(baseColor)
float3 subsurfaceColor; // default: float3(0.0)
// not available when the shading model is unlit
// must be set before calling prepareMaterial()
float3 normal; // default: float3(0.0, 0.0, 1.0)
}
Gölgeli herkese açık API'lar
Türler
GLSL türleri doğrudan kullanılabilir (vec4
veya mat4
) ancak aşağıdaki tür takma adlarının kullanılmasını öneririz:
Ad | GLSL türü | Açıklama |
---|---|---|
olma2 | bvec2 | 2 boole vektörü |
bool3 | bvec3 | 3 boole vektörü |
olma4 | bvec4 | 4 boole vektörü |
int2 | Icc2 | 2 tam sayıdan oluşan vektör |
int3 | ivec | 3 tam sayıdan oluşan bir vektör |
int4 | 4c | 4 tam sayıdan oluşan vektör |
uint2 | üvec2 | İmzasız 2 tam sayı vektörü |
uint3 | üvec3 | İmzasız 3 tam sayı vektörü |
uint 4 | U4c | 4 imzasız tam sayı |
kayan2 | kayan noktalı2 | 2 kayandan bir vektör |
kayan3 | kayan noktalı3 | 3 yüzen vektör |
kayan4 | kayan noktalı4 | 4 yüzen vektör |
kayan4x4 | mat4 | 4x4 yüzen matris |
kayan3x3 | mat3 | 3x3 kayan matris |
Matematik
Ad | Tür | Açıklama |
---|---|---|
PI | kayan noktalı | \(\pi\)değerini temsil eden bir sabit değer |
HALF_PI | kayan noktalı | \(\frac{\pi}{2}\)değerini temsil eden bir sabit değer |
doygunluk(kayan x) | kayan noktalı | Belirtilen değeri 0,0 ile 1,0 arasında birleştirir |
pow5(kayan x) | kayan noktalı | Hesaplamalar \(x^5\) |
kare(kayan x) | kayan noktalı | Hesaplamalar \(x^2\) |
max3(kayan3 v) | kayan noktalı | Belirtilen float3 değerinin maksimum değerini döndürür |
mulMat4x4Kaydırma 3(kayan4x4 m, kayan3 v) | kayan noktalı4 | İade \(m * v\) |
mulMat3x3Kayan | kayan noktalı4 | İade \(m * v\) |
Matrisler
Ad | Tür | Açıklama |
---|---|---|
getViewFromWorldMatrix() | kayan noktalı 4x | Dünya uzayından gözlem/göz alanına dönüşen matris |
getWorldFromViewMatrix() | kayan noktalı 4x | Görüntüleme/göz alanından uzaya dönüşen matris |
getClipFromViewMatrix() | kayan noktalı 4x | Görünüm/göz alanından uzaya (NDC) dönüşen matris |
getViewFromClipMatrix() | kayan noktalı 4x | Klipten (NDC) alana, görüntüleme/göz alanına dönüştüren matris |
getClipFromWorldMatrix() | kayan noktalı 4x | Dünyadan klip (NDC) alanına dönüşen matris |
Kare sabitleri
Ad | Tür | Açıklama |
---|---|---|
getResolution() | kayan noktalı4 | Piksel cinsinden görünümün çözünürlüğü: width , height , 1 / width , 1 / height |
getWorldCameraPosition() | kayan noktalı3 | Kameranın/gözün dünyanın uzaydaki konumu |
getTime() | kayan noktalı | Sceneform motoru başlatıldıktan sonraki saniye cinsinden süre (hassas kaybı önlemek için) sıfırlanabilir |
getExposure() | kayan noktalı | Kameranın fotometrik olarak pozlanması |
getEV100() | kayan noktalı | Kameranın ISO 100'de maruz kalma değeri |
Yalnızca Vertex
Aşağıdaki API'ler yalnızca tepe noktası bloğunda kullanılabilir:
Ad | Tür | Açıklama |
---|---|---|
getPosition() | kayan noktalı4 | Alanda malzeme tarafından tanımlanan köşe noktası konumu (varsayılan: nesne/model alanı) |
getWorldFromModelMatrix() | kayan noktalı 4x | Model (nesne) alanından dünya alanına dönüşen matris |
getWorldFromModelNormalMatrix() | kayan nokta 3x3 | Normalleri model (nesne) alanından dünya alanına dönüştüren matris |
Yalnızca parça
Aşağıdaki API'ler yalnızca parça bloğunda kullanılabilir:
Ad | Tür | Açıklama |
---|---|---|
getWorldTangentFrame() yazın | kayan nokta 3x3 | Her sütunda, dünya alanındaki tepenin tangent (frame[0] ), bi-tangent (frame[1] ) ve normal (frame[2] ) değerini içeren matris. Malzeme, seyret haritası oluşturma için normal bir tanjant hesaplamıyorsa veya gölgelendirme anisotropik değilse bu matriste yalnızca normal geçerlidir. |
getWorldPosition() | kayan noktalı3 | Parçanın uzaydaki konumu |
getWorldViewVector() | kayan noktalı3 | Parça noktasından göze kadar uzaydaki normalleştirilmiş vektör |
getWorldNormalVector() | kayan noktalı3 | Yumru eşleştirmesinden sonra, dünya alanında normalleştirilmiş normal (prepareMaterial()
sonrası kullanılmalıdır) |
getWorldReflectedVector() | kayan noktalı3 | Görüntüleme vektörünün normal değerle yansıması (prepareMaterial() tarihinden sonra kullanılmalıdır) |
GETNdotV() | kayan noktalı | dot(normal,
view) öğesinin sonucu, her zaman kesinlikle 0'dan büyüktür (prepareMaterial() sonrasında kullanılmalıdır) |
getColor() | kayan noktalı4 | Renk özelliği gerekiyorsa parçanın etkileşimli rengi |
getUV0() | kayan noktalı2 | uv0 özelliği gerekiyorsa ilk interpolasyon UV koordinatları grubu |
getUV1() | kayan noktalı2 | uv1 özelliği gerekiyorsa ilk interpolasyon UV koordinatları grubu |
intersTonemap(face3) | kayan noktalı3 | Ters ton eşleme operatörünü, belirtilen doğrusal sRGB rengine uygular. Bu işlem, yaklaşık bir |
invertTonemapSRGB(kayan3) | kayan noktalı3 | Ters ton eşleme operatörünü, belirtilen doğrusal olmayan sRGB rengine uygular. Bu işlem yaklaşık bir tahmin olabilir |
luminance(dalga3) | kayan noktalı | Belirtilen doğrusal sRGB renginin parlaklığını hesaplar |
Malzeme modelleri
Düzenli materyalde aşağıdaki materyal modellerinden biri kullanılabilir:
- Basit (veya standart)
- Kumaş
- Aydınlatılmamış
Işık modeli
Işıklı model, Sceneform'un standart malzeme modelidir. Bu fiziksel tabanlı gölgeleme modeli, Unity 5, Unreal Engine 4, Madde Designer veya Marmoset Toolbag gibi diğer yaygın araç ve motorlarla iyi bir birlikte çalışabilirlik sunmak için tasarlanmıştır.
Bu malzeme modeli, çok sayıda metalik olmayan yüzey (dielektrik) veya metalik yüzeyleri (iletkenler) açıklamak için kullanılabilir.
Standart model kullanılarak oluşturulan malzemenin görünümü, aşağıdaki tabloda açıklanan özellikler kullanılarak kontrol edilir.
Standart modelin özellikleri
Özellik | Tanım |
---|---|
baseColor | Metalik yüzeyler için dağılmış albedo, metalik yüzeyler için spektral renk |
metalik | Bir yüzeyin dielektrik mi (0,0) yoksa iletken (1,0) olduğu. Genellikle ikili değer olarak kullanılır (0 veya 1) |
pürüzlük | Bir yüzeyin algılanan pürüzsüzlüğü (1,0) veya pürüzlüğü (0,0). Pürüzsüz yüzeyler keskin yansımalar gösterir |
yansıtma | Elektroelektrik yüzeyleri için normal vakada fresk yansıtma. Bu, yansımaların gücünü doğrudan kontrol eder |
clearCoat | Şeffaf kaplama katmanının gücü |
clearCoatRoughness | Şeffaf kaplama katmanının algılanan pürüzsüzlüğü veya pürüzlülüğü |
anisotropi | Tanjant veya akan yöndeki anisotropi miktarı |
anisotropyDirection | Yerel yüzey yönü |
ambientOcclusion | Bir yüzey noktasına ortam ışığının ne kadarının erişebileceğini tanımlar. Bu, 0,0 ile 1,0 arasında piksel başına bir gölge faktörüdür |
normal | Parça eşleme (normal eşleme) kullanılarak yüzeyi boğmak için kullanılan normal bir ayrıntı |
netCoatNormal | Parça eşleme (normal eşleme) kullanılarak palto katmanının yumuşatılması için kullanılan normal bir ayrıntı |
etkileyici | Yayıcı yüzeyleri (neonlar vb.) simüle etmek için ek dağılmış albedo Bu özellik, özellikle çiçek açma geçişli HDR ardışık düzeninde faydalıdır |
Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.
Özellik | Tür | Aralık | Not |
---|---|---|---|
baseColor | kayan noktalı4 | [0..1] | Önceden çarpılmış doğrusal RGB |
metalik | kayan noktalı | [0..1] | 0 veya 1 olmalıdır |
pürüzlük | kayan noktalı | [0..1] | |
yansıtma | kayan noktalı | [0..1] | > 0,35 değerlerini tercih et |
clearCoat | kayan noktalı | [0..1] | 0 veya 1 olmalıdır |
clearCoatRoughness | kayan noktalı | [0..1] | [0..0.6] ile yeniden eşleşiyor |
anisotropi | kayan noktalı | [-1,1] | Bu değer pozitif olduğunda anzotropi en iyi yöndedir |
anisotropyDirection | kayan noktalı3 | [0..1] | Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar |
ambientOcclusion | kayan noktalı | [0..1] | |
normal | kayan noktalı3 | [0..1] | Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar |
netCoatNormal | kayan noktalı3 | [0..1] | Doğrusal RGB, bir etki vektörünü tanjant alanında kodlar |
etkileyici | kayan noktalı4 | rgb=[0..1], a=[-n..n] | Alfa, doğrudan kullanıcının |
Taban rengi
baseColor
özelliği, bir nesnenin algılanan rengini tanımlar (bazen albedo olarak adlandırılır). baseColor
öğesinin etkisi, yüzeyin yapısına bağlıdır. Bu yüzey, Metalikik bölümünde açıklanan metallic
özelliği tarafından kontrol edilir.
- Metal olmayan (elektrikli)
Yüzenin dağınık rengini tanımlar. Gerçek dünya değerleri, değer 0 ile 255 arasında kodlanıyorsa genellikle [10..240] aralığında veya 0 ile 1 aralığında [0.04..0.94] aralığında bulunur. Metalik olmayan yüzeyler için temel renklere ilişkin birkaç örneği aşağıdaki tabloda bulabilirsiniz.
Metal sRGB Onaltılık Renk Kömürler 0,19, 0,19, 0,19 #323232 Lastik 0,21, 0,21, 0,21 #353535 Çamur 0,33, 0,24, 0,19 #553d31 Ahşap 0,53, 0,36, 0,24 #875c3c Bitki örtüsü 0,48, 0,51, 0,31 #7b824e Tuğla 0,58, 0,49, 0,46 #947d75 Kum 0,69, 0,66, 0,52 #b1a884 Beton 0,75, 0,75, 0,73 #c0bfbb - Metaller (iletkenler)
Yüzenin spektrum rengini tanımlar. Gerçek dünya değerleri, değer 0 ile 255 arasında kodlanıyorsa genellikle [170..255] aralığında veya 0 ile 1 aralığında [0.66..1.0] aralığında bulunur. Metalik yüzeyler için birkaç temel renk örneğini aşağıdaki tabloda bulabilirsiniz.
Metal sRGB Onaltılık Renk Silver 0,98, 0,98, 0,96 #faf9f5 Alüminyum 0,96, 0,96, 0,96 #f4f5f5 Titanyum 0,81, 0,78, 0,76 #cec8c2 Demir 0,76, 0,74, 0,73 #c0bdba Platinum 0,84, 0,82, 0,79 #d6d1c8 Gold 1,00, 0,87, 0,62 #fedc9d Brass 0,96, 0,89, 0,68 #f4e4ad Copper 0,98, 0,85, 0,72 #fbd8b8
Metalik
metallic
özelliği, yüzeyin metalik (iletken) bir yüzey mi yoksa metalik olmayan (elektrikli) bir yüzey mi olduğunu tanımlar. Bu özellik, 0 veya 1 olarak ayarlanmış ikili bir değer olarak kullanılmalıdır. Orta değerler, dokular kullanılırken farklı yüzey türleri arasında geçişler oluşturmak için gerçekten yararlıdır.
Bu özellik, yüzeylerin görünümünü önemli ölçüde değiştirebilir. Metalik olmayan yüzeylerde kromatik dağılmış yansıma ve renksiz spekülatif yansıma bulunur
(yansıyan ışık renk değiştirmez). Metalik yüzeylerde yaygın yansıma ve kromatik spekülatif yansıma yoktur (yansıyan ışık, baseColor
tarafından tanımlanan yüzeyin rengini alır).
metallic
efekti aşağıda gösterilmiştir (daha büyük bir sürümü görmek için resmi tıklayın).
Pürüzlülük
roughness
özelliği, yüzeyin algılanan pürüzsüzlüğünü kontrol eder. roughness
değeri 0 olarak ayarlandığında yüzey son derece pürüzsüz ve son derece parlak olur. Yüzeyin daha sert olması, yansımaların "bulanıklaştırıcı" olduğu anlamına gelir. Bu özellik, diğer motorlar ve araçlarda genellikle parlaklık olarak adlandırılır ve zorluğun (roughness = 1 - glossiness
) tam tersidir.
Ametal olmayan
roughness
alanının metalik olmayan yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Metaller
roughness
alanının metalik yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Yansıma
reflectance
özelliği yalnızca metalik olmayan yüzeyleri etkiler. Bu özellik, spektrum yoğunluğunu kontrol etmek için kullanılabilir. Bu değer, 0 ile 1 arasında tanımlanır ve yansıma yüzdesinin yeniden eşlenmesini sağlar. Örneğin, varsayılan 0,5 değeri, %4'lük bir yansıtmaya karşılık gelir. Yansıtma oranı az olan gerçek dünyadaki hiçbir materyal 0,35'ten (%2 yansıma) düşük olan değerlerden kaçınılmalıdır.
reflectance
alanının metalik olmayan yüzeyler üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Aşağıdaki grafikte ortak değerler ve bunların eşleme işleviyle nasıl ilişkili olduğu gösterilmektedir.
Aşağıdaki tabloda, çeşitli malzeme türleri için kabul edilebilir yansıma değerleri açıklanmaktadır (hiçbir gerçek malzemenin değeri %2'nin altında değildir).
Materyal | Yansıma | Mülk değeri |
---|---|---|
Su | %2 | 0,35 |
Kumaş | %4-5,6 | 0,5 - 0,59 |
Yaygın sıvılar | %2 ile %4 | 0,35 - 0,5 |
Yaygın taşlar | %5 - %16 | 0,56'dan 1,0'a |
Plastik, cam | %4 - %5 | 0,5 ila 0,56 |
Diğer dielektrik malzemeleri | %2 ile %5 | 0,35 - 0,56 |
Gözler | %2,5 | 0,39 |
Cilt | %2,8 | 0,42 |
Saç | %4,6 | 0,54 |
Dişler | %5,8 | 0,6 |
Varsayılan değer | %4 | 0.5 |
Kabanı temizle
Çok katmanlı malzemeler, özellikle bir taban katmanı üzerinde ince bir yarı şeffaf katman içeren malzemeler oldukça yaygındır. Araba boyaları, gazlı içecek kutuları, vernikli ahşap ve akrilik malzemeler buna örnek olarak verilebilir.
clearCoat
özelliği, malzemeleri iki katmanla açıklamak için kullanılabilir. Şeffaf kaplama katmanı her zaman izotropik ve nükleer enerjilidir. Aşağıdaki resimde, standart malzeme modeli (sol) ve şeffaf kaplama modeli (sağ) altındaki karbon fiber malzeme karşılaştırılmaktadır.
clearCoat
özelliği, şeffaf kaplama katmanının gücünü kontrol eder. Bu, 0 veya 1 olarak ayarlanmış bir ikili değer olarak değerlendirilmelidir. Orta değerler, yüzeyde şeffaf kaplama katmanlarına sahip olan ve olmayan parçalar arasında geçişleri kontrol etmek için yararlıdır.
clearCoat
ürününün pürüzlü bir metal üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Kaban pürüzlerini temizle
clearCoatRoughness
özelliği, roughness
özelliğine benzer ancak yalnızca şeffaf kaplama katmanı için geçerlidir. Ayrıca, açık kabanlar hiçbir zaman tamamen pürüzsüz olmadığından, 0 ile 1 arasındaki değer dahili olarak 0 ile 0,6 arasındaki bir pürüzlülük değeriyle yeniden eşleştirilir.
clearCoatRoughness
ürününün pürüzlü bir metal üzerindeki etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Anisotropi
Fırçalanmış metal gibi gerçek dünyaya ait birçok materyal yalnızca anisotropik yansıma modeli kullanılarak çoğaltılabilir. anisotropy
özelliği kullanılarak materyal, varsayılan izotropik modelden anisotropik modele değiştirilebilir. Aşağıdaki resimde, bir izotropik malzeme (sol) ve canlandırmalı malzeme (sağ) karşılaştırılmaktadır.
Değişken anisotropy
değerinin 0,0 (sol) - 1,0 (sağ) değerleri arasındaki kabaca bir alaşım üzerindeki etkisi gösterilir (daha büyük bir versiyonu görmek için resmi tıklayın).
Aşağıdaki resimde, anisotropik vurguların yönünün pozitif veya negatif değerler kullanılarak nasıl kontrol edilebileceği gösterilmektedir: pozitif değerler (sol) tanjant yönünde anatomiyi, büyük yönde negatif değerler (sağ) tanımlanmıştır.
Anisotropi yönü
anisotropyDirection
özelliği, belirli bir noktada yüzeyin yönünü tanımlar ve böylece, spekülatif vurguların şeklini kontrol eder. Genellikle bir dokudan gelen, yüzeyin yerel yönlerini kodlayan 3 değerin vektörü olarak belirtilir.
Yön haritası içeren bir metal üzerinde anisotropyDirection
oluşturmanın etkisi aşağıda gösterilmiştir (daha büyük bir sürümünü görmek için resmi tıklayın).
Yukarıdaki resmi oluşturmak için kullanılan yön haritası aşağıda gösterilmektedir.
Kapalı ortamda ortam
ambientOcclusion
özelliği, ortam ışığının ne kadarının bir yüzey noktasına erişilebileceğini tanımlar. 0,0 (tamamen gölgeli) ve 1,0 (tamamen ışıklı) arasındaki piksel başına bir gölge faktörüdür. Bu özellik yalnızca dolaylı dolaylı aydınlatmayı (resim tabanlı ışıklandırma) etkiler; yön, nokta ve spot ışıklar gibi doğrudan ışıkları veya spektrum ışığını etkilemez. Aşağıdaki resimde dağılmış ortam tıkanması (sol) ve onunla (sağ) olan malzemeler karşılaştırılmaktadır.
Normal
normal
özelliği, belirli bir noktada yüzeyin normal değerini tanımlar. Genellikle piksel başına özelliğin değiştirilmesine olanak tanıyan normal bir harita dokusundan gelir. Normal, tanjant alanında sağlanır. +Z, yüzeyin dışına işaret eder.
Örneğin, kapitone deri kaplı bir mobilya parçası oluşturmak istediğimizi düşünelim. Püsküllü deseni doğru şekilde göstermek için geometrinin modellenmesi için çok fazla üçgen gereklidir. Bu nedenle normal bir haritada yüksek poli dokumlu bir pasta pişiririz. Ardından, temel haritayı basitleştirilmiş bir örgüye uygulayabilirsiniz. Aşağıdaki resimde, normal eşleşme olmayan (sol) ve bununla (sağ) bir basit örgü karşılaştırılmaktadır.
normal
özelliğinin, kaba kaplama katmanını değil, temel katmanı etkilediğini unutmayın.
Mont önü normal
clearCoatNormal
özelliği, belirtilen noktada şeffaf kaplama katmanının normal değerini tanımlar. Başka bir normal
özelliğine benzer.
Yayma
emissive
özelliği, yüzeyin verdiği ek ışığın simülasyonunu yapmak için kullanılabilir. RGB renginin (doğrusal alanda) yanı sıra pozlama değeri (alfa kanalında) içeren bir float4
değeri olarak tanımlanır.
Pozlama değeri aslında kamera ayarlarının kombinasyonlarını gösterse de fotoğrafçılar tarafından genellikle ışık yoğunluğunu açıklamak için kullanılır. Bu nedenle kameralar, fotoğrafçılara pozlama ödemesi yaparak fazla veya az ışık gösterilen bir pozlama ücreti uygular. Bu ayar, sanatsal denetime ek olarak uygun pozlama sağlamak için de kullanılabilir (örneğin, kar kalınlığı %18'in ortasında griye çıkabilir).
Yayıcı malzemenin pozlama telafisi değeri, pozlama renginin mevcut pozlamadan daha parlak (pozitif değerler) veya daha koyu (negatif değerler) olması için zorlanabilir. Çiçek açma efekti etkinse pozitif bir Pozlama telafisi kullanmak, yüzeyi çiçek açmaya zorlayabilir.
Kumaş modeli
Önceden açıklanan tüm malzeme modelleri, hem makro olarak hem de mikro düzeyde yoğun yüzeyleri simüle etmek üzere tasarlanmıştır. Kıyafetler ve kumaşlar çoğunlukla olay ışığını emen ve dağıtan gevşek bağlantılı ipliklerden oluşur. Kumaş, sert yüzeylerle karşılaştırıldığında, ileri/geri dağılım sayesinde oluşan büyük çöküşe ve füzyon aydınlatması olan yumuşak spektrumdan oluşur. Bazı kumaşlarda iki tonlu spekülasyonlu renkler de vardır (örneğin kadifeler).
Aşağıdaki resimde, standart model (sol) ve bez modeli (sağ) kullanılarak oluşturulan kot kumaşları karşılaştırılmaktadır. Standart malzeme modelinin, kot pantolonu örneğinin (sol) görünümünü yakalayamadığına dikkat edin. Yüzey, bir kıyafetten çok giysiye benzer şekilde serttir (neredeyse plastiktir). Bu veri, aynı zamanda emilim ve yayılmanın neden olduğu yumuşak spektrumun, kumaşın inandırıcı bir şekilde yeniden oluşturulması açısından ne kadar önemli olduğunu da gösterir.
Kadife, bir malzeme modelinin ilginç bir kullanım alanıdır. Aşağıdaki resimde gösterildiği gibi, bu kumaş türü, öne ve arkaya yayıldığı için güçlü jant aydınlatması sergiler. Bu yayılma etkinlikleri, kumaşın yüzeyinde duran liflerden kaynaklanır. Olay ışığı, görünüm yönünün tersine yönden geldiğinde lifler ışığı dağıtacaktır. Benzer şekilde, olay yönü görüş yönüyle aynı yönde geldiğinde lifler ışığı arkaya dağıtır.
Sert yüzeyli malzeme modelleri tarafından hâlâ en iyi şekilde modellenen kumaş türlerinin olduğunu unutmayın. Örneğin deri, ipek ve saten, standart veya anisotropik malzeme modelleri kullanılarak yeniden oluşturulabilir.
Kumaş malzeme modeli, metalik ve yansıma hariç standart malzeme modu için önceden tanımlanmış tüm parametreleri kapsar. Aşağıdaki tabloda açıklanan iki ek parametre de mevcuttur.
Parametre | Tanım |
---|---|
sheenColor | İki tonlu spekülatif kumaş oluşturmak için spekülasyon tonu (varsayılan olarak \(\sqrt{baseColor}\)) |
altsurucuRenk | Dağınıklık ve emme işleminden sonra malzemenin dağılmasından kaynaklanan renk tonu |
Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.
Özellik | Tür | Aralık | Not |
---|---|---|---|
sheenColor | kayan noktalı3 | [0..1] | Doğrusal RGB |
altsurucuRenk | kayan noktalı3 | [0..1] | Doğrusal RGB |
Kadife benzeri bir malzeme oluşturmak için temel renk siyah (veya koyu renk) olarak ayarlanabilir. Kromatiklik bilgisi bunun yerine parlaklığın rengine göre ayarlanmalıdır. Kot, pamuk gibi daha sık kullanılan kumaşlar oluşturmak için kronize olması için temel rengi ve varsayılan parlaklığı kullanın ya da parlaklığı temel rengin parlaklığına ayarlayın.
Gölge rengi
sheenColor
özelliği, spekülatif yansımayı doğrudan değiştirmek için kullanılabilir. Kumaş görünümü üzerinde daha iyi bir kontrol sağlar ve iki tonlu spekülatif malzemeler oluşturma imkanı verir.
Aşağıdaki resimde mavi kumaşı (sol) ve (sağ) sarmalama ile karşılaştırmaktadır (büyük bir sürümünü görmek için resmi tıklayın).
Yüzey rengi
subsurfaceColor
özelliği fiziksel olarak bulunmaz ve belirli kumaş türlerinde parçalama, kısmi emme ve ışığın yeniden emisyonunu yok etmek için kullanılabilir. Bu, özellikle yumuşak kumaşlar üretmek için yararlıdır.
Aşağıdaki resimde subsurfaceColor
'in etkisi gösterilmektedir. Beyaz bez (sol sütun) ve kahverengi alt yüzeye sahip, çoğalmış beyaz bez (sağ sütun) gösterilir. Daha büyük bir sürümünü görmek için resmi tıklayın.
Aydınlatılmamış model
Işıklandırmasız malzeme modeli, tüm ışıklandırma hesaplamalarını kapatmak için kullanılabilir. Birincil amacı, küp haritası, harici içerik (video veya kamera akışı gibi), kullanıcı arayüzleri, görselleştirme/hata ayıklama gibi önceden ışıklandırılmış öğeleri oluşturmaktır. Aydınlatılmamış model aşağıdaki tabloda açıklanan yalnızca iki özelliği gösterir.
Özellik | Tanım |
---|---|
baseColor | Yüzey yayılımı rengi |
etkileyici | Yayıcı yüzeyleri simüle etmek için ek dağılmış renk. Bu özellik, çiçek açma pasosu bulunan bir HDR ardışık düzeninde çoğunlukla faydalı olur |
Her mülkün türü ve aralığı aşağıdaki tabloda açıklanmıştır.
Özellik | Tür | Aralık | Not |
---|---|---|---|
baseColor | kayan noktalı4 | [0..1] | Önceden çarpılmış doğrusal RGB |
etkileyici | kayan noktalı4 | rgb=[0..1], a=Yok | Önceden çarpan doğrusal RGB, alfa yoksayılır |
emissive
değeri, mevcut olduğunda baseColor
öğesine eklenir. emissive
özelliğinin başlıca kullanım alanı, HDR ardışık düzeni çiçek açma kartıyla yapılandırılmışsa aydınlatmalı bir yüzeyi çiçek açmaya zorlamaktır.
Aşağıdaki resimde, hata ayıklama bilgilerini oluşturmak için kullanılan aydınlatmalı malzeme modelinin bir örneği gösterilmektedir (daha büyük bir sürümünü görmek için resmi tıklayın).
Renkleri işleme
Doğrusal renkler
Renk verisi bir dokudan geliyorsa sRGB'den doğrusal'a otomatik donanım dönüştürmesinden yararlanmak için sRGB dokusu kullandığınızdan emin olun. Renk verileri, malzemeye parametre olarak aktarılırsa her renk kanalında aşağıdaki algoritmayı çalıştırarak sRGB'den doğrusala dönüştürebilirsiniz:
float sRGB_to_linear(float color) {
return color <= 0.04045 ? color / 12.92 : pow((color + 0.055) / 1.055, 2.4);
}
Alternatif olarak, aşağıda gösterilen daha ucuz ve daha az doğru olan iki sürümden birini de kullanabilirsiniz:
// Cheaper
linearColor = pow(color, 2.2);
// Cheapest
linearColor = color * color;
Önceden çarpılmış alfa
Bir renk, RGB bileşenleri alfa kanalıyla çarpılırsa önceden çarpılmış alfa kullanılır:
// Compute pre-multiplied color
color.rgb *= color.a;
Renk bir dokudan örneklenmişse doku verilerinin önceden çarpılmasını sağlayabilirsiniz. Android'de, Bit haritasından yüklenen tüm dokular varsayılan olarak önceden çarpılır.