Using just built-in functions
Show[
ComplexPlot3D[z^2 + 1, {z, -5 - 5 I, 5 + 5 I}, ColorFunction -> "LightTerrain"],
ComplexPlot3D[0, {z, -5 - 5 I, 5 + 5 I}, ColorFunction -> "LightTerrain", PlotStyle -> Opacity[0.5]],
Graphics3D[{Thick, Red, Line[{{0, -5, 0}, {0, 5, 0}}]}],
Axes -> True, AxesOrigin -> {0, 0, 0},
AxesLabel -> {Re[z], Im[z], w}, Boxed -> False,
PlotRange -> {-10, 50}, BoxRatios -> {1, 1, 0.5}]
Probably a different viewpoint would show better what's going on.
Using David Park's Presentations add-on
This add-on allows, among many other features, working directly with complex graphics objects and complex functions; it includes functions such as ComplexCartesianSurface
that predate the functions such as ComplexPlot3D
introduced in Mathematica 12.0. (To obtain Park's add-on, see: Where is David Park's Mathematica site?.)
Since Presentations does not include a function that maps points in the complex plane to points in space, let's define a simple version of one:
complexTo3D[pts_, z_] := Append[z] /@ ReIm[pts]
The function:
f[z_] := z^2 + 1
Load Park's add-on:
<< Presentations`
And create the 3D graphic:
With[{zmin = -1 - 1.75 I, zmax = 1 + 1.75 I},
zeros = z /. Solve[f[z] == 0, z];
Draw3DItems[
{
Opacity[0.85],
ComplexCartesianSurface[f[z], Abs, {z, zmin, zmax},
PlotPoints -> 50,
Mesh -> 12,
MeshFunctions ->
{Function[{x, y, z, u, v}, Re[f[u + I v]]],
Function[{x, y, z, u, v}, Im[f[u + I v]]]},
MeshStyle -> {White, LightGray},
ColorFunction ->
Function[{x, y, z, u, v}, ColorData["RedGreenSplit"][Rescale[Arg[f[u + I v]], {-\[Pi], \[Pi]}]]],
ColorFunctionScaling -> False,
ScalingFunctions -> {None, None, "Reverse"}
],
Opacity[0.3],
ComplexCartesianSurface[0, Abs, {z, zmin, zmax},
Mesh -> None, PlotStyle -> LighterGray,
ScalingFunctions -> {None, None, "Reverse"},
PlotTheme -> "Classic"
],
PointSize[Large], Red, Point /@ complexTo3D[zeros, 0]
},
BaseStyle -> {12, Bold},
PlotRange -> {-4, 0.75},
Boxed -> False, Axes -> True, AxesOrigin -> {0, 0, 0},
AxesLabel -> {Re[z], Im[z], Abs[f[z]]},
Ticks -> False,
BoxRatios -> {1, 1, 0.75}
]
]
The mesh on the graph of $\lvert f(z)\rvert$ is formed by level curves of $\Re(f(z)$ and $\Im(f(z)$, while the coloring is obtained from $\arg(f(z))$. (This may be visual overload!)
One could doubtless experiment with the various colors to obtain a more informative, or at least more pleasing, image.
Note that I've exploited the enhancement from @BobHanlon's answer of reversing the direction of the f(z)-axis.