Пример #1
0
        public void ConvMaterial(FusMaterialPBR matComp)
        {
            if (_currentNode.Components == null)
            {
                _currentNode.Components = new List <SceneComponent>();
            }

            var effect = LookupMaterial(matComp);

            _currentNode.Components.Add(effect);
        }
Пример #2
0
        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);
        }