Add parameters for metallic and roughness back
This also makes them modifiable in the debug menu at runtime
This commit is contained in:
parent
c6ccedb970
commit
2c75d51278
5 changed files with 30 additions and 5 deletions
|
@ -43,6 +43,9 @@ class Material : public Asset {
|
|||
public:
|
||||
MaterialProperty colorProperty;
|
||||
|
||||
float metallic = 0.0f;
|
||||
float roughness = 0.5f;
|
||||
|
||||
GFXPipeline* static_pipeline = nullptr;
|
||||
GFXPipeline* skinned_pipeline = nullptr;
|
||||
GFXPipeline* capture_pipeline = nullptr;
|
||||
|
|
|
@ -91,6 +91,22 @@ void draw_lighting() {
|
|||
ImGui::Separator();
|
||||
}
|
||||
|
||||
ImGui::Text("Materials");
|
||||
ImGui::Separator();
|
||||
|
||||
for(auto& material : assetm->get_all<Material>()) {
|
||||
ImGui::PushID(material);
|
||||
|
||||
ImGui::TextDisabled("%s", material->path.c_str());
|
||||
|
||||
ImGui::DragFloat("Metallic", &material->metallic, 0.1f, 0.0f, 1.0f);
|
||||
ImGui::DragFloat("Roughness", &material->roughness, 0.1f, 0.0f, 1.0f);
|
||||
|
||||
ImGui::PopID();
|
||||
|
||||
ImGui::Separator();
|
||||
}
|
||||
|
||||
if(ImGui::Button("Reload shadows")) {
|
||||
engine->get_scene()->reset_shadows();
|
||||
}
|
||||
|
|
|
@ -201,8 +201,9 @@ ShaderSource MaterialCompiler::compile_material_fragment(Material& material, boo
|
|||
src += "layout(location = 4) in vec4 fragPosLightSpace;\n";
|
||||
src += "layout(location = 5) in mat3 in_tbn;\n";
|
||||
src += "layout(location = 14) in vec4 fragPostSpotLightSpace[max_spot_lights];\n";
|
||||
src += "layout(location = 13) in flat int inMaterialIndex;\n";
|
||||
|
||||
src += "#include \"common.glsl\"\n";
|
||||
src += "#include \"common.glsl\"\n";
|
||||
src += "#include \"rendering.glsl\"\n";
|
||||
|
||||
material.bound_textures.clear();
|
||||
|
@ -289,8 +290,8 @@ ShaderSource MaterialCompiler::compile_material_fragment(Material& material, boo
|
|||
}
|
||||
|
||||
src += "vec3 final_diffuse_color = from_srgb_to_linear(Color);\n";
|
||||
src += "float final_roughness = 0.5;\n";
|
||||
src += "float final_metallic = 0.0;\n";
|
||||
src += "float final_roughness = scene.materials[inMaterialIndex].info.y;\n";
|
||||
src += "float final_metallic = scene.materials[inMaterialIndex].info.x;\n";
|
||||
src += "vec3 final_normal = in_normal;\n";
|
||||
|
||||
src +=
|
||||
|
|
|
@ -422,6 +422,9 @@ void renderer::render_camera(GFXCommandBuffer* command_buffer, Scene& scene, Obj
|
|||
create_mesh_pipeline(*material.handle);
|
||||
|
||||
if(!material_indices.count(material.handle)) {
|
||||
sceneInfo.materials[numMaterialsInBuffer].info.x = material->metallic;
|
||||
sceneInfo.materials[numMaterialsInBuffer].info.y = material->roughness;
|
||||
|
||||
material_indices[material.handle] = numMaterialsInBuffer++;
|
||||
}
|
||||
}
|
||||
|
@ -479,7 +482,7 @@ void renderer::render_camera(GFXCommandBuffer* command_buffer, Scene& scene, Obj
|
|||
command_buffer->bind_texture(texture_to_bind, index);
|
||||
}
|
||||
|
||||
command_buffer->draw_indexed(part.index_count, part.index_offset, part.vertex_offset, 0);
|
||||
command_buffer->draw_indexed(part.index_count, part.index_offset, part.vertex_offset, material_indices.at(*mesh.materials[material_index]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ layout (location = 2) out vec2 outUV;
|
|||
layout (location = 4) out vec4 fragPosLightSpace;
|
||||
layout (location = 5) out mat3 outTBN;
|
||||
layout (location = 14) out vec4 fragPostSpotLightSpace[max_spot_lights];
|
||||
layout (location = 13) out flat int outMaterialIndex;
|
||||
|
||||
struct Material {
|
||||
vec4 color, info;
|
||||
|
@ -120,4 +121,5 @@ void main() {
|
|||
#endif
|
||||
#endif
|
||||
outTBN = TBN;
|
||||
outMaterialIndex = gl_BaseInstance;
|
||||
}
|
||||
|
|
Reference in a new issue