diff --git a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.jpg b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.jpg new file mode 100644 index 0000000..b9ddb51 Binary files /dev/null and b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.jpg differ diff --git a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.png b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.png deleted file mode 100644 index 5a56e01..0000000 Binary files a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_AO.png and /dev/null differ diff --git a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg new file mode 100644 index 0000000..c4f1fb5 Binary files /dev/null and b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg differ diff --git a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.png b/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.png deleted file mode 100644 index 40d8a94..0000000 Binary files a/data/models/wooden_boxbarrel/wooden box and barrel/boxes_DefaultMaterial_Roughness.png and /dev/null differ diff --git a/data/models/wooden_boxbarrel/wooden_box_and_barrel.mtl b/data/models/wooden_boxbarrel/wooden_box_and_barrel.mtl index 682b8a8..144237d 100644 --- a/data/models/wooden_boxbarrel/wooden_box_and_barrel.mtl +++ b/data/models/wooden_boxbarrel/wooden_box_and_barrel.mtl @@ -12,5 +12,7 @@ d 1.000000 illum 2 map_Bump wooden box and barrel/boxes_DefaultMaterial_Normal.png map_Kd wooden box and barrel/boxes_DefaultMaterial_BaseColor.png -map_Ns wooden box and barrel/boxes_DefaultMaterial_Roughness.png +map_Pr wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg map_Pm wooden box and barrel/boxes_DefaultMaterial_Metallic.jpg +map_Ps wooden box and barrel/boxes_DefaultMaterial_AO.jpg +map_RMA wooden box and barrel/boxes_DefaultMaterial_ORM.jpg diff --git a/data/shaders/pbrFragment.glsl b/data/shaders/pbrFragment.glsl index 8c16aec..9730cd4 100644 --- a/data/shaders/pbrFragment.glsl +++ b/data/shaders/pbrFragment.glsl @@ -12,14 +12,14 @@ uniform int tick; //vec3 WorldPos = vec3(0.0f, 0.0f, 0.0f); //vec3 CameraPos = vec3(0.0f, 0.0f, -1.0f); //TODO: make these values rely on associated textures. -vec3 albedo = vec3(0.8f, 0.8f, 0.8f); +//vec3 albedo = vec3(0.8f, 0.8f, 0.8f); //float metallic = sin(tick / 60 * 0.3f); //float roughness = sin(tick / 60 * 0.3f); //float ao = sin(tick / 60 * 0.8f); //float metallic = 0.3f; -float roughness = 0.3f; +//float roughness = 0.3f; float ao = 0.8f; // Handle multiple textures from the Mesh Object (Might not even be used) @@ -29,6 +29,10 @@ uniform sampler2D texture_specular1; uniform sampler2D texture_specular2; uniform sampler2D texture_metalness1; uniform sampler2D texture_metalness2; +uniform sampler2D texture_roughness1; +uniform sampler2D texture_roughness2; +uniform sampler2D texture_sheen1; +uniform sampler2D texture_sheen2; // PBR functions from learnOpenGL.com const float PI = 3.14159265359; @@ -73,9 +77,9 @@ float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) void main() { - //albedo = vec3(texture(texture_diffuse1, ourTexCoord)); - // float metallic = 1 - texture(texture_metalness1, ourTexCoord).r; + vec3 albedo = vec3(texture(texture_diffuse1, ourTexCoord)); float metallic = 1 - texture(texture_metalness1, ourTexCoord).r; + float roughness = 1 - texture(texture_roughness1, ourTexCoord).r; // Establish ambient lighting float ambientStrength = 0.1; @@ -123,5 +127,5 @@ void main() color = color / (color + vec3(1.0)); color = pow(color, vec3(1.0/2.2)); - FragColor = texture(texture_diffuse1, ourTexCoord) * vec4(color, 0.0); + FragColor = vec4(color, 0.0); } diff --git a/src/Mesh.cpp b/src/Mesh.cpp index 61a5975..01aa5ee 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -43,6 +43,8 @@ void Mesh::draw(ShaderLoader &shader) { unsigned int diffuseNr = 1; unsigned int specularNr = 1; unsigned int metalNr = 1; + unsigned int roughNr = 1; + unsigned int sheenNr = 1; for (unsigned int i = 0; i < textures.size(); i++) { // activate proper texture unit before binding glActiveTexture(GL_TEXTURE0 + i); @@ -55,9 +57,10 @@ void Mesh::draw(ShaderLoader &shader) { number = std::to_string(specularNr++); else if (name == "texture_metalness") number = std::to_string(metalNr++); - - error.log(("material." + name + number).c_str() + std::string(" ") + - std::to_string(i) + " " + std::to_string(textures[i].id)); + else if (name == "texture_roughness") + number = std::to_string(roughNr++); + else if (name == "texture_sheen") + number = std::to_string(sheenNr++); shader.setInt((name + number).c_str(), i); glBindTexture(GL_TEXTURE_2D, textures[i].id); diff --git a/src/Model.cpp b/src/Model.cpp index 93281bf..e3f18ee 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -103,12 +103,13 @@ Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene) { std::vector metalMaps = loadMaterialTextures( material, aiTextureType_METALNESS, "texture_metalness"); textures.insert(textures.end(), metalMaps.begin(), metalMaps.end()); + std::vector roughMaps = loadMaterialTextures( + material, aiTextureType_DIFFUSE_ROUGHNESS, "texture_roughness"); + textures.insert(textures.end(), roughMaps.begin(), roughMaps.end()); + std::vector sheenMaps = loadMaterialTextures( + material, aiTextureType_AMBIENT_OCCLUSION, "texture_sheen"); + textures.insert(textures.end(), sheenMaps.begin(), sheenMaps.end()); } - error.log("Model"); - error.log(textures[0].path); - error.log(std::to_string(textures[0].id)); - error.log(textures[1].path); - error.log(std::to_string(textures[1].id)); return Mesh(vertices, indecies, textures); } @@ -151,7 +152,6 @@ unsigned int Model::loadTextureFromFile(std::string file, std::string directory) { // Use sdl2_image to load the texture. unsigned int texture; - error.log(file); SDL_Surface *image = IMG_Load((directory + file).c_str()); if (image == nullptr) { error.crash("SDL2_image was unable to load a texture", IMG_GetError());