Pass an array to from (or generateSlugsFrom()) and the columns are concatenated using the slug separator before Str::slug runs.
With the attribute:
#[Sluggable(from: ['first_name', 'last_name'])]
Or via the trait:
SlugOptions::create()->generateSlugsFrom(['first_name', 'last_name']);
The result joins the columns with the separator before slugifying.
$author = Author::create(['first_name' => 'John', 'last_name' => 'Doe']);
$author->slug;
For a slug derived from arbitrary logic (concatenations, related models, conditional values), use the trait and pass a closure to generateSlugsFrom(). See A closure as the source field.