Add texture handling and refactor material functions
Added a new function `blinn_phong_specular_exponent_to_roughness` in `BSDF.h` to convert a specular exponent to roughness. Added a `textures` member to the `shading_context_t` structure in `Material.h` for passing texture information during shading. Added a new member `textures` in the `light_shading_context_t` structure in `Light.h` to hold texture information. Added inline functions in `Texture.h` for handling texture entities, including `invalid_texture_entity`, `is_texture_entity_valid`, and `get_texture`. Changed the texture-related members in `simple_lit_properties_t` in `SimpleLit.h` from pointers to `texture_entity_t` to better manage texture entities. Changed the `sample_material_bsdf` and `sample_material_bsdf_pdf` functions in `Material.h` to accept a `shading_context_t` instead of individual parameters. Changed the `mesh_load` function in `Mesh.c` to use the new roughness calculation and texture entity handling. Changed the `path_trace` function in `PathTracing.c` to use the new structure and functions for handling materials and textures. Refactored the `sample_material_bsdf` and `sample_material_bsdf_pdf` functions in `Material.c` to utilize the new `shading_context_t` structure. Updated the `material_collection_init` function in `Material.h` to reflect changes in the material sampling functions. Updated the `evaluate_bsdf_directional` and `evaluate_bsdf_const_sky` functions to use the new shading context structure. Adjusted the `simple_lit_data_default` function in `SimpleLit.c` to work with the new texture handling approach. Added texture entity handling in `Texture.c` for managing invalid texture entities.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "Algorithm/Sobol.h"
|
||||
#include "Common.h"
|
||||
#include "Rendering/Texture.h"
|
||||
|
||||
#define PROPERTY_SIZE 64
|
||||
#define INVALID_MATERIAL_ID 255
|
||||
@@ -14,6 +15,8 @@ typedef struct
|
||||
vec3s wi;
|
||||
vec3s wo;
|
||||
vec2s uv;
|
||||
|
||||
const texture_collection_t* textures;
|
||||
} shading_context_t;
|
||||
|
||||
typedef void (*compute_surface_data_f)(const shading_context_t* context, const void* properties, void* surface_data_out);
|
||||
@@ -53,8 +56,8 @@ void material_collection_free(material_collection_t* materials);
|
||||
|
||||
material_entity_t material_create(const void* properties, size_t properties_size, compute_surface_data_f surface_data, sample_bsdf_f sample, sample_bsdf_pdf_f sample_pdf, evaluate_bsdf_f evaluate, material_collection_t* collection);
|
||||
|
||||
vec3s sample_material_bsdf(const material_t* material, vec3s normal, vec3s wo, vec2s uv, uint32_t sample_index, uint32_t bounce, float* pdf_out);
|
||||
float sample_material_bsdf_pdf(const material_t* material, vec3s normal, vec3s wo, vec3s wi, vec2s uv);
|
||||
vec3s sample_material_bsdf(const material_t* material, const shading_context_t* context, uint32_t sample_index, uint32_t bounce, float* pdf_out);
|
||||
float sample_material_bsdf_pdf(const material_t* material, const shading_context_t* context);
|
||||
vec3s evaluate_material_bsdf(const material_t* material, const shading_context_t* context);
|
||||
|
||||
#endif // MATERIAL_H
|
||||
|
||||
@@ -18,9 +18,9 @@ typedef struct
|
||||
float roughness;
|
||||
float metallic;
|
||||
|
||||
const texture_t* albedo_texture;
|
||||
const texture_t* roughness_texture;
|
||||
const texture_t* metallic_texture;
|
||||
texture_entity_t albedo_texture;
|
||||
texture_entity_t roughness_texture;
|
||||
texture_entity_t metallic_texture;
|
||||
} simple_lit_properties_t;
|
||||
|
||||
void simple_lit_data_default(const shading_context_t* context, const void* properties, void* data_out);
|
||||
|
||||
Reference in New Issue
Block a user