# Kruskal diagrams of Schwarzschild black holes

Kruskal diagram of Schwarzschild spacetime with light cones to illustrate the causal structure. Using Kruskal-Szekeres coordinates, lightlike worldlines remain at 45 degrees, i.e. the diagrams are conformal. The grid indicates lines of constant r and t. The horizon is at r = 2GM (V = ±U), singularity at r = 0. For more related figures, please see Relativity category.

Equations for the coordinate transformations:
Kurskal diagram of a Schwarzschild black holes:
Kurskal diagram of a Schwarzschild black holes with equidistant world lines:
Kurskal diagram with a particle falling inside the black hole (note the light cones remain at a 45° angle):

Edit and compile if you like:

% Author: Izaak Neutelings (October 2021)
% Inspiration:
%  "Spacetime and Geometry: An Introduction to General Relativity", Sean M. Carroll
%  "Gravity: An Introduction to Einstein's General Relativity", James B. Hartle
\documentclass[border=3pt,tikz]{standalone}
\usepackage{tikz}
\usepackage{amsmath} % for \text
\usepackage{mathrsfs} % for \mathscr
\usepackage{xfp} % higher precision (16 digits?)
\usepackage[outline]{contour} % glow around text
\usetikzlibrary{decorations.markings,decorations.pathmorphing}
\usetikzlibrary{arrows.meta} % for arrow size
\contourlength{1.2pt}

\newcommand{\calI}{\mathscr{I}} %\mathcal
\tikzset{>=latex} % for LaTeX arrow head
\colorlet{myred}{red!80!black}
\colorlet{myblue}{blue!80!black}
\colorlet{mygreen}{green!80!black}
\colorlet{mydarkred}{red!50!black}
\colorlet{mydarkblue}{blue!50!black}
\colorlet{mylightblue}{mydarkblue!6}
\colorlet{mypurple}{blue!40!red!80!black}
\colorlet{mydarkpurple}{blue!40!red!50!black}
\colorlet{mylightpurple}{mydarkpurple!80!red!6}
\colorlet{myorange}{orange!40!yellow!95!black}
\tikzstyle{cone}=[mydarkblue,line width=0.2,top color=blue!60!black!30,
bottom color=blue!60!black!50!red!30,shading angle=60,fill opacity=0.9]
\tikzstyle{cone back}=[mydarkblue,line width=0.1,dash pattern=on 1pt off 1pt]
\tikzstyle{world line}=[myblue!60,line width=0.4,shorten <=-2mm,shorten >=-2mm]
\tikzstyle{world line t}=[mypurple!60,line width=0.4,shorten <=-2mm,shorten >=-2mm]
\tikzstyle{particle}=[mygreen,line width=0.5]
\tikzstyle{photon}=[-{Latex[length=4,width=3]},myorange,line width=0.4,decorate,
decoration={snake,amplitude=0.9,segment length=4,post length=3.8}]
\tikzstyle{singularity}=[myred,line width=0.6,decorate,
decoration={zigzag,amplitude=1.8,segment length=5}]
\tikzset{declare function={% Kruskal-Szekeres coordinates
sing(\x)        = {\fpeval{sqrt(\x*\x+1)}};%
rstar(\c)       = {\fpeval{(\c/2-1)*exp(\c/2)}};%
kruskalu(\x,\c) = {\fpeval{sqrt(\x*\x+(\c/2-1)*exp(\c/2))}};%
kruskalv(\x,\c) = {\fpeval{sqrt(\x*\x-(\c/2-1)*exp(\c/2))}};%
}}
\def\tick#1#2{\draw[thick] (#1) ++ (#2:0.04) --++ (#2-180:0.08)}
\def\Nsamples{50} % number samples in plot

% HORIZON, r=2GM
\def\rtinf#1{\color{mydarkblue}
r &\color{mydarkblue}= 2GM \\[-2mm] \color{mydarkpurple}
t &\color{mydarkpurple}= #1\infty \color{black}
}

% LIGHTCONE
\def\R{0.10} % size lightcone
\def\e{0.08} % vertical scale
\def\ang{45} % angle light cone
\def\angb{acos(sqrt(\e)*sin(\ang))} % angle ellipse center to point of tangency
\def\a{\R*sin(\ang)*sqrt(1-\e*sin(\ang)^2)/(1-\e*sin(\ang)^2)} % vertical radius
\def\b{\R*sqrt(\e)*sin(\ang)*cos(\ang)/(1-\e*sin(\ang)^2)} % horizontal radius
\def\coneback#1{ % light cone part to be drawn behind world lines
\draw[cone back] % dashed line back
(#1)++(-45:\R) arc({90-\angb}:{90+\angb}:{\a} and {\b});
\draw[cone,shading angle=-60] % top edge & inside
(#1)++(0,{\R*cos(\ang)/(1-\e*sin(\ang)^2)}) ellipse({\a} and {\b});
}
\def\conefront#1{ % light cone part to be drawn over world lines
\draw[cone] % light cone outside
(#1) --++ (45:\R) arc({\angb-90}:{-90-\angb}:{\a} and {\b})
--++ (-45:2*\R) arc({90-\angb}:{-270+\angb}:{\a} and {\b}) -- cycle;
}

\begin{document}

% PENROSE COORDINATES for Kruskal-Szekeres coordinates
\begin{tikzpicture}[scale=1]
\def\tu{\tan^2u} % shorthand
\def\tv{\tan^2v} % shorthand
\node[align=left] at (0,0) {
\begin{minipage}{9.5cm}
Kruskal-Szekeres coordinates for Schwarzschild spacetime
\begin{align*}
&\begin{cases}
\left.\begin{aligned}
U &= \sqrt{\dfrac{r}{2GM}-1}\,e^{\frac{r}{4GM}}\cosh\left(\frac{t}{4GM}\right) \\
V &= \sqrt{\dfrac{r}{2GM}-1}\,e^{\frac{r}{4GM}}\sinh\left(\frac{t}{4GM}\right) \\
\end{aligned}\right\} &\text{for $r>2GM$} \\[8mm]
\left.\begin{aligned}
U &= \sqrt{1-\dfrac{r}{2GM}}\,e^{\frac{r}{4GM}}\sinh\left(\frac{t}{4GM}\right) \\
V &= \sqrt{1-\dfrac{r}{2GM}}\,e^{\frac{r}{4GM}}\cosh\left(\frac{t}{4GM}\right) \\
\end{aligned}\right\} &\text{for $r<2GM$}
\end{cases}\\[1mm]
&\Rightarrow\begin{cases}
U^2 - V^2 = \left(\dfrac{r}{2GM}-1\right)e^{\frac{r}{2GM}} & \\[3mm]
V = \tanh\left(\dfrac{t}{4GM}\right)U & \text{for $r>2GM$} \\[3mm]
V = \coth\left(\dfrac{t}{4GM}\right)U & \text{for $r<2GM$}
\end{cases}
\end{align*}
\end{minipage}
};
\end{tikzpicture}

% KRUSKAL DIAGRAM - equidistant world lines
\begin{tikzpicture}[scale=1.8]
\message{Kruskal diagram^^J}

\def\xmax{2}
\def\Nlines{3} % number of world lines (at constant r/t)
\coordinate (O)  at ( 0, 0); % center I: origin (r,t) = (0,0)
\coordinate (SW) at (-\xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (SE) at ( \xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (NW) at (-\xmax, \xmax); % horizon r=2M, t=+infty, region IV
\coordinate (NE) at ( \xmax, \xmax); % horizon r=2M, t=+infty, region IV

% REGIONS FILLS
\fill[mylightpurple] (NW) -- (O) -- (NE) -- cycle; % region I
\fill[mylightblue]   (NE) -- (O) -- (SE) -- cycle; % region II
\fill[mylightpurple] (SW) -- (O) -- (SE) -- cycle; % region III
\fill[mylightblue]   (NW) -- (O) -- (SW) -- cycle; % region IV

\begin{scope}
\clip (-\xmax,-\xmax) rectangle (\xmax,\xmax);

% CONSTANT T WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\c=3*\i/\Nlines; \a=tanh(\c/2); \b=1/tanh(\c/2);
\y=min(\xmax,\b/sqrt(\b*\b-1)); \x=\y/\b; }] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, (x,y)=(\x,\y) ...^^J}
\draw[world line t] ( \x,-\y) -- (-\x,\y);
\draw[world line t] (-\x,-\y) -- ( \x,\y);
\draw[world line t] ( \xmax,{-\a*\xmax}) -- (-\xmax,{\a*\xmax});
\draw[world line t] (-\xmax,{-\a*\xmax}) -- ( \xmax,{\a*\xmax});
}

% CONSTANT R WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\c=2+\i/\Nlines; \vmax=kruskalv(\xmax,\c);}] in {1,...,\Nlines}{ %; \ct=tan(90*\c)
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\draw[world line,samples=\Nsamples,smooth,variable=\y,domain=-\vmax:\vmax]
plot({-kruskalu(\y,\c)},\y)
plot({ kruskalu(\y,\c)},\y);
}
\message{Making constant-r world lines (region II, IV)...^^J}
\foreach \i [evaluate={\c=0.5+1.35*\i/\Nlines; \umax=kruskalu(\xmax,\c);
\skip=int(\c<0.8)}] in {1,...,\Nlines}{ %; \ct=tan(90*\c)
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\ifnum\skip=0 % skip if overlaps with zigzag
\draw[world line,samples=\Nsamples,smooth,variable=\x,domain=-\umax:\umax]
plot(\x,{-kruskalv(\x,\c)})
plot(\x,{ kruskalv(\x,\c)});
\fi
}
\end{scope}

% SINGULARITY
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});

% LABELS
\pgfmathsetmacro\rl{-0.26*\xmax} % r left
\pgfmathsetmacro\rr{0.35*\xmax} % r right
\node[myred,above left=-1,rotate=-35] at (\rl,{sqrt((\rl)^2+1)}) {singularity};
\node[myred,above right=1,rotate=33] at (\rr,{sqrt((\rr)^2+1)}) {$r=0$};
\node[world line t,right] at (\xmax,{\xmax*tanh(3/2/\Nlines)}) {$t=\text{constant}$};
\node[world line,above=2,right] at (\xmax,{kruskalv(\xmax,(3))}) {$r=\text{constant}$};
\node[world line t,above=1,right] at (1.12*\xmax,0) {$t=0$};
\node[world line t,above=1,rotate=90] at (0,0.85*\xmax) {$t=0$};
\node[below=2,left] at (-\xmax,-\xmax)
{\left.\begin{aligned}\rtinf{+}\end{aligned}\right\}};
\node[above=2,left] at (-\xmax,\xmax)
{\left.\begin{aligned}\rtinf{-}\end{aligned}\right\}};
\node[below=2,right] at (\xmax,-\xmax)
{\left\{\begin{aligned}\rtinf{-}\end{aligned}\right.};
\node[above=2,right] at (\xmax,\xmax)
{\left\{\begin{aligned}\rtinf{+}\end{aligned}\right.};

% AXES
\draw[->,thick] (-\xmax-0.1,0) -- (\xmax+0.2,0) node[left=1,below] {$U$};
\draw[->,thick] (0,-\xmax-0.1) -- (0,\xmax+0.2) node[left=-1] {$V$};
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});
\draw[thick,mydarkblue]
(SE) -- (O) -- (NW)
(SW) -- (O) -- (NE);

% REGIONS
\node at (-0.66*\xmax,0.08*\xmax) {III};
\node at ( 0.66*\xmax,0.08*\xmax) {I};
\node at (-0.06*\xmax,0.32*\xmax) {II};
\node at (-0.07*\xmax,-0.32*\xmax) {IV};

\end{tikzpicture}

% KRUSKAL DIAGRAM
\begin{tikzpicture}[scale=1.8]
\message{Kruskal diagram^^J}

\def\xmax{2}
\def\Nlines{3} % number of world lines (at constant r/t)
\coordinate (O)  at ( 0, 0); % center I: origin (r,t) = (0,0)
\coordinate (SW) at (-\xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (SE) at ( \xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (NW) at (-\xmax, \xmax); % horizon r=2M, t=+infty, region IV
\coordinate (NE) at ( \xmax, \xmax); % horizon r=2M, t=+infty, region IV

% REGIONS FILLS
\fill[mylightpurple] (NW) -- (O) -- (NE) -- cycle; % region I
\fill[mylightblue]   (NE) -- (O) -- (SE) -- cycle; % region II
\fill[mylightpurple] (SW) -- (O) -- (SE) -- cycle; % region III
\fill[mylightblue]   (NW) -- (O) -- (SW) -- cycle; % region IV

\begin{scope}
\clip (-\xmax,-\xmax) rectangle (\xmax,\xmax);

% CONSTANT T WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\ang=45*\i/(\Nlines+1); \y=tan(\ang)*\xmax}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, ang=\ang...^^J}
\draw[world line t] (-\xmax,-\y) -- ( \xmax,\y);
\draw[world line t] ( \xmax,-\y) -- (-\xmax,\y);
\draw[world line t] (-\y,-\xmax) -- ( \y,\xmax);
\draw[world line t] ( \y,-\xmax) -- (-\y,\xmax);
}
\node[world line t,right] at (\xmax,{\xmax*tan(45/(\Nlines+1))}) {$t=\text{constant}$};
\node[world line,above=2,right] at (\xmax,{kruskalv(\xmax,3)}) {$r=\text{constant}$};

% CONSTANT R WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\c=1.6*\i/\Nlines; \vmax=sqrt(\xmax*\xmax-\c*\c);}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\draw[world line,samples=\Nsamples,smooth,variable=\y,domain=-\vmax:\vmax]
plot({-sqrt(\y*\y+\c*\c)},\y)
plot({ sqrt(\y*\y+\c*\c)},\y);
}
\message{Making constant-r world lines (region II, IV)...^^J}
\foreach \i [evaluate={\c=0.9*\i/\Nlines; \umax=sqrt(\xmax*\xmax-\c*\c);}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\draw[world line,samples=\Nsamples,smooth,variable=\x,domain=-\umax:\umax]
plot(\x,{-sqrt(\x*\x+\c*\c)})
plot(\x,{ sqrt(\x*\x+\c*\c)});
}

\end{scope}

% SINGULARITY
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});

% LABELS
\pgfmathsetmacro\rl{-0.26*\xmax} % r left
\pgfmathsetmacro\rr{0.35*\xmax} % r right
\node[myred,above left=-1,rotate=-35] at (\rl,{sqrt((\rl)^2+1)}) {singularity};
\node[myred,above right=1,rotate=33] at (\rr,{sqrt((\rr)^2+1)}) {$r=0$};
\node[mydarkblue,rotate=45,below left=-2,scale=0.8] at (45:1.2*\xmax) {\contour{mylightblue}{horizon $r=2GM$}};
\node[world line t,right] at (\xmax,{\xmax*tan(45/(\Nlines+1))}) {$t=\text{constant}$};
\node[world line,above=2,right] at (\xmax,{sqrt(\xmax^2-(1.6)^2)}) {$r=\text{constant}$};
\node[world line t,above=1,right] at (1.12*\xmax,0) {$t=0$};
\node[world line t,above=1,rotate=90] at (0,0.85*\xmax) {$t=0$};
\node[below=2,left] at (-\xmax,-\xmax)
{\left.\begin{aligned}\rtinf{+}\end{aligned}\right\}};
\node[above=2,left] at (-\xmax,\xmax)
{\left.\begin{aligned}\rtinf{-}\end{aligned}\right\}};
\node[below=2,right] at (\xmax,-\xmax)
{\left\{\begin{aligned}\rtinf{-}\end{aligned}\right.};
\node[above=2,right] at (\xmax,\xmax)
{\left\{\begin{aligned}\rtinf{+}\end{aligned}\right.};

% AXES
\draw[->,thick] (-\xmax-0.1,0) -- (\xmax+0.2,0) node[left=1,below] {$U$};
\draw[->,thick] (0,-\xmax-0.1) -- (0,\xmax+0.2) node[left=-1] {$V$};
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});
\draw[thick,mydarkblue]
(SE) -- (O) -- (NW)
(SW) -- (O) -- (NE);

% REGIONS
\node at (-0.66*\xmax,0.07*\xmax) {III};
\node at ( 0.66*\xmax,0.07*\xmax) {I};
\node[fill=mylightpurple,inner sep=1] at (-0.06*\xmax,0.32*\xmax) {II};
\node[fill=mylightpurple,inner sep=1] at (-0.07*\xmax,-0.32*\xmax) {IV};

\end{tikzpicture}

% KRUSKAL DIAGRAM - equidistant world lines
\begin{tikzpicture}[scale=1.8]
\message{Kruskal diagram^^J}

\def\xmax{2}
\def\Nlines{3} % number of world lines (at constant r/t)
\pgfmathsetmacro\ta{tan(45/(\Nlines+1))} % constant t value 1
\pgfmathsetmacro\ra{(1.6/\Nlines)} % constant r value 1
\coordinate (O)  at ( 0, 0); % center I: origin (r,t) = (0,0)
\coordinate (SW) at (-\xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (SE) at ( \xmax,-\xmax); % horizon r=2M, t=-infty, region I
\coordinate (NW) at (-\xmax, \xmax); % horizon r=2M, t=+infty, region IV
\coordinate (NE) at ( \xmax, \xmax); % horizon r=2M, t=+infty, region IV
\coordinate (X0) at (\xmax,-0.89*\xmax);
\coordinate (X1) at ({0.51*\xmax},{-tan(135/(\Nlines+1))*0.51*\xmax});
\coordinate (X2)  at ({\ra/sqrt(1-\ta*\ta)},{\ta*\ra/sqrt(1-\ta*\ta)});
\coordinate (X3) at (45:0.32*\xmax); % particle falling in BH horizon
\coordinate (X4)  at (0.2*\xmax,{sqrt((0.2*\xmax)^2+1.1)}); % particle falling in BH singularity

% REGIONS FILLS
\fill[mylightpurple] (NW) -- (O) -- (NE) -- cycle; % region I
\fill[mylightblue]   (NE) -- (O) -- (SE) -- cycle; % region II
\fill[mylightpurple] (SW) -- (O) -- (SE) -- cycle; % region III
\fill[mylightblue]   (NW) -- (O) -- (SW) -- cycle; % region IV

% LIGHT CONE BACK
\coneback{X1};
\coneback{X2};
\coneback{X3};

\begin{scope}
\clip (-\xmax,-\xmax) rectangle (\xmax,\xmax);

% CONSTANT T WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\ang=45*\i/(\Nlines+1); \y=tan(\ang)*\xmax}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, ang=\ang...^^J}
\draw[world line t] (-\xmax,-\y) -- ( \xmax,\y);
\draw[world line t] ( \xmax,-\y) -- (-\xmax,\y);
\draw[world line t] (-\y,-\xmax) -- ( \y,\xmax);
\draw[world line t] ( \y,-\xmax) -- (-\y,\xmax);
}
\node[world line t,right] at (\xmax,{\xmax*tan(45/(\Nlines+1))}) {$t=\text{constant}$};
\node[world line,above=2,right] at (\xmax,{kruskalv(\xmax,3)}) {$r=\text{constant}$};

% CONSTANT R WORLD LINES
\message{Making world constant-r lines (region I, III)...^^J}
\foreach \i [evaluate={\c=1.6*\i/\Nlines; \vmax=sqrt(\xmax*\xmax-\c*\c);}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\draw[world line,samples=\Nsamples,smooth,variable=\y,domain=-\vmax:\vmax]
plot({-sqrt(\y*\y+\c*\c)},\y)
plot({ sqrt(\y*\y+\c*\c)},\y);
}
\message{Making constant-r world lines (region II, IV)...^^J}
\foreach \i [evaluate={\c=0.9*\i/\Nlines; \umax=sqrt(\xmax*\xmax-\c*\c);}] in {1,...,\Nlines}{
\message{  Running i/N=\i/\Nlines, c=\c...^^J}
\draw[world line,samples=\Nsamples,smooth,variable=\x,domain=-\umax:\umax]
plot(\x,{-sqrt(\x*\x+\c*\c)})
plot(\x,{ sqrt(\x*\x+\c*\c)});
}

% PARTICLE
\draw[particle,decoration={markings,mark=at position 0.25 with {\arrow{latex}},
mark=at position 0.61 with {\arrow{latex}},
mark=at position 0.90 with {\arrow{latex}}},postaction={decorate}]
(X0) to[out=135,in=-60] (X1) to[out=120,in=-70]
(X2) to[out=110,in=-80] (X3) to[out=100,in=-90] (X4);

\end{scope}

% SINGULARITY
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,fill=mydarkred!80!black!20,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});

% LIGHT CONE FRONT
\conefront{X1};
\conefront{X2};
\conefront{X3};

% ESCAPING PHOTONS
\draw[photon] (X1) ++ (45:0.15) --++ (45:0.4);
\draw[photon] (X2) ++ (45:0.15) --++ (45:0.4);

% LABELS
\pgfmathsetmacro\rl{-0.26*\xmax} % r left
\pgfmathsetmacro\rr{0.35*\xmax} % r right
\node[myred,above left=-1,rotate=-35] at (\rl,{sqrt((\rl)^2+1)}) {singularity};
\node[myred,above right=1,rotate=33] at (\rr,{sqrt((\rr)^2+1)}) {$r=0$};
\node[mydarkblue,rotate=45,below left=-2,scale=0.8] at (45:1.2*\xmax) {\contour{mylightblue}{horizon $r=2GM$}};
\node[world line t,right] at (\xmax,{\xmax*tan(45/(\Nlines+1))}) {$t=\text{constant}$};
\node[world line,above=2,right] at (\xmax,{sqrt(\xmax^2-(1.6)^2)}) {$r=\text{constant}$};
\node[world line t,above=1,right] at (1.12*\xmax,0) {$t=0$};
\node[world line t,above=1,rotate=90] at (0,0.85*\xmax) {$t=0$};
\node[below=2,left] at (-\xmax,-\xmax)
{\left.\begin{aligned}\rtinf{+}\end{aligned}\right\}};
\node[above=2,left] at (-\xmax,\xmax)
{\left.\begin{aligned}\rtinf{-}\end{aligned}\right\}};
\node[below=2,right] at (\xmax,-\xmax)
{\left\{\begin{aligned}\rtinf{-}\end{aligned}\right.};
\node[above=2,right] at (\xmax,\xmax)
{\left\{\begin{aligned}\rtinf{+}\end{aligned}\right.};

% AXES
\draw[->,thick] (-\xmax-0.1,0) -- (\xmax+0.2,0) node[left=1,below] {$U$};
\draw[->,thick] (0,-\xmax-0.1) -- (0,\xmax+0.2) node[left=-1] {$V$};
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{sqrt(\x*\x+1)});
\draw[singularity,samples=\Nsamples,variable=\x, % singularity
domain=sqrt(\xmax*\xmax-1):-sqrt(\xmax*\xmax-1)]
plot(\x,{-sqrt(\x*\x+1)});
\draw[thick,mydarkblue]
(SE) -- (O) -- (NW)
(SW) -- (O) -- (NE);

\end{tikzpicture}

\end{document}