Pull out BSDF-specific stuff into its own class