Intentaré dar algunas ideas para empezar.
Una superficie triangulada no será lisa, pero puede ser útil para entender cómo funcionaría el problema en una superficie lisa. Se podría suponer que desde cada punto el agua fluye en la dirección más empinada hacia abajo. Esto ignora el momento del agua que podría afectar a la trayectoria e incluso proporcionar caídas de agua. Si quieres modelizar eso tu trabajo va a ser más difícil.
Si la altura $z(x,y)$ es una función de dos coordenadas de la cuadrícula $x$ y $y$ y es una función diferenciable, entonces la dirección del flujo viene dada por la derivada negativa del vector $-grad(z)$ Puede trazar una curva sobre la superficie a partir de cualquier punto (un resorte) siguiendo la dirección hasta que fluya del borde de la cuadrícula o llegue a un mínimo local. Si llegas a un mínimo, el agua formará allí un lago y se llenará hasta encontrar un punto de salida. Dicho punto será siempre un punto de silla de montar, es decir, un punto en el que $grad(z)$ es cero pero no es ni mínimo ni máximo. Este es el tipo de punto que forma un puerto de montaña y los ríos de los lagos siempre salen por esos puntos.
Tienes que idear alguna estrategia para decidir dónde colocar las fuentes de tus flujos. Esto puede ser aleatorio o puedes elegir puntos especiales, como puntos de caballete. Si éstos son a veces puntos de salida de lagos, podrían ser también lugares para manantiales. En general, desde un punto de silla de montar hay dos direcciones opuestas en las que el arroyo puede fluir, que se pueden encontrar utilizando las segundas derivadas. También se pueden iniciar los arroyos desde las cumbres eligiendo las direcciones en las que el terreno se curva con mayor pendiente para la dirección inicial.
En el problema real, la superficie no es lisa, sino una malla triangulada. Desde cada punto fluirá una corriente en la dirección de mayor pendiente. Dentro de un triángulo dado, será una línea recta. Su dirección es fácil de calcular. Halla la normal al triángulo tomando el producto cruz de dos vectores de arista. A continuación, proyecta la normal sobre $(x,y)$ plano. Los casos en los que el terreno es llano constituyen un caso especial.
Cuando el agua llega al borde de un triángulo, o bien fluye hacia el triángulo adyacente y cambia de dirección, o bien fluye a lo largo del borde. Tienes que comprobar la pendiente de cada posibilidad y elegir la más pronunciada. También puede llegar a un punto desde el que puede alejarse por un triángulo o un borde. También en este caso hay que calcular cada posibilidad y elegir la más empinada.
Para encontrar puntos de partida, puedes tomar puntos al azar a gran altitud o buscar puntos de ensilladura y cumbres. Para ello, observa cada una de las aristas que se unen en un vértice y determina si tienen pendiente ascendente o descendente desde el punto. Traza alrededor del punto y cuenta cuántas veces cambia de signo la pendiente. Si cambia dos veces, estás en una pendiente. Si no cambia nunca, estás en un punto máximo o mínimo. Si cambia más de cuatro veces, estás en un punto de silla de montar. Es posible que cambie más de cuatro veces, ya que la superficie no es lisa. Las cumbres y los puntos de silla de montar son buenos lugares para situar manantiales con agua que fluye en la dirección o direcciones más empinadas. Traza el camino de los arroyos desde allí hasta que llegues a un mínimo.
En un terreno parecido a un paisaje realista es probable que los arroyos converjan. La mayoría convergerán a lo largo de las aristas de los triángulos, pero también podrían converger en un vértice si hay más de una dirección de acento local más pronunciado desde el punto. Una estrategia sería comenzar un manantial en cada vértice o centro de triángulo y contar cuántos (¿ponderados por el área del triángulo?) convergen en cada arroyo para encontrar los ríos más grandes.
Espero que esto sea suficiente para ayudarte a resolver los detalles y escribir el software necesario.