use crate::core::bssrdf::BSSRDF; use crate::core::bxdf::{ BSDF, BxDF, CoatedConductorBxDF, CoatedDiffuseBxDF, ConductorBxDF, DielectricBxDF, DiffuseBxDF, HairBxDF, }; use crate::core::image::Image; use crate::core::material::{Material, MaterialEvalContext, MaterialTrait}; use crate::core::scattering::TrowbridgeReitzDistribution; use crate::core::spectrum::{Spectrum, SpectrumTrait}; use crate::core::texture::{GPUFloatTexture, GPUSpectrumTexture, TextureEvaluator}; use crate::spectra::{SampledSpectrum, SampledWavelengths}; use crate::utils::RelPtr; use crate::utils::math::clamp; #[repr(C)] #[derive(Clone, Copy, Debug)] pub struct ConductorMaterial { pub displacement: RelPtr, pub eta: RelPtr, pub k: RelPtr, pub reflectance: RelPtr, pub u_roughness: RelPtr, pub v_roughness: RelPtr, pub remap_roughness: bool, pub normal_map: *const Image, } impl MaterialTrait for ConductorMaterial { fn get_bsdf( &self, _tex_eval: &T, _ctx: &MaterialEvalContext, _lambda: &SampledWavelengths, ) -> BSDF { todo!() } fn get_bssrdf( &self, _tex_eval: &T, _ctx: &MaterialEvalContext, _lambda: &SampledWavelengths, ) -> Option { todo!() } fn can_evaluate_textures(&self, tex_eval: &dyn TextureEvaluator) -> bool { tex_eval.can_evaluate( &[self.u_roughness, self.v_roughness], &[self.eta, self.k, self.reflectance], ) } fn get_normal_map(&self) -> *const Image { todo!() } fn get_displacement(&self) -> RelPtr { todo!() } fn has_subsurface_scattering(&self) -> bool { todo!() } }