namespace Msp {
namespace GL {
+class Texture2D;
+
+/**
+A physically-based material using the Cook-Torrance BRDF.
+
+The material is characterized by base color, metalness and roughness. Fully
+metallic materials have no diffuse reflection and their specular reflection is
+tinted by the base color. For fully dielectric materials base color determines
+the color of the diffuse reflection; specular reflection is untinted.
+Roughness affects how blurry specular reflections are.
+*/
class PbrMaterial: public Material
{
public:
static ActionMap shared_actions;
public:
- Loader(PbrMaterial &);
Loader(PbrMaterial &, Collection &);
private:
Property<float> roughness;
Property<float> occlusion;
Property<Color> emission;
- bool receive_shadows;
+ const Texture2D &fresnel_lookup;
+ const Sampler &fresnel_sampler;
+
+ static const Tag texture_tags[];
public:
PbrMaterial();
+private:
+ static const Texture2D &get_or_create_fresnel_lookup();
+
protected:
- virtual std::string create_program_source() const;
+ virtual void fill_program_info(std::string &, std::map<std::string, int> &) const;
public:
- virtual void attach_textures_to(Texturing &, ProgramData &) const;
+ virtual const Tag *get_texture_tags() const { return texture_tags; }
+ virtual const Texture *get_texture(Tag) const;
+ virtual const Sampler *get_sampler(Tag) const;
void set_base_color(const Color &);
void set_base_color_map(const Texture *);
void set_occlusion_map(const Texture *);
void set_emission(const Color &);
void set_emission_map(const Texture *);
- void set_receive_shadows(bool);
};
} // namespace GL