ОБНОВЛЕНО : посмотрите на содержимое Mars.sfa
внизу, чтобы узнать, как назначить .png
текстуры для 3D-модели.
Sceneform предоставляет определения материалов по умолчанию (.sfm
файлы), чтобы разработчикам было легко получать великолепные результаты.Разработчики, желающие глубоко настроить внешний вид своих активов, могут создавать свои собственные определения материалов (.mat
файлы) и применять их к своим активам, указав атрибут источника в определении ресурса.
The формат определения материала - это формат , основанный на JSON .На верхнем уровне определение материала состоит из 3 различных блоков, использующих нотацию объекта JSON.
material {
// material properties
}
vertex {
// vertex shader, THIS BLOCK CAN BE OPTIONAL
}
fragment {
// fragment shader
}
В следующем листинге кода показан пример правильного определения материала:
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;
}
}
Или фрагмент может выглядеть следующим образом:
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;
}
}
Или, например, посмотрите на этот пример файла, который называется Mars.sfa
:
{
materials: [
{
name: 'Mars_Atmosphere_Mat',
parameters: [
{
baseColorFactor: [1,1,1,1,],
},
{
baseColor: 'Mars_Atmosphere_Mat_baseColor',
},
{
diffuseColorFactor: null,
},
{
diffuseColor: null,
},
{
normal: null,
},
{
metallicFactor: 1,
},
{
roughnessFactor: 1,
},
{
specularFactor: null,
},
{
glossinessFactor: null,
},
{
specularGlossiness: null,
},
{
specularGlossinessCalculation: null,
},
{
metallicRoughness: null,
},
{
occlusion: null,
},
{
emissiveFactor: [0,0,0,1,],
},
{
emissive: null,
},
{
opacity: null,
},
],
source: 'build/sceneform_sdk/default_materials/gltf_material.sfm',
},
{
name: 'Mars_mat',
parameters: [
{
baseColorFactor: [1,1,1,1,],
},
{
baseColor: 'Mars_mat_baseColor',
},
{
diffuseColorFactor: null,
},
{
diffuseColor: null,
},
{
normal: 'Mars_mat_normal',
},
{
metallicFactor: 0.33000000000000002,
},
{
roughnessFactor: 0.85999999999999999,
},
{
specularFactor: null,
},
{
glossinessFactor: null,
},
{
specularGlossiness: null,
},
{
specularGlossinessCalculation: null,
},
{
metallicRoughness: null,
},
{
occlusion: null,
},
{
emissiveFactor: [0,0,0,1,],
},
{
emissive: null,
},
{
opacity: null,
},
],
source: 'build/sceneform_sdk/default_materials/gltf_material.sfm',
},
],
model: {
attributes: [
'Position',
'TexCoord',
'Orientation',
],
collision: {
skin_width: 0.75,
},
file: 'sampledata/models/Mars/Mars.gltf',
name: 'Mars',
recenter: true,
scale: 0.5,
},
samplers: [
{
file: 'sampledata/models/Mars/Mars_mat_baseColor.png',
name: 'Mars_mat_baseColor',
pipeline_name: 'Mars_mat_baseColor.png',
},
{
file: 'sampledata/models/Mars/Mars_mat_normal.png',
name: 'Mars_mat_normal',
params: {
usage_type: 'Normal',
},
pipeline_name: 'Mars_mat_normal.png',
},
{
file: 'sampledata/models/Mars/Mars_Atmosphere_Mat_baseColor.png',
name: 'Mars_Atmosphere_Mat_baseColor',
pipeline_name: 'Mars_Atmosphere_Mat_baseColor.png',
},
],
version: '0.54:1',
}