One way is define all the fields & then control with acl.
Alternative for classic ui is using a listener on the particular field you want to hide and then hide the field based on the path. To do this, create a listeners node of type nt:unstructured under the field (e.g. /apps/dam/content/asseteditors/image/jpeg/formitems/person/listeners) and set the beforeloadcontent property something like:
function(f, r, p) { if (p.indexOf("/content/dam/geometrixx/") == 0) { f.hide(); } return true; }
This will hide this field for assets under /content/dam/geometrixx. You could adjust this to meet other requirements.
Tryout Apply same principal to touch ui but never tried personally.