First thing I would recommend is you create a complete requirements document outlining all the functional, non-functional features, and use cases of your software and then create a work breakdown structure. Typically this is done by an experienced project manager / software engineer, so I don't know if you have any background in this or if anyone in your current team does. When done right, it's your blueprint and timesheet for the project. When done poorly, you will underestimate the work, go over budget, and likely the final product quality will be very poor.
Tasks must be broken down into very small parts, usually no more than 8-24 hours of work. If a task is greater than that, you need to break it down into more parts. For example, don't just ask "handle 3d model formats". Be very specific. Example:
- Task 1: "Design 3D model importer/exporter system"
- Task 2: "Implement 3D model importer/exporter"
- Task 3: "Implement OBJ importer"
- Task 4: "Implement OBJ Exporter"
- Task 5: "Test OBJ importer"
- Task 6: "Test OBJ exporter" Etc.
It's much easier to look at something like that and say, 16 hours for that task, 8 hours for that task, etc. You need to factor in time for R&D (no developer knows everything), time for designing and prototyping, time for implementing, and time for testing, including writing unit tests. The sum of all the parts equate to the total estimate to complete the project. It's not uncommon to have hundreds of tasks, so don't worry if you start filling up pages after pages of tasks. The more granular, the more confident someone will be to give an accurate estimate. When done, you enter these tasks into a content management system (CMS) such as JIRA. You'll now have your blueprint. When hiring a contract worker, you ask them to fill in those estimates and then negotiate the contract.
Beyond that, there's no reliable way anyone on the Internet can give you an estimate. It's purely subjective and not the best way to go about it. I mean we can throw numbers at you, but it's pure hearsay.