Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

multivolumeraycaster_eep.frag 4.32 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// ================================================================================================
// 
// This file is part of the CAMPVis Software Framework.
// 
// If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
//      Technische Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
// 
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
// 
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 
// except in compliance with the License. You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software distributed under the 
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
// either express or implied. See the License for the specific language governing permissions 
// and limitations under the License.
// 
// ================================================================================================

in vec3 ex_TexCoord;            ///< incoming texture coordinate
out vec4 out_Color;             ///< outgoing fragment color

#include "tools/texture2d.frag"

uniform vec2 _viewportSizeRCP;

uniform bool _integrateGeometry;            ///< flag whether to integrate geometry into the EEP
uniform bool _isEntrypoint;                 ///< true if current run is for entrypoints, false if current run is for exitpoints

uniform sampler2D _entryDepthTexture;       ///< depth texture of the entrypoints (only used in exitpoints run)
uniform TextureParameters2D _entryDepthTexParams;

uniform sampler2D _geometryDepthTexture;    ///< depth texture of rendered geometry
uniform TextureParameters2D _geometryDepthTexParams;

uniform float _near;
uniform float _far;
uniform mat4 _inverseViewMatrix;            ///< inverse camera view matrix
uniform mat4 _inverseProjectionMatrix;      ///< inverse camera projection matrix
uniform mat4 _volumeWorldToTexture;         ///< world-to-texture matrix of volume

void main() {
    vec2 fragCoordNormalized = gl_FragCoord.xy * _viewportSizeRCP;
    float fragDepth = gl_FragCoord.z;

    if (_integrateGeometry) {
        float geometryDepth = texture(_geometryDepthTexture, fragCoordNormalized).r;

        if (_isEntrypoint) {
            // integrating geometry into Entrypoints
            float entryDepth = gl_FragCoord.z;

            if (geometryDepth <= entryDepth) {
                // geometry before Entrypoint
                out_Color = vec4(0.0);
                fragDepth = geometryDepth;
            }
            else {
                // geometry behind Entrypoint
                out_Color = vec4(ex_TexCoord, 1.0);
                fragDepth = entryDepth;
            }
        }
        else {
            // integrating geometry into Exitpoints
            float entryDepth = texture(_entryDepthTexture, fragCoordNormalized).r;
            float exitDepth = gl_FragCoord.z;

            if (geometryDepth <= entryDepth) {
                // geometry before Entrypoint
                out_Color = vec4(0.0);
                fragDepth = geometryDepth;
            }
            else if (geometryDepth <= exitDepth) {
                // geometry between entrypoint and exitpoint

                // transform viewport coordinates to [-1, 1] NDC
                vec4 result = vec4(fragCoordNormalized, geometryDepth, 1.0);
                result = 2.0 * result - 1.0;
            
                // reverse perspective division by w (which is equal to the camera-space z)
                float origZG = (2.0 * _far * _near) / ((_far + _near) - result.z * (_far - _near));
                result *= origZG;

                // unproject and reverse camera-transform
                result = vec4((_inverseViewMatrix * (_inverseProjectionMatrix * result)).xyz, 1.0);

                out_Color = vec4(result.xyz, 1.0);
                fragDepth = geometryDepth;
            }
            else {
                // geometry behind exitpoint
                out_Color = vec4(ex_TexCoord, 1.0);
                fragDepth = exitDepth;
            }
        }
    }
    else {
        out_Color = vec4(ex_TexCoord, 1.0);
    }

    gl_FragDepth = fragDepth;
}