diff --git a/mevislab.github.io/content/examples/visualization/example6/LUT_AnimationRecorder.xml b/mevislab.github.io/content/examples/visualization/example6/LUT_AnimationRecorder.xml
new file mode 100644
index 000000000..cb3a4d185
--- /dev/null
+++ b/mevislab.github.io/content/examples/visualization/example6/LUT_AnimationRecorder.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ 3
+ 1
+ 1
+ 0
+ 0 0.129412 0.12549 0.121569 0 41.0678 0 0 0 0 126.099 0.94902 0.54902 0.172549 0 126.101 0.85098 0.556863 0.172549 0.165644 532.897 0.852401 0.555088 0.174324 0.607362 815.437 0.855474 0.551246 0.178166 0.245399 1143.29 0.855474 0.551246 0.178166 0 2047 0.855474 0.551246 0.178166 0
+
+
+
diff --git a/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab b/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab
index 60991c1b6..2ce592145 100644
--- a/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab
+++ b/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab
@@ -3,73 +3,9 @@ mevislabVersion = 3.7.2.12
network {
watchlist = ""
}
-module SoPathTracerAreaLight {
- internal {
- frame = "21 549 200 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
- fields {
- instanceName = SoPathTracerAreaLight
- scaleMode = ScaleToBoundingSphere
- enabled = TRUE
- renderSource = FALSE
- color = "1 1 1"
- intensity = 5
- width = 0.5
- height = 0.5
- theta = 180
- phi = 45
- distance = 3.5
- attachToCamera = FALSE
- position = "0 0 0"
- orientation = "0 0 1 0"
- type = AreaLight_Rectangle
- mode = DistanceAndAngles
- }
-}
-module SoPathTracerBackgroundLight {
- internal {
- frame = "5 629 232 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
- fields {
- instanceName = SoPathTracerBackgroundLight
- useIBL = FALSE
- attachToCamera = FALSE
- renderSource = TRUE
- renderSourceIntensity = 1
- sRGB = TRUE
- enabled = TRUE
- intensity = 2
- topColor = "0.333333343267441 0.666666686534882 0.498039215803146"
- middleColor = "1 0.666666686534882 0.498039215803146"
- bottomColor = "1 0.666666686534882 0"
- rotation = "0 0 1 0"
- }
-}
-module LUTLoad {
- internal {
- frame = "61 765 88 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 584 400 92"
- sizeHint = "400 92"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = LUTLoad
- filepath = $(HOME)/Documents/Knie/LUT_Knee.xml
- autoLoad = TRUE
- }
-}
module LocalImage {
internal {
- frame = "1177 557 160 72"
+ frame = "1268 547 160 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -88,14 +24,19 @@ module LocalImage {
}
module SoExaminerViewer {
internal {
- frame = "1213 309 152 56"
+ frame = "1618 202 136 56"
moduleGroupName = ""
windows {
window _viewer {
- geometry = "2716 409 400 400"
+ geometry = "2868 319 551 449"
sizeHint = "400 400"
wasOpen = no
}
+ window _automatic {
+ geometry = "2070 157 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
}
}
fields {
@@ -146,11 +87,11 @@ module SoExaminerViewer {
stereoViewing = FALSE
stereoOffset = 3
height = 0.78539819
- position = "103.482955932617 -240.319595336914 187.513122558594"
- orientation = "0.628292739391327 0.00490141194313765 0.777961611747742 1.74143373966217"
- nearDistance = 173.65352
- farDistance = 462.30423
- focalDistance = 317.83478
+ position = "198.272399902344 -169.905090332031 110.596496582031"
+ orientation = "0.678528189659119 0.394197314977646 0.619845151901245 1.71608328819275"
+ nearDistance = 199.93915
+ farDistance = 438.40231
+ focalDistance = 319.05176
forceRedrawOnInteraction = FALSE
button1events = TO_VIEWER
button2events = TO_VIEWER
@@ -170,15 +111,20 @@ module SoExaminerViewer {
}
module SoPathTracerVolume {
internal {
- frame = "1293 437 184 56"
+ frame = "1491 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
windows {
window _default {
- geometry = "2714 377 333 506"
+ geometry = "2747 296 842 506"
sizeHint = "333 506"
wasOpen = no
}
+ window _automatic {
+ geometry = "3178 94 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
}
}
fields {
@@ -225,11 +171,11 @@ module SoPathTracerVolume {
}
module SoPathTracer {
internal {
- frame = "2169 453 112 56"
+ frame = "2100 432 112 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "3068 486 564 416"
+ geometry = "2598 422 564 416"
sizeHint = "564 416"
wasOpen = no
}
@@ -277,37 +223,25 @@ module SoPathTracer {
bloom1FilterSize = 9
bloom2FilterSize = 9
bloom3FilterSize = 9
- numBounces = 1
+ numBounces = 2
maxIterations = 1000
forceFullQuality = FALSE
enableDepthBuffer = FALSE
}
}
-module MinMaxScan {
+module SoPathTracerAreaLight {
internal {
- frame = "1837 293 104 56"
+ frame = "1264 432 208 56"
moduleGroupName = ""
+ showNetworkPanel = true
windows {
window _default {
- geometry = "2088 576 466 305"
- sizeHint = "448 305"
+ geometry = "2673 379 414 503"
+ sizeHint = "414 503"
wasOpen = no
}
}
}
- fields {
- instanceName = MinMaxScan
- updateMode = AutoUpdate
- typeSelect = "Proposed Data Type"
- preferredIntType = PreferUnsigned
- }
-}
-module SoPathTracerAreaLight {
- internal {
- frame = "1065 437 208 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
fields {
instanceName = SoPathTracerAreaLight1
scaleMode = ScaleToBoundingSphere
@@ -329,12 +263,12 @@ module SoPathTracerAreaLight {
}
module SoPathTracerBackgroundLight {
internal {
- frame = "809 437 240 56"
+ frame = "1005 432 240 56"
moduleGroupName = ""
showNetworkPanel = true
windows {
window _default {
- geometry = "2341 461 454 312"
+ geometry = "3190 236 454 312"
sizeHint = "407 312"
wasOpen = no
}
@@ -355,31 +289,13 @@ module SoPathTracerBackgroundLight {
rotation = "0 0 1 0"
}
}
-module LUTLoad {
- internal {
- frame = "1069 557 88 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 584 400 92"
- sizeHint = "400 92"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = LUTLoad1
- filepath = $(HOME)/Downloads/LUT_Original.xml
- autoLoad = TRUE
- }
-}
module SoPathTracerMaterial {
internal {
- frame = "901 557 152 56"
+ frame = "974 547 152 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "2071 516 374 344"
+ geometry = "2753 454 784 344"
sizeHint = "335 344"
wasOpen = no
}
@@ -426,7 +342,7 @@ module SoPathTracerMaterial {
}
module SoPathTracerVolume {
internal {
- frame = "1477 437 184 56"
+ frame = "1694 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
}
@@ -474,7 +390,7 @@ module SoPathTracerVolume {
}
module LocalImage {
internal {
- frame = "1613 557 184 72"
+ frame = "1733 547 184 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -493,7 +409,7 @@ module LocalImage {
}
module LUTLoad {
internal {
- frame = "1509 565 88 56"
+ frame = "1626 547 88 56"
moduleGroupName = ""
windows {
window _default {
@@ -509,70 +425,9 @@ module LUTLoad {
autoLoad = TRUE
}
}
-module View2D {
- internal {
- frame = "1677 437 120 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 430 400 400"
- sizeHint = "400 400"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = View2D
- inventorInputOn = TRUE
- inventorOutputOn = FALSE
- view2DExtensionsOn = TRUE
- startSlice = 45
- numSlices = 1
- numXSlices = 1
- sliceStep = 1
- slab = 1
- blendMode = BLEND_REPLACE
- timePoint = 0
- maxTimePoint = 0
- filterMode = FILTER_LINEAR
- standardKeys = TRUE
- cineMode = CINE_ZT
- cineDirection = CINE_FORWARD
- cineRepeat = CINE_ONCE
- cineSpeed = 0.1
- cineAlwaysReset = TRUE
- snapToCenter = TRUE
- zoomMode = VIEW2D_AUTO_ZOOM
- unzoomOnImageChange = FALSE
- sliceZoom = 1
- sliceZoomSynced = 1
- baseColor = "1 1 1"
- margin = "2 2"
- sliceOrigin = "0 0"
- useShaders = TRUE
- useManagedInteraction = FALSE
- lutCenter = 63.5
- lutWidth = 127
- annotationOn = TRUE
- annotationMode = ANNO_MODE_AUTO
- annotationSizeMode = ANNO_SHOW_DETAILED
- annotationCol = "0.899999976158142 0.899999976158142 0.899999976158142"
- annotationFontSize = ANNO_SIZE_AUTO
- annoCoords = Voxel
- annoCTValue = AsIs
- borderOn = FALSE
- borderColor = "0.899999976158142 0.899999976158142 0.899999976158142"
- valueHighPrecision = TRUE
- showColorChannelValues = FALSE
- colorChannelSeparator = " / "
- maxPrecision = 4
- enableSlicing = TRUE
- useRelativeLUTIfNoInputImage = TRUE
- }
-}
module SoPathTracerMaterial {
internal {
- frame = "1345 565 160 56"
+ frame = "1447 547 160 56"
moduleGroupName = ""
windows {
window _default {
@@ -623,9 +478,21 @@ module SoPathTracerMaterial {
}
module SoPathTracerVolume {
internal {
- frame = "1837 437 184 56"
+ frame = "1897 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
+ windows {
+ window _automatic {
+ geometry = "3281 93 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ window _default {
+ geometry = "2836 222 906 506"
+ sizeHint = "333 506"
+ wasOpen = no
+ }
+ }
}
fields {
instanceName = SoPathTracerVolume2
@@ -671,7 +538,7 @@ module SoPathTracerVolume {
}
module LocalImage {
internal {
- frame = "1941 549 184 72"
+ frame = "2059 547 184 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -688,70 +555,9 @@ module LocalImage {
autoLoad = TRUE
}
}
-module View2D {
- internal {
- frame = "2037 437 120 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 430 400 400"
- sizeHint = "400 400"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = View2D1
- inventorInputOn = TRUE
- inventorOutputOn = FALSE
- view2DExtensionsOn = TRUE
- startSlice = 62
- numSlices = 1
- numXSlices = 1
- sliceStep = 1
- slab = 1
- blendMode = BLEND_REPLACE
- timePoint = 0
- maxTimePoint = 0
- filterMode = FILTER_LINEAR
- standardKeys = TRUE
- cineMode = CINE_ZT
- cineDirection = CINE_FORWARD
- cineRepeat = CINE_ONCE
- cineSpeed = 0.1
- cineAlwaysReset = TRUE
- snapToCenter = TRUE
- zoomMode = VIEW2D_AUTO_ZOOM
- unzoomOnImageChange = FALSE
- sliceZoom = 1
- sliceZoomSynced = 1
- baseColor = "1 1 1"
- margin = "2 2"
- sliceOrigin = "0 0"
- useShaders = TRUE
- useManagedInteraction = FALSE
- lutCenter = 145.349975585938
- lutWidth = 129.412506103516
- annotationOn = TRUE
- annotationMode = ANNO_MODE_AUTO
- annotationSizeMode = ANNO_SHOW_DETAILED
- annotationCol = "0.899999976158142 0.899999976158142 0.899999976158142"
- annotationFontSize = ANNO_SIZE_AUTO
- annoCoords = Voxel
- annoCTValue = AsIs
- borderOn = FALSE
- borderColor = "0.899999976158142 0.899999976158142 0.899999976158142"
- valueHighPrecision = TRUE
- showColorChannelValues = FALSE
- colorChannelSeparator = " / "
- maxPrecision = 4
- enableSlicing = TRUE
- useRelativeLUTIfNoInputImage = TRUE
- }
-}
module LUTLoad {
internal {
- frame = "1821 565 88 56"
+ frame = "1957 637 88 56"
moduleGroupName = ""
windows {
window _default {
@@ -769,29 +575,46 @@ module LUTLoad {
}
module AnimationRecorder {
internal {
- frame = "901 789 136 56"
+ frame = "1463 202 136 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "2266 385 1228 491"
+ geometry = "1945 301 1228 582"
sizeHint = "1228 491"
+ wasOpen = yes
+ }
+ window RecordingFinishedDialog {
+ geometry = "3277 422 310 94"
+ sizeHint = "310 92"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "3126 229 500 600"
+ sizeHint = "260 223"
wasOpen = no
}
}
}
fields {
instanceName = AnimationRecorder
- filename = ""
+ filename = $(HOME)/Documents/Knie/AnimationRecorderTest.mlmov
writeImagesInsteadOfVideo = FALSE
imagesFormat = png
- currentFrame = 0
+ currentFrame = 1351
cameraType = Perspective
}
}
module SoSeparator {
internal {
- frame = "1245 421 104 56"
+ frame = "1505 317 208 56"
moduleGroupName = ""
+ windows {
+ window _viewer {
+ geometry = "2261 382 400 400"
+ sizeHint = "400 400"
+ wasOpen = no
+ }
+ }
}
fields {
instanceName = SoSeparator
@@ -801,18 +624,96 @@ module SoSeparator {
pickCulling = AUTO
}
}
+module LUTLoad {
+ internal {
+ frame = "1165 629 88 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "2470 627 400 92"
+ sizeHint = "400 92"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "2100 415 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = LUTLoad1
+ filepath = $(HOME)/Documents/Knie/LUT_AnimationRecorder.xml
+ autoLoad = TRUE
+ }
+}
+module LUTRescale {
+ internal {
+ frame = "1145 547 104 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "3179 572 200 273"
+ sizeHint = "200 273"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "3175 301 500 233"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = LUTRescale
+ autoSourceRange = TRUE
+ sourceMin = 0
+ sourceMax = 2047
+ targetMin = 0
+ targetMax = 1
+ forceRelative = TRUE
+ }
+}
+module LUTRescale {
+ internal {
+ frame = "1949 565 104 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "3179 610 200 273"
+ sizeHint = "200 273"
+ wasOpen = yes
+ }
+ window _automatic {
+ geometry = "3178 301 500 275"
+ sizeHint = "260 223"
+ wasOpen = yes
+ }
+ }
+ }
+ fields {
+ instanceName = LUTRescale1
+ autoSourceRange = TRUE
+ sourceMin = 0
+ sourceMax = 500
+ targetMin = 0
+ targetMax = 1
+ forceRelative = TRUE
+ }
+}
connections {
- SoExaminerViewer.children = "SoPathTracerBackgroundLight1.self SoPathTracerAreaLight1.self SoPathTracerVolume.self SoPathTracerVolume1.self SoPathTracerVolume2.self SoPathTracer.self"
+ SoExaminerViewer.children = SoSeparator.self
SoPathTracerVolume.inMaterial = SoPathTracerMaterial.self
- SoPathTracerVolume.inLUT = LUTLoad1.outLUT
+ SoPathTracerVolume.inLUT = LUTRescale.outLUT
SoPathTracerVolume.inVolume = LocalImage.outImage
- MinMaxScan.input0 = LocalImage2.outImage
SoPathTracerVolume1.inMaterial = SoPathTracerMaterial1.self
SoPathTracerVolume1.inLUT = LUTLoad2.outLUT
SoPathTracerVolume1.inVolume = LocalImage1.outImage
- View2D.inImage = LocalImage1.outImage
- SoPathTracerVolume2.inLUT = LUTLoad3.outLUT
+ SoPathTracerVolume2.inLUT = LUTRescale1.outLUT
SoPathTracerVolume2.inVolume = LocalImage2.outImage
- View2D1.inImage = LocalImage2.outImage
+ AnimationRecorder.inputScene = SoSeparator.self
+ SoSeparator.children = "SoPathTracerBackgroundLight1.self SoPathTracerAreaLight1.self SoPathTracerVolume.self SoPathTracerVolume1.self SoPathTracerVolume2.self SoPathTracer.self"
+ LUTRescale.inLUT = LUTLoad1.outLUT
+ LUTRescale1.inLUT = LUTLoad3.outLUT
}
networkModel = ""
diff --git a/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab.auto b/mevislab.github.io/content/examples/visualization/example9/AnimationRecorder.mlab
similarity index 68%
rename from mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab.auto
rename to mevislab.github.io/content/examples/visualization/example9/AnimationRecorder.mlab
index 65f2152b9..622dd23fd 100644
--- a/mevislab.github.io/content/examples/visualization/example6/PathTracer3.mlab.auto
+++ b/mevislab.github.io/content/examples/visualization/example9/AnimationRecorder.mlab
@@ -3,73 +3,9 @@ mevislabVersion = 3.7.2.12
network {
watchlist = ""
}
-module SoPathTracerAreaLight {
- internal {
- frame = "21 549 200 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
- fields {
- instanceName = SoPathTracerAreaLight
- scaleMode = ScaleToBoundingSphere
- enabled = TRUE
- renderSource = FALSE
- color = "1 1 1"
- intensity = 5
- width = 0.5
- height = 0.5
- theta = 180
- phi = 45
- distance = 3.5
- attachToCamera = FALSE
- position = "0 0 0"
- orientation = "0 0 1 0"
- type = AreaLight_Rectangle
- mode = DistanceAndAngles
- }
-}
-module SoPathTracerBackgroundLight {
- internal {
- frame = "5 629 232 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
- fields {
- instanceName = SoPathTracerBackgroundLight
- useIBL = FALSE
- attachToCamera = FALSE
- renderSource = TRUE
- renderSourceIntensity = 1
- sRGB = TRUE
- enabled = TRUE
- intensity = 2
- topColor = "0.333333343267441 0.666666686534882 0.498039215803146"
- middleColor = "1 0.666666686534882 0.498039215803146"
- bottomColor = "1 0.666666686534882 0"
- rotation = "0 0 1 0"
- }
-}
-module LUTLoad {
- internal {
- frame = "61 765 88 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 584 400 92"
- sizeHint = "400 92"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = LUTLoad
- filepath = $(HOME)/Documents/Knie/LUT_Knee.xml
- autoLoad = TRUE
- }
-}
module LocalImage {
internal {
- frame = "1177 557 160 72"
+ frame = "1268 547 160 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -88,14 +24,19 @@ module LocalImage {
}
module SoExaminerViewer {
internal {
- frame = "1533 77 136 56"
+ frame = "1618 202 136 56"
moduleGroupName = ""
windows {
window _viewer {
- geometry = "2716 409 400 400"
+ geometry = "2868 319 551 449"
sizeHint = "400 400"
wasOpen = no
}
+ window _automatic {
+ geometry = "2070 157 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
}
}
fields {
@@ -146,11 +87,11 @@ module SoExaminerViewer {
stereoViewing = FALSE
stereoOffset = 3
height = 0.78539819
- position = "103.482955932617 -240.319595336914 187.513122558594"
- orientation = "0.628292739391327 0.00490141194313765 0.777961611747742 1.74143373966217"
- nearDistance = 173.65352
- farDistance = 462.30423
- focalDistance = 317.83478
+ position = "198.272399902344 -169.905090332031 110.596496582031"
+ orientation = "0.678528189659119 0.394197314977646 0.619845151901245 1.71608328819275"
+ nearDistance = 199.93915
+ farDistance = 438.40231
+ focalDistance = 319.05176
forceRedrawOnInteraction = FALSE
button1events = TO_VIEWER
button2events = TO_VIEWER
@@ -170,15 +111,20 @@ module SoExaminerViewer {
}
module SoPathTracerVolume {
internal {
- frame = "1293 437 184 56"
+ frame = "1491 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
windows {
window _default {
- geometry = "2714 377 333 506"
+ geometry = "2747 296 842 506"
sizeHint = "333 506"
wasOpen = no
}
+ window _automatic {
+ geometry = "3178 94 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
}
}
fields {
@@ -225,11 +171,11 @@ module SoPathTracerVolume {
}
module SoPathTracer {
internal {
- frame = "2169 453 112 56"
+ frame = "2100 432 112 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "3068 486 564 416"
+ geometry = "2598 422 564 416"
sizeHint = "564 416"
wasOpen = no
}
@@ -277,37 +223,25 @@ module SoPathTracer {
bloom1FilterSize = 9
bloom2FilterSize = 9
bloom3FilterSize = 9
- numBounces = 1
+ numBounces = 2
maxIterations = 1000
forceFullQuality = FALSE
enableDepthBuffer = FALSE
}
}
-module MinMaxScan {
+module SoPathTracerAreaLight {
internal {
- frame = "1997 757 104 56"
+ frame = "1264 432 208 56"
moduleGroupName = ""
+ showNetworkPanel = true
windows {
window _default {
- geometry = "2088 576 466 305"
- sizeHint = "448 305"
+ geometry = "2673 379 414 503"
+ sizeHint = "414 503"
wasOpen = no
}
}
}
- fields {
- instanceName = MinMaxScan
- updateMode = AutoUpdate
- typeSelect = "Proposed Data Type"
- preferredIntType = PreferUnsigned
- }
-}
-module SoPathTracerAreaLight {
- internal {
- frame = "1065 437 208 56"
- moduleGroupName = ""
- showNetworkPanel = true
- }
fields {
instanceName = SoPathTracerAreaLight1
scaleMode = ScaleToBoundingSphere
@@ -329,12 +263,12 @@ module SoPathTracerAreaLight {
}
module SoPathTracerBackgroundLight {
internal {
- frame = "809 437 240 56"
+ frame = "1005 432 240 56"
moduleGroupName = ""
showNetworkPanel = true
windows {
window _default {
- geometry = "2341 461 454 312"
+ geometry = "3190 236 454 312"
sizeHint = "407 312"
wasOpen = no
}
@@ -355,31 +289,13 @@ module SoPathTracerBackgroundLight {
rotation = "0 0 1 0"
}
}
-module LUTLoad {
- internal {
- frame = "1069 557 88 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 584 400 92"
- sizeHint = "400 92"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = LUTLoad1
- filepath = $(HOME)/Downloads/LUT_Original.xml
- autoLoad = TRUE
- }
-}
module SoPathTracerMaterial {
internal {
- frame = "901 557 152 56"
+ frame = "974 547 152 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "2071 516 374 344"
+ geometry = "2753 454 784 344"
sizeHint = "335 344"
wasOpen = no
}
@@ -426,7 +342,7 @@ module SoPathTracerMaterial {
}
module SoPathTracerVolume {
internal {
- frame = "1477 437 184 56"
+ frame = "1694 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
}
@@ -474,7 +390,7 @@ module SoPathTracerVolume {
}
module LocalImage {
internal {
- frame = "1613 557 184 72"
+ frame = "1733 547 184 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -493,7 +409,7 @@ module LocalImage {
}
module LUTLoad {
internal {
- frame = "1509 565 88 56"
+ frame = "1626 547 88 56"
moduleGroupName = ""
windows {
window _default {
@@ -509,70 +425,9 @@ module LUTLoad {
autoLoad = TRUE
}
}
-module View2D {
- internal {
- frame = "1677 437 120 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 430 400 400"
- sizeHint = "400 400"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = View2D
- inventorInputOn = TRUE
- inventorOutputOn = FALSE
- view2DExtensionsOn = TRUE
- startSlice = 45
- numSlices = 1
- numXSlices = 1
- sliceStep = 1
- slab = 1
- blendMode = BLEND_REPLACE
- timePoint = 0
- maxTimePoint = 0
- filterMode = FILTER_LINEAR
- standardKeys = TRUE
- cineMode = CINE_ZT
- cineDirection = CINE_FORWARD
- cineRepeat = CINE_ONCE
- cineSpeed = 0.1
- cineAlwaysReset = TRUE
- snapToCenter = TRUE
- zoomMode = VIEW2D_AUTO_ZOOM
- unzoomOnImageChange = FALSE
- sliceZoom = 1
- sliceZoomSynced = 1
- baseColor = "1 1 1"
- margin = "2 2"
- sliceOrigin = "0 0"
- useShaders = TRUE
- useManagedInteraction = FALSE
- lutCenter = 63.5
- lutWidth = 127
- annotationOn = TRUE
- annotationMode = ANNO_MODE_AUTO
- annotationSizeMode = ANNO_SHOW_DETAILED
- annotationCol = "0.899999976158142 0.899999976158142 0.899999976158142"
- annotationFontSize = ANNO_SIZE_AUTO
- annoCoords = Voxel
- annoCTValue = AsIs
- borderOn = FALSE
- borderColor = "0.899999976158142 0.899999976158142 0.899999976158142"
- valueHighPrecision = TRUE
- showColorChannelValues = FALSE
- colorChannelSeparator = " / "
- maxPrecision = 4
- enableSlicing = TRUE
- useRelativeLUTIfNoInputImage = TRUE
- }
-}
module SoPathTracerMaterial {
internal {
- frame = "1345 565 160 56"
+ frame = "1447 547 160 56"
moduleGroupName = ""
windows {
window _default {
@@ -623,9 +478,21 @@ module SoPathTracerMaterial {
}
module SoPathTracerVolume {
internal {
- frame = "1837 437 184 56"
+ frame = "1897 432 184 56"
moduleGroupName = ""
showNetworkPanel = true
+ windows {
+ window _automatic {
+ geometry = "3281 93 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ window _default {
+ geometry = "2836 222 906 506"
+ sizeHint = "333 506"
+ wasOpen = no
+ }
+ }
}
fields {
instanceName = SoPathTracerVolume2
@@ -671,7 +538,7 @@ module SoPathTracerVolume {
}
module LocalImage {
internal {
- frame = "1941 549 184 72"
+ frame = "2059 547 184 72"
moduleGroupName = ""
showNetworkPanel = true
windows {
@@ -688,70 +555,9 @@ module LocalImage {
autoLoad = TRUE
}
}
-module View2D {
- internal {
- frame = "2037 437 120 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2680 430 400 400"
- sizeHint = "400 400"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = View2D1
- inventorInputOn = TRUE
- inventorOutputOn = FALSE
- view2DExtensionsOn = TRUE
- startSlice = 62
- numSlices = 1
- numXSlices = 1
- sliceStep = 1
- slab = 1
- blendMode = BLEND_REPLACE
- timePoint = 0
- maxTimePoint = 0
- filterMode = FILTER_LINEAR
- standardKeys = TRUE
- cineMode = CINE_ZT
- cineDirection = CINE_FORWARD
- cineRepeat = CINE_ONCE
- cineSpeed = 0.1
- cineAlwaysReset = TRUE
- snapToCenter = TRUE
- zoomMode = VIEW2D_AUTO_ZOOM
- unzoomOnImageChange = FALSE
- sliceZoom = 1
- sliceZoomSynced = 1
- baseColor = "1 1 1"
- margin = "2 2"
- sliceOrigin = "0 0"
- useShaders = TRUE
- useManagedInteraction = FALSE
- lutCenter = 145.349975585938
- lutWidth = 129.412506103516
- annotationOn = TRUE
- annotationMode = ANNO_MODE_AUTO
- annotationSizeMode = ANNO_SHOW_DETAILED
- annotationCol = "0.899999976158142 0.899999976158142 0.899999976158142"
- annotationFontSize = ANNO_SIZE_AUTO
- annoCoords = Voxel
- annoCTValue = AsIs
- borderOn = FALSE
- borderColor = "0.899999976158142 0.899999976158142 0.899999976158142"
- valueHighPrecision = TRUE
- showColorChannelValues = FALSE
- colorChannelSeparator = " / "
- maxPrecision = 4
- enableSlicing = TRUE
- useRelativeLUTIfNoInputImage = TRUE
- }
-}
module LUTLoad {
internal {
- frame = "1821 565 88 56"
+ frame = "1957 637 88 56"
moduleGroupName = ""
windows {
window _default {
@@ -769,29 +575,46 @@ module LUTLoad {
}
module AnimationRecorder {
internal {
- frame = "1365 141 136 56"
+ frame = "1469 205 136 56"
moduleGroupName = ""
windows {
window _default {
- geometry = "2433 418 1228 491"
+ geometry = "1945 301 1228 582"
sizeHint = "1228 491"
- wasOpen = yes
+ wasOpen = no
+ }
+ window RecordingFinishedDialog {
+ geometry = "3277 422 310 94"
+ sizeHint = "310 92"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "3126 229 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
}
}
}
fields {
instanceName = AnimationRecorder
- filename = ""
+ filename = $(HOME)/Documents/Knie/AnimationRecorderTest.mlmov
writeImagesInsteadOfVideo = FALSE
imagesFormat = png
- currentFrame = 0
+ currentFrame = 1167
cameraType = Perspective
}
}
module SoSeparator {
internal {
- frame = "1533 261 104 56"
+ frame = "1505 317 208 56"
moduleGroupName = ""
+ windows {
+ window _viewer {
+ geometry = "2261 382 400 400"
+ sizeHint = "400 400"
+ wasOpen = no
+ }
+ }
}
fields {
instanceName = SoSeparator
@@ -801,39 +624,96 @@ module SoSeparator {
pickCulling = AUTO
}
}
-module SoCameraInteraction {
+module LUTLoad {
internal {
- frame = "1541 165 152 56"
+ frame = "1165 629 88 56"
moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "2470 627 400 92"
+ sizeHint = "400 92"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "2100 415 500 600"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ }
}
fields {
- instanceName = SoCameraInteraction
- interactionProviderID = ""
- headlight = TRUE
- eventMode = SceneFirst
- interactiveLowComplexity = Force
- zoomSensitivity = 1
- enableZoomWithMouseWheel = TRUE
- cursorShapeRotate = ROTATE_XY_CURSOR
- cursorShapePan = MOVE_ALL_CURSOR
- cursorShapeZoom = MOVE_INOUT_CURSOR
+ instanceName = LUTLoad1
+ filepath = $(HOME)/Documents/Knie/LUT_AnimationRecorder1.xml
+ autoLoad = TRUE
+ }
+}
+module LUTRescale {
+ internal {
+ frame = "1145 547 104 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "3179 572 200 273"
+ sizeHint = "200 273"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "3175 301 500 233"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = LUTRescale
+ autoSourceRange = TRUE
+ sourceMin = 0
+ sourceMax = 2047
+ targetMin = 0
+ targetMax = 10
+ forceRelative = TRUE
+ }
+}
+module LUTRescale {
+ internal {
+ frame = "1949 565 104 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "3179 610 200 273"
+ sizeHint = "200 273"
+ wasOpen = no
+ }
+ window _automatic {
+ geometry = "3178 301 500 275"
+ sizeHint = "260 223"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = LUTRescale1
+ autoSourceRange = TRUE
+ sourceMin = 0
+ sourceMax = 500
+ targetMin = 0
+ targetMax = 10000
+ forceRelative = TRUE
}
}
connections {
- SoExaminerViewer.children = SoCameraInteraction.self
+ SoExaminerViewer.children = SoSeparator.self
SoPathTracerVolume.inMaterial = SoPathTracerMaterial.self
- SoPathTracerVolume.inLUT = LUTLoad1.outLUT
+ SoPathTracerVolume.inLUT = LUTRescale.outLUT
SoPathTracerVolume.inVolume = LocalImage.outImage
- MinMaxScan.input0 = LocalImage2.outImage
SoPathTracerVolume1.inMaterial = SoPathTracerMaterial1.self
SoPathTracerVolume1.inLUT = LUTLoad2.outLUT
SoPathTracerVolume1.inVolume = LocalImage1.outImage
- View2D.inImage = LocalImage1.outImage
- SoPathTracerVolume2.inLUT = LUTLoad3.outLUT
+ SoPathTracerVolume2.inLUT = LUTRescale1.outLUT
SoPathTracerVolume2.inVolume = LocalImage2.outImage
- View2D1.inImage = LocalImage2.outImage
AnimationRecorder.inputScene = SoSeparator.self
SoSeparator.children = "SoPathTracerBackgroundLight1.self SoPathTracerAreaLight1.self SoPathTracerVolume.self SoPathTracerVolume1.self SoPathTracerVolume2.self SoPathTracer.self"
- SoCameraInteraction.inScene = SoSeparator.self
+ LUTRescale.inLUT = LUTLoad1.outLUT
+ LUTRescale1.inLUT = LUTLoad3.outLUT
}
networkModel = ""
diff --git a/mevislab.github.io/content/tutorials/visualization/visualizationexample8.md b/mevislab.github.io/content/tutorials/visualization/visualizationexample8.md
index bdba000fa..294fe0194 100644
--- a/mevislab.github.io/content/tutorials/visualization/visualizationexample8.md
+++ b/mevislab.github.io/content/tutorials/visualization/visualizationexample8.md
@@ -189,6 +189,11 @@ ctx.field("SoVascularSystem.apply").touch()
```
{{}}
+
+{{}}
+Be aware that the *MinDistance* and *MaxDistance* values are algorithm-specific and don't precisely represent vessel diameters. The result of `DTFSkeletonization` is a vascular graph with an idealized, circular profile while in reality, the vessels have more complicated profile.
+{{}}
+
Instead of using the ID of each edge for the label property, we are now using the *MinDistance* property of the skeleton. The result is a color coded 3D visualization depending on the radius of the vessels. Small vessels are red, large vessels are green.
![Radius based Visualization](/images/tutorials/visualization/V8_010new.png "Radius based Visualization")
diff --git a/mevislab.github.io/content/tutorials/visualization/visualizationexample9.md b/mevislab.github.io/content/tutorials/visualization/visualizationexample9.md
new file mode 100644
index 000000000..ac0f4a0c8
--- /dev/null
+++ b/mevislab.github.io/content/tutorials/visualization/visualizationexample9.md
@@ -0,0 +1,109 @@
+---
+title: "Example 9: Creating Dynamic 3D Animations using AnimationRecorder"
+date: 2024-01-08
+status: "OK"
+draft: false
+weight: 593
+tags: ["Advanced", "Tutorial", "Visualization", "3D", "AnimationsRecorder"]
+menu:
+ main:
+ identifier: "visualization_example9"
+ title: "Creating Dynamic 3D Animations using AnimationRecorder"
+ weight: 593
+ parent: "visualization"
+---
+# Example 9: Creating Dynamic 3D Animations using AnimationRecorder {#TutorialVisualizationExample9}
+
+## Introduction
+In this tutorial, our focus will be on using the `AnimationRecorder` module to generate dynamic and visually appealing animations of our 3D scenes. We'll be recording the results of our previous project, particularly the detailed visualizations of the muscles, bones and blood vessels created using `PathTracer`.
+
+## Steps to do
+
+Open the network of [Example 6.2](http://localhost:1313/examples/tutorials/visualization/pathtracer/pathtracerexample2/), add a `SoSeparator` and an `AnimationRecorder` into your workspace and connect them as shown down.
+
+The `SoSeparator` modules role is to isolate and organize scene components, enabling precise control over the animation's focus without affecting the entire scene.
+
+The `AnimationRecorder` module, equipped with a key frame editor, facilitates smooth transitions between different states of the 3D scene by allowing field additions via drag-and-drop. The tree view allows for easy reordering of fields and modules, enhancing overall organization.
+
+![ AnimationRecorder](/images/tutorials/visualization//pathtracer/Example9_1.png " AnimationRecorder")
+
+Define the following LUTs in `SoLUTEditor` of the knee or load this [XML file](/examples/visualization/example6/LUT_AnimationRecorder1.xml) with `LUTLoad1` to use a pre-defined LUT.
+
+![ SoLUTEditor](/images/tutorials/visualization//pathtracer/V9_LUT.png " SoLUTEditor")
+
+
+Open the `AnimationRecorder` module and click on *New* to initiate a new animation, selecting a filename for the recorded key frames (*.mlmov).
+
+At the bottom of the `AnimationRecorder` panel, you'll find the key frame editor, which is initially enabled. It contains the camera track with a key frame at position *0*. The key frame editor at the bottom serves as a control hub for playback and recording.
+
+{{}}
+Close the SoExaminerViewer while using the AnimationRecorder to prevent duplicate renderings and save resources.
+{{}}
+
+![ AnimationRecorder](/images/tutorials/visualization//pathtracer/V9_AnimationRecorder.png " AnimationRecorder")
+
+Key Frames in the `AnimationRecorder` mark specific field values at defined timepoints. You can add key frames on the timeline by double-clicking at the chosen timepoint or right-clicking and selecting *Insert Key Frame*. Between these key frames, values are interpolated, either linearly, with splines, or not at all. In this way a Key frame will be added and a window labeled *Edit Camera Key Frame* will open.
+
+When adding a key frame at a specific timepoint, you can change the camera dynamically. This involves actions such as rotating to left or right, zooming in and out, and changing the camera's location. Within the *Edit Camera Key Frame* window save each key frame by clicking on the *Store Current Camera State* button. Preview the video to observe the camera's movement.
+
+The video settings in the `AnimationRecorder` provide essential parameters for configuring the resulting animation. You can control the *Framerate*, determining the number of frames per second in the video stream. It's important to note that altering the framerate may lead to the removal of key frames, impacting the animation's smoothness.
+
+Additionally, the *Duration* of the animation, specified as videoLength, defines how long the animation lasts in seconds. The *Video Size* determines the resolution of the resulting video, specifying how detailed the animation will be.
+
+Repeat this process for each timepoint where adjustments to the camera position are needed, thus creating a sequence of key frames.
+
+Before proceeding further, use the playback options situated at the base of the key frame editor. This allows for a quick preview of the initial camera sequence, ensuring the adjustments align seamlessly for a polished transition between key frames.
+
+{{}}
+Decrease the number of iterations in the SoPathTracer module for a quicker preview if you like. Make sure to increase again, before recording the final video.
+{{}}
+
+![ AnimationRecorder](/images/tutorials/visualization//pathtracer/V9_AnimationRecorder1.png " AnimationRecorder")
+
+## Modulating Knee Visibility with LUTRescale in Animation
+
+We want to showcase the complete scene, followed by the bones and vessels, then only the bones, and finally the entire scene once again. Add two `LUTRescale` modules to your workspace and connect them as illustrated down below. The rationale behind using `LUTRescale` is to control the transparency or visibility of elements in the scene at different intervals.
+
+![ LUTRescale](/images/tutorials/visualization//pathtracer/V9_3.png " LUTRescale")
+
+## Animate Bones and Vessels
+
+Now, let's shift our focus to highlighting bones and vessels within the animation. Right-click on the `LUTRescale` module, navigate to *Show Window*, and select *Automatic Panel*. This will bring up the control window for the ` LUTRescale` module. Find the field named *targetMax*. You can either drag or drop it directly from the *Automatic Panel*, or alternatively, locate the *Max* field in the *Output Index Range* box within the module panel and then drag and drop it onto the fields section in the `AnimationRecorder` module, specifically under the *Perspective Camera* field.
+
+By linking the *targetMax* field of the `LUTRescale` module to the `AnimationRecorder` in this manner, you establish a connection that allows you to synchronize the visibility of the knee muscles and structures in your animation.
+
+![ LUTRescale & AnimationRecorder](/images/tutorials/visualization//pathtracer/LUTRescale_AnimationRecorder2.png " LUTRescale & AnimationRecorder")
+
+
+To initiate the animation sequence, start by adding a key frame at position *0* for the *targetMax* field. Set the *Target Max* value in the *Edit Key Frame – [LUTRescale.targetMax]* window to *1*, and click on the *Store Current Field Value* button to save it.
+
+Next, proceed to add key frames at the same timepoints as the desired key frames of the *Perspective Camera* field's first sequence. For each selected key frame, progressively set values for the *Target Max* field, gradually increasing to *10*. This ensures specific synchronization between the visibility adjustments controlled by the `LUTRescale` module and the camera movements in the animation, creating a seamless transition. This gradual shift visually reveals the bones and vessels while concealing the knee structures and muscles.
+
+To seamlessly incorporate the new key frame at the same timepoints as the *Perspective Camera* field, you have two efficient options. Simply click on the key frame of the first sequence, and the line will automatically appear in the middle of the key frame. A quick double-click will effortlessly insert a key frame at precisely the same position. If you prefer more accurate adjustments, you can also set your frame manually using the *Edit Key Frame - [LUTRescale.targetMax]* window. This flexibility allows for precise control over the animation timeline, ensuring key frames align precisely with your intended moments.
+
+![ LUTRescale & AnimationRecorder](/images/tutorials/visualization//pathtracer/V9_7.png " LUTRescale & AnimationRecorder")
+
+## Showcasing only Bones
+
+To control the visibility of the vessels, right-click on the ` LUTRescale1` module connected to the vessels. Open the *Show Window* and select *Automatic Panel*. Effortlessly drag and drop the *targetMax* field into the `AnimationRecorder` module's fields section.
+
+![ LUTRescale1 & AnimationRecorder](/images/tutorials/visualization//pathtracer/V9_8.png " LUTRescale1 & AnimationRecorder")
+
+Add key frames for both the *Perspective Camera* field and the *targetMax* in `LUTRescale1` at the same timepoints. Access the *Edit Camera Key Frame* window for the added key frame in the *Perspective Camera* field and save the *current camera state*. To exclusively highlight only bones, adjust the *Target Max* values from *1* to *10000* in *Edit Key Frame - [LUTRescale1.targetMax]*.
+
+![ LUTRescale1 & AnimationRecorder](/images/tutorials/visualization//pathtracer/V9_9.png " LUTRescale1 & AnimationRecorder")
+
+To feature everything again at the end, copy the initial key frame of each field and paste it at the end of the timeline. This ensures a comprehensive display of all elements in the closing frames of your animation.
+
+![ Final Animation Sequence Key Frames](/images/tutorials/visualization//pathtracer/V9_10.png " Final Animation Sequence Key Frames")
+
+Finally, use the playback and recording buttons at the bottom of the key frame editor to preview and record your animation.
+
+## Summary
+* Animations are created by strategically placing key frames at different timepoints in the timeline using the `AnimationRecorder` module.
+* Various functionalities in the animation are achieved by adding fields via drag-and-drop.
+* The visibility of elements is controlled using the `LUTRescale` module.
+* Video settings in the `AnimationRecorder` can be adjusted to specifiy resolution, framerate, and duration of the resulting animation.
+
+
+{{< networkfile "examples/visualization/example6/AnimationRecorder.mlab" >}}
\ No newline at end of file
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_1.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_1.png
new file mode 100644
index 000000000..78fd3fad5
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_1.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_4.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_4.png
new file mode 100644
index 000000000..eafd41288
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/Example9_4.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale & AnimationRecorder.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale & AnimationRecorder.png
new file mode 100644
index 000000000..8ff026e05
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale & AnimationRecorder.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder.png
new file mode 100644
index 000000000..8ff026e05
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder1.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder1.png
new file mode 100644
index 000000000..dbfac69eb
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder1.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder2.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder2.png
new file mode 100644
index 000000000..e8ff14607
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/LUTRescale_AnimationRecorder2.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_10.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_10.png
new file mode 100644
index 000000000..51778c86b
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_10.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_2.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_2.png
new file mode 100644
index 000000000..6bb116a4d
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_2.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_3.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_3.png
new file mode 100644
index 000000000..d9c160e6c
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_3.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_4.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_4.png
new file mode 100644
index 000000000..eafd41288
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_4.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_5.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_5.png
new file mode 100644
index 000000000..10ffd5029
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_5.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_6.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_6.png
new file mode 100644
index 000000000..2ab14bea5
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_6.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_7.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_7.png
new file mode 100644
index 000000000..7aa12140a
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_7.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_8.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_8.png
new file mode 100644
index 000000000..0673137cd
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_8.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_9.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_9.png
new file mode 100644
index 000000000..fe6df61bc
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_9.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder.png
new file mode 100644
index 000000000..fba6f3418
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder1.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder1.png
new file mode 100644
index 000000000..8360aaa7a
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_AnimationRecorder1.png differ
diff --git a/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_LUT.png b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_LUT.png
new file mode 100644
index 000000000..b38fccfcc
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/visualization/pathtracer/V9_LUT.png differ