<!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>Real-time Rendering of Small-scale Volumetric Structure on Animated Surfaces</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Artemiy Leshonkov</string-name>
          <email>artemiy.leshonkov@graphics.cs.msu.ru</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Vladimir Frolov</string-name>
          <email>vfrolov@graphics.cs.msu.ru</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Keldysh Institute of Applied Mathematics</institution>
          ,
          <addr-line>Miusskaya sq., 4, Moscow, 125047</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Lomonosov Moscow State University</institution>
          ,
          <addr-line>GSP-1, Leninskie Gory, Moscow, 119991</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>There are a lot of methods for rendering of shell-space geometry, represented through voxel texture, known for today. While the topic is well studied in terms of techniques for applying this geometry onto surfaces, a little attention was paid to representation of sub-pixel details of the geometry. Such details are prone to produce aliasing artifacts and reduce performance due to bad cache utilization. In this paper we solve these problems by introducing levels of detail for voxel textures within shell mapping technique. The main problem here is that less detailed levels begin to contain semi-transparent voxels on the edge of an encoded surface, which requires additional handling. For this we present a new approach for order independent transparency rendering based on depth peeling. We extend the algorithm by adding additional resolving pass which allows to fully utilize hardware z-buffering to reduce amount of overdraw. This significantly reduces cost of each subsequent peeling pass. Empirically, 3-4 of such passes is enough to produce good quality results in most cases. Another issue with shell mapping techniques is that shell geometry is constructed offline, making base surface to be static. By slightly modifying the method, we made the construction to be performed on-the-fly on GPU and be applicable for animated surfaces. real-time rendering, shell mapping, levels of detail, order independent transparency</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Simulation of small-scale features on a surface is important task in many real-time applications
(fig.1). In garment prototyping there are knitwear, fur and other complex materials. In videogames and,
for example, flight simulators there is often a need to render grass, forests or other plants at far distance.
In architecture we often have surfaces with small repetitive patterns, such as fences, bricks etc. Usually
it’s being done by simply applying 2D texture, representing such details, or by rendering lots of textured
quads. Such approach is fast, but coarse. So, there are multiple techniques to accurately represent
complex structure on surfaces either directly by geometry [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1-3</xref>
        ] or implicitly through volumetric
texturing [
        <xref ref-type="bibr" rid="ref4 ref5 ref6">4-6</xref>
        ] without need to construct all of the details by hand.
      </p>
      <p>Simulation through geometry allows us to get accurate results by the cost of vertex processing and
memory consumption. For example, to render a chainmail using geometry, we have to model each ring
through primitives and then process all of their vertices during rasterization. The more rings we have,
the more vertices we need to process, thus making rendering to be expensive when rings are small and
there is too much of them.</p>
      <p>2021 Copyright for this paper by its authors.</p>
      <p>
        In the case of implicit representation of structure through a volumetric texture, either procedural or
as three-dimensional array of texels, detail applying becomes similar to usual texture mapping and there
is no need to process vertices of the details themselves. Therefore, the rendering time is defined by the
amount of pixels being rasterized and vertex count of the surface, to which details are applied. Further
we will refer to such surface as a base surface or a base mesh as in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. As example, we can take only
small voxelized piece of, again, a chainmail and repetitively apply it to the base surface as a texture,
without need to simulate each ring separately.
      </p>
      <p>So, in theory, we can simulate repetitive volumetric structure on a surface at any scale without extra
cost by simply adjusting its texture coordinates. But in real case, without changing texture resolution
we will lose performance and get aliased noisy image. This is because as we scale details down, we will
have bigger distance in texture space between neighboring pixels of the final image. It causes worse
cache usage, when sampling the texture, and aliasing artifacts appearing, as we omit more texture data.</p>
      <p>
        This is a common problem with texture mapping and it’s being solved by using a mip map [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] – a
set of images, representing different resolutions of the texture from high to low. In 2D case we just
sample corresponding mip image based on the scale of texture we apply. However, this is not so trivial
when we represent some volumetric objects through a 3D texture. In lower resolution mips we should
take into account such phenomena, as self shadowing, view dependent partial transparency and
increasing roughness. In this paper we focus on the problem of partial transparency appearing on the
edges of these volumetric objects in 3D mip images (further just mips). It appears because of blending
between transparent and opaque texels during mips downscaling process. Opaque texels represent the
detail objects, while transparent represent empty space.
      </p>
      <p>So, our main contribution is a method to render, in general, semi-transparent details applied to a base
surface. The approach takes its advantage from the case when semi-transparency originally comes from
lower resolution mips of a texture representing some opaque object. With it a lot of shading calculations
is being omitted by culling invisible parts of the details we simulate. It allows us to use mip-mapping
for detail’s textures, thus making implicit detail representation to be scalable without extra cost and
without strong artifacts.</p>
      <p>
        For applying a 3D texture on a base surface we use a real-time adaptation [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] of a method named
shell mapping, originally introduced in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Applying is performed by constructing a shell of
tetrahedrons over the base surface and then, when rendering, tracing the texture inside each one using
sphere tracing [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. A disadvantage here is that the shell’s tetrahedrons are constructed in preprocessing
step on CPU. It prevents from using the method on arbitrarily animated surfaces. For example, some
real-time soft body physics simulation can’t be performed on the base surface. However, the
construction process can be easily modified to be doable on-the-fly on GPU.
      </p>
      <p>So, our second contribution is extension of current methods to be applicable to animated surfaces.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related work</title>
      <p>The methods for applying volumetric details onto a base surface can be roughly divided into two
main categories by way of detail’s representation: directly through geometry and implicitly through
textures.</p>
      <p>Methods from the first category, geometry based methods, allow us to produce accurate results,
including non-repetitive structures over base mesh, directly through geometry.</p>
      <p>
        Some methods construct the detail geometry in preprocessing step. Mesh quilting [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] uses synthesis
of geometry over surface from given example patch. The method eliminates distortions, produced by
texture mapping techniques. But all the generated geometry should then be stored in memory, which
makes this method inappropriate for simulating big amount of small details.
      </p>
      <p>
        Recent investigations made it possible to transfer style of example geometry onto a basic surface
using neural networks [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. All the generated geometry should then be stored in memory and be
processed when rendering. So, it shares the same disadvantages as the previous method.
      </p>
      <p>
        Deferred warping [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] allows you to attach detail geometry without need to store all of it in memory.
While it’s useful for attaching mid or high scale details, it’s still suffers, as other geometric methods,
from increasing computational cost when the amount of details becomes big, while their scale becomes
small. The method focuses mostly on cloth rendering in garment prototyping applications. Also there
is an approach for cloth rendering on fiber level [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], but it’s applicable only for this specific cloth
visualization.
      </p>
      <p>
        The common disadvantage of all of these methods is the necessity to process all of the detail
geometry, which makes them not scalable in terms of processing time: without special handling through
levels of detail, it will increase if scale of the details will decrease. Also, only [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] directly supports free
deformation of the base surface.
      </p>
      <p>Methods from the second category, image based methods, allow us to easily scale and transform
details by simply adjusting texture coordinates. But their rendering process is more complicated – we
need to somehow trace objects inside the texture, which we apply onto the base surface. We will refer
to such texture as input texture.</p>
      <p>
        The simplest of the methods [
        <xref ref-type="bibr" rid="ref11 ref12">11, 12</xref>
        ] use height maps to represent relief on a surface. Extension of
such methods was proposed in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], which allow simulation of more complex surfaces. All of the
methods require storing only 2D texture and doesn’t require definition of shell space. However, they’re
limited by representing only relief details, without ability to represent random structures.
      </p>
      <p>
        To represent such structures, shell mapping was proposed [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The main idea of the method is to
construct a volumetric shell of tetrahedrons over the base surface and use each tetrahedron for bijective
mapping between world and texture spaces. This way we can render each tetrahedron separately by
tracing the input texture inside it, making the method appropriate for interactive and real-time rendering
through rasterization of the tetrahedrons.
      </p>
      <p>
        So, in [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] was proposed a method for rendering semi-transparent surface structure using shell
mapping. The big disadvantage of the method is that the constructed tetrahedrons should be sorted every
frame, which makes performance of the method to be highly dependent on the number of polygons in
the base mesh.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] was proposed a real-time rendering approach for shell mapping, which doesn’t require
tetrahedrons sorting. The brief description of the method is as follows. In preprocessing step we first
make an offset surface by extruding the base surface towards vertex normals. Then corresponding
triangles of the base and the offset mesh are connected, forming “prisms” (not in their mathematical
sense). Each prism is then being split into 3 tetrahedrons, each forming an affine mapping between
world and texture spaces. Now, by rasterizing all the tetrahedrons and tracing the texture inside each
one, using affine mapping, we are getting volumetric details on the base surface. Tracing inside the
texture space is done by using sphere tracing [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. An SDF for it is stored in a separate texture. To
discard invisible elements a depth buffer is used.
      </p>
      <p>
        As previous methods use tetrahedral representation of the shell, which causes texture distortions due
to affine mapping, smooth and curved shell mapping [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] was developed to eliminate them by the cost
of rendering time.
      </p>
      <p>All of the methods, however, don’t take into account possible levels of detail for the input texture
through mip mapping. Another general disadvantage of the methods is that shell construction is done
in the preprocessing step, which prevents using arbitrary animations on the base surface.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] was proposed a different approach for rendering shell space textures. Instead of tracing a
texture inside prisms, it searches areas of intersection between planes facing towards camera and shell
prisms, then render these areas from back to front. Such a method is capable of drawing
semitransparent details, thus allowing usage of levels of detail for volumetric textures. However, as we have
to draw all of the areas without discarding invisible parts, there is significant overdraw, especially when
the surface to be textured is big, as we have to cover all of the space by these planes.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Proposed methods</title>
      <p>
        As was said in the introduction, we use real-time adaptation of shell mapping [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] as a method for
applying details, represented through volumetric texture, to a base surface. Note, that there is no strict
dependency on this method and the proposed algorithm for semi-transparent details rendering can be
also used with smooth and curved shell mapping [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
      </p>
      <p>
        First, we describe our approach for rendering shells with levels of detail, where semi-transparent
parts appear in downscaled mips. For this we proposed an algorithm for order independent transparency
based on depth peeling [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. The main point of the method is to discard invisible parts with hardware
z-test, thus reducing rendering time each pass. This is archived by splitting each pass into multiple steps,
which also minimizes amount of expensive lighting calculations.
      </p>
      <p>After that we describe the proposed approach for shell geometry construction. By simplifying prism
pattern defining process, we make the tetrahedrons or prisms to be constructible on GPU. To optimize
memory and time consumption it’s being done in two stages – first for vertex transformations and
second for shell construction and calculation of intersections with tetrahedrons planes, which is needed
for further ray tracing when performing rendering.
3.1.</p>
    </sec>
    <sec id="sec-4">
      <title>Shell rendering with levels of detail</title>
      <p>
        Construction of level of detail for volumetric textures involves appearance of semi-transparent parts
on the edges of the surface, encoded in a texture. To render them, we need to implement order
independent transparency, as sorting of tetrahedrons is too expensive. Especially, first K
semitransparent layers need to be found to get a stable and good quality result. So techniques with linked
list construction [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ], with transmittance approximation [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] or stochastic transparency [18] aren’t
appropriate. An accepted method is depth peeling, introduced in [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. It has different more advanced
variants, such as [19, 20]. All of the approaches for depth peeling, though, have the following
disadvantages.
      </p>
      <p> Culling of parts, which are on or in front of the last rendered layer, is performed within shader
instead of with hardware depth test. It involves discard operations, which depend on texture reads.
This, first, makes each pass more expensive. Second, all of the geometry should be re-rendered every
pass, even parts, which are from already rendered layers.
 Lighting for a current layer is conditionally done in the same draw call with depth finding. So,
a very high wave divergence appears when performing fragment shading stage, especially when we
have discards in a shader (in our case we discard pixels for which there are no intersections with the
implicit surface). It causes the hardware to perform both lighting and layer depth finding, instead of
something one, most of the time.</p>
      <p>These disadvantages make every depth peeling pass equally expensive due to bad hardware
utilization. So the idea of our method is to utilize hardware depth test to cull as much pixels as possible.
This way we can avoid a lot of unnecessary GPU work.</p>
      <p>Basically, our algorithm is a modification of depth peeling technique, where we render transparent
layers one by one until we reach the last layer or exceed maximum amount of layers. This maximum is
a user defined parameter. Each rendering pass we render one new transparency layer and blend it with
previously rendered ones. The key difference is that we utilize hardware z-buffer for culling already
rendered or invisible parts but not the slow software culling inside shaders.</p>
      <p>Each pass is performed in 4 steps. First step is for finding new layer depth, as in depth peeling, but
without shading. We move shading into a separate step to minimize amount of lighting calculations and
to perform them only for visible pixels. Two more steps are intermediate steps, which are used to
construct and update the depth buffer based on current layer’s depth, found on the first step, and
opaqueness info, updated on the shading step. We can write the maximum depth value into the depth
buffer to cull these pixels in subsequent passes. This way a lot of pixels will be culled because every
mip-level represents some opaque surface and has transparent parts only on the edges. So usually the
first rendered layer will be already opaque for most of the pixels and all the pixels behind them from
subsequent layers will be invisible.</p>
      <p>The detailed description of each step within a pass is following (schematic example of them is shown
at Figure 2).</p>
      <p>1. Layer depth finding. On this step the depth of a new layer is being searched. It’s being done
by setting previous layer depth as z-buffer with read-only mode. As in original depth peeling, the
nearest depth is being written as output color with ‘min’ blending function. The problem here is that
we have to search intersection with the encoded surface to determine whether the fragment should
be discarded or not. Without it we’d have transparent parts occupying each layer and the algorithm
would require way more passes to produce a correct image.
2. Depth conversion #1. This full-screen step is used for several purposes. First, it converts the
found depth of a new layer into z-buffer by changing fragment depth in the shader. Note that we
can’t just copy a texture into hardware z-buffer and should do this trick because of hardware
restrictions. Second, we compare depth of a new layer with the previous scene’s depth: if the layer’s
depth is greater than one from the previous scene, the layer’s fragment should be culled and a value,
corresponding to far culling plane (z_max), be written into z-buffer as all layers behind will also
have greater depth.
3. Layer shading. On this step shading is performed for the new layer. The step is performed
with z-function set to ‘equal’. This allows to perform expensive lighting computations without
overdraw. Also we can use here hardware alpha-blending with the previously rendered layers.
4. Depth conversion #2. This step is the same as #1, except that we additionally perform the
opaqueness test as follows. The accumulated opaqueness is being checked if it’s greater than some
user-defined threshold (we use 0.95 here). If so, we write z_max into z-buffer as all subsequent
layers we treat as invisible in this case and can cull them.</p>
      <p>Although depth resolving pass isn’t really cheap as it’s performed in full-screen, it adds only
constant cost. At the same time, every pass require less and less time, which compensates the cost of
additional full-screen pass. Also, empirically results show, that 3-4 passes are enough in many cases.
For example, you can see on Figure 3 that after the second pass there are almost no changes in the
resulting image. Also you can see there, how rendering time is reduced with each subsequent pass.</p>
    </sec>
    <sec id="sec-5">
      <title>Construction of shell geometry on-the-fly</title>
      <p>
        In [
        <xref ref-type="bibr" rid="ref14 ref4 ref5 ref8">4, 5, 8, 14</xref>
        ] shell construction is performed during preprocess step. The consistency between
prisms is archived by maintaining correct edge patterns between adjacent prisms. It’s done by randomly
assigning them first and then correcting inconsistencies. However this makes the whole process to be
data dependent and thus non-parallelizable.
      </p>
      <p>But there is a way simpler approach. As we have indexes of every vertex on a base mesh, they can
be used to determine directions of edges, which split sides of the prisms. An edge is rising, if it goes
from vertex of the base mesh with lower index to a vertex with higher index, and falling otherwise. This
method doesn’t require any work to assign patterns to the prisms and guarantee their consistency
between each other. Also it’s data independent, so the tetrahedrons can be constructed in parallel for
each face of the base mesh. And thus, allowing implementation on GPU in compute shaders as follows.</p>
      <p>
        To reduce computing time and memory usage, the process is split into two steps. On the first step
the base mesh S is transformed into St as it would be in vertex shader, then an additional offset surface
S't is constructed by shifting vertices of St toward vertex normals at some predefined distance. All of
the data produced is stored into a buffer for vertex data. On the second step shell tetrahedrons with all
necessary data are constructed as in [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] with determining edge directions as described above. The stage
is performed per face. The results are stored into separate buffer for shell data. To connect these two
buffers for access from vertex shader, a third buffer, which stores indexes of vertex data for each
tetrahedron, is being constructed. Scheme of the method is depictured below in Figure 4.
      </p>
    </sec>
    <sec id="sec-6">
      <title>4. Results</title>
      <p>The proposed method was tested on multiple scenes against shell mapping without texture mips,
both using tetrahedral representation of the shell. Additionally on a single scene it was tested against
simple instancing without using levels of detail for instanced geometry. Testing was done on a PC with
NVidia GeForce RTX 2080 GPU.</p>
      <p>Averaged performance results are shown in Figure 5. As we can see, the basic method is faster on
smaller sizes, as cache is better utilized and we need to perform rendering only once. But with texture
size increasing its performance significantly reduces, as cache hit rate becomes lower. At the same time
the proposed method almost saves it’s speed and outperforms the basic one on bigger sizes.</p>
      <p>Visual appearance is shown on Figure 6. We can see the main advantage of the method: using levels
of detail gives anti-aliased results almost comparable to super-sampled ones, while having good
performance. Although some color altering can be noticed. First, there is darkening on parts, where
surface is nearly perpendicular to view projection plane – in that case a lot of prisms meets in the view
direction. It appears because the OIT approach doesn’t handle all the layers. For the screenshots we
used 4 layers. Second, some color altering appears because we use simple linear downscaling for mips
construction, which, as discussed before, isn’t correct. Especially in our case, transparency should be
constructed anisotropically. For example, when the texture represents some plane, it should be opaque
when the view direction is perpendicular to that plane, and almost transparent, when it’s parallel. There
is some research about correct handling of downscaled volumetric textures [21, 22], but it focuses on
offline rendering. So adopting it to real-time is a topic for future work.</p>
    </sec>
    <sec id="sec-7">
      <title>5. Conclusion</title>
      <p>We described a method for rendering small-scale features on polygonal meshes, which is archived
by constructing levels of detail for volumetric textures and handling their partial transparency. For latter
a method for order independent transparency, based on depth peeling, was proposed. It utilizes the fact,
that we render opaque details, and, with use of hardware depth test for culling, allows to reduce amount
of fragment shader invocations each subsequent pass. We used very basic lighting calculation here, so
performance gain can be more when some advanced methods will be used, as there is no overdraw
when performing it. To make the technique applicable for animated surfaces, we proposed a way to
construct the shell on-the-fly on GPU. This way it can be easily embedded and used with existing
rendering pipelines.</p>
      <p>Some topics are left untouched though. First, simple mip-map construction with linear downscaling
doesn’t produce correct results in case of 3D textures, especially on very low-scale mips. Second, we
still have to rasterize all of the tetrahedrons each pass. Even though we perform culling with z-test, the
rasterization and vertex processing work should be done before that. With modern hardware, which
introduced hardware ray tracing, it’s it possibly will be more efficient to trace shell geometry instead
of rasterizing it. So, both of the problems are the topics for the future work.</p>
    </sec>
    <sec id="sec-8">
      <title>6. References</title>
      <p>[18] E. Enderton, E. Sintorn, P. Shirley, D. Luebke, Stochastic transparency, in: IEEE transactions on
visualization and computer graphics, 17(8) (2010) 1036-1047. doi: 10.1145/1730804.1730830.
[19] L. Bavoil, K. Myers, Order Independent Transparency with Dual Depth Peeling, Image Rochester</p>
      <p>NY, 107 (2008) 22020–22025.
[20] F. Liu, M. C. Huang, X. H. Liu, E. H. Wu, Efficient depth peeling via bucket sort, in: Proceedings
of the SIGGRAPH/Eurographics Workshop on Graphics Hardware, 2009, 51–57.
[21] S. Zhao, L. Wu, F. Durand, R. Ramamoorthi, Downsampling scattering parameters for rendering
anisotropic media, ACM Transactions on Graphics, 35(6) (2016) 1–11.
doi:10.1145/2980179.2980228.
[22] G. Loubet, F. Neyret, A new microflake model with microscopic self-shadowing for accurate
volume downsampling, in: Computer Graphics Forum, 37(2) (2018) 111–121.
doi:10.1111/cgf.13346.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>K.</given-names>
            <surname>Zhou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Huang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Tong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Desbrun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Guo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H. Y.</given-names>
            <surname>Shum</surname>
          </string-name>
          ,
          <article-title>Mesh quilting for geometric texture synthesis</article-title>
          ,
          <source>in: ACM SIGGRAPH 2006 Papers, SIGGRAPH '06</source>
          ,
          <year>2006</year>
          ,
          <fpage>690</fpage>
          -
          <lpage>697</lpage>
          . doi:
          <volume>10</volume>
          .1145/1179352.1141942.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Knuth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bender</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Goesele</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kuijper</surname>
          </string-name>
          , Deferred Warping,
          <source>IEEE Computer Graphics and Applications</source>
          ,
          <volume>37</volume>
          (
          <issue>6</issue>
          ) (
          <year>2017</year>
          )
          <fpage>76</fpage>
          -
          <lpage>87</lpage>
          . doi:
          <volume>10</volume>
          .1109/
          <string-name>
            <surname>MCG</surname>
          </string-name>
          .
          <year>2016</year>
          .
          <volume>41</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Hertz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hanocka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Giryes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Cohen-Or</surname>
          </string-name>
          ,
          <article-title>Deep geometric texture synthesis</article-title>
          ,
          <source>ACM Transactions on Graphics</source>
          ,
          <volume>39</volume>
          (
          <issue>4</issue>
          ) (
          <year>2020</year>
          )
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          . doi:
          <volume>10</volume>
          .1145/3386569.3392471
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S. D.</given-names>
            <surname>Porumbescu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Budge</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Feng</surname>
          </string-name>
          ,
          <string-name>
            <surname>K. I. Joy</surname>
          </string-name>
          ,
          <article-title>Shell maps</article-title>
          ,
          <source>ACM Transactions on Graphics</source>
          ,
          <volume>24</volume>
          (
          <issue>3</issue>
          ) (
          <year>2005</year>
          )
          <fpage>626</fpage>
          -
          <lpage>633</lpage>
          . doi:
          <volume>10</volume>
          .1145/1073204.1073239.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Jeschke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mantler</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wimmer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kautz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Pattanaik</surname>
          </string-name>
          ,
          <article-title>Interactive smooth and curved shell mapping</article-title>
          ,
          <source>in: Proceedings of the 18th Eurographics conference on Rendering Techniques (EGSR'07)</source>
          , Eurographics Association, Goslar,
          <string-name>
            <surname>DEU</surname>
          </string-name>
          ,
          <year>2007</year>
          ,
          <fpage>351</fpage>
          -
          <lpage>360</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>P.</given-names>
            <surname>Decaudin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Neyret</surname>
          </string-name>
          ,
          <article-title>Volumetric billboards</article-title>
          , in: Computer Graphics Forum,
          <volume>28</volume>
          (
          <issue>8</issue>
          ) (
          <year>2009</year>
          )
          <fpage>2079</fpage>
          -
          <lpage>2089</lpage>
          . doi:
          <volume>10</volume>
          .1111/j.1467-
          <fpage>8659</fpage>
          .
          <year>2009</year>
          .
          <volume>01354</volume>
          .x.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>L.</given-names>
            <surname>Williams</surname>
          </string-name>
          ,
          <article-title>Pyramidal parametrics</article-title>
          ,
          <source>in: Proceedings of the 10th annual conference on Computer graphics and interactive techniques (SIGGRAPH '83)</source>
          , Association for Computing Machinery, New York, NY, USA,
          <year>1983</year>
          ,
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          . doi:
          <volume>10</volume>
          .1145/800059.801126.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>N.</given-names>
            <surname>Ritsche</surname>
          </string-name>
          ,
          <article-title>Real-time shell space rendering of volumetric geometry</article-title>
          ,
          <source>in: Proceedings - GRAPHITE 2006: 4th International Conference on Computer Graphics and Interactive Techniques in Australasia and Southeast Asia</source>
          ,
          <volume>1</volume>
          (
          <issue>212</issue>
          ) (
          <year>2006</year>
          )
          <fpage>265</fpage>
          -
          <lpage>274</lpage>
          . doi:
          <volume>10</volume>
          .1145/1174429.1174477.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Hart</surname>
          </string-name>
          ,
          <article-title>Sphere tracing: A geometric method for the antialiased ray tracing of implicit surfaces</article-title>
          ,
          <source>The Visual Computer</source>
          ,
          <volume>12</volume>
          (
          <issue>10</issue>
          ) (
          <year>1996</year>
          )
          <fpage>527</fpage>
          -
          <lpage>545</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>K.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Yuksel</surname>
          </string-name>
          ,
          <article-title>Real-time fiber-level cloth rendering</article-title>
          ,
          <source>in: Proceedings - I3D 2017: 21st ACM SIGGRAPH Symposium on Interactive 3D Graphics and Games</source>
          ,
          <year>2017</year>
          , doi:10.1145/3023368.3023372.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>M. McGuire</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>McGuire</surname>
          </string-name>
          , Steep Parallax Mapping,
          <year>I3D 2005</year>
          Poster,
          <year>2005</year>
          . URL: http://www.cs.brown.edu/research/graphics/games/SteepParallax/index.html.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>N.</given-names>
            <surname>Tatarchuk</surname>
          </string-name>
          ,
          <article-title>Dynamic parallax occlusion mapping with approximate soft shadows</article-title>
          ,
          <source>in: Proceedings of the Symposium on Interactive 3D Graphics, March</source>
          ,
          <year>2006</year>
          ,
          <fpage>63</fpage>
          -
          <lpage>70</lpage>
          . doi:
          <volume>10</volume>
          .1145/1111411.1111423.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>X.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Tong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Lin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Hu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Guo</surname>
          </string-name>
          , H.-Y. Shum,
          <article-title>Generalized displacement maps</article-title>
          ,
          <source>in: Eurographics Symposium on Rendering, January</source>
          ,
          <year>2004</year>
          ,
          <fpage>227</fpage>
          -
          <lpage>233</lpage>
          . doi:
          <volume>10</volume>
          .2312/EGWR/EGSR04/227-
          <fpage>233</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>J.-F. Dufort</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Leblanc</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Poulin</surname>
          </string-name>
          ,
          <article-title>Interactive Rendering of Meso-Structure Surface Details using Semi-Transparent 3D Textures</article-title>
          , in
          <source>: Proceedings of Vision</source>
          , Modeling, and
          <string-name>
            <surname>Visualization</surname>
          </string-name>
          ,
          <year>2005</year>
          ,
          <fpage>399</fpage>
          -
          <lpage>406</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>C.</given-names>
            <surname>Everitt</surname>
          </string-name>
          ,
          <string-name>
            <surname>Interactive</surname>
          </string-name>
          order-independent transparency,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>P.</given-names>
            <surname>Barta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kovács</surname>
          </string-name>
          ,
          <article-title>Order Independent Transparency with Per-Pixel Linked Lists</article-title>
          ,
          <source>The 15th Central European Seminar on Computer Graphics</source>
          ,
          <year>2011</year>
          . doi:10.1.1.309.4525.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>M. McGuire</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Bavoil</surname>
          </string-name>
          ,
          <string-name>
            <surname>Weighted Blended Order-Independent</surname>
            <given-names>Transparency</given-names>
          </string-name>
          ,
          <source>Journal of Computer Graphics Techniques</source>
          ,
          <volume>2</volume>
          (
          <issue>2</issue>
          ), (
          <year>2013</year>
          )
          <fpage>122</fpage>
          -
          <lpage>141</lpage>
          . URL: http://jcgt.org/published/0002/02/09/.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>