<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Methods and Algorithms of Implementation Dynamic Relief Shadows in Virtual Environment Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Petr Timokhin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mikhail Mikhaylyuk</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Federal State Institution “Scientific Research Institute for System Analysis of the Russian Academy of Sciences”</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Nakhimovskii pr.</institution>
          <addr-line>36/1, Moscow, 117218</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>The paper considers the task of real-time rendering of dynamic relief shadows based on ray casting using origin relief data - detailed height map. The solution proposed is based on looking for shadow rays - sun rays, whose tracks on height map are passed through heights occluding the light. GPU-based methods and algorithms for extracting such rays using an accelerating data structure - a mipmap of maximum and minimum relief heights are developed. This structure provides an effective acceleration of shadow rays extraction by skipping long sections of sun ray tracks that are not involved in relief shadowing. In algorithms developed precise traversing such a data structure is implemented, as well as texture filtering is taking into account, which allows the formation of "torn" shadow edges to be prevented. The solution created was implemented in software complex and a number of comparative shadow visualization tests was conducted. The results of the research can be used in virtual environment systems, video simulators, scientific visualization, educational applications, etc. Relief shadows, height map, ray casting, GPU, virtual environment system</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        One of the most important tasks of modern virtual environment systems is modelling of realistic
light-shadow appearance [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ], in particular, dynamic relief shadows. This is especially demanded for
space, air and ground video simulators [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ], where, in order to instill right skills to trainees, dynamic
shadows should be of high quality and rendered in real-time (at least 25 times per second).
      </p>
      <p>For such systems, an important feature of developing shadow algorithms is their reliability, i.e. the
ability to construct correct shadows for any permissible directions of light sources, as well as the
absence of freezes of visualization loop in case of unintentional errors in input data.</p>
      <p>From the point of ensuring the correctness of obtained shadows, the best results are derived by algorithms
based on ray casting. However, this approach requires the implementation of a per pixel ray processing loop,
that, firstly, is associated with heavy time costs, and, secondly, carries potential risks of hanging the
visualization system (obtaining an infinite loop). In this paper, we propose algorithms of original
implementation of GPU-accelerated ray casting, which ensure reliable real-time relief shadow visualization.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related work</title>
      <p>
        In the field of real-time shadow rendering, a significant part of researches is devoted to the
development of shadow mapping approach. One of the most common is the method of cascaded shadow
mapping [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] (or parallel-split shadow maps [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]), in which a number of shadow maps of the same size
for the foreground, middle and background are created from light source position (often up to 4 splits).
Owing to good performance/shadow quality ratio, this method is, in fact, standard for many gaming
      </p>
      <p>
        2021 Copyright for this paper by its authors.
applications. At the same time, the method requires careful adjustment of the shadowing algorithm for
a target virtual scene in order to avoid the effect of "blocky" boundaries of shadows (especially
elongated ones), as well as other undesirable artifacts (truncation of shadows, erroneous self-shading,
etc.). To overcome these disadvantages, solutions based on percentage-closer filtering [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], nonlinear
shadow mapping [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ], irregular Z-buffer shadow mapping [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], etc. were proposed.
      </p>
      <p>
        Second major approach is based on constructing and rendering of accurate polygonal model of
shadow volume for each object in the scene [
        <xref ref-type="bibr" rid="ref11 ref12 ref13">11-13</xref>
        ]. Having knowledge about object geometry, shadow
volumes allow to obtain high-quality shadows at any distance from light source. Also supporting stencil
buffers and other required features by modern graphics cards make this approach quite attractive for
real-time rendering. The limitation of this approach is tightly bound to its geometric advantage: to solve
silhouette detection task, a number of restrictions on the allowable geometry representations is imposed.
This leads to complicating data structures and degradation of scaling ability while increasing scene
complexity. If the scene comprises extended object with intricate silhouette (as the relief), then the
implementation of shadow volumes can easily consume the performance of the entire visualization system.
      </p>
      <p>It is important to note that both at first and second approaches, the reliability of relief shadow
rendering will depend not only on shadow algorithm, but also on the reliability of the methods of
constructing and rendering of a 3D relief model. These methods may contain hidden defects or
optimizations that are invisible during the visualization of the 3D model, but revealing when shadows
are rendered. In "Results" section we demonstrate such situation using a simple example.</p>
      <p>
        A completely different principle of shadow rendering is used in the third approach, which involves
working directly with the primary data of 3D model, – a height map of its surface [
        <xref ref-type="bibr" rid="ref14 ref15">14-15</xref>
        ]. This approach
is based on looking up intersections of light source rays with object height map (shadow ray casting),
which allows physically correct shadows from objects of complex shape to obtained, independently of
3D-model construction and visualization methods. However, brute-force ray casting implementation
[
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] including loop checking all map texels lying on ray path, is extremely time-consuming for
realtime visualization. In this regard, there arises the task of developing effective and reliable methods and
algorithms of accelerating ray casting, which preserve the quality of origin ray casting shadows and
ensure guaranteed completion of ray processing loops.
      </p>
      <p>The authors of the research [17] parallelize on the GPU execution of ray processing loops using the
CUDA hardware-software architecture, however, implemented uniform sampling of height map along
the ray can lead to missing some texels and loss of shadow quality. In [18], the task of relief mapping
based on ray casting is considered, where looking up ray - height map intersections is accelerated by
means of pre-calculated cone map. A significant limitation is great increase of cone map construction
time depending on height map size (about 15 minutes for 5122 and about 8 hours for 10242 [19]). The
paper [19] describes the task of real-time visualization of dynamic height maps based on ray casting
accelerated using a maximum mipmaps calculated "on the fly" on the GPU. The authors of the work
[20] extended these ideas of ray casting acceleration to shadow rendering, proposing own
implementation algorithm. As the authors mention, their algorithm suffers from insufficient accuracy
leading to appearing fake shadows and missed terrain parts, which has to be compensated by adding
some pre-displacement to terrain vertices.</p>
      <p>
        Our work takes its origins from our earlier researches on ray casting implementation [21, 22]. Based
on the experience gained, in this work, a core of our shadow ray casting system was developed – a
reliable and accurate algorithm of traversing height map texels along the ray, adapted for the GPU. The
key features of the algorithm are original "transit points" method for accurate height map sampling,
which prevents texel missing (and potential loss of shadow information), as well as performs an
incremental integer transition from texel to texel, which ensures guaranteed progress along the ray and
prevents freezes of ray processing loop due to machine error in the representation of real numbers. An
important advantage of our algorithm over [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] is no dependency from steps of previous iterations,
which allows current step along the ray to be effectively and accurately changed.
      </p>
      <p>During the development of shadow ray casting acceleration method, we, regardless studies [19, 20],
logically came up to a data structure similar to maximum mipmap [19], where not only maximum
heights are stored, but minimum heights too, as well as improved construction method is used,
providing better stitching the mipmap with height map. Checking maximum heights allow large parts
of height map, not involving in shadow formation, to be effectively skipped, while checking minimum
heights allow ray processing to be earlier completed with shadow formation. If ray casting algorithm
contains any inaccuracies or errors, the second check will give fake shadows that are immediately
noticeable on the image. This unique property of our accelerating data structure allowed many
inaccuracies of ray-casting algorithm to be identified and fixed, and, ultimately, a reliable shadow ray
casting system performing entirely on the GPU, to be created. The proposed solution is implemented in
C++ using the GLSL shading language and the OpenGL graphics library.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Our definitions and models</title>
      <p>First, we will describe definitions of detailed height map, shadow ray and shadow coefficient, as
well as some necessary mathematical background, used in our solution.</p>
      <p>
        Detailed height map. Let there be relief section (for simplicity - a unit square), where the height
above sea level for each point is known. Height map is a single-channel 2m × 2m texture, where height
values (in grayscale), sampled by the step of 1 / (2m - 1), are written. Figure 1 shows an example of
constructing 4 × 4 height map. In our work height values are extracted from map by means of bilinear
interpolation [23]. So, for an arbitrary height map point with texture coordinates s, t ∈ [
        <xref ref-type="bibr" rid="ref1">0, 1</xref>
        ], the
following height expression can be written
      </p>
      <p>ℎ( ,  ) = (ℎ , (1 −  ) + ℎ , +1 )(1 −  ) + (ℎ +1, (1 −  ) + ℎ +1, +1 ) , (1)
where ℎ , , ℎ , +1, ℎ +1, , ℎ +1, +1 are height values of four nearest texels forming a square around the
point under consideration (see Figure 1). As it can be seen, interpolated height values will be the closer
to origin heights, the higher is m detail degree of height map. Height maps with m close to screen
resolution (Full HD, 4K) will be referred to as detailed ones (m = 10,..., 12).</p>
      <p>j</p>
      <p>In this paper, detailed height maps of relatively small terrain areas are considered, so that for shadow
construction task the curvature of sea level surface can be neglected, i.e. considered as flat. An example
is the Puget Sound height map [24], being mentioned in many papers related to terrain modeling.</p>
      <p>Shadow ray. Let there be relief model given by height map and the normal n to sea level surface,
as well as infinite light source (the sun) given by direction s to the sun (unit vector). The coordinates of
vectors s and n are set in relief model Object Coordinate System (OCS). Let's choose some two points
A and B of relief model, lying in the same plane with vectors s and n, and determine the shadow at point
A caused by the relief from point B (see Figure 2a). Denote by bshadow boolean flag of shadow presence
at point A (0 - no, 1 - yes). Cast the ray v from point A to point B. Figure 2a shows that the point A will
be in the shadow, if the vector s is directed no higher than the ray v. Define this using mixed product p
[25] of the following vectors</p>
      <p>=  ∙ ( ×  ), (2)
where r = s × n is unit vector, complementing vectors s and n to the right triple. Then the expression
of bshadow flag can be written as
  ℎ
= {
1,   ≤ 0 
0,  ℎ
( ∙  ) ≠ 1,
.</p>
      <p>(3)
If bshadow is 1, then v is shadow ray.</p>
      <p>
        i
ℎ3,0
ℎ0,0
ℎ3,3
ℎ0,3
brightest one, and kdark, kbright ∈ [
        <xref ref-type="bibr" rid="ref1">0, 1</xref>
        ]. Define kshadow as cos(α) (see Fig. 2a) reduced to the range [kdark, kbright]:
  ℎ
=  
+ ( 
ℎ −  
)( ∙  ).
become darker as the sun approaches the horizon (
      </p>
      <p>→  ⁄2), and, conversely, shadows are brighter, when
the sun is at zenith (</p>
      <p>→ 0), what is explained by the contribution of ambient light. Note, that thresholds
kdark and kbright are specified based on brightness range used for virtual scene rendering. This is especially
actual for modern visualization systems, where rendering is performed in high dynamic range [26].
n
A</p>
      <p>kshadow</p>
    </sec>
    <sec id="sec-4">
      <title>4. Proposed solution</title>
      <p>Consider the task of constructing shadows on the image of relief 3D model, synthesized at
visualization stage. Let’s choose an arbitrary pixel of this image. Chosen pixel corresponds to some
point P of relief model and point P’ on height map. Denote by s’ the track of sun ray drawn from the
point P’ (in texture space), and by T - the set of texels intersected by the track s’ (see Figure 3). Each
Ti,jth texel has corresponded interpolated point Pi,j of relief model (honestly, each (i, j)th section of the
track s’ has corresponded interpolated curve on relief model, however, this can be neglected on detailed
height map). Denote by vi,j the ray casted from point P to point Pi,j. As it can be seen, the point P will
be in the shadow, if at least one of all vi,jth rays is shadow ray. Then to solve the task, every pixel of
relief image, having vi,jth shadow ray, should be extracted, and its brightness decreased by kshadow times.</p>
      <p>T
(0,1)</p>
      <p>i
(0,0)
 ′
  ,
j
(1,1)</p>
      <p>′
(1,0)</p>
      <p>S
t0</p>
      <p>T
(0,1)
i+1</p>
      <p>i
(0,0)
 
s0
 
(1,0)</p>
      <p>S</p>
      <p>In this work, pixels of relief image that to be shadowed, are extracted completely on the GPU, in
parallel, independently of each other using developed fragment shader. This shader checks the texels of
the "footprint" of the track s' either until the first Ti,jth pixel having shadow ray vi,jth will be detected,
or until the "footprint" will end. This checking includes the following steps: (a) extracting height value
from the Ti,jth texel; (b) constructing vi,jth ray and checking its belonging to shadow rays, and (c) moving
to the next Ti,jth texel. Step (b) can be found in the previous Section, so we focus on steps (a) and (c).</p>
      <p>To avoid the formation of "torn" shadow edges, we extract height value from the Ti,jth texel using
bilinear interpolation (see Eq. (1)) and take each sampling point Ps as the average of two transit points:
input point Pin and output point Pout of the track s' in the Ti,jth texel (see Figure 4). As it can be seen
from the figure, the point Pout of the Ti,jth texel will be the point Pin for the Ti+1,jth texel, thus, when
checking each Ti,jth texel, it is enough to calculate only one transit point Pout. Denote by u unit vector
of track s’ direction, then coordinates of the point Pout can be written in parametric form Pout = Pin + ut.
The calculation of t parameter, as well as shifts (ioffset, joffset) of next texel along the track (step (c)), are
implemented in developed algorithm A1.</p>
      <sec id="sec-4-1">
        <title>Algorithm A1</title>
        <p>1. Write texture coordinates array K for 4 corners of Ti,jth texel:</p>
        <p>
          K[
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] = { {s0, t0}, {s0 + ds, t0}, {s0, t0 + dt}, {s0 + ds, t0 + dt} },
where ds = 1.0 / w, dt = 1.0 / h, and w, h are height map width and height (in texels).
2. If (|ux| ≤  ) and (|uy| ≤  ), then //  - machine error of real numbers.
        </p>
        <p>t = -1; (ioffset, joffset) = (0, 0); exit the algorithm.
3. Calculate the number ncorn of the corner of Ti,jth texel, which is intersected by track s’:
ncorn = b0 + 2b1, where b0, b1 are boolean flags, b0 = (|ux| ≥ 0), b1 = (|uy| ≥ 0).
4. Write the difference dP = K[ncorn] - Pin.
5. If (|ux| ≤  ), then: t = |dPy|/|uy|; (ioffset, joffset) = (sign(uy), 0); exit the algorithm.
6. If (|uy| ≤  ), then: t = |dPx|/|ux|; (ioffset, joffset) = (0, sign(ux)); exit the algorithm.
7. Write tVec = dP/u and boolean flags b3 = (tVecx ≤ tVecy), b4 = (tVecy ≤ tVecx).
8. t = min(tVecx, tVecy); (ioffset, joffset) = (sign(uy) ∙ b4, sign(ux) ∙ b3).</p>
        <p>End of the algorithm.</p>
        <p>In practice, visiting all texels is not always necessary and effective, since height maps almost always
contain large areas (plains, valleys, etc.) not involved in shadow constructing (provided not very low
sun altitude). We localize such areas and skip them when our checking algorithm reaches such area
border. To localize the areas, the mipmap {hmax, hmin} of maximum and minimum heights is created. It
is an ordered set of two-channel textures (R and G components) with the following properties:
1) For 0th map (the first one):
- dimensions are two times smaller than height map - 2m-1 × 2m-1 (similar to classic mipmaps [27]);
- each (i0, j0)th texel stores hmax, hmin values sampled from height map using 3 × 3 matrix (see Fig. 5a);
2) For kth map (except 0th):
- dimensions are two times smaller than (k-1)th map, but 1 × 1 map is not created;
- each (ik, jk)th texel stores hmax, hmin values sampled from (k-1)th map using 2 × 2 matrix (see Fig. 5b).
i0</p>
        <p>T
i
8
7
6
1
0
5
j
2
3
4
(a)
j0</p>
        <p>S
ik</p>
        <p>T
ik-1
(b)
1
0
jk-1
jk
2
3</p>
        <p>S</p>
        <p>Note, that in 3 × 3 matrix sampling points are upper right corners of 0,…,8th texels of height map,
and sampling is performed using bilinear interpolation (GL_LINEAR, see Eq. (1)). In 2 × 2 matrix
sampling points are centers of 0,…,3th texels of (k-1)th map, and sampling is performed using the
"nearest neighbor" principle (GL_NEAREST). The mipmap {hmax, hmin} is constructed "on the fly" on
the GPU by means of developed fragment shader once before visualization.</p>
        <p>Let the mipmap {hmax, hmin} contain just 2 maps (for
simplicity). Introduce the following definitions (see Figure 6):</p>
        <p>- l is level of detail (LOD): 0 is height map, 1 and 2 are 0th
and 1st maps of mipmap {hmax, hmin};
- (i, j) are (row, column) numbers of start texel at 0th LOD;
- (icur,l, jcur.l), (inext,l, jnext,l) are (row, column) numbers of
current and next texel along the ray at lth LOD;
- Pout is output point of the ray in start texel;
- Pout,l is output point of the ray in (icur,l, jcur.l)th texel;
- P is the point on relief model (in OCS), corresponding to P’;
- Pmin,l, Pmax,l are the minimum and the maximum points of
relief model (in OCS), corresponding to (icur,l, jcur.l)th texel (at 0th
LOD Pmin,l equals to Pmax,l).</p>
        <p>The progress along the ray, accelerated by means of the
mipmap {hmax, hmin}, is implemented in our developed
algorithm A2.</p>
      </sec>
      <sec id="sec-4-2">
        <title>Algorithm A2</title>
        <p>1. Initialization.</p>
        <p>Calculate P and (i, j), as well as kshadow by equation (4).</p>
        <p>Set Pin = P’ in the algorithm A1.</p>
        <p>Calculate Pout and (inext,0, jnext,0) by means of algorithm A1.</p>
        <p>Set Pin = Pout in the algorithm A1. Set l = 2, k = 1.
2. Ray-casting loop.
height map dimensions:
Do loop while at least one of (icur,0, jcur.0) will go beyond</p>
        <p>Calculate (icur,l, jcur,l) from (inext,0, jnext,0).</p>
        <p>Calculate Pout,l and (inext,l, jnext,l) by means of algorithm A1.</p>
        <p>If l &gt; 0, then do minimum height test:</p>
        <p>Calculate Pmin,l based on Pout, l and hmin sampled
from (icur,l, jcur,l)th texel.</p>
        <p>Calculate for the ray v = (Pmin,l - P) the flag
bshadow by equations (2) and (3);</p>
        <p>If bshadow equals 1, then k = kshadow, exit the loop.</p>
        <p>Do maximum height test:</p>
        <p>If l equals to 0, then:</p>
        <p>texel.</p>
        <p>Otherwise:</p>
        <p>Calculate Pmax,0 based on Ps (see Fig.
4) and h sampled from (icur,0, jcur,0)th
 = 2
  , 2
 = 1
 = 0
 ,2


 ,1

 ,0</p>
        <p>′
 ′
 ′</p>
        <p>Calculate for the ray v = (Pmax,l - P) the flag bshadow by equations (2) and (3);
If bshadow equals to 1, then:
Otherwise:</p>
        <p>If l equals to 0, then k = kshadow, exit the loop.</p>
        <p>Otherwise: l = l-1.</p>
        <p>Set (icur,l, jcur,l) = (inext,l, jnext,l). Calculate (icur,0, jcur.0) from Pout,l.</p>
        <p>Set Pin = Pout,l in the algorithm A1. Set l = 2.
3. Set pixel color: C = kC.</p>
        <p>End of the algorithm.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Results</title>
      <p>Based on methods and algorithms proposed, a software complex for real-time rendering dynamic
relief shadows was developed. The complex is a part of the VirSim virtual environment system [28],
developed at the Federal State Institution "Scientific Research Institute for System Analysis of the
Russian Academy of Sciences".</p>
      <p>
        We carried out a number of comparative shadow visualization tests using common cascaded shadow
mapping method (CSM) varied in configurations, and our shadow ray casting implementation. For this,
we integrated our solution into well-known NVidia CSM implementation, available at [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. To
stresstest both methods, we created two tricky height maps: "spikes" with 5 elongated thin cones (see Figure
7) and "steps", which yields a 3D model with non-closed surface (see Figure 8). Moreover, multiple
tests were carried out using classic Grand Canyon height map of size 2K×2K (see Figure 9) and Puget
Sound height map of sizes 1K×1K, 2K×2K and 4K×4K (see Figure 10), available at [24].
      </p>
      <p>Figure 7 shows examples of cases where "spike"-test reveals hidden CSM method drawbacks: (a-c)
some shadows are torn off from spikes or are passed through them; (e-g) sawtooth shadow edges are
appeared (when increasing CSM resolution, edge appearance looks better, but sawtoothness remains
still noticeable); (i) conical shape of spike shadow is lost (even at 4K CSM). Our ray casting
implementation produces accurate spike shadows with smooth edges in all the above cases (d, h, j).</p>
      <p>Figure 8 illustrates results of reliability test where shadows of steps model, having front (visible)
faces only from one side, are visualized. Due to enabled back face culling optimization, CSM method
failed to produce some of the shadows (left image). In our implementation shadows are produced
completely (right image), because object's height map is directly used, and there is no dependency on
3D model construction and visualization methods.</p>
      <p>As tests on the Grand Canyon and the Puget Sound height maps showed, dynamic shadow loss is
possible in CSM method at long (see Figure 9a) or middle (see Figure 10a, along the lake) distances
due to insufficiently close/distant location of intermediate clipping planes. For the same reason, a
sawtooth silhouette of elongated mountain shadows may appear (see Figure 10c). In our ray casting
implementation all relief shadows are accurately drawn with high detailing, regardless of distances they
are located at and sun altitude (see Figures 9b, 10b, 10d).</p>
      <p>All tests described were performed at 1920×1080 screen resolution on personal computer (Intel
Core i7-6800K 3.40GHz, 16Gb RAM, Windows 10 Pro) equipped with graphics card NVidia GeForce
RTX 2080 (2944 cores, 8 GB VRAM, 16x anisotropic filtering, 8x anti-aliasing). Table 1 contains
results of performance measurement of the Puget Sound shadow rendering for both methods.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Acknowledgements</title>
      <p>The publication is made within the state task of Federal State Institution “Scientific Research
Institute for System Analysis of the Russian Academy of Sciences” on “Carrying out basic scientific
researches (47 GP)” on topic No. FNEF-2021-0012 “Virtual environment systems: technologies,
methods and algorithms of mathematical modeling and visualization. 0580-2021-0012” (Reg. No.
121031300061-2).</p>
    </sec>
    <sec id="sec-7">
      <title>7. References</title>
      <p>[17] T. Aslandere, M. Flatken, A. Gerndt, A Real-Time Physically Based Algorithm for Hard Shadows
on Dynamic Height-Fields, in: Proceedings of 12. Workshop der GI-Fachgruppe on Virtuelle und
Erweiterte Realität, Aachen Verlag, Bonn, 2015, pp. 101–112. URL: https://elib.dlr.de/101497/.
[18] F. Policarpo, M.M. Oliveira, Relaxed Cone Stepping for Relief Mapping, in: H. Nguyen (Ed.),
GPU Gems 3, Addison-Wesley Professional, 2007, pp. 409–428. URL:
https://developer.nvidia.com/
gpugems/gpugems3/part-iii-rendering/chapter-18-relaxed-conestepping-relief-mapping.
[19] A. Tevs, I. Ihrke, H.-P. Seidel, Maximum Mipmaps for Fast, Accurate, and Scalable Dynamic
Height Field Rendering, in: Proceedings of the 2008 Symposium on Interactive 3D Graphics and
Games (I3D ’08), New York, NY, 2008, pp. 183–190. doi:10.1145/1342250.1342279.
[20] D. Jung, F. Schrempp, S. Son, Optimally Fast Soft Shadows on Curved Terrain with Dynamic</p>
      <p>Programming and Maximum Mipmaps, 2020. URL: https://arxiv.org/pdf/2005.06671.pdf.
[21] M.V. Mikhaylyuk, D.A. Kononov, D.M. Loginov, The method for calculating the set of cells in
2D square grid intersected by a given ray, Trudy NIISI RAN/Proc. SRISA RAS 9.1 (2019): 44-48
(in Russian). doi:10.25682/NIISI.2019.1.0006.
[22] P.Yu. Timokhin, K.D. Panteley, E.M. Vozhegov, A.M. Trushin, Constructing on the GPU
maximum intensity projection of 3D scalar fields of digital core material model, Trudy NIISI
RAN/Proc. SRISA RAS 9.3 (2019): 58-65 (in Russian). doi:10.25682/NIISI.2019.3.0008.
[23] M. Segal, K. Akeley, The OpenGL Graphics System: A Specification, Version 4.6, Core Profile,
The Khronos Group Inc., 2006-2019. URL: https://www.khronos.org/registry/OpenGL/specs/gl/
glspec46.core.pdf.
[24] Large Geometric Models Archive (Puget Sound, Grand Canyon), Georgia Institute of Technology,</p>
      <p>URL: https://www.cc.gatech.edu/projects/large_models/.
[25] H. Lass, Vector and Tensor Analysis, International series in pure and applied mathematics, 1st.</p>
      <p>ed., McGraw-Hill Book Company, Inc., New York, NY, 1950.
[26] M.V. Mikhaylyuk, P.Y. Timokhin, M.A. Torgashev, The Method of Real-Time Implementation
of Tone Mapping and Bloom Effect, Programming and Computer Software 41.5 (2015): 289-294.
doi:10.1134/S0361768815050084.
[27] E. Lengyel, Mathematics for 3D Game Programming and Computer Graphics, 3rd. ed., Course</p>
      <p>Technology, Boston, MA, 2012.
[28] M.V. Mikhaylyuk, A.V. Maltsev, P.Y. Timokhin, E.V. Strashnov, B.I. Kryuchkov, V.M. Usov, The VirSim
Virtual Environment System for the Simulation Complexes of Cosmonaut Training, Scientific Journal
Manned Spaceflight 4 (2020): 72-95 (in Russian). doi:10.34131/MSF.20.4.72-95. URL:
http://www.gctc.ru/media/files/Periodicheskie_izdaniya/ppk_2020_4_total_37/5_stat.a_mihailuk_pq.pdf</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>V.A.</given-names>
            <surname>Frolov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.G.</given-names>
            <surname>Voloboy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.V.</given-names>
            <surname>Ershov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.A.</given-names>
            <surname>Galaktionov</surname>
          </string-name>
          ,
          <article-title>The current state of the methods for calculating global illumination in tasks of realistic computer graphics</article-title>
          ,
          <source>Trudy ISP RAN/Proc. ISP RAS 33.2</source>
          (
          <year>2021</year>
          ):
          <fpage>7</fpage>
          -
          <lpage>48</lpage>
          (in Russian).
          <source>doi:10</source>
          .15514/ISPRAS-2021-
          <volume>33</volume>
          (
          <issue>2</issue>
          )-
          <fpage>1</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>V.V.</given-names>
            <surname>Sanzharov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.A.</given-names>
            <surname>Frolov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.A.</given-names>
            <surname>Galaktionov</surname>
          </string-name>
          ,
          <source>Survey of Nvidia RTX Technology, Programming and Computer Software 46.4</source>
          (
          <year>2020</year>
          ):
          <fpage>297</fpage>
          -
          <lpage>304</lpage>
          . doi:
          <volume>10</volume>
          .1134/S0361768820030068.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.V.</given-names>
            <surname>Mikhaylyuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.Y.</given-names>
            <surname>Timokhin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.V.</given-names>
            <surname>Maltsev</surname>
          </string-name>
          ,
          <article-title>A Method of Earth Terrain Tessellation on the GPU for Space Simulators, Programming</article-title>
          and
          <source>Computer Software 43.4</source>
          (
          <year>2017</year>
          ):
          <fpage>243</fpage>
          -
          <lpage>249</lpage>
          . doi:
          <volume>10</volume>
          .1134/S0361768817040065.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Kh. Barladian</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.G.</given-names>
            <surname>Voloboy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.Z.</given-names>
            <surname>Shapiro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.B.</given-names>
            <surname>Deryabin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.V.</given-names>
            <surname>Valiev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.V.</given-names>
            <surname>Andreev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Yu.A.</given-names>
            <surname>Solodelov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.A.</given-names>
            <surname>Galaktionov</surname>
          </string-name>
          ,
          <article-title>Safety critical visualization of the flight instruments and the environment for pilot cockpit</article-title>
          ,
          <source>Scientific Visualization 13.1</source>
          (
          <year>2021</year>
          ):
          <fpage>124</fpage>
          -
          <lpage>137</lpage>
          . doi:
          <volume>10</volume>
          .26583/sv.13.1.09.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Dimitrov</surname>
          </string-name>
          , Cascaded shadow maps, Developer Documentation, NVIDIA Corp.,
          <year>2007</year>
          . URL: http://developer.download.nvidia.com/SDK/10/opengl/samples.html#cascaded_shadow_maps.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Fan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Sun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Xu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K. L.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <article-title>Parallel-Split Shadow Maps for Large-Scale Virtual Environments</article-title>
          ,
          <source>in: Proceedings of the 2006 ACM International Conference on Virtual Reality Continuum and its Applications (VRCIA '06)</source>
          , Association for Computing Machinery, New York, NY,
          <year>2006</year>
          , pp.
          <fpage>311</fpage>
          -
          <lpage>318</lpage>
          . doi:
          <volume>10</volume>
          .1145/1128923.1128975.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Bunnell</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pellacini</surname>
          </string-name>
          , Shadow Map Antialiasing, in: R. Fernando (Ed.), GPU Gems:
          <article-title>Programming Techniques, Tips and Tricks for Real-Time Graphics, 1st</article-title>
          . ed.,
          <source>Addison-Wesley</source>
          ,
          <year>2004</year>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>192</lpage>
          . URL: https://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch11.html.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>P.</given-names>
            <surname>Rosen</surname>
          </string-name>
          ,
          <article-title>Rectilinear texture warping for fast adaptive shadow mapping</article-title>
          ,
          <source>in: Proceedings of the ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games (I3D</source>
          <year>2012</year>
          ),
          <year>2012</year>
          , pp.
          <fpage>151</fpage>
          -
          <lpage>158</lpage>
          . doi:
          <volume>10</volume>
          .1145/2159616.2159641.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.E.</given-names>
            <surname>Lefohn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Sengupta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.D.</given-names>
            <surname>Owens</surname>
          </string-name>
          ,
          <string-name>
            <surname>Resolution-Matched Shadow</surname>
            <given-names>Maps</given-names>
          </string-name>
          ,
          <source>ACM Transactions on Graphics 26.4</source>
          (
          <year>2007</year>
          )
          <article-title>: article 20</article-title>
          . doi:
          <volume>10</volume>
          .1145/1289603.1289611.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.S.</given-names>
            <surname>Johnson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.R.</given-names>
            <surname>Mark</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.A.</given-names>
            <surname>Burns</surname>
          </string-name>
          ,
          <article-title>The Irregular Z-Buffer and its Application to Shadow Mapping</article-title>
          , Department of Computer Sciences and Texas Advanced Computing Center of the University of Texas at Austin,
          <year>2004</year>
          . URL: https://www.cs.utexas.edu/ftp/techreports/tr04-
          <fpage>09</fpage>
          .pdf.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>V.</given-names>
            <surname>Forest</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Barthe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Paulin</surname>
          </string-name>
          ,
          <article-title>Realistic soft shadows by penumbra-wedges blending</article-title>
          ,
          <source>in: Proceedings of the 21st ACM Siggraph/Eurographics symposium on Graphics hardware (GH '06)</source>
          ,
          <year>2006</year>
          , pp.
          <fpage>39</fpage>
          -
          <lpage>46</lpage>
          . doi:
          <volume>10</volume>
          .1145/1283900.1283907.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>M.</given-names>
            <surname>Stich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Wächter</surname>
          </string-name>
          , A. Keller,
          <article-title>Efficient and Robust Shadow Volumes Using Hierarchical Occlusion Culling and Geometry Shaders</article-title>
          , in: H.
          <string-name>
            <surname>Nguyen</surname>
          </string-name>
          (Ed.),
          <source>GPU Gems 3</source>
          ,
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2007</year>
          , pp.
          <fpage>239</fpage>
          -
          <lpage>256</lpage>
          . URL: https://developer.nvidia.com/gpugems/gpugems3/part
          <article-title>-iilight-and-shadows/chapter-11-efficient-and-robust-shadow-volumes-using.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Fu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Yang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Sheng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Mao</surname>
          </string-name>
          ,
          <article-title>Dynamic Shadow Rendering with Shadow Volume Optimization</article-title>
          , in: N.
          <string-name>
            <surname>Magnenat-Thalmann</surname>
          </string-name>
          et al. (Eds.),
          <source>Advances in Computer Graphics, Proceedings of the 37th Computer Graphics International Conference, CGI</source>
          <year>2020</year>
          ,
          <article-title>LNCS</article-title>
          , vol.
          <volume>12221</volume>
          , Springer Nature Switzerland,
          <year>2020</year>
          , pp.
          <fpage>96</fpage>
          -
          <lpage>106</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -61864-
          <issue>3</issue>
          _
          <fpage>9</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Brawley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tatarchuk</surname>
          </string-name>
          , Parallax Occlusion Mapping:
          <article-title>Self-Shadowing, Perspective-Correct Bump Mapping Using Reverse Height Map Tracing</article-title>
          , in: W. Engel (Ed.),
          <article-title>ShaderX3: Advanced Rendering with DirectX and OpenGL</article-title>
          , 1st. ed.,
          <source>Charles River Media</source>
          ,
          <year>2004</year>
          , pp.
          <fpage>135</fpage>
          -
          <lpage>154</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Sakalauskas</surname>
          </string-name>
          , Hybrid Terrain Shadow Ray Casting, in: S.
          <string-name>
            <surname>Cunningham</surname>
          </string-name>
          , V. Skala (Eds.),
          <source>Proceedings of the 16-th International Conference in Central Europe on Computer Graphics, Visualization and Computer Vision</source>
          (WSCG '
          <year>2008</year>
          ), University of West Bohemia, Plzen,
          <year>2008</year>
          , pp.
          <fpage>175</fpage>
          -
          <lpage>182</lpage>
          . URL: http://wscg.zcu.cz/wscg2008/Papers_2008/short/!_WSCG2008_
          <article-title>Short_final</article-title>
          .zip.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>J.</given-names>
            <surname>Amanatides</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Woo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A Fast</given-names>
            <surname>Voxel</surname>
          </string-name>
          <article-title>Traversal Algorithm for Ray Tracing</article-title>
          ,
          <source>in: Proceedings of the 8th European Computer Graphics Conference and Exhibition (Eurographics '87)</source>
          , Amsterdam,
          <year>1987</year>
          , pp.
          <fpage>3</fpage>
          -
          <lpage>10</lpage>
          . URL: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.3443.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>