Memory, time, and parallelism costs
Memory cost (m) sets how many kibibytes of RAM each hash requires; time cost (t) sets how many passes the algorithm makes over that memory; parallelism (p) sets how many independent lanes run at once. Raising m is the strongest defense against custom cracking hardware since it forces attackers to buy RAM per guess, not just CPU time.