SpiecsEngine
 
Loading...
Searching...
No Matches

◆ LoadMaterial()

std::shared_ptr< Material > Spices::GltfLoader::LoadMaterial ( const GltfMaterials::Item & material,
GltfImages * images )
static

Load a Material from Gltf file material component.

Parameters
[in]materialGltf file material component item.
[in]imagesGltf Images.
Returns
Returns Material.
Attention
This material not in ResourcesPool.

Definition at line 203 of file GltfLoader.cpp.

204 {
206
207 std::stringstream ss;
208 ss << "BasePassRenderer.Mesh." << material.name;
209
210 if(ResourcePool<Material>::Has(ss.str()))
211 {
212 return ResourcePool<Material>::Access(ss.str());
213 }
214
215 auto outMaterial = std::make_shared<Material>();
216
217 outMaterial->SetName(ss.str());
218
219 outMaterial->PushToShaderPath("task", "BasePassRenderer.Mesh.Default");
220 outMaterial->PushToShaderPath("mesh", "BasePassRenderer.Mesh.Default");
221 outMaterial->PushToShaderPath("frag", "BasePassRenderer.Mesh.PBRGltf");
222 outMaterial->PushToShaderPath("rchit", "BasePassRenderer.Mesh.PBRGltf");
223
224 outMaterial->PushToTextureParams("baseColorTexture", {"Texture2D", material.baseColorTexture.has_value() ? images->m_ImagesData[material.baseColorTexture.value()].uri : "" });
225 outMaterial->PushToTextureParams("metallicRoughnessTexture", {"Texture2D", material.metallicRoughnessTexture.has_value() ? images->m_ImagesData[material.metallicRoughnessTexture.value()].uri : "" });
226 outMaterial->PushToTextureParams("normalTexture", {"Texture2D", material.normalTexture.has_value() ? images->m_ImagesData[material.normalTexture.value()].uri : ""});
227 outMaterial->PushToTextureParams("emissiveTexture", {"Texture2D", material.emissiveTexture.has_value() ? images->m_ImagesData[material.emissiveTexture.value()].uri : "" });
228 outMaterial->PushToTextureParams("occlusionTexture", {"Texture2D", material.occlusionTexture.has_value() ? images->m_ImagesData[material.occlusionTexture.value()].uri : "" });
229
230 outMaterial->PushToConstParams("baseColorFactor", {"float4", material.baseColorFactor});
231 outMaterial->PushToConstParams("emissiveFactor", {"float4", material.emissiveFactor});
232
233 outMaterial->PushToConstParams("maxRayDepth", {"int", 3});
234 outMaterial->PushToConstParams("maxLightDepth", {"int", 2});
235 outMaterial->PushToConstParams("maxShadowDepth", {"int", 1});
236
237 ResourcePool<Material>::Registry(ss.str(), outMaterial);
238
239 return ResourcePool<Material>::Access(ss.str());
240 }
#define SPICES_PROFILE_ZONE
static bool Has(const std::string &name)
Determine if specific resource is exist.
static void Registry(const std::string &name, std::shared_ptr< T > resource)
Registry a resource to this Pool.
static std::shared_ptr< T > Access(const std::string &path)
Access a resource by path directly. Do nothing if resource is not found.

References Spices::GltfMaterials::Item::name.