refactor IMaterial