Production

James Cameron avait le projet de faire ce film depuis plusieurs années. Après une longue procédure avec le gouvernement russe, il achète les droits du roman de Stanislas Lem via sa société Lightstorm Entertainment. Mais en raison de nombreux autres projets dans les années 1990, il ne peut concrétiser son projet.
En 2000, alors que Steven Soderbergh travaille sur Traffic, il parle à James Cameron et aux producteurs Rae Sanchini et Jon Landau d'une adaptation de Solaris, qu'il pourrait faire lui-même. James Cameron est intrigué par les idées du réalisateur et lui propose de retravailler sur le projet. Ainsi y travaillent-ils ensemble, lors de longues discussions où ils échangent leurs points de vue et où Soderbergh peut exposer ses idées. Alors que le développement de Traffic stagne, Steven Soderbergh commence à écrire un premier jet de Solaris. Pour cela, il visionne le film russe de 1972, réalisé par Andreï Tarkovski. Ce dernier y développe des thèmes qu'il n'a jamais pu aborder dans ses films précédents. Soderbergh insiste pour écrire seul le scénario : « Je leur ai dit que j'avais une idée de comment le faire mais je voulais [l']écrire seul. Je ne voulais pas avoir à négocier pour le faire. Je leur ai exposé ma vision, ce que je voulais développer et comment je comptais faire pour me démarquer du roman et me démarquer du film de Tarkovski ». Soderbergh reconnaît avoir écrit un scénario beaucoup plus court que la moyenne des scénarios proposés par les réalisateurs (75 pages au lieu d'une centaine habituellement) mais il désirait pouvoir étirer ses scènes afin de donner son rythme lent au film. Le projet est ensuite présenté à 20th Century Fox.
Steven Soderbergh souhaite à l'origine Daniel Day-Lewis pour le rôle principal. L'acteur est cependant engagé sur Gangs of New York de Martin Scorsese. George Clooney, partenaire du réalisateur au sein de la société Section Eight, reçoit une copie du script. Bien qu'ils soient proches, il réalise qu'il n'a pas été le premier choix des producteurs. Un mois plus tard, alors que Ocean’s Eleven est en cours de montage, il fait parvenir au réalisateur une lettre dans laquelle il annonce être prêt à endosser le rôle. Sa force de conviction et son lobbying ont été déterminants pour Soderbergh qui évoque l'inspiration que lui a conférée « la volonté radicale [de Clooney] de sauter d'une falaise chaque jour ». De fait, l'implication de George Clooney est importante puisqu'il constitue une constitue une force de propositions : ainsi, c'est lui qui propose à Soderbergh l'indice final de la coupure au doigt qui se soigne seule montrant que Chris est resté sur Solaris.
Concernant Natascha McElhone, Soderbergh l'a remarquée dans Surviving Picasso (1996). Dans ce film, dit-il, elle lui a « rappelé les grandes actrices européennes des années soixante et soixante-dix, comme Jeanne Moreau et Dominique Sanda ». Il songe donc rapidement à elle pour le rôle de Rheya. Pour elle aussi, le casting s'est révélé peu commun puisqu'il a pris la forme d'un dialogue improvisé avec Soderbergh qui s'est trouvé subjugué par ses réponses et qui l'a donc retenue.
Steven Soderbergh s'est tourné vers Jeremy Davies après avoir visionné un casting effectué par ce dernier pour un film consacré au criminel américain Charles Manson. Le film ne s'est pas fait mais la performance dans cette vidéo était tellement convaincante que Soderbergh l'a engagé.
Steven Soderbergh fait appel à Viola Davis qu'il retrouve ainsi pour la troisième fois, après Hors d'atteinte (1998) et Traffic (2000). Dans son commentaire audio du DVD, Soderbergh dit l'avoir engagée pour la force de son caractère : « Une des raisons qui m'ont fait choisir Viola, c'est qu'elle se bat contre George. Il me fallait quelqu'un de fort. ».
Enfin, concernant le choix de l'acteur allemand Ulrich Tukur pour jouer Gibarian, celui-ci s'est fait après un casting particulier. Soderbergh a demandé à Tukur de lui faire parvenir une vidéocassette en guise d'audition. Ce sont les choix étranges de mise en scène de cet « auto-casting » qui ont décidé Soderbergh à le prendre.