Merge MMSYS 16

This commit is contained in:
Thomas Forgione 2019-08-28 11:39:20 +02:00
parent b59a5b394b
commit 2370d41471
No known key found for this signature in database
GPG Key ID: 203DAEA747F48F41
22 changed files with 22586 additions and 86 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

After

Width:  |  Height:  |  Size: 472 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,420 @@
x y1 y2
50 0.131942 0.238320
100 0.205725 0.356426
150 0.242529 0.399903
200 0.278507 0.436995
250 0.303498 0.470774
300 0.326138 0.501938
350 0.345066 0.530680
400 0.366400 0.557247
450 0.380507 0.581496
500 0.397580 0.603497
550 0.412134 0.623504
600 0.421523 0.641811
650 0.428828 0.659131
700 0.434932 0.675321
750 0.441448 0.690581
800 0.449477 0.705094
850 0.459193 0.718605
900 0.465525 0.731273
950 0.473074 0.743392
1000 0.480954 0.755044
1050 0.487500 0.766290
1100 0.492953 0.777063
1150 0.497089 0.787407
1200 0.501430 0.797337
1250 0.507154 0.806836
1300 0.510778 0.815817
1350 0.517049 0.824390
1400 0.521230 0.832663
1450 0.522772 0.840678
1500 0.524264 0.848443
1550 0.526208 0.855931
1600 0.529293 0.863128
1650 0.532167 0.869959
1700 0.534288 0.876448
1750 0.539359 0.882622
1800 0.543343 0.888526
1850 0.546010 0.894202
1900 0.548814 0.899647
1950 0.552221 0.904834
2000 0.556037 0.909772
2050 0.560241 0.914487
2100 0.565780 0.918977
2150 0.570375 0.923214
2200 0.573157 0.927178
2250 0.578510 0.930889
2300 0.584053 0.934271
2350 0.593370 0.937358
2400 0.601812 0.940252
2450 0.617184 0.943003
2500 0.624025 0.945608
2550 0.630036 0.948090
2600 0.637701 0.950440
2650 0.646357 0.952698
2700 0.653498 0.954861
2750 0.665690 0.956936
2800 0.675088 0.958936
2850 0.686781 0.960854
2900 0.686909 0.962623
2950 0.687540 0.964227
3000 0.687849 0.965722
3050 0.688321 0.967139
3100 0.693394 0.968524
3150 0.694474 0.969839
3200 0.705058 0.971154
3250 0.708841 0.972438
3300 0.710565 0.973670
3350 0.720899 0.974870
3400 0.725468 0.976020
3450 0.731085 0.977133
3500 0.736501 0.978201
3550 0.738313 0.979218
3600 0.743687 0.980205
3650 0.752294 0.981191
3700 0.754119 0.982101
3750 0.757645 0.983005
3800 0.758436 0.983841
3850 0.759179 0.984663
3900 0.762766 0.985485
3950 0.767053 0.986257
4000 0.768039 0.986997
4050 0.768951 0.987736
4100 0.770770 0.988425
4150 0.773462 0.989082
4200 0.782674 0.989740
4250 0.784454 0.990392
4300 0.791198 0.990968
4350 0.800382 0.991543
4400 0.805439 0.992118
4450 0.806450 0.992688
4500 0.810880 0.993181
4550 0.812841 0.993674
4600 0.813789 0.994167
4650 0.817104 0.994660
4700 0.821348 0.995153
4750 0.823234 0.995582
4800 0.825861 0.995993
4850 0.829420 0.996404
4900 0.832822 0.996815
4950 0.839297 0.997170
5000 0.842057 0.997499
5050 0.845612 0.997827
5100 0.850905 0.998082
5150 0.854108 0.998329
5200 0.857518 0.998575
5250 0.859906 0.998817
5300 0.862068 0.998981
5350 0.863851 0.999145
5400 0.865889 0.999310
5450 0.868748 0.999474
5500 0.875016 0.999637
5550 0.879465 0.999719
5600 0.884537 0.999801
5650 0.891037 0.999883
5700 0.894935 0.999965
5750 0.899050 1.000000
5800 0.906692 1.000000
5850 0.914201 1.000000
5900 0.919515 1.000000
5950 0.925242 1.000000
6000 0.931547 1.000000
6050 0.936965 1.000000
6100 0.943933 1.000000
6150 0.948192 1.000000
6200 0.952154 1.000000
6250 0.959043 1.000000
6300 0.965127 1.000000
6350 0.969322 1.000000
6400 0.971877 1.000000
6450 0.974122 1.000000
6500 0.975494 1.000000
6550 0.977028 1.000000
6600 0.979805 1.000000
6650 0.980725 1.000000
6700 0.982934 1.000000
6750 0.984247 1.000000
6800 0.984938 1.000000
6850 0.986581 1.000000
6900 0.987715 1.000000
6950 0.988011 1.000000
7000 0.988596 1.000000
7050 0.989161 1.000000
7100 0.989237 1.000000
7150 0.989559 1.000000
7200 0.989738 1.000000
7250 0.990027 1.000000
7300 0.990590 1.000000
7350 0.991285 1.000000
7400 0.991809 1.000000
7450 0.992369 1.000000
7500 0.992830 1.000000
7550 0.993457 1.000000
7600 0.993936 1.000000
7650 0.994172 1.000000
7700 0.994531 1.000000
7750 0.994823 1.000000
7800 0.995125 1.000000
7850 0.995492 1.000000
7900 0.995688 1.000000
7950 0.995964 1.000000
8000 0.996158 1.000000
8050 0.996327 1.000000
8100 0.996432 1.000000
8150 0.996633 1.000000
8200 0.996780 1.000000
8250 0.996848 1.000000
8300 0.996981 1.000000
8350 0.997045 1.000000
8400 0.997114 1.000000
8450 0.997242 1.000000
8500 0.997315 1.000000
8550 0.997366 1.000000
8600 0.997487 1.000000
8650 0.997601 1.000000
8700 0.997656 1.000000
8750 0.997775 1.000000
8800 0.997900 1.000000
8850 0.997944 1.000000
8900 0.998108 1.000000
8950 0.998161 1.000000
9000 0.998217 1.000000
9050 0.998389 1.000000
9100 0.998480 1.000000
9150 0.998672 1.000000
9200 0.998779 1.000000
9250 0.998879 1.000000
9300 0.998945 1.000000
9350 0.999020 1.000000
9400 0.999121 1.000000
9450 0.999205 1.000000
9500 0.999285 1.000000
9550 0.999412 1.000000
9600 0.999463 1.000000
9650 0.999499 1.000000
9700 0.999551 1.000000
9750 0.999589 1.000000
9800 0.999625 1.000000
9850 0.999643 1.000000
9900 0.999655 1.000000
9950 0.999689 1.000000
10000 0.999694 1.000000
10050 0.999698 1.000000
10100 0.999827 1.000000
10150 0.999870 1.000000
10200 0.999875 1.000000
10250 0.999875 1.000000
10300 0.999877 1.000000
10350 0.999878 1.000000
10400 0.999880 1.000000
10450 0.999880 1.000000
10500 0.999993 1.000000
10550 0.999993 1.000000
10600 0.999993 1.000000
10650 1.000000 1.000000
10700 1.000000 1.000000
10750 1.000000 1.000000
10800 1.000000 1.000000
10850 1.000000 1.000000
10900 1.000000 1.000000
10950 1.000000 1.000000
11000 1.000000 1.000000
11050 1.000000 1.000000
11100 1.000000 1.000000
11150 1.000000 1.000000
11200 1.000000 1.000000
11250 1.000000 1.000000
11300 1.000000 1.000000
11350 1.000000 1.000000
11400 1.000000 1.000000
11450 1.000000 1.000000
11500 1.000000 1.000000
11550 1.000000 1.000000
11600 1.000000 1.000000
11650 1.000000 1.000000
11700 1.000000 1.000000
11750 1.000000 1.000000
11800 1.000000 1.000000
11850 1.000000 1.000000
11900 1.000000 1.000000
11950 1.000000 1.000000
12000 1.000000 1.000000
12050 1.000000 1.000000
12100 1.000000 1.000000
12150 1.000000 1.000000
12200 1.000000 1.000000
12250 1.000000 1.000000
12300 1.000000 1.000000
12350 1.000000 1.000000
12400 1.000000 1.000000
12450 1.000000 1.000000
12500 1.000000 1.000000
12550 1.000000 1.000000
12600 1.000000 1.000000
12650 1.000000 1.000000
12700 1.000000 1.000000
12750 1.000000 1.000000
12800 1.000000 1.000000
12850 1.000000 1.000000
12900 1.000000 1.000000
12950 1.000000 1.000000
13000 1.000000 1.000000
13050 1.000000 1.000000
13100 1.000000 1.000000
13150 1.000000 1.000000
13200 1.000000 1.000000
13250 1.000000 1.000000
13300 1.000000 1.000000
13350 1.000000 1.000000
13400 1.000000 1.000000
13450 1.000000 1.000000
13500 1.000000 1.000000
13550 1.000000 1.000000
13600 1.000000 1.000000
13650 1.000000 1.000000
13700 1.000000 1.000000
13750 1.000000 1.000000
13800 1.000000 1.000000
13850 1.000000 1.000000
13900 1.000000 1.000000
13950 1.000000 1.000000
14000 1.000000 1.000000
14050 1.000000 1.000000
14100 1.000000 1.000000
14150 1.000000 1.000000
14200 1.000000 1.000000
14250 1.000000 1.000000
14300 1.000000 1.000000
14350 1.000000 1.000000
14400 1.000000 1.000000
14450 1.000000 1.000000
14500 1.000000 1.000000
14550 1.000000 1.000000
14600 1.000000 1.000000
14650 1.000000 1.000000
14700 1.000000 1.000000
14750 1.000000 1.000000
14800 1.000000 1.000000
14850 1.000000 1.000000
14900 1.000000 1.000000
14950 1.000000 1.000000
15000 1.000000 1.000000
15050 1.000000 1.000000
15100 1.000000 1.000000
15150 1.000000 1.000000
15200 1.000000 1.000000
15250 1.000000 1.000000
15300 1.000000 1.000000
15350 1.000000 1.000000
15400 1.000000 1.000000
15450 1.000000 1.000000
15500 1.000000 1.000000
15550 1.000000 1.000000
15600 1.000000 1.000000
15650 1.000000 1.000000
15700 1.000000 1.000000
15750 1.000000 1.000000
15800 1.000000 1.000000
15850 1.000000 1.000000
15900 1.000000 1.000000
15950 1.000000 1.000000
16000 1.000000 1.000000
16050 1.000000 1.000000
16100 1.000000 1.000000
16150 1.000000 1.000000
16200 1.000000 1.000000
16250 1.000000 1.000000
16300 1.000000 1.000000
16350 1.000000 1.000000
16400 1.000000 1.000000
16450 1.000000 1.000000
16500 1.000000 1.000000
16550 1.000000 1.000000
16600 1.000000 1.000000
16650 1.000000 1.000000
16700 1.000000 1.000000
16750 1.000000 1.000000
16800 1.000000 1.000000
16850 1.000000 1.000000
16900 1.000000 1.000000
16950 1.000000 1.000000
17000 1.000000 1.000000
17050 1.000000 1.000000
17100 1.000000 1.000000
17150 1.000000 1.000000
17200 1.000000 1.000000
17250 1.000000 1.000000
17300 1.000000 1.000000
17350 1.000000 1.000000
17400 1.000000 1.000000
17450 1.000000 1.000000
17500 1.000000 1.000000
17550 1.000000 1.000000
17600 1.000000 1.000000
17650 1.000000 1.000000
17700 1.000000 1.000000
17750 1.000000 1.000000
17800 1.000000 1.000000
17850 1.000000 1.000000
17900 1.000000 1.000000
17950 1.000000 1.000000
18000 1.000000 1.000000
18050 1.000000 1.000000
18100 1.000000 1.000000
18150 1.000000 1.000000
18200 1.000000 1.000000
18250 1.000000 1.000000
18300 1.000000 1.000000
18350 1.000000 1.000000
18400 1.000000 1.000000
18450 1.000000 1.000000
18500 1.000000 1.000000
18550 1.000000 1.000000
18600 1.000000 1.000000
18650 1.000000 1.000000
18700 1.000000 1.000000
18750 1.000000 1.000000
18800 1.000000 1.000000
18850 1.000000 1.000000
18900 1.000000 1.000000
18950 1.000000 1.000000
19000 1.000000 1.000000
19050 1.000000 1.000000
19100 1.000000 1.000000
19150 1.000000 1.000000
19200 1.000000 1.000000
19250 1.000000 1.000000
19300 1.000000 1.000000
19350 1.000000 1.000000
19400 1.000000 1.000000
19450 1.000000 1.000000
19500 1.000000 1.000000
19550 1.000000 1.000000
19600 1.000000 1.000000
19650 1.000000 1.000000
19700 1.000000 1.000000
19750 1.000000 1.000000
19800 1.000000 1.000000
19850 1.000000 1.000000
19900 1.000000 1.000000
19950 1.000000 1.000000
20000 1.000000 1.000000
20050 1.000000 1.000000
20100 1.000000 1.000000
20150 1.000000 1.000000
20200 1.000000 1.000000
20250 1.000000 1.000000
20300 1.000000 1.000000
20350 1.000000 1.000000
20400 1.000000 1.000000
20450 1.000000 1.000000
20500 1.000000 1.000000
20550 1.000000 1.000000
20600 1.000000 1.000000
20650 1.000000 1.000000
20700 1.000000 1.000000
20750 1.000000 1.000000
20800 1.000000 1.000000
20850 1.000000 1.000000
20900 1.000000 1.000000
20950 1.000000 1.000000

View File

@ -0,0 +1,145 @@
x,y,r,g
0,0,0,0
0,1,0.07894736842105263,0
0,2,0.18421052631578946,0
0,3,0,0
0,4,0.02631578947368421,0
0,5,0.02631578947368421,0
0,6,0,0
0,7,0.02631578947368421,0
0,8,0,0
0,9,0.13157894736842105,0
0,10,0.2894736842105263,0
0,11,0.2631578947368421,0
1,0,0,0
1,1,0,0
1,2,0.10526315789473684,0
1,3,0.15789473684210525,0
1,4,0.18421052631578946,0
1,5,0.02631578947368421,0
1,6,0,0
1,7,0.07894736842105263,0
1,8,0.02631578947368421,0
1,9,0.05263157894736842,0
1,10,0.05263157894736842,0
1,11,0.05263157894736842,0
2,0,0,0
2,1,0.02631578947368421,0
2,2,0,0
2,3,0.5,1
2,4,0.02631578947368421,0
2,5,0.02631578947368421,0
2,6,0.02631578947368421,0
2,7,0.07894736842105263,0
2,8,0.02631578947368421,0
2,9,0.07894736842105263,0
2,10,0.07894736842105263,0
2,11,0.05263157894736842,0
3,0,0,0
3,1,0.05263157894736842,0
3,2,0.07894736842105263,0
3,3,0,0
3,4,0.4473684210526316,1
3,5,0.02631578947368421,0
3,6,0.13157894736842105,0
3,7,0.02631578947368421,0
3,8,0,0
3,9,0.07894736842105263,0
3,10,0,0
3,11,0.13157894736842105,0
4,0,0,0
4,1,0,0
4,2,0.02631578947368421,0
4,3,0.15789473684210525,0
4,4,0,0
4,5,0.3157894736842105,0
4,6,0.21052631578947367,0
4,7,0.05263157894736842,0
4,8,0,0
4,9,0.07894736842105263,0
4,10,0,0
4,11,0.10526315789473684,0
5,0,0,0
5,1,0.10526315789473684,0
5,2,0,0
5,3,0.05263157894736842,0
5,4,0.13157894736842105,0
5,5,0,0
5,6,0.13157894736842105,0
5,7,0.05263157894736842,0
5,8,0.15789473684210525,0
5,9,0.02631578947368421,0
5,10,0.02631578947368421,0
5,11,0.02631578947368421,0
6,0,0,0
6,1,0.15789473684210525,0
6,2,0.10526315789473684,0
6,3,0,0
6,4,0,0
6,5,0.10526315789473684,0
6,6,0,0
6,7,0.05263157894736842,0
6,8,0.21052631578947367,0
6,9,0.13157894736842105,0
6,10,0,0
6,11,0,0
7,0,0,0
7,1,0.07894736842105263,0
7,2,0.05263157894736842,0
7,3,0.02631578947368421,0
7,4,0.07894736842105263,0
7,5,0.07894736842105263,0
7,6,0.10526315789473684,0
7,7,0,0
7,8,0.07894736842105263,0
7,9,0.02631578947368421,0
7,10,0.02631578947368421,0
7,11,0.05263157894736842,0
8,0,0,0
8,1,0,0
8,2,0.10526315789473684,0
8,3,0.02631578947368421,0
8,4,0.02631578947368421,0
8,5,0.18421052631578946,0
8,6,0.15789473684210525,0
8,7,0,0
8,8,0,0
8,9,0.21052631578947367,0
8,10,0.07894736842105263,0
8,11,0.07894736842105263,0
9,0,0,0
9,1,0.07894736842105263,0
9,2,0.10526315789473684,0
9,3,0.02631578947368421,0
9,4,0,0
9,5,0,0
9,6,0.07894736842105263,0
9,7,0.15789473684210525,0
9,8,0.13157894736842105,0
9,9,0,0
9,10,0.21052631578947367,0
9,11,0.07894736842105263,0
10,0,0,0
10,1,0.02631578947368421,0
10,2,0.10526315789473684,0
10,3,0.07894736842105263,0
10,4,0.05263157894736842,0
10,5,0.02631578947368421,0
10,6,0,0
10,7,0.02631578947368421,0
10,8,0.23684210526315788,0
10,9,0.07894736842105263,0
10,10,0,0
10,11,0.10526315789473684,0
11,0,0,0
11,1,0.18421052631578946,0
11,2,0.13157894736842105,0
11,3,0.13157894736842105,0
11,4,0.10526315789473684,0
11,5,0.02631578947368421,0
11,6,0,0
11,7,0.13157894736842105,0
11,8,0.02631578947368421,0
11,9,0.05263157894736842,0
11,10,0.07894736842105263,0
11,11,0,0

View File

@ -0,0 +1,301 @@
x y1 y2
0.200000 0.097503 0.088315
0.400000 0.098452 0.089165
0.600000 0.099034 0.090621
0.800000 0.100106 0.092772
1.000000 0.100838 0.094922
1.200000 0.101238 0.097089
1.400000 0.101550 0.100406
1.600000 0.102436 0.103554
1.800000 0.102910 0.106919
2.000000 0.104166 0.109929
2.200000 0.107001 0.113048
2.400000 0.109256 0.115971
2.600000 0.110241 0.117648
2.800000 0.112081 0.119653
3.000000 0.114065 0.121677
3.200000 0.116259 0.123945
3.400000 0.119361 0.126972
3.600000 0.121551 0.129572
3.800000 0.122457 0.131866
4.000000 0.123988 0.134376
4.200000 0.126454 0.136586
4.400000 0.127992 0.138646
4.600000 0.129511 0.141414
4.800000 0.131718 0.144400
5.000000 0.133976 0.147408
5.200000 0.135513 0.149806
5.400000 0.137142 0.152585
5.600000 0.140108 0.155569
5.800000 0.142978 0.158312
6.000000 0.145508 0.160951
6.200000 0.148907 0.163685
6.400000 0.151869 0.166592
6.600000 0.154380 0.170802
6.800000 0.157392 0.174862
7.000000 0.159646 0.178034
7.200000 0.161659 0.180889
7.400000 0.163192 0.184679
7.600000 0.165012 0.188733
7.800000 0.166310 0.192799
8.000000 0.167388 0.196648
8.200000 0.168361 0.201017
8.400000 0.169410 0.205993
8.600000 0.170686 0.211084
8.800000 0.171687 0.215472
9.000000 0.173009 0.220458
9.200000 0.174207 0.225169
9.400000 0.175031 0.229032
9.600000 0.176437 0.232202
9.800000 0.178460 0.235026
10.000000 0.180627 0.237295
10.200000 0.183367 0.240108
10.400000 0.186384 0.243486
10.600000 0.188322 0.246454
10.800000 0.190915 0.248796
11.000000 0.192824 0.250949
11.200000 0.194175 0.253685
11.400000 0.195554 0.256795
11.600000 0.199937 0.259664
11.800000 0.201944 0.262481
12.000000 0.203812 0.265244
12.200000 0.205396 0.268898
12.400000 0.206717 0.272740
12.600000 0.207413 0.275419
12.800000 0.208152 0.277734
13.000000 0.209075 0.280773
13.200000 0.209607 0.283977
13.400000 0.210143 0.287101
13.600000 0.211108 0.290366
13.800000 0.211847 0.293515
14.000000 0.212243 0.296769
14.200000 0.213087 0.299976
14.400000 0.213616 0.302717
14.600000 0.214302 0.305465
14.800000 0.215149 0.307978
15.000000 0.215892 0.310081
15.200000 0.217069 0.312668
15.400000 0.219095 0.315512
15.600000 0.220902 0.317561
15.800000 0.221939 0.320237
16.000000 0.223176 0.322628
16.200000 0.225046 0.324867
16.400000 0.226490 0.327345
16.600000 0.227185 0.330391
16.800000 0.228230 0.332416
17.000000 0.230113 0.334231
17.200000 0.230828 0.336941
17.400000 0.233200 0.340406
17.600000 0.234337 0.344316
17.800000 0.236028 0.347395
18.000000 0.239351 0.350385
18.200000 0.241067 0.353339
18.400000 0.242239 0.356479
18.600000 0.244004 0.359210
18.800000 0.245358 0.361768
19.000000 0.246510 0.363749
19.200000 0.247763 0.365858
19.400000 0.248786 0.367674
19.600000 0.250194 0.369398
19.800000 0.251096 0.371366
20.000000 0.251690 0.373385
20.200000 0.252760 0.375526
20.400000 0.253619 0.377828
20.600000 0.254491 0.380114
20.800000 0.255894 0.382473
21.000000 0.256917 0.384404
21.200000 0.258110 0.385675
21.400000 0.259289 0.387245
21.600000 0.260389 0.389327
21.800000 0.261689 0.391639
22.000000 0.263026 0.394407
22.200000 0.264725 0.396658
22.400000 0.267235 0.398696
22.600000 0.269488 0.400432
22.800000 0.271635 0.402434
23.000000 0.274004 0.404633
23.200000 0.276234 0.407167
23.400000 0.277387 0.409267
23.600000 0.278104 0.411109
23.800000 0.278957 0.413462
24.000000 0.280005 0.415360
24.200000 0.281500 0.417986
24.400000 0.282248 0.420244
24.600000 0.282840 0.422534
24.800000 0.284264 0.424607
25.000000 0.285127 0.426298
25.200000 0.286189 0.427968
25.400000 0.287795 0.429578
25.600000 0.288808 0.431127
25.800000 0.290111 0.433761
26.000000 0.291812 0.436558
26.200000 0.293006 0.439091
26.400000 0.294112 0.441927
26.600000 0.295166 0.444808
26.800000 0.297193 0.447370
27.000000 0.298580 0.450142
27.200000 0.300218 0.452402
27.400000 0.301624 0.455114
27.600000 0.303793 0.457539
27.800000 0.304811 0.459427
28.000000 0.305401 0.461453
28.200000 0.305993 0.463215
28.400000 0.306566 0.464894
28.600000 0.307121 0.466308
28.800000 0.307988 0.467434
29.000000 0.309297 0.468577
29.200000 0.310065 0.470151
29.400000 0.310849 0.471488
29.600000 0.311914 0.472803
29.800000 0.313185 0.474673
30.000000 0.314149 0.475856
30.200000 0.314920 0.477171
30.400000 0.315501 0.479592
30.600000 0.316245 0.481980
30.800000 0.317181 0.485422
31.000000 0.317727 0.487838
31.200000 0.318091 0.489523
31.400000 0.318770 0.491526
31.600000 0.319236 0.493325
31.800000 0.319707 0.495433
32.000000 0.320356 0.497587
32.200000 0.321022 0.499542
32.400000 0.321769 0.501288
32.600000 0.322224 0.502722
32.800000 0.323040 0.503949
33.000000 0.324225 0.505222
33.200000 0.325689 0.506290
33.400000 0.326490 0.507350
33.600000 0.327039 0.508887
33.800000 0.327471 0.510496
34.000000 0.328007 0.511455
34.200000 0.328648 0.512538
34.400000 0.329275 0.513873
34.600000 0.329868 0.515596
34.800000 0.330697 0.517648
35.000000 0.331593 0.519788
35.200000 0.332025 0.521564
35.400000 0.332886 0.523140
35.600000 0.333676 0.524824
35.800000 0.334364 0.526479
36.000000 0.335636 0.527580
36.200000 0.336511 0.528415
36.400000 0.337418 0.529290
36.600000 0.338301 0.530663
36.800000 0.339170 0.532125
37.000000 0.340562 0.533335
37.200000 0.341569 0.534586
37.400000 0.342588 0.535723
37.600000 0.343646 0.537357
37.800000 0.344250 0.539198
38.000000 0.345600 0.540550
38.200000 0.346874 0.541728
38.400000 0.347969 0.542815
38.600000 0.348918 0.544138
38.800000 0.350681 0.545336
39.000000 0.352598 0.546381
39.200000 0.354173 0.547146
39.400000 0.355891 0.548101
39.600000 0.357380 0.549355
39.800000 0.358859 0.550491
40.000000 0.360160 0.551519
40.200000 0.361323 0.552797
40.400000 0.363119 0.554266
40.600000 0.364269 0.555537
40.800000 0.365443 0.556571
41.000000 0.366789 0.557678
41.200000 0.368127 0.558670
41.400000 0.369385 0.559548
41.600000 0.370063 0.560449
41.800000 0.371340 0.561790
42.000000 0.372450 0.563915
42.200000 0.373622 0.566647
42.400000 0.374693 0.569275
42.600000 0.376288 0.571004
42.800000 0.377496 0.572581
43.000000 0.379432 0.574225
43.200000 0.381727 0.575702
43.400000 0.382813 0.576852
43.600000 0.384065 0.577723
43.800000 0.384869 0.578758
44.000000 0.385669 0.579743
44.200000 0.386363 0.580671
44.400000 0.387027 0.581695
44.600000 0.387808 0.582935
44.800000 0.388667 0.584143
45.000000 0.389902 0.585377
45.200000 0.391123 0.587146
45.400000 0.392796 0.589772
45.600000 0.394203 0.591433
45.800000 0.394920 0.592806
46.000000 0.395631 0.594099
46.200000 0.396501 0.595159
46.400000 0.397414 0.596667
46.600000 0.398494 0.598406
46.800000 0.399236 0.600088
47.000000 0.400161 0.601838
47.200000 0.401429 0.603664
47.400000 0.402608 0.605485
47.600000 0.403520 0.607148
47.800000 0.404343 0.608493
48.000000 0.405009 0.609595
48.200000 0.405578 0.611539
48.400000 0.406122 0.613060
48.600000 0.406758 0.614969
48.800000 0.407346 0.616701
49.000000 0.408071 0.618002
49.200000 0.408686 0.618920
49.400000 0.409120 0.619814
49.600000 0.410161 0.620999
49.800000 0.410735 0.622160
50.000000 0.412381 0.623502
50.200000 0.413658 0.625015
50.400000 0.415368 0.626299
50.600000 0.416405 0.627531
50.800000 0.417115 0.628789
51.000000 0.418355 0.630495
51.200000 0.419826 0.631440
51.400000 0.420414 0.632182
51.600000 0.420999 0.632895
51.800000 0.421503 0.633788
52.000000 0.422068 0.634506
52.200000 0.423113 0.635104
52.400000 0.424586 0.635770
52.600000 0.425544 0.636204
52.800000 0.426422 0.636636
53.000000 0.427180 0.637123
53.200000 0.428695 0.637688
53.400000 0.430087 0.639010
53.600000 0.431815 0.640361
53.800000 0.433445 0.641679
54.000000 0.435073 0.643095
54.200000 0.436661 0.644524
54.400000 0.437781 0.645809
54.600000 0.438688 0.647127
54.800000 0.439581 0.648371
55.000000 0.440405 0.649450
55.200000 0.442192 0.650736
55.400000 0.443996 0.652181
55.600000 0.445176 0.653517
55.800000 0.446202 0.655100
56.000000 0.447057 0.656265
56.200000 0.448194 0.657582
56.400000 0.449148 0.658616
56.600000 0.450208 0.659328
56.800000 0.451604 0.659835
57.000000 0.454157 0.660488
57.200000 0.455229 0.661104
57.400000 0.456171 0.661798
57.600000 0.456948 0.662449
57.800000 0.457787 0.663459
58.000000 0.458755 0.664760
58.200000 0.460129 0.665886
58.400000 0.461360 0.666987
58.600000 0.462152 0.668349
58.800000 0.463101 0.669528
59.000000 0.463959 0.670408
59.200000 0.464698 0.671044
59.400000 0.465239 0.672217
59.600000 0.466235 0.672912
59.800000 0.467269 0.673920
60.000000 0.468214 0.674896

View File

@ -0,0 +1,42 @@
x y1 y2 y3 y4
0.200000 0.889581 0.889581 0.883875 0.883875
0.400000 0.822990 0.804362 0.816495 0.802203
0.600000 0.768693 0.721021 0.772181 0.737774
0.800000 0.720731 0.747439 0.762793 0.772253
1.000000 0.742206 0.832912 0.789958 0.834533
1.200000 0.741835 0.888810 0.797801 0.878941
1.400000 0.731434 0.923145 0.803429 0.908167
1.600000 0.735275 0.939933 0.819414 0.923704
1.800000 0.754039 0.949945 0.833776 0.931834
2.000000 0.785546 0.957122 0.843764 0.935207
2.200000 0.820066 0.959134 0.853350 0.934015
2.400000 0.840687 0.951022 0.853754 0.928547
2.600000 0.861316 0.944366 0.859652 0.923801
2.800000 0.882207 0.944223 0.870047 0.926294
3.000000 0.892006 0.941559 0.879164 0.924395
3.200000 0.900703 0.942249 0.891144 0.926068
3.400000 0.905867 0.941565 0.899868 0.927974
3.600000 0.906904 0.939598 0.906014 0.929866
3.800000 0.909777 0.939078 0.910110 0.931273
4.000000 0.907791 0.935486 0.914661 0.933482
4.200000 0.913644 0.939438 0.920929 0.938426
4.400000 0.915343 0.939563 0.923379 0.938178
4.600000 0.914039 0.945504 0.931422 0.942895
4.800000 0.920530 0.953427 0.937857 0.947798
5.000000 0.917773 0.952371 0.939319 0.949186
5.200000 0.919745 0.953392 0.939354 0.945735
5.400000 0.911881 0.953402 0.939284 0.945776
5.600000 0.908520 0.954670 0.939114 0.946492
5.800000 0.908134 0.955773 0.939707 0.948384
6.000000 0.910121 0.954719 0.939651 0.947648
6.200000 0.911236 0.949753 0.939142 0.944922
6.400000 0.912929 0.944804 0.939281 0.942679
6.600000 0.910526 0.938247 0.937674 0.937747
6.800000 0.904275 0.931704 0.943682 0.940304
7.000000 0.912392 0.939617 0.943977 0.941335
7.200000 0.915407 0.941206 0.945584 0.946185
7.400000 0.900928 0.925309 0.937256 0.936830
7.600000 0.916198 0.937781 0.947332 0.947727
7.800000 0.911115 0.931691 0.948137 0.948504
8.000000 0.913798 0.933111 0.948431 0.949578
8.200000 0.919887 0.936522 0.949719 0.949874

View File

@ -0,0 +1,22 @@
x y1 y2 y3 y4
0.200000 0.950692 0.938604
0.400000 0.911496 0.915609
0.600000 0.873069 0.883516
0.800000 0.891625 0.880703
1.000000 0.955981 0.917125
1.200000 0.971645 0.935734
1.400000 0.978446 0.949339
1.600000 0.983482 0.956628
1.800000 0.986659 0.958936
2.000000 0.988570 0.959737
2.200000 0.988408 0.959168
2.400000 0.984885 0.963382
2.600000 0.984272 0.965259
2.800000 0.984852 0.972164
3.000000 0.983217 0.975857
3.200000 0.981318 0.979839
3.400000 0.980826 0.981861
3.600000 0.980634 0.982370
3.800000 0.980676 0.983634
4.000000 0.979625 0.984202
4.200000 0.981657 0.985465

View File

@ -0,0 +1,42 @@
x y1 y2 y3 y4
0.200000 0.841697 0.850612 0.843036 0.840792
0.400000 0.764677 0.761115 0.762456 0.759129
0.600000 0.690720 0.686256 0.709340 0.700445
0.800000 0.655230 0.696092 0.694157 0.720723
1.000000 0.656620 0.746683 0.712589 0.777020
1.200000 0.652107 0.794245 0.717405 0.821236
1.400000 0.646750 0.841142 0.725727 0.861457
1.600000 0.651272 0.870864 0.736937 0.887062
1.800000 0.661459 0.892918 0.746380 0.904522
2.000000 0.679333 0.908470 0.755865 0.915694
2.200000 0.696017 0.915827 0.763613 0.920893
2.400000 0.705119 0.908318 0.764571 0.912646
2.600000 0.711162 0.900380 0.765982 0.904986
2.800000 0.722124 0.897375 0.769455 0.900842
3.000000 0.731558 0.892189 0.772406 0.896492
3.200000 0.744708 0.890398 0.776895 0.894936
3.400000 0.758078 0.888678 0.780811 0.892576
3.600000 0.769000 0.886149 0.782373 0.889367
3.800000 0.780642 0.884082 0.782336 0.885339
4.000000 0.794191 0.881932 0.787780 0.883530
4.200000 0.809721 0.887779 0.797321 0.887849
4.400000 0.823563 0.891592 0.808694 0.890361
4.600000 0.834614 0.895438 0.819831 0.895120
4.800000 0.839714 0.901879 0.829065 0.899486
5.000000 0.838900 0.901809 0.832960 0.899695
5.200000 0.837800 0.901474 0.833591 0.897413
5.400000 0.836819 0.901112 0.836936 0.897131
5.600000 0.836688 0.902678 0.841655 0.898419
5.800000 0.835827 0.906221 0.845287 0.900476
6.000000 0.836400 0.907692 0.850107 0.902835
6.200000 0.837139 0.905174 0.853277 0.902926
6.400000 0.838070 0.901179 0.853221 0.899731
6.600000 0.837262 0.897714 0.854615 0.896867
6.800000 0.836261 0.893868 0.856965 0.893729
7.000000 0.843714 0.896162 0.857931 0.898542
7.200000 0.847238 0.898740 0.860850 0.901023
7.400000 0.835570 0.883061 0.854456 0.893703
7.600000 0.846320 0.889552 0.857841 0.897609
7.800000 0.841058 0.881047 0.861676 0.897775
8.000000 0.845205 0.882172 0.862028 0.895988
8.200000 0.844636 0.878967 0.863343 0.894120

View File

@ -0,0 +1,14 @@
const fs = require('fs');
const step = 50;
let input = fs.readFileSync('cdf-full.dat', 'utf-8')
.split('\n')
.map((x) => x.split(' '));
let output = [];
for (let i = 0; i < input.length; i += step) {
output.push(input[i]);
}
fs.writeFileSync('cdf.dat', output.map((x) => x.join(' ')).join('\n'));

View File

@ -30,7 +30,7 @@ Indeed, geometry segments have close to a similar number of faces; their size is
For texture segments, the size is usually much smaller than the geometry segments but also varies a lot, as between two successive resolutions the number of pixels is divided by 4. For texture segments, the size is usually much smaller than the geometry segments but also varies a lot, as between two successive resolutions the number of pixels is divided by 4.
Finally, for each texture segment $s^{T}$, the MPD stores the \textit{MSE} (mean square error) of the image and resolution, relative to the highest resolution (by default, triangles are filled with its average color). Finally, for each texture segment $s^{T}$, the MPD stores the \textit{MSE} (mean square error) of the image and resolution, relative to the highest resolution (by default, triangles are filled with its average color).
Offline parameters are stored in the MPD as shown in Listing 1\todo{fix reference}. Offline parameters are stored in the MPD as shown in Listing~\ref{listing:MPD}.
\subsubsection{Online parameters} \subsubsection{Online parameters}
In addition to the offline parameters stored in the MPD file for each segment, view-dependent parameters are computed at navigation time. In addition to the offline parameters stored in the MPD file for each segment, view-dependent parameters are computed at navigation time.
@ -84,7 +84,7 @@ Algorithm~\ref{algorithm:nextsegment} details how our DASH client makes decision
\begin{algorithm} \begin{algorithm}[th]
\SetKwInOut{Input}{input} \SetKwInOut{Input}{input}
\SetKwInOut{Output}{output} \SetKwInOut{Output}{output}
\Input{Current index $i$, time $t_i$, viewpoint $v(t_i)$, buffer of already downloaded \texttt{segments} $\mathcal{B}_i$, MPD} \Input{Current index $i$, time $t_i$, viewpoint $v(t_i)$, buffer of already downloaded \texttt{segments} $\mathcal{B}_i$, MPD}

View File

@ -30,7 +30,7 @@ We consider a face to be large if its area in 3D is more than $a+3\sigma$, where
In our example, it selects the 5 largest faces that represent $15\%$ of the total face area. In our example, it selects the 5 largest faces that represent $15\%$ of the total face area.
We thus obtain a decomposition of the NVE into adaptation sets that partitions the geometry of the scene into a small adaptation set containing the larger faces of the model, and smaller adaptation sets containing the remaining faces. We thus obtain a decomposition of the NVE into adaptation sets that partitions the geometry of the scene into a small adaptation set containing the larger faces of the model, and smaller adaptation sets containing the remaining faces.
We store the spatial location of each adaptation set, characterized by the coordinates of its bounding box, in the MPD file as the supplementary property of the adaptation set in the form of ``\textit{$x_{\min}$, width, $y_{\min}$, height, $z_{\min}$, depth}'' (as shown in Listing 1). We store the spatial location of each adaptation set, characterized by the coordinates of its bounding box, in the MPD file as the supplementary property of the adaptation set in the form of ``\textit{$x_{\min}$, width, $y_{\min}$, height, $z_{\min}$, depth}'' (as shown in Listing~\ref{listing:MPD}).
This information is used by the client to implement a view-dependent streaming (Section~\ref{sec:dashclientspec}). This information is used by the client to implement a view-dependent streaming (Section~\ref{sec:dashclientspec}).
\subsubsection{Texture Management} \subsubsection{Texture Management}
@ -57,15 +57,13 @@ For an adaptation set containing texture, each representation contains a single
In our example, from the full-size image, we generate successive resolutions by dividing both height and width by 2, stopping when the image size is less or equal to $64\times 64$. In our example, from the full-size image, we generate successive resolutions by dividing both height and width by 2, stopping when the image size is less or equal to $64\times 64$.
Figure~\ref{fig:textures} illustrates the use of the textures against the rendering using a single, average color per face. Figure~\ref{fig:textures} illustrates the use of the textures against the rendering using a single, average color per face.
\begin{figure} \begin{figure}[th]
\centering \centering
\begin{subfigure}[b]{\textwidth} \begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=1\textwidth]{assets/dash-3d/average-color/full-res.png} \includegraphics[width=1\textwidth]{assets/dash-3d/average-color/full-res.png}
\caption{With full resolution textures} \caption{With full resolution textures}
\vspace{0.3cm}
\end{subfigure} \end{subfigure}
\begin{subfigure}[b]{0.45\textwidth}
\begin{subfigure}[b]{\textwidth}
\includegraphics[width=1\textwidth]{assets/dash-3d/average-color/no-res.png} \includegraphics[width=1\textwidth]{assets/dash-3d/average-color/no-res.png}
\caption{With average colors} \caption{With average colors}
\end{subfigure} \end{subfigure}
@ -80,11 +78,11 @@ Thus, the first segment contains the biggest faces and the last one the smallest
In addition to the selected faces, a segment stores all face vertices and attributes so that each segment is independent. In addition to the selected faces, a segment stores all face vertices and attributes so that each segment is independent.
For textures, each representation contains a single segment. For textures, each representation contains a single segment.
\begin{figure} \begin{figure}[th]
\lstinputlisting[% \lstinputlisting[%
language=XML, language=XML,
caption={MPD description of a geometry adaptation set, and a texture adaptation set.}, caption={MPD description of a geometry adaptation set, and a texture adaptation set.},
label=geometry-as-example, label=listing:MPD,
emph={% emph={%
MPD, MPD,
Period, Period,
@ -99,6 +97,6 @@ For textures, each representation contains a single segment.
SegmentURL, SegmentURL,
Viewpoint Viewpoint
} }
]{assets/dash-3d/geometry-as.xml}\label{listing:MPD} ]{assets/dash-3d/geometry-as.xml}
\end{figure} \end{figure}

View File

@ -11,9 +11,10 @@ The converted model has 387,551 vertices and 552,118 faces.
Table~\ref{table:size} gives some general information about the model. Table~\ref{table:size} gives some general information about the model.
We partition the geometry into a k-$d$ tree until the leafs have less than 10000 faces, which gives us 64 adaptation sets, plus one containing the large faces. We partition the geometry into a k-$d$ tree until the leafs have less than 10000 faces, which gives us 64 adaptation sets, plus one containing the large faces.
\begin{table} \begin{table}[th]
\centering \centering
\begin{tabular}{ll} \begin{tabular}{ll}
\toprule
\textbf{Files} & \textbf{Size} \\ \midrule \textbf{Files} & \textbf{Size} \\ \midrule
3DS Max & 55 MB \\ 3DS Max & 55 MB \\
OBJ file & 62 MB\\ OBJ file & 62 MB\\
@ -67,7 +68,7 @@ The second streaming policy that we run is the one we proposed in equation (\ref
We have also analyzed the effect of grouping the faces in geometry segments of an adaptation set based on their 3D area. We have also analyzed the effect of grouping the faces in geometry segments of an adaptation set based on their 3D area.
Finally, we try several bandwidth parameters to study how our system can adapt to varying network conditions. Finally, we try several bandwidth parameters to study how our system can adapt to varying network conditions.
\begin{table} \begin{table}[th]
\centering \centering
\begin{tabular}{@{}ll@{}} \begin{tabular}{@{}ll@{}}
\toprule \toprule
@ -82,7 +83,7 @@ Finally, we try several bandwidth parameters to study how our system can adapt t
\end{table} \end{table}
\subsection{Experimental Results} \subsection{Experimental Results}
\begin{figure} \begin{figure}[th]
\centering \centering
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
@ -113,7 +114,7 @@ The octree partitions content into non-homogeneous adaptation sets; as a result,
Figure~\ref{fig:preparation} shows that the system seems to be slightly less efficient with an Octree than with a $k$-d tree based partition, but this result is not significant. Figure~\ref{fig:preparation} shows that the system seems to be slightly less efficient with an Octree than with a $k$-d tree based partition, but this result is not significant.
For the remaining experiments, partitioning is based on a $k$-d tree. For the remaining experiments, partitioning is based on a $k$-d tree.
\begin{figure} \begin{figure}[th]
\centering \centering
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
@ -137,7 +138,7 @@ For the remaining experiments, partitioning is based on a $k$-d tree.
\addlegendentry{\scriptsize Offline only} \addlegendentry{\scriptsize Offline only}
\end{axis} \end{axis}
\end{tikzpicture} \end{tikzpicture}
\caption{Impact of the segment utility metric on the rendering qualit with a 5Mbps bandwidth.\label{fig:utility}} \caption{Impact of the segment utility metric on the rendering quality with a 5Mbps bandwidth.\label{fig:utility}}
\end{figure} \end{figure}
Figure~\ref{fig:utility} displays how a utility metric should take advantage of both offline and online features. Figure~\ref{fig:utility} displays how a utility metric should take advantage of both offline and online features.
@ -145,7 +146,7 @@ The experiments consider $k$-d tree cell for adaptation sets and the proposed st
We observe that a purely offline utility metric leads to poor PSNR results. We observe that a purely offline utility metric leads to poor PSNR results.
An online-only utility improves the results, as it takes the user viewing frustum into consideration, but still, the proposed utility (in Section~\ref{subsec:utility}) performs better. An online-only utility improves the results, as it takes the user viewing frustum into consideration, but still, the proposed utility (in Section~\ref{subsec:utility}) performs better.
\begin{figure} \begin{figure}[th]
\centering \centering
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
@ -185,7 +186,7 @@ In contrast, our proposed streaming policy adapts to an increasing bandwidth by
In fact, an interesting feature of our proposed streaming policy is that it adapts the geometry-texture compromise to the bandwidth. The textures represent 57.3\% of the total amount of downloaded bytes at 2.5 Mbps, and 70.2\% at 10 Mbps. In fact, an interesting feature of our proposed streaming policy is that it adapts the geometry-texture compromise to the bandwidth. The textures represent 57.3\% of the total amount of downloaded bytes at 2.5 Mbps, and 70.2\% at 10 Mbps.
In other words, our system tends to favor geometry segments when the bandwidth is low, and favor texture segments when the bandwidth increases. In other words, our system tends to favor geometry segments when the bandwidth is low, and favor texture segments when the bandwidth increases.
\begin{figure} \begin{figure}[th]
\centering \centering
\begin{tikzpicture} \begin{tikzpicture}
\begin{axis}[ \begin{axis}[
@ -210,7 +211,7 @@ In other words, our system tends to favor geometry segments when the bandwidth i
\caption{Impact of the streaming policy (greedy vs.\ proposed) with a 5 Mbps bandwidth.}\label{fig:greedyweakness} \caption{Impact of the streaming policy (greedy vs.\ proposed) with a 5 Mbps bandwidth.}\label{fig:greedyweakness}
\end{figure} \end{figure}
\begin{table} \begin{table}[th]
\centering \centering
\begin{tabular}{@{}p{2.5cm}p{0.7cm}p{0.7cm}p{0.7cm}p{0.3cm}p{0.7cm}p{0.7cm}p{0.7cm}@{}} \begin{tabular}{@{}p{2.5cm}p{0.7cm}p{0.7cm}p{0.7cm}p{0.3cm}p{0.7cm}p{0.7cm}p{0.7cm}@{}}
\toprule \toprule
@ -225,12 +226,13 @@ In other words, our system tends to favor geometry segments when the bandwidth i
\caption{Average PSNR, Greedy vs. Proposed\label{table:greedyVsproposed}} \caption{Average PSNR, Greedy vs. Proposed\label{table:greedyVsproposed}}
\end{table} \end{table}
\begin{table} \begin{table}[th]
\centering \centering
\renewcommand{\arraystretch}{1.2} \renewcommand{\arraystretch}{1.2}
\begin{tabular}{@{}cccc@{}} \begin{tabular}{@{}cccc@{}}
\textbf{Resolutions} & \textbf{2.5 Mbps} & \textbf{5 Mbps} & \textbf{10 Mbps} \\
\toprule \toprule
\textbf{Resolutions} & \textbf{2.5 Mbps} & \textbf{5 Mbps} & \textbf{10 Mbps} \\
\midrule
1 & 5.7\% vs 1.4\% & 6.3\% vs 1.4\% & 6.17\% vs 1.4\% \\ 1 & 5.7\% vs 1.4\% & 6.3\% vs 1.4\% & 6.17\% vs 1.4\% \\
2 & 10.9\% vs 8.6\% & 13.3\% vs 7.8\% & 14.0\% vs 8.3\%\\ 2 & 10.9\% vs 8.6\% & 13.3\% vs 7.8\% & 14.0\% vs 8.3\%\\
3 & 15.3\% vs 28.6\% & 20.1\% vs 24.3\% & 20.9\% vs 22.5\% \\ 3 & 15.3\% vs 28.6\% & 20.1\% vs 24.3\% & 20.9\% vs 22.5\% \\

55
src/plan-bak.tex Normal file
View File

@ -0,0 +1,55 @@
% This file is temporary. It's meant to be here while we are working on the
% plan, to make changing it easier. Once it has more or less converged, this
% file will be deleted, leaving place of a tree structure to make editing to
% content easier.
\part{3D Content Preparation}
\chapter{The challenges of managing 3D content}
\section{State of the art}
\begin{itemize}
\item Google Maps
\item Sketchfab
\end{itemize}
\section{System needs}
\subsection{Streaming}
Correctly managing the bandwidth to download the right content
\written{MMSys 16, ACMMM 18}
\subsection{Rendering}
Correctly managing the data on the client to perform an efficient rendering
\missing{everything}
\subsection{Server}
Avoiding as much as possible server-side computations
\written{MMSys 16, ACMMM 18}
\input{dash-3d/main.tex}
\part{3D Interaction}
\chapter{The challenges of 3D interaction}
\section{Degrees of freedom}
\section{Desktop / Mobile}
\written{MMSys 16, ACMMM 18, ACMMM 19 Demo}
\section{SoA}
\section{QoE / Interaction}
\written{MMSys 16}
\input{system-bookmarks/main}

View File

@ -1,55 +1,3 @@
% This file is temporary. It's meant to be here while we are working on the \input{preliminary-work/main}
% plan, to make changing it easier. Once it has more or less converged, this \input{dash-3d/main}
% file will be deleted, leaving place of a tree structure to make editing to
% content easier.
\part{3D Content Preparation}
\chapter{The challenges of managing 3D content}
\section{State of the art}
\begin{itemize}
\item Google Maps
\item Sketchfab
\end{itemize}
\section{System needs}
\subsection{Streaming}
Correctly managing the bandwidth to download the right content
\written{MMSys 16, ACMMM 18}
\subsection{Rendering}
Correctly managing the data on the client to perform an efficient rendering
\missing{everything}
\subsection{Server}
Avoiding as much as possible server-side computations
\written{MMSys 16, ACMMM 18}
\input{dash-3d/main.tex}
\part{3D Interaction}
\chapter{The challenges of 3D interaction}
\section{Degrees of freedom}
\section{Desktop / Mobile}
\written{MMSys 16, ACMMM 18, ACMMM 19 Demo}
\section{SoA}
\section{QoE / Interaction}
\written{MMSys 16}
\input{system-bookmarks/main} \input{system-bookmarks/main}

View File

@ -0,0 +1,231 @@
\section{Impact of 3D Bookmarks on Navigation}\label{sec:3dnavigation}
We now describe an experiment that we conducted on 51 participants, with two goals in mind.
First, we want to measure the impact of 3D bookmarks on navigation within an NVE\@.
Second, we want to collect traces from the users so that we can replay them for reproducible experiments for comparing streaming strategies in Section 4.
\subsection{Our NVE}
To ease the deployment of our experiments to users in distributed locations on a crowdsourcing platform, we implement a simple Web-based NVE client using THREE.js\footnote{http://threejs.org}.
The NVE server is implemented with node.js\footnote{http://nodejs.org}.
The NVE server streams a 3D scene to the client; the client renders the scene as the 3D content are received.
The user can navigate within the NVE in the following way; he/she can translate the camera using the arrow keys along four directions: forward, backward, to the left, and to the right.
Alternatively, the keys W, A, S and D can also be used for the same actions.
This choice was inspired by 3D video games, which often use these keys in conjunction with the
mouse to move an avatar.
The virtual camera can rotate in four different directions using the keys I, K, J and L.
The user can also rotate the camera by dragging the mouse in the desired direction.
Finally, following the UI of popular 3D games, we also give users the possibility to lock their pointer and use their mouse as a virtual camera.
The mouse movement controls the camera rotation.
The user can always choose to lock the pointer, or unlock it using the escape key.
The interface also includes a button to reset the camera back to the starting position in the scene.
\begin{figure}[th]
\centering
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{assets/preliminary-work/bookmarks/camera-bookmark.png}
\caption{Viewport display of a bookmark}
\end{subfigure}
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{assets/preliminary-work/bookmarks/arrow-bookmark.png}
\caption{Arrow display of a bookmark}
\end{subfigure}
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{assets/preliminary-work/bookmarks/arrow-bookmark-with-preview.png}
\caption{A preview is shown when the mouse hovers over a bookmark}
\end{subfigure}
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{assets/preliminary-work/bookmarks/arrow-bookmark.png}
\caption{A coin is hidden behind the curtain\newline}
\end{subfigure}
\caption{3D bookmarks propose to move to a new viewpoint; when the user clicks on the bookmark, his viewpoint moves to the indicated viewpoint.}\label{fig:bookmark}
\end{figure}
\subsection{3D Bookmarks}
Our NVE supports 3D bookmarks.
A 3D bookmark, or bookmark for short, is simply a fixed camera location (in 3D space), a view direction, and a focal.
Bookmarks visible from the user's current viewpoint are shown as 3D objects in the scene.
Figure~\ref{fig:bookmark} depicts some bookmarks from our NVE\@.
The user can click on a bookmark object to automatically move and align its viewpoint to that of the bookmark.
The movement follows a Hermite curve joining the current viewpoint to the viewpoint of the bookmark.
The tangent of the curve is the view direction.
The user can hover the mouse pointer over a bookmark object to see a thumbnail view of the 3D scene as seen from the bookmark.
(Figure~\ref{fig:bookmark}, bottom left).
In our work, we consider two different possibilities for displaying bookmarks: viewports (Figure~\ref{fig:bookmark} top left) and arrows (Figure~\ref{fig:bookmark} top right).
A viewport is displayed as a pyramid where the top corresponds to the optical center of its viewpoint and the base corresponds to its image plane.
The arrows are view dependent.
The bottom of the arrow turns towards the current position, to better visualize the relative position of the bookmark.
Bookmarks allow the user to achieve a large movement within the 3D environment using a single action (a mouse click).
Since bookmarks are part of the scene, they are visible only when not hidden by other objects from the scene.
We chose size and colors that are salient enough to be easily seen, but not too large to limit the occlusion of regions within the scene.
When reaching the bookmark, the corresponding arrow or viewport is not visible anymore, and subsequently will appear in a different color, to indicate that it has been clicked (similar to Web links).
\subsection{User Study}\label{sec:userstudy}
We now describe in details our experimental setup and the user study that we conducted on 3D navigation.
\subsubsection{Models}
We use four 3D scenes (one for the tutorial and three for the actual experiments) that represent recreated scenes from a famous video game.
Those models are light (a few thousand of triangles per model) and are sent before the experiment starts.
We keep the models small so that users can perform the task with acceptable latency from any country using a decent Internet connection.
Our NVE does not actually stream the 3D content for these experiments, in order to avoid unreliable conditions caused by the network bandwidth variation, which might affect how the users interact.
\subsubsection{Task design}
Since we are interested in studying how efficiently users navigate in the 3D scene, we ask our participants to complete a task that forces them to visit, at least partially, various regions in the scene.
To this end, we hide a set of 8 coins on the scene: participants are asked to collect the coins by clicking on them.
In order to avoid any bias due to the coins position, we predefined 50 possible coin locations all around the scene, and randomly select 8 out of these 50 positions each time a new participant starts the experiment.
\subsubsection{Experiment}
Participants are first presented with an initial screen to collect some preliminary information: age, gender, the last time they played 3D video games, and self-rated 3D gaming skills. We ask those questions because we believe that someone who is used to play 3D video games should browse the scene more easily, and thus, may not need to use our bookmarks.
Then, the participants go through a tutorial to learn how the UI works, and how to complete the task.
The different interactions (keyboard navigation, mouse navigation, bookmarks interaction) are progressively introduced to participants, and the tutorial finishes once the participant completes an easy version of the task.
The tutorial is always performed on the same scene.
Then, each participant has to complete the task three times.
Each task is performed on a different scene, with a different interface.
Three interfaces are used.
A \NoReco{} interface lets the participant navigates without any bookmarks.
The other two interfaces allow a participant to move using bookmarks displayed as viewports (denoted as \Viewports) and arrows (denoted as \Arrows) respectively.
The coins are chosen randomly, based on the coin configurations that were used by previous participants: if another participant has done an experiment with a certain set of coins, on a certain scene, with a certain type of bookmarks, the current participant will do the experiment with the same set of coins, on the same scene, but with a different type of bookmarks.
This policy allows us to limit the bias that could be caused by coin locations.
Once a participant has found all coins, a button is shown on the interface to let the participant move to the next step.
Alternatively, this button may appear one minute after the sixth coin was found.
This means that a user is authorized to move on without completing the task, in order to avoid potential frustration caused by not finding the remaining two coins.
After completing the three tasks, the participants have to answer a set of questions about their experience with the bookmarks (we refer to the bookmarks as \textit{recommendations} in the experiments).
Table~\ref{t:questions} shows the list of questions.
\begin{table}[th]
\centering
\begin{tabular}{lll}
\toprule
& Questions & Answers \\
\midrule
1 & What was the difficulty level WITHOUT recommendation? & 3.04 / 5 $\pm0.31$ (99\% confidence interval) \\
2 & What was the difficulty level WITH recommendation? & 2.15 / 5 $\pm0.30$ (99\% confidence interval) \\
3 & Did the recommendations help you to find the coins? & 42 Yes, 5 No\\
4 & Did the recommendations help you to browse the scene? & 49 Yes, 2 No\\
5 & Do you think recommendations can be helpful? & 49 Yes, 2 No\\
6 & Which recommendation style do you prefer and why? & 32 \Arrows, 7 \Viewports\\
7 & Did you enjoy this? & 36 Yes, 3 No\\
\bottomrule
\end{tabular}
\caption{List of questions in the questionnaire and summary of answers.}\label{t:questions}
\end{table}
\textbf{Participants}.
The participants were recruited on microworkers.com, a crowdsourcing website.
There were 51 participants (36 men and 15 women), who are in average 30.44 years old.
\subsection{Experimental Results}\label{sec:qoeresults}
We now present the results from our user study, focusing on whether bookmarks help users navigating the 3D scene.
\subsubsection{Questionnaire}
We had 51 responses to the Questionnaire.
The answers are summarized in Table~\ref{t:questions}.
Note that not all questions were answered by all participants.
The participants seem to find the task to be of average difficulty (3.04/5) when they have no bookmarks to help their navigation.
They judge the task to be easier in average (2.15/5) with bookmarks, which indicates that bookmarks ease the completion of the task.
Almost all users (49 out of 51) think the bookmarks are useful for browsing the scene, and most users (42 out of 51) think bookmarks are also useful to complete the given task.
This is slightly in contradiction with our setup; even if coins may appear in some bookmarked viewpoints (which is normal since the viewpoints have been chosen to get the most complete coverage of the scene), most of the time no coin is visible in a given bookmark, and there are always coins that are invisible from all bookmarks.
The strongest result is that almost all users (49 out of 51) find bookmarks to be helpful.
In addition, users seem to have a preference for \Arrows{} against \Viewports{} (32 against 7).
\subsubsection{Analysis of Interactions}
\begin{table}[th]
\centering
\begin{tabular}{ccccc}
\toprule
\textbf{BM type} & \textbf{\#Exp} & \textbf{Mean \# coins} & \textbf{\# completed} & \textbf{Mean time} \\
\midrule
\NoReco{} & 51 & 7.08 & 18 & 4 min 16 s \\
\Arrows{} & 51 & 7.39 & 27 & 2 min 33 s \\
\Viewports{} & 51 & 7.51 & 30 & 2 min 16 s \\
\bottomrule
\end{tabular}
\caption{Analysis of the sessions length and users success by type of bookmarks}\label{tab:sessions}
\end{table}
Table~\ref{tab:sessions} shows basic statistics on task completion given the type of bookmarks that were provided to the participants.
First, we can see that without bookmarks, only a little bit more than a third of the users are able to complete the task, i.e.\ find all 8 coins.
In average, these users find just above 7 coins, and spend 4 minutes and 16 seconds to do it.
Interestingly, and regardless of the bookmark type, users who have bookmarks complete the task more than half of the time, and spend in average significantly less time to complete the task: 2 minutes and 16 seconds using \Viewports{} and 2 minutes and 33 seconds using \Arrows.
Although \Viewports{} seem to help users a little bit more in completing the task than \Arrows{}, the performance difference between both types of bookmarks is not significant enough to conclude on which type of bookmarks is best.
The difference between an interface with bookmarks and without bookmarks, however, is very clear.
Users tend to complete the task more efficiently using bookmarks: more users actually finish the task, and it takes them half the time to do so.
We computed 99\% confidence intervals on the results introduced in Table~\ref{tab:sessions}.
We found that the difference in mean number of coins collected with and without bookmarks is not high enough to be statistically significant: we would need more experiments to reach the significance.
The mean time spent on the task however is statistically significant.
\begin{table}[th]
\centering
\begin{tabular}{cccc}
\toprule
\textbf{BM type} & \textbf{Total distance} & \textbf{Distance to a bookmark} & \textbf{Ratio} \\
\midrule
\NoReco{} & 610.80 & 0 & 0\% \\
\Arrows{} & 586.30 & 369.77 & 63\% \\
\Viewports{} & 546.96 & 332.72 & 61 \% \\
\bottomrule
\end{tabular}
\caption{Analysis of the length of the paths by type of bookmarks}\label{tab:paths-length}
\end{table}
Table~\ref{tab:paths-length} presents the length of the paths traveled by users in the scenes.
Although users tend to spend less time on the tasks when they do not have bookmarks, they travel pretty much the same distance as without bookmarks.
As a consequence, they visit the scene faster in average with bookmarks, than without bookmarks.
The table shows that this higher speed is due to the bookmarks, as more than 60\% of the distance traveled by users with bookmarks happens when users click on bookmarks and fly to the destination.
\subsubsection{Discussion}
In the previous paragraphs, we have shown how bookmarks are well perceived by users (looking at the questionnaire answers).
We also showed that users tend to be more efficient in completing the task when they have bookmarks than when they do not.
We can say that bookmarks have a positive effect on navigation within the 3D scene, but since users move, on average, twice as fast, it might have a negative impact on the streaming of objects to the client.
\begin{figure}[th]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel=Time (in s),
ylabel=Percentage of the scene queried,
no markers,
width=\tikzwidth,
height=\tikzheight,
cycle list name=mystyle,
legend pos=south east,
xmin=0,
ymin=0,
]
\addplot table [y=y1, x=x]{assets/preliminary-work/discovery.dat};
\addlegendentry{Without bookmarks}
\addplot table [y=y2, x=x]{assets/preliminary-work/discovery.dat};
\addlegendentry{With bookmarks}
\end{axis}
\end{tikzpicture}
\caption{Comparison of the triangles queried after a certain time}\label{fig:triangles-curve}
\end{figure}
Figure~\ref{fig:triangles-curve} shows a CDF of the percentage of 3D mesh triangles in the scene that have been queried by users after a certain time. We plotted this same curve for users with and without bookmarks.
As expected, the fact that the users can browse the scene significantly quicker with bookmarks reflects on the demand on the 3D content.
Users need more triangles more quickly, which either leads to more demand on network bandwidth, or if the bandwidth is kept constant, leads to fewer objects being displayed.
In the next section, we introduce experiments based on our user study traces that show how the rendering is affected by the presence of bookmarks and how to improve it.

View File

@ -0,0 +1,6 @@
\chapter{Preliminary work}
\newcommand{\NoReco}{\textsf{NoBM \xspace}}
\newcommand{\Viewports}{\textsf{VP \xspace}}
\newcommand{\Arrows}{\textsf{Ar \xspace}}
\input{preliminary-work/bookmarks-impact}
\input{preliminary-work/streaming}

View File

@ -0,0 +1,320 @@
\section{Impact of 3D Bookmarks on Streaming}\label{s:system}
\subsection{3D Model Streaming}
In this section, we describe our implementation of a 3D model streaming policy in our simulation.
Note that the policy is different from that we used for the crowdsourcing experiments.
Recall that in the crowdsourcing experiments, we load all the 3D content before the participants begin to navigate to remove bias due to different network conditions.
Here, we implemented a streaming version, which we expect an actual NVE will use.
The 3D content we used are textured mesh --- coded in \texttt{obj} file format.
As such, the data we used in our experiments are made of several components.
The geometry consists of (i) a list of vertices and (ii) a list of faces, and the texture consists of (i) a list of materials, (ii) a list of texture coordinates, and (iii) a set of texture images.
In the crowdsourcing experiment, we keep the model small since the goal is to study the user interaction.
To increase the size of the model, while keeping the same 3D scene, we subdivide each triangle three times, successively, thereby multiplying the total number of triangles in the scene by 64.
We do this to simulate a reasonable use case with large 3D scenes.
Table~\ref{tab:modelsize} shows that material and texture amount at most for $3.6\%$ of the geometry, which justifies this choice.
When a client starts loading the Web page containing the 3D model, the server first sends the list of materials and the texture files.
Then, the server periodically sends a fixed size chunk that indifferently encapsulates vertices, texture coordinates, or faces.
A \textit{vertex} is coded with three floats and an integer ($x$, $y$, and $z$ coordinates and the index of the vertex), a \textit{texture coordinate} with two floats and an integer (the $x$ and $y$ coordinates on the image and the index of the texture coordinate), and a face with eight integers (the index of each vertex, the index of each texture coordinate, the index of the face and the number of the corresponding material).
Consequently, given the Javascript implementation of integers and floats, we approximate each vertex and each texture coordinate to take up 32 bytes, and each face takes up 96 bytes.
\begin{table}[th]
\centering
\begin{tabular}{lccc}
\toprule
\textbf{Scene} & \textbf{Material} & \textbf{Images} & \textbf{Geometry} \\
\midrule
Scene 1 & 8 KB & 72 KB & 8.48 MB \\
Scene 2 & 302 KB & 8 KB & 8.54 MB \\
Scene 3 & 16 KB & 92 KB & 5.85 MB \\
\bottomrule
\end{tabular}
\caption{Respective sizes of materials, textures (images) and geometries for the three scenes used in the user study.}\label{tab:modelsize}
\end{table}
During playback, the client periodically (every 200 ms in our implementation) sends to the server its current position and camera orientation.
The server computes a sorted list of relevant faces: first the server performs frustum culling to compute the list of faces that intersect with the client's viewing frustum.
Then, it performs backface culling to discard the faces whose normals point towards the same direction as the client's camera orientation.
The server then sorts the filtered faces according to their distance to the camera.
Finally, the server incrementally fills in chunks with these ordered faces.
If a face depends on a vertex or a texture coordinate that has not yet been sent, the vertex or the texture coordinate is added to the chunk as well.
When the chunk is full, the server sends it.
Both client and server algorithms are detailed in algorithms~\ref{streaming-algorithm-client} and~\ref{streaming-algorithm-server}.
The chunk size is set according to the bandwidth limit of the server.
Note that the server may send faces that are occluded and not visible to the client, since determining visibility requires additional computation.
\begin{algorithm}[th]
\While{streaming is not finished}{%
Receive chunk from the server\;
Add the faces from the chunk to the model\;
Update the camera (by 200ms)\;
Compute the rendering and evaluate the quality\;
Send the position of the camera to the server\;
}
\caption{Client slide algorithm\label{streaming-algorithm-client}}
\end{algorithm}
\begin{algorithm}[th]
\While{streaming is not finished}{%
Receive position of the camera from the client\;
Compute the list of triangles to send and sort them\;
Send a chunk of a certain amount of triangles\;
}
\caption{Server side algorithm\label{streaming-algorithm-server}}
\end{algorithm}
In the following, we shall denote this streaming policy \textsf{culling}; in Figures~\ref{fig:click-1250} and~\ref{fig:click-625} streaming using \textsf{culling} only is denoted \textsf{C-only}.
\subsection{3D Bookmarks}
We have seen (Figure~\ref{fig:triangles-curve}) that navigation with bookmarks is more demanding on the bandwidth.
We want to exploit bookmarks to improve the user's quality of experience. For this purpose, we propose two streaming policies based on offline computation of the relevance of 3D content to bookmarked viewpoints.
\subsubsection{Visibility Determination for 3D Bookmarks}
A bookmarked viewpoint is more likely to be accessed, compared to other arbitrary viewpoint in the 3D scene.
We exploit this fact to perform some pre-computation on the 3D content visible from the bookmarked viewpoint.
Recall that \textsf{culling} does not consider occlusion of the faces.
Furthermore, it prioritizes the faces according to distance from the camera, and does not consider the actual contribution of the faces to the rendered 2D images.
Ideally, we should prioritize the faces that occupy a bigger area in the 2D rendered images.
Computing this, however, requires rendering the scene at the server, and measuring the area of each face.
It is not scalable to compute this for every viewpoint requested by the client.
However, we can pre-render the bookmarked viewpoints, since the number of bookmarks is limited, their viewpoints are known in advance, and they are likely to be accessed.
For each bookmark, we render offline the scene using a single color per triangle.
Once rendered, we scan the output image to find the visible triangles (based on the color) and sort them by decreasing projected area.
This technique is also used by~\cite{chengwei}.
Thus, when the user clicks on a 3D bookmark, this pre-computed list of faces is used by the server, and only visible faces are sent in decreasing order of contributions to the rendered image.
For the three scenes that we used in the experiment, we can reduce the number of triangles sent by 60\% (over all bookmarks).
This reduction is as high as 85.7\% for one particular bookmark (from 26,886 culled triangles to 3,853 culled and visible triangles).
To illustrate the impact of sorting by projected area of faces, Figure~\ref{fig:sortedtri} shows the quality improvement gained by sending the precomputed visible triangles prioritized by projected areas, compared to using culling only prioritized by distance.
The curve shows the average quality over all bookmarks over all scenes, for a given number of triangles received.
The quality is measured by the ratio of correctly rendered pixels, comparing the fully and correctly rendered image (when all 3D content is available) and the rendered image (when content is partially available).
We sample one pixel every 100 rows and every 100 columns to compute this value.
The figure shows that, to obtain 90\% of correctly displayed samples, we require 1904 triangles instead of 5752 triangles, about 1/3 savings.
In what follows, we will refer to this streaming policy as \textsf{visible}.
\begin{figure}[th]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel=Number of Triangles Received,
ylabel=Quality of rendering,
no markers,
width=\tikzwidth,
height=\tikzheight,
cycle list name=mystyle,
legend pos=south east,
xmin=0,
xmax=21000,
ymin=0,
ymax=1.1
]
\addplot table [y=y1, x=x]{assets/preliminary-work/cdf.dat};
\addlegendentry{Culling}
\addplot table [y=y2, x=x]{assets/preliminary-work/cdf.dat};
\addlegendentry{Precomputation}
\end{axis}
\end{tikzpicture}
\caption{Comparison of rendered image quality (average on all bookmarks and starting position): the triangles are sorted offline (dotted curve), or sorted online by distance to the viewpoint (solid curve).}\label{fig:sortedtri}
\end{figure}
\subsubsection{Prefetching by Predicting the Next Bookmark Clicked}
We can now use the precomputed, visibility-based streaming of 3D content for the bookmarks to reduce the amount of traffic needed.
Next, we propose to prefetch the 3D content from the bookmarks.
Any efficient prefetching policy needs to accurately predict users' actions.
As shown, users tend to visit the bookmarked viewpoints more often than others, except the initial viewpoint.
It is thus natural to try to prefetch the 3D content of the bookmarks.
\begin{figure}[th]
\centering
\DTLloaddb[noheader=false]{mat1}{assets/preliminary-work/click-probability.dat}
\begin{tikzpicture}[scale=0.75]
\DTLforeach*{mat1}{\x=x, \y=y, \r=r, \g=g}{%
\draw[fill=Grey] (\x,\y) circle (\r);
}
\foreach \x in {0,...,11}
\draw (\x, -10pt) node[anchor=north] {\x};
\foreach \y in {0,...,11}
\draw (-10pt, \y) node[anchor=east] {\y};
\draw (5.5, -40pt) node {Previous recommendation clicked};
\draw (-40pt,5.5) node[rotate=90] {Next recommendation clicked};
\draw[step=1.0,black,thin,dashed] (0,0) grid (11,11);
\end{tikzpicture}
\caption{Probability distribution of `next clicked bookmark' for Scene 1 (computed from the 33 users with bookmarks). Numbering corresponds to 0 for initial viewport and 11 bookmarks; the size of the disk at $(i,j)$ is proportional to the probability of clicking bookmark $j$ after $i$.}\label{fig:mat1}
\end{figure}
Figure~\ref{fig:mat1} shows the probability of visiting a bookmark (vertical axis) given that another bookmark has been visited (horizontal axis).
This figure shows that users tend to follow similar paths when consuming bookmarks.
Thus, we hypothesize that prefetching along those paths would lead to better image quality and lower discovery latency.
We use the following prefetching policy in this paper.
We divide each chunk sent by the server into two parts.
The first part is used to fetch the content from the current viewpoint, using the \textsf{culling} streaming policy.
The second part is used to prefetch content from the bookmarks, according to their likelihood of being clicked next.
We use the probabilities displayed in Figure~\ref{fig:mat1} to determine the size of each part.
Each bookmark $B$ has a probability $p(B|B_{prev})$ of being clicked next, considering that $B_{prev}$ was the last clicked bookmark.
We assign to each bookmark $p(B|B_{prev})/2$ of the chunk to prefetch the corresponding data.
We use the \textsf{visible} policy to determine which data should be sent for a bookmark.
We denote this combination as \textsf{V-PP}, for Prefetching based on Prediction using \textsf{visible} policy.
\begin{figure}[th]
\centering
\begin{tikzpicture}
\draw [fill=LightCoral] (0,0) rectangle (5,1);
\node at (2.5,0.5) {Furstum / backface culling};
\draw [fill=Khaki] (5,0) rectangle (6.5,1);
\node at (5.75,0.5) {$B_i$};
\draw [fill=SandyBrown] (6.5,0) rectangle (7,1);
\node at (6.75,0.5) {$B_j$};
\draw [fill=LightGreen] (7,0) rectangle (10,1);
\node at (8.5,0.5) {$B_k$};
\end{tikzpicture}
\caption{Example of how a chunk can be divided into fetching what is needed to display the current viewport (culling), and prefetching three recommendations according to their probability of being visited next.}\label{fig:prefetchedchunk}
\end{figure}
\subsubsection{Fetching Destination Bookmark}
An alternate method to benefit from the precomputing visible triangles at the bookmark, is to fetch 3D content during the ``fly-to'' transition to reach the destination.
Indeed, as specified in Section~\ref{sec:3dnavigation}, moving to a bookmarked viewpoint is not instantaneous, but rather takes a small amount of time to smoothly move the user camera from its initial position towards the bookmark.
This transition usually takes from 1 to 2 seconds, depending on how far the current user camera position is from the bookmark.
When the user clicks on the bookmark, the client fetches the visible vertices from the destination viewpoint, with all the available bandwidth.
So, during the transition time, the server no longer does \textsf{culling}, but the whole chunk is used for fetching following \textsf{visible} policy.
The immediate drawback of this policy is that on the way to the bookmark, the user perception of the scene will be degraded because of the lack of data for the viewpoints in transition.
On the bright side, no time is lost to prefetch bookmarks that will never be consumed, because we fetch only when we are sure that the user has clicked on a bookmark.
This way, when the user is not clicking on bookmarks, we can use the entire bandwidth for the current viewpoint and get as many triangles as possible to improve the current viewpoint.
We call this method \textsf{V-FD}, since we are Fetching the 3D data from the Destination using \textsf{visible} policy.
\subsection{Comparing Streaming Policies}
In order to determine which policy to use, we replay the traces from the user study while simulating different streaming policies.
The first point we are interested in is which streaming policy leads to the lower discovery latency and better image quality for the user: \textsf{culling} (no prefetching), \textsf{V-PP} (prefetching based on probability of accessing bookmarks), or \textsf{V-FD} (no prefetching, but fetch the destination during fly-to transition) or combining both \textsf{V-PP} and \textsf{V-FD} (\textsf{V-PP+FD}).
\begin{figure}[th]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel=Time (in s),
ylabel=Quality of rendering,
no markers,
cycle list name=mystyle,
width=\tikzwidth,
height=\tikzheight,
legend pos=south east,
ymin=0.6,
ymax=1.01,
xmin=0,
xmax=8.1
]
\addplot table [y=y1, x=x]{assets/preliminary-work/evaluation/click-curves-local-1250.dat};
\addlegendentry{C only}
\addplot table [y=y3, x=x]{assets/preliminary-work/evaluation/click-curves-local-1250.dat};
\addlegendentry{V-PP}
\addplot table [y=y2, x=x]{assets/preliminary-work/evaluation/click-curves-local-1250.dat};
\addlegendentry{V-FD}
\addplot table [y=y4, x=x]{assets/preliminary-work/evaluation/click-curves-local-1250.dat};
\addlegendentry{V-PP+FD}
\end{axis}
\end{tikzpicture}
\caption{Average percentage of the image pixels that are correctly rendered against time, for all users with bookmarks, and using a bandwidth (BW) of 1 Mbps. The origin, $t=0$, is the time of the first click on a bookmark. Each curve corresponds to a streaming policy.}\label{fig:click-1250}
\end{figure}
Figure~\ref{fig:click-1250} compares the quality of the view of a user after his/her first click on a bookmark.
The ratio of pixels correctly displayed is computed in the client algorithm, see also algorithm~\ref{streaming-algorithm-client}.
In this figure we use a bandwidth of 1 Mbps.
The solid curve corresponds to the \textsf{culling} policy.
Clicking on a bookmark generates a user path with less spatial locality, causing a large drop in visual quality that is only compensated after 4 seconds.
During the first second, the camera moves from the current viewport to the bookmarked viewport.
When the data has been prefetched according to the probability of the bookmark to be clicked, the drop in quality is less visible (\textsf{V-PP} curve).
However, by benefiting from the precomputation of visible triangles and ordering of the important triangles in a bookmark (\textsf{V-FD}) the drop in quality is still there, but is very short (approximately four times shorter than for \textsf{culling}).
This drop in quality is happening during the transition on the path.
More quantitatively, with a $1$ Mbps bandwidth, 3 seconds are necessary after the click to recover $90\%$ of correct pixels.
\begin{figure}[th]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel=Time (in s),
ylabel=Quality of rendering,
no markers,
cycle list name=mystyle,
width=\tikzwidth,
height=\tikzheight,
legend pos=south east,
ymin=0.6,
ymax=1.01,
xmin=0,
xmax=8.1
]
\addplot table [y=y1, x=x]{assets/preliminary-work/evaluation/click-curves-local-625.dat};
\addlegendentry{C only}
\addplot table [y=y3, x=x]{assets/preliminary-work/evaluation/click-curves-local-625.dat};
\addlegendentry{V-PP}
\addplot table [y=y2, x=x]{assets/preliminary-work/evaluation/click-curves-local-625.dat};
\addlegendentry{V-FD}
\addplot table [y=y4, x=x]{assets/preliminary-work/evaluation/click-curves-local-625.dat};
\addlegendentry{V-PP+FD}
\end{axis}
\end{tikzpicture}
\caption{Average percentage of the image pixels that are correctly rendered against time --for all users with bookmarks, and using a bandwidth (BW) of 0.5 Mbps. The origin, $t=0$, is the time of the first click on a bookmark. Each curve corresponds to a streaming policy.}\label{fig:click-625}
\end{figure}
\begin{figure}[th]
\centering
\begin{tikzpicture}
\begin{axis}[
xlabel=Time (in s),
ylabel=Quality of rendering,
no markers,
cycle list name=mystyle,
width=\tikzwidth,
height=\tikzheight,
legend pos=south east,
ymin=0.6,
ymax=1.01,
xmin=0,
xmax=4.5
]
\addplot table [y=y1, x=x]{assets/preliminary-work/evaluation/click-curves-local-2500.dat};
\addlegendentry{V-FD}
\addplot table [y=y2, x=x]{assets/preliminary-work/evaluation/click-curves-local-2500.dat};
\addlegendentry{V-PP-FD}
\end{axis}
\end{tikzpicture}
\caption{Same curve as Figures~\ref{fig:click-1250} and~\ref{fig:click-625}, for comparing streaming policies \textsf{V-FD} alone and \textsf{V-PP+FD}. BW=2Mbps}\label{fig:2MB}
\end{figure}
Figure~\ref{fig:click-625} showed the results of the same experiment with 0.5 Mbps bandwidth. Here, it takes 4 to 5 seconds to recover $85\%$ of the pixels with \textsf{culling} and \textsf{V-PP}, against 1.5 second for recovering $90\%$ with \textsf{V-FD}.
Combining both strategies (\textsf{V-PP+FD} leads to the best quality.
At 1 Mbps bandwidth, \textsf{V-PP} penalizes the quality, as the curve \textsf{V-PP-FD}) leads to a lower quality image than \textsf{V-FD} alone.
This effect is even stronger when the bandwidth is set to 2 Mbps (Figure~\ref{fig:2MB}).
Both streaming strategies based on the pre-computation of the ordering improves the image quality.
We see here, that \textsf{V-FD} has a greater impact than \textsf{V-PP}. Here, \textsf{V-PP} may prefetch content that eventually may not be used, whereas \textsf{V-FD} only sends relevant 3D content (knowing which bookmark has been just clicked).
We present only the results after the first click.
For subsequent clicks, we found that other factors came into play and thus, it is hard to analyze the impact of the various streaming policies.
For instance, a user may revisit a previously visited bookmark, or the bookmarks may overlap.
If the users click on a subsequent bookmark after a long period, then more content would have been fetched for this user, making comparisons difficult.
To summarize, we found that exploiting the fact that bookmarked viewpoints are frequently visited to precompute the visible faces and sort them according to projected areas can lead to significant improvement in image quality after a user interaction (clicking on a bookmark).
This alone can lead to 60\% less triangles being sent, with 1/3 of the triangles sufficient to ensure 90\% of pixels correctly rendered, compared to doing frustum/backface culling.
If we fetch these precomputed faces of the destination viewpoint this way immediately after the click, during the ``fly-to'' transition, then we can already significantly improve the quality without any prefetching.
Prefetching helps if the bandwidth is low, and fewer triangles can be downloaded during this transition.
The network conditions play a minimum role in this key message --- bookmarking allows precomputation of an ordered list of visible faces, and this holds regardless of the underlying network condition (except for non-interesting extreme cases, such as negligible bandwidth or abundance of bandwidth).

View File

@ -1,13 +1,2 @@
\chapter{System bookmarks} \chapter{System bookmarks}
\section{Bookmark interaction}
\unpublished{MMSys 18}
\section{QoS improvement with bookmarks}
\written{MMSys 16}
\unpublished{MMSys 18}
\input{system-bookmarks/user-study} \input{system-bookmarks/user-study}