def METHOD_NAME(
    self, ray_samples: RaySamples, density_embedding: Optional[TensorType] = None
) -> Dict[FieldHeadNames, TensorType]:
    outputs = {}
    for field_head in self.field_heads:
        encoded_dir = self.direction_encoding(ray_samples.frustums.directions)
        mlp_out = self.mlp_head(torch.cat([encoded_dir, density_embedding], dim=-1))  # type: ignore
        outputs[field_head.field_head_name] = field_head(mlp_out)
    return outputs