For each of your custom post types, the template files use a custom query; for example, if you have a custom template named archive-portfolio
then use something like this in that file:
$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 8 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
the_title();
echo '<div class="entry-content">';
the_content();
echo '</div>';
endwhile;
This is just an example, same way, you use a different template file for another custom post type and use completely different arguments. For the main query on home page, you may set up on WordPress
backend
. Read more on Codex.
Update: Check this answer of mine for pre_get_posts
.