public void ConvMaterial(FusMaterialPBR matComp) { if (_currentNode.Components == null) { _currentNode.Components = new List <SceneComponent>(); } var effect = LookupMaterial(matComp); _currentNode.Components.Add(effect); }
private ShaderEffect LookupMaterial(FusMaterialPBR m) { if (_matMap.TryGetValue(m, out var sfx)) { return(sfx); } var vals = new MaterialValues(); if (m.HasNormalMap) { vals.NormalMap = m.NormalMap.Texture ?? null; vals.NormalMapIntensity = m.HasNormalMap ? m.NormalMap.Intensity : 0; } if (m.HasAlbedo) { vals.AlbedoColor = m.Albedo.Color; vals.AlbedoMix = m.Albedo.Mix; vals.AlbedoTexture = m.Albedo.Texture ?? null; } if (m.HasEmissive) { vals.EmissiveColor = m.Emissive.Color; vals.EmissiveMix = m.Emissive.Mix; vals.EmissiveTexture = m.Emissive.Texture ?? null; } if (m.HasSpecular) { vals.SpecularColor = m.Specular.Color; vals.SpecularMix = m.Specular.Mix; vals.SpecularTexture = m.Specular.Texture ?? null; vals.SpecularIntensity = m.Specular.Intensity; vals.SpecularShininess = m.Specular.Shininess; } vals.DiffuseFraction = m.DiffuseFraction; vals.FresnelReflectance = m.FresnelReflectance; vals.RoughnessValue = m.RoughnessValue; sfx = ShaderCodeBuilder.MakeShaderEffectFromShaderEffectPropsProto( new ShaderEffectProps { MatProbs = { HasAlbedo = m.HasAlbedo, HasAlbedoTexture = m.HasAlbedo && m.Albedo.Texture != null, HasSpecular = m.HasSpecular, HasSpecularTexture = m.HasSpecular && m.Specular.Texture != null, HasEmissive = m.HasEmissive, HasEmissiveTexture = m.HasEmissive && m.Emissive.Texture != null, HasNormalMap = m.HasNormalMap }, MatType = MaterialType.MaterialPbr, MatValues = vals }); sfx.Name = m.Name ?? ""; _matMap.Add(m, sfx); return(sfx); }