The easiest approach is to license the source code under one license and art assets under another license. The code can be under an open source license, and the art under a non-commercial license like Creative Commons BY-NC1. CC BY-NC requires attribution, as will any mainstream open source license you choose for your code (unless you choose a niche ultra-permissive license like CC0 or the WTFPL).
This is very close to how several other studios have open-sourced their game's engine without releasing their whole game under a free license. Almost all of the games included in the first Humble Indie Bundle did this: namely, Gish, Aquaria, Penumbra: Overture, and Lugaru.
If you choose a copyleft license like the GPL for your code, you may want to make explicit in your licensing documentation that the code's copyleft requirements do not extend to the project's art assets (otherwise, people couldn't distribute your project at all, since CC BY-NC is incompatible with the GPL). This also means that GPL copyleft requirements would not apply to any substitute assets that downstream users supply. It is a nebulous legal question whether art assets are part of the work as a whole, or whether the code-work consumes and displays the (separate) art-work as data, so it doesn't hurt to make this division explicit.
1 Note that CC NC licenses are non-free and functionally a hair's breadth away from being all-rights-reserved: there is so much uncertainty (among users and licensors alike) about whether a particular action counts as "commercial" -- distribution on a site with ads, use in a professional portfolio, use to solicit donations for a charity, use by the government, etc. -- that some people will stay away from modifying or redistributing it altogether. For an alternate approach, see Anony-Mousse's answer which advocates using a copyleft license, instead of a noncommercial license, to control downstream distribution of your assets.