Log in

View Full Version : madVR - high quality video renderer (GPU assisted)


Pages : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 [471] 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329

Shiandow
20th February 2014, 16:32
Oh, and I wonder if you could tweak the amount of randomness between frames as opposed to the amount of randomness within frames? e.g. reuse the random number from the last frame, but add a random number to it within a tighter range* (clamping to the original limit). I don't know how well this lends itself to tweaking though :)

* something like: range1 = 0.5 / 255.0;
range2 = 0.25 / 255.0;
random_diff = 2.0 * range2 * rand() - range2;
random_new = clamp(random_old + random_diff, -range1, range1);

So basically you want to reduce temporal noise by making the noise vary slowly? In that case your method has several disadvantages. You'd probably need to recalculate the random numbers from the previous frame since saving them will probably be too slow. But more importantly that method doesn't give you a uniform distribution, especially clamping the result probably won't have a nice effect, but you also have the problem that adding two uniformly distributed numbers won't give you a uniformly distributed number.

I don't really know an easy way around that last part, the easiest method I could think of is to use the inverse cumulative distribution to somehow make it uniform again, which might be fast enough (since it's rather simple for uniformly distributed variables), but unfortunately doesn't give you a nice smooth way to interpolate them. The nicest method would probably be to convert them to normally distributed variables, add them, and convert the result back to a uniform variable again, but that will be far far too slow.

Edit: After some research it seems that converting to a Cauchy distribution instead of a normal distribution gives a nice way to do this, this would give you the following code to combine two uniform random numbers:


a = tan((rand1-.5)*pi);
b = tan((rand2-.5)*pi);
random_comb = (1/pi)*arctan(t*a + (1-t)*b) + .5;


this seems doable, but of course it will be slower.

ttnuagmada
20th February 2014, 16:44
Will MadVR's OpenCL features benefit from the DP performance of the Titan's over the 780's?

leeperry
20th February 2014, 16:53
The goal of dithering is to simulate a native higher bitdepth as well as possible.
Sure but adding random chroma noise makes the PQ fuzzy more than anything else IMHO. There's little point in nickpicking about ΔE and gamut mapping when the chroma comes with such tragic amounts of additional noise on purpose.

IME the more spot-on the colors, the higher the dynamics and the sense of depth as well as colors aren't smeared down anymore.

I don't see how making chroma so noisy could possibly help to "simulate a native higher bitdepth as well as possible", I rest my case that killing dynamics is the exact opposite of what we want. That's basically 3 veils of noise dancing around on top of your movie, yeeha...even worse than a VGA connection.

The multiColor builds seem to lower the luma noise a bit on the cost of having slightly higher chroma noise.
I'll take monochrome luma noise over this chroma triple mumbo-jumbo anytime. So much for J3AR/NNEDI chroma upscaling OCD'ness if it ends up randomly blown away in pieces afterwards :(

The dynamic builds make the image appear slightly more noisy
More than slightly IMHO as this is a complete showstopper to my eyes, all this said maybe at some point it will become relevant to allow the end-user to pick his own poison.

MokrySedeS
20th February 2014, 17:06
did you check "don't use "copyback" for dxva deinterlacing(intel, nvidia)?

Yes, I had it disabled but enabling it doesn't change anything.

i think you got this problem on the hole video right? so even if i missed the right frame this should do be ok?

Yes, the whole sample is stretched a little with dxva2 deinterlacing.

I asked a friend to check this on his system (he has an integrated gf9300) and he claims that it's working fine for him as well.
I don't know why only my system seems to be affected... :confused:

Looks like something that should be added to the madVR bug tracker.

Yes sir :)

Ver Greeneyes
20th February 2014, 17:17
The last line of each 16x16 block is somewhat at a disadvantage because it can't spread the error to the first line of the next 16x16 block. I'm trying to compensate for that a bit by spreading a larger portion of the error to the next pixels in the same line. But there's still a bit of the error lost. This may be responsible for the problem you're seeing. I'm not sure if I can fix this without causing other artifacts.
Here's an attempt at capturing the effect in an image: http://i.imgur.com/SoFzkvB.png
Edit: Hmm, that turned out darker than it should have. Let me upload a brightened version (not repeating the test itself unless I have to). Brightened version: http://i.imgur.com/jpzr04b.png

I made this by level-adjusting and blending together screenshots of 32 frames (monocolor dynamic build, 4-bit mode). So it looks like on average, the top half of each 16-pixel block is brighter than the bottom half. I don't see much left-right bias, perhaps because the exact value is always changing there? Each column of pixels should have the same value in the video file. Does this match what you said above? Another interesting thing is that blended together like this, the block boundaries show up fairly clearly in the brighter areas - I sure don't notice them normally though :)

madshi
20th February 2014, 17:31
Sure but adding random chroma noise makes the PQ fuzzy more than anything else IMHO. There's little point in nickpicking about ΔE and gamut mapping when the chroma comes with such tragic amounts of additional noise on purpose.
You're completely misinterpreting the technical facts. I do not (artificially) add any amount of chroma noise. The multiColor builds have lower luma noise but higher chroma noise compared to the monoColor builds. But that's not because I'm adding chroma noise (I'm not) but it's simply a consequence of using different dither structures per RGB channel. You're complaining about the higher chroma noise, but at the same time you *totally* ignore the fact that the luma noise is as much down as the chroma noise is up. Which means your judgement about this is very one-sided.

I understand that your eyes like the monoColor builds better than the multiColor builds, and I've no problem with that. But please stop posting misinformation about the technical side.

IME the more spot-on the colors, the higher the dynamics and the sense of depth as well as colors aren't smeared down anymore.
And the lower the luma noise the higher the dynamics and the sense of depth as well as luma isn't smeared down anymore.

I don't see how making chroma so noisy could possibly help to "simulate a native higher bitdepth as well as possible"
Because luma noise is as much down as chroma noise is up. You may not like the overall result/look of this trade, but totally ignoring the positive side of the trade does not make your opinion look very objective.

FWIW, I'd suggest you read this:

http://www.imaging-resource.com/news/2014/01/17/fujifilm-files-patent-for-sensor-with-enlarged-green-white-pixels

> Taking into account the fact that the human eye is
> more sensitive to luminance noise than color noise [...]

Fujifilm is basing a whole new digicam sensor technology on this. Maybe you should email them and let them know that they totally got this backwards? :p

Here's an attempt at capturing the effect in an image: http://i.imgur.com/SoFzkvB.png

I made this by level-adjusting and blending together screenshots of 32 frames (monocolor dynamic build, 4-bit mode). So it looks like on average, the top half of each 16-pixel block is brighter than the bottom half.
I don't see much difference between top and bottom half of each pixel block, but it does seem like the borders stand out quite noticeably... :(

Is this as noticeable in real life for you? Or did this effect get stronger through your editing/compositing? I don't think I can see any block structure on my PC. And I'm trying!

Ver Greeneyes
20th February 2014, 17:43
I don't see much difference between top and bottom half of each pixel block, but it does seem like the borders stand out quite noticeably... :(

Is this as noticeable in real life for you? Or did this effect get stronger through your editing/compositing? I don't think I can see any block structure on my PC. And I'm trying!
Don't look at the bright areas too closely, those square borders weren't visible to me at all before processing. I uploaded a brightened version of the image here (http://i.imgur.com/jpzr04b.png). Look at the top left or bottom right areas - don't the blocks look like they have vertical gradients in them to you? Looking at it from a distance it makes each row of blocks look like a separate band to me.

But! I only noticed this in 4-bit mode, and even there it's only visible on the darker side of the gradient, which itself tops out at RGB888(7,7,6) after dithering. We're talking values of less than 1/255 in all color channels here. So unless there's some obvious source of bias I wouldn't worry about it.

James Freeman
20th February 2014, 17:44
Mono-Color Dynamic for me.

EDIT:
I changed my mind later this day... to MultiColor Dynamic.
Continue reading...

Ver Greeneyes, Madshi,
Yes, on the Dark Color/Grey Pattern, the dark area look like long stripes...
I can see it clearly on my screen, with only the 4bit mode madshi provided.

noee
20th February 2014, 17:45
Alright, testing BD rips 1080p24, I definitely see detail loss/smearing on mono compared to multi, albeit <1m from the screen. That 4-bit trick is cool. For example, in Oblivion, at the beginning, there are these two triangle ships things floating, you can easily make out the numbers with multi-dyn/stat, much less sharp/clear with mono variants.

So, IMO...
multi-dyn > multi-stat > mono-stat > mono-dyn

leeperry
20th February 2014, 17:58
You're completely misinterpreting the technical facts. I do not (artificially) add any amount of chroma noise. The multiColor builds have lower luma noise but higher chroma noise compared to the monoColor builds. But that's not because I'm adding chroma noise (I'm not) but it's simply a consequence of using different dither structures per RGB channel.

Well yeah, you are using one different dithering structure per RGB channel, that's thrice more noise(triple dithering literally) and together they become the star of the show, killing clarity and dynamics. It gets even worse if each of this dancing noise veil becomes dynamic. I don't see how and where we could be misunderstanding each other here.

You're complaining about the higher chroma noise, but at the same time you *totally* ignore the fact that the luma noise is as much down as the chroma noise is up.

My point is that chroma already comes with half less resolution than luma so there'll already be inevitable artifacts due to the upscaling, don't hit a man on the floor, weakest link, etc.

And I absolutely don't see the point to bother calibrating and going batty with colorimetry if the R/G/B channels get their own little personal pattern of random'ish noise afterwards.

And the lower the luma noise the higher the dynamics and the sense of depth as well as luma isn't smeared down anymore.
Hah, sounds made up :D Especially when you previously said "The multiColor builds seem to lower the luma noise a bit on the cost of having slightly higher chroma noise" but that was a nice try :)

One less luma noise veil traded for literally 3 times more chroma noise that together will create new patterns literally becoming a noise feast? Not a good deal, not a good deal at all.

FWIW, I'd suggest you read this:

http://www.imaging-resource.com/news/2014/01/17/fujifilm-files-patent-for-sensor-with-enlarged-green-white-pixels
FWIW, I'd emphasize again on the fact that these ppl do not work in lossy YV12 with such poor chroma resolution and digital cameras usually run all kinds of internal post-processing to make the picture more "poppy".

Anyway, let's agree to disagree and If I have to stick with an old beta forever then alea jacta est ;)

Ver Greeneyes
20th February 2014, 18:07
I don't see much difference between top and bottom half of each pixel block, but it does seem like the borders stand out quite noticeably... :(

Is this as noticeable in real life for you? Or did this effect get stronger through your editing/compositing? I don't think I can see any block structure on my PC. And I'm trying!
Just to make sure I did the same test in 8-bit mode. I overlaid 36 frames as layers and added them together, then copied the area where it starts to become visible and expanded that from 0-3 to 0-255 (in other words, a ridiculous amount). This is the result: http://i.imgur.com/Z8phPqQ.png. So the effect is there even in 8-bit mode, but only so extremely close to black that the probability of getting even 1/255 is tiny (I added together 36 frames and expanded the range by a factor of 85, and these pixels still aren't white). So yeah, let's not get hung up about this ;) If I had to guess I'd say we're hitting up against the limits of the PRNG madVR uses. Simple PRNGs are notorious for their least significant bits not being very random, and maybe the way madVR is seeding it causes slightly higher results for pixels with y & 8 and slightly lower results for pixels with !(y & 8).

madshi
20th February 2014, 18:18
Don't look at the bright areas too closely, those square borders weren't visible to me at all before processing. I uploaded a brightened version of the image here (http://i.imgur.com/jpzr04b.png). Look at the top left or bottom right areas - don't the blocks look like they have vertical gradients in them to you? Looking at it from a distance it makes each row of blocks look like a separate band to me.

But! I only noticed this in 4-bit mode, and even there it's only visible on the darker side of the gradient, which itself tops out at RGB888(7,7,6) after dithering. We're talking values of less than 1/255 in all color channels here. So unless there's some obvious source of bias I wouldn't worry about it.
There's definitely no (intended) bias in the algorithm. I'm not sure where this effect is coming from. I'm relieved to hear that you didn't see the 16x16 borders in real time watching. That would have been a problem!

Mono-Color Dynamic for me.

Static looks like overlay of dirt on top of the picture, very unpleasant to watch.
The image moves while the dirt stays, this enhances the dirt effect even more.

EDIT:
I see LESS visible/subjective noise with the MonoColor compared to the MultiColor Dynamic build.
Definitely, it looks like MultiColor Dynamic dithering is "crazier"..... the dots appear to be bigger and more "jumpy" to me.
Interesting. Looks very different to my eyes.

Does your monitor support 4:4:4? Maybe it could have to do with 4:2:2 vs 4:4:4 or something like that?

Alright, testing BD rips 1080p24, I definitely see detail loss/smearing on mono compared to multi, albeit <1m from the screen. That 4-bit trick is cool. For example, in Oblivion, at the beginning, there are these two triangle ships things floating, you can easily make out the numbers with multi-dyn/stat, much less sharp/clear with mono variants.

So, IMO...
multi-dyn > multi-stat > mono-stat > mono-dyn
Cool, that triangle ship number thing sounds like a very objective test to me.

Well yeah, you are using one different dithering structure per RGB channel, that's thrice more noise
Incorrect. All 3 channels are dithered in any case, monoColor or multiColor. So all 3 channels get some noise in any case. The monoColor builds apply a similar noise structure to all 3 channels, the multiColor builds apply a different noise structure to all 3 channels. In both cases the amount of noise per channel is identical. The only difference is that the noise structure of the 3 channels is somewhat (but not totally) matching with the monoColor noise while it's totally different with the multiColor builds. What this does is that is subjectively raises the chroma noise level a bit (but not by a factor of 3!) and at the same time the luma noise level is lowered, because when e.g. the red pixel is one up, the green pixel could be one down, averaging the luma value nearer to the correct value.

As I said before, this is a trade, and whether this trade is a good idea or not might be a matter of taste. Let's hear more opinions from different people.

And leeperry, please don't go around sending PMs now.

And I absolutely don't see the point to bother calibrating and going batty with colorimetry if the R/G/B channels get their own little personal pattern of random'ish noise afterwards.
As I said above, they get a pattern of random'ish noise, in any case, regardless of whether it's monoColor or multiColor. And when you measure your display with a meter you will probably not measure a difference in either color or luma between the monoColor or multiColor builds, because a meter isn't measuring one pixel, but an average of multiple pixels, so both luma and chroma noise is automatically "blended together".

Hah, sounds made up
What you said sounded made up, too. Usually when talking about dynamics and sense of depth, people think more about luma than chroma.

One less luma noise veil traded for literally 3 times more chroma noise that together will create new patterns literally becoming a noise feast?
Incorrect, once again.

Just to make sure I did the same test in 8-bit mode. I overlaid 36 frames as layers and added them together, then copied the area where it starts to become visible and expanded that from 0-3 to 0-255 (in other words, a ridiculous amount). This is the result: http://i.imgur.com/Z8phPqQ.png. So the effect is there even in 8-bit mode, but only so extremely close to black that the probability of getting even 1/255 is tiny (I added together 36 frames and expanded the range by a factor of 85, and these pixels still aren't white). So yeah, let's not get hung up about this ;)
Ok... :)

cyberbeing
20th February 2014, 18:26
The static versions do not seem to adapt to the background at all, remaining completely stationary with the same dither patterns in the same locations on the screen during the entire movie. I would at the very least expect to see a new randomly generated static pattern whenever the contents of each 16x16 block changed more than a certain threshold or something. Find a half-way point where we have static dither on motionless objects, and dynamic dither on objects in motion.

Assuming no changes, I'd still vote for "monoColor Static" though. IMHO, static noise on objects in motion is the lesser evil compared to dynamic noise on stationary objects. The multiColor builds do seem to cause random color shifts on neutral colors, and they didn't appear to have any less luma noise than the monoColor builds.

madshi
20th February 2014, 18:28
Oh my gosh. leeperry and cyberbeing agree, and I disagree... :scared:

James Freeman
20th February 2014, 18:29
Mono-Color Dynamic for me.

Interesting. Looks very different to my eyes.

Does your monitor support 4:4:4? Maybe it could have to do with 4:2:2 vs 4:4:4 or something like that?


4:4:4, AMVA+, 2500:1 contrast ration, PC Monitor (Asus VN279QLB)
I'll give it another go then, and see.

The multiColor builds do seem to cause random color shifts on neutral colors, and they didn't appear to have any less luma noise than the monoColor builds.
I agree to this.
To second that, it appears to have MORE noise than the MonoColor build.

EDIT:
I changed my mind later this day... to MultiColor Dynamic.

Ver Greeneyes
20th February 2014, 18:32
The static versions do not seem to adapt to the background at all, remaining completely stationary with the same dither patterns in the same locations on the screen during the entire movie. I would at the very least expect to see a new randomly generated static pattern whenever the contents of each 16x16 block changed more than a certain threshold or something.That's an interesting point. So the way it works now, the result of the PRNG only depends on the pixel coordinates? Perhaps the result of the PRNG and the color of a pixel could be hashed together? I dunno how expensive that would be.

Edit: This article (http://briansharpe.wordpress.com/2011/11/15/a-fast-and-simple-32bit-floating-point-hash-function/) describes a fast 32-bit floating point hashing algorithm. Worth a shot?

leeperry
20th February 2014, 18:46
The only difference is that the noise structure of the 3 channels is somewhat (but not totally) matching with the monoColor noise while it's totally different with the multiColor builds. What this does is that is subjectively raises the chroma noise level a bit (but not by a factor of 3!) and at the same time the luma noise level is lowered, because when e.g. the red pixel is one up, the green pixel could be one down, averaging the luma value nearer to the correct value.
Well yeah, three *totally different* noise structures for the R/G/B channels is a no-go, abort the mission. I know what I see and I can read english but I'm starting to believe that my writting skills are out the window as you keep on misunderstanding what I'm trying to convey. I apologize and will try to improve this situation.

As I said before, this is a trade, and whether this trade is a good idea or not might be a matter of taste. Let's hear more opinions from different people.
That's fully understood, especially as +95% of computer monitors are uncalibrated 6bit TN's in 60Hz and the vast majority of TV's are IPS, I rest my case that it'd take more than two mere algorithms to make everyone happy.

And leeperry, please don't go around sending PMs now.
I'm not into washing my laundry in public but if you want me to stop testing your VR, two words will do. I didn't plan on PM'ing you for that matter, especially as even Stevie Wonder can see that "monoColor Static" looks better(j/k :D)

As I said above, they get a pattern of random'ish noise, in any case, regardless of whether it's monoColor or multiColor. And when you measure your display with a meter you will probably not measure a difference in either color or luma between the monoColor or multiColor builds, because a meter isn't measuring one pixel, but an average of multiple pixels, so both luma and chroma noise is automatically "blended together".
It's got nothing to do with measuring. The less noisy the chroma, the clearer the picture looks and the "truer to the source" colors appear. My brain likes colors to be as "pure" as possible, it's got a hard time dealing with artificial colors, to my colorblind brain either colors are "natural" or "artificial". Reason why I always calibrate my displays, it provides me with a much more enjoyable experience :)

Usually when talking about dynamics and sense of depth, people think more about luma than chroma.
Of course they do, you need as little noise as possible in order to keep the original "impression of depth"....the noisier it gets the fuzzier it looks as the noise veil on top of the movie only gets thicker.

Incorrect, once again.
Absolutely not. Three *totally different* noise structures for the R/G/B channels will together become a noise feast, it makes perfect sense.

I'd still vote for "monoColor Static" though. IMHO, static noise on objects in motion is the lesser evil compared to dynamic noise on stationary objects. The multiColor builds do seem to cause random color shifts on neutral colors, and they didn't appear to have any less luma noise than the monoColor builds.
Yep, it's a matter of picking your poison more than anything else.

Oh my gosh. leeperry and cyberbeing agree, and I disagree... :scared:
http://t1.gstatic.com/images?q=tbn:ANd9GcQCIX9jpGRwT2Wi2KZ6QkCoVXC3YfmfUwPVx7ALaDM9lM-1I1nHsof8Vo7r

GREG1292
20th February 2014, 18:47
You're completely misinterpreting the technical facts. I do not (artificially) add any amount of chroma noise. The multiColor builds have lower luma noise but higher chroma noise compared to the monoColor builds. But that's not because I'm adding chroma noise (I'm not) but it's simply a consequence of using different dither structures per RGB channel. You're complaining about the higher chroma noise, but at the same time you *totally* ignore the fact that the luma noise is as much down as the chroma noise is up. Which means your judgement about this is very one-sided.

madshi: I'm going to test tonight since I use needi32
upscaling and 32 Luma doubling. I notice the luma noise
in King Kong 720p upsclaed to 1080p and is distracting. Hopefully the chroma noise is not increased. A4 is going
to be tough to improve on but I agree 100% the lowering of the noise floor is on my wish list.

DarkSpace
20th February 2014, 18:48
I would at the very least expect to see a new randomly generated static pattern whenever the contents of each 16x16 block changed more than a certain threshold or something. Find a half-way point where we have static dither on motionless objects, and dynamic dither on objects in motion.
I think that might actually be a good idea.
Before I test and evaluate the results, I want to make sure I'm looking for the right thing. We're still discussing the medium-noise algorithm, and not the low-noise one, right?

iSunrise
20th February 2014, 18:56
The static versions do not seem to adapt to the background at all, remaining completely stationary with the same dither patterns in the same locations on the screen during the entire movie. I would at the very least expect to see a new randomly generated static pattern whenever the contents of each 16x16 block changed more than a certain threshold or something. Find a half-way point where we have static dither on motionless objects, and dynamic dither on objects in motion.
More or less, yes, I agree.

IMHO what weīre trying to achieve is to make dithering behave in such a way, that it tries to match the source as close as possible with the available bits there are and not show us an alternate version that adds something we donīt need for a higher perceived bit-depth.

Noise is not there because we want it, but because noise is only needed for the purpose to make up for the missing bits.

With that said, purely from a scientific POV, static noise is NOT good at all and should be dealt with, because static noise will not help us at all to approximate the source pixels in an actual movie. All it will do is approximate one frame and let that stay forever. The same for multiColored noise, which is also NOT what we want, because thereīs no reason whatsoever to introduce colored noise into something which wasnīt there in the first place. Gray backgrounds with green/red dots? Makes no sense at all. That also was the reason why Random Dithering looks rather messy in comparison and why we wanted to get rid of that.

So, personally, I vote for monoColor_dynamic.

Another thing that comes to mind is that even static parts in movies are not really static. We are watching several frames, where the contents may change on a not so visible level. If we look at static images, static definitely is prefered of course, but not necessarily in actual movies.

IMHO, if we want to reach the optimum, we would need madVR to behave in such a way that for static content, it would activate the static algorithm and for moving content, it would activate the dynamic one.

The bolded part may be a good idea to make that happen (maybe madshi has an alternative idea), but it sounds rather computationally expensive to me.

@madshi:
Itīs impressive that on some movies with your "4bit mode" I canīt see a difference between 8bit and 4bit. IMHO that speaks volumes about what kind of quality we already achieved with the dithering algorithm.

One thing I can easily recognize though, is it expected that your "4bit mode" has so much noise on black? Because I can see very visible elevated black levels, because of that. And itīs basically the same for all of the 4 new builds.

Also, the black bars outside of the actual movie content, which are pure black are also elevated about the same. I can see this easily when i watch 1080p on my 1920x1200 screen. I would expect madVR to draw 0 (meaning pure black) outside the actual movie area at the top and bottom. Or is this already planned to be adressed with the cropping feature you talked about?

noee
20th February 2014, 19:04
I have to change my opinion, fwiw. Just rolled these builds with some not-so-good SD material and monoColor_dynamic wins here.

bacondither
20th February 2014, 19:17
Testing is done in 4bit mode.

Multicolor dynamic seems to have the lowest subjective noise level. monocolor dynamic a bit higher noise level but are free from colored noise on grey parts.

Dynamic builds hides the noise better the static builds due to temporal smoothing.
The HVS averages fast changing pixels, similar to how a plasma or DLP works.

Static builds looks like some grey "dither-haze" permanently stuck on the screen.

The picture looks a bit brighter due to dithering in gamma light and dithering down to 4-bit exaggerates the differences a lot more.

cyberbeing
20th February 2014, 19:18
The risk with it being 16x16 blocks though, is it could theoretically be noticeable if you had a static and dynamic block next to each other. It would probably just be safer to just switch globally across the entire frame. Use dynamic when all 16x16 blocks on the frame are in motion, and static otherwise. Or something along those same lines. Just an idea, it just felt a bit odd watching anime in 4bit test mode, that the dither texture never moved.

This static dither is not really noticeable using normal 8bit mode on anime, but the dynamic dither was visible as temporal noise. With film content, I don't think 41.7ms changes are very suitable for dynamic dither to produce a perceptually flat appearance, but I don't think madVR is doing anything in these recent test builds to diffuse error in temporal fashion over a number of frames at the same time it is doing spatial error diffusion within each individual frame.

James Freeman
20th February 2014, 19:53
Testing is done in 4bit mode.

Multicolor dynamic seems to have the lowest subjective noise level. monocolor dynamic a bit higher noise level but are free from colored noise on grey parts.


Good observation.

I like the sterile (IMO more accurate) look of MonoColor Dynamic build even though it has a tad more noise in 4-bit.
In 8-bit, the difference in noise will be highly less noticeable to non-notceable at all.

EDIT:
I changed my mind later this day... to MultiColor Dynamic.

Itīs impressive that on some movies with your "4bit mode" I canīt see a difference between 8bit and 4bit.
Yeah, Considering 4-bit is only 16 shades of grey & 4096 colors !!!!
Its amazing.

Shiandow
20th February 2014, 20:01
The risk with it being 16x16 blocks though, is it could theoretically be noticeable if you had a static and dynamic block next to each other. It would probably just be safer to just switch globally across the entire frame. Use dynamic when all 16x16 blocks on the frame are in motion, and static otherwise. Or something along those same lines. Just an idea, it just felt a bit odd watching anime in 4bit test mode, that the dither texture never moved.

If you want to do something where only changing parts of the image have temporal noise then it would probably be better to let the noise depend on the pixel. And preferably in such a way that this doesn't affect other pixels.

I think this can be achieved by hashing the pixel value and combining this with the result from the RNG. This shouldn't change the noise for any 'unchanged' pixels that come after it but it does mean that noise changes whenever a pixel changes.

It would be hard to have some sort of threshold to check if it changed 'much'. The only 'feasible' way I can think of is to use the pixel value itself to interpolate between several different noise patterns in the way I described a few pages back, it would be a bit tricky to make it random enough but I think it can be done if you combine it with the idea I gave above about hashing the pixel values.

Ver Greeneyes
20th February 2014, 20:05
I'm not into washing my laundry in public but if you want me to stop testing your VR, two words will do.You should really try not to get so worked up over this; it kind of hurts your case. I can see why madVR would be annoyed about people PMing others to influence the vote, and you should be able to see why too. Besides, this isn't exactly a poll - to most of us these differences are very minor, and I'm sure that influences how much weight madshi gives our choices. But I don't think constant hyperbole and threatening to stay with the same beta forever is going to help how much weight he gives yours.
The less noisy the chroma, the clearer the picture looks and the "truer to the source" colors appear. My brain likes colors to be as "pure" as possible, it's got a hard time dealing with artificial colors, to my colorblind brain either colors are "natural" or "artificial".I think this is perfectly valid - since your brain has to go off perceptual brightness alone, I can easily see small differences that a non-colorblind person wouldn't notice (mapping them onto a different axis) standing out to you. I also have no real problem going with what you prefer, but I do think we should explore all the technical details as objectively as possible.

leeperry
20th February 2014, 20:19
This is no threatening at all as ED4 blows me away and I would have no problem sticking with it. I realize that I'm colorblind(like 8% of the population) and I would appear to use a higher contrast LCD screen than most people. I also have BFI enabled so I don't suffer from the usual LCD motion blurriness as this will obviously change how noise is perceived.

I want colors to remain as untouched as possible as the color decoding of my eyes already starts with a lack of resolution and lossy YV12 chroma is already extremely low-res to begin with.

madshi made very clear that he doesn't want to provide zillion options for dithering in mVR and I am fully aware that for instance an uncalibrated 60Hz 6bit TN panel to a non-colorblind person might very well require completely different treatment. It's up to madshi to decide.

MistahBonzai
20th February 2014, 20:19
The my GTX 770 can do nnedi3 32 chroma upscaling. lanczos4AR luma upscaling, and ED without dropping frames. 73% GPU load, 13.3ms avg render time. Adding NNEDI3 doubling of any kind on top is a complete no-go...

About the same here with the HD-7850. Render time is ~15.5ms with the Max occasionally hitting 16.5ms (that short video seems to cause 'bounce' in the render times when rewinding - which is most of the time.) CPU is ~8-10% while GPU is ~79%.

Switch is any nnedi doubling (even 16 neurons) with luma and the render time jumps to ~38ms and peaks ~42ms while the frames start dropping like flies.

MistahBonzai
20th February 2014, 20:35
@MistahBonzai
What were your render times and GPU load % using NNEDI3 32 neurons luma doubling alone with that 720p60 -> 1080p60 test? 42.5 - 45ms all things being equal (chroma 32 nerons with ED enabled). Glad to here you have similar performance as I was about to tear into things despite the 'good' OpenCL benchmarks. I'll restate the obvious for those who may overlook the effect on rendering time that fps has on 'performance'. Rendering a '60' fps video versus a '24' fps one means that the individual rendering window 'availability' is only about 40% of what it was at 24 fps but the 'work time' remains the same...

iSunrise
20th February 2014, 20:37
-the good side of monoColor_dynamic is that it brings "life" to the original movie grain so it's pretty cool on low-bitrate movies but it's more of a special effect than dithering anymore to my eyes...I guess this is sort of what you would expect from a "movie grain" DSP but the flip side of the coin is that it also drastically kills clarity & the impression of depth.

-The nice thing about monoColor_static is that the dithering noise is as non-invasive as possible, my brain can easily get used to its pattern and it's the least harmful to the movie original grain. This also provides the best sense of depth by a very long shot as I'm not watching the dithering dancing around anymore.
The problem you describe seems very influenced by something Iīm not sure about.

Just sit back for a moment and think about what youīre actually saying.

If there are movies with heavy grain, that grain will obviously be subjectively strengthened (since your brain compares to the static build) by the dithering algorithm, because itīs in the source. If with your tests of the static build the grain will be less intrusive, that would mean itīs actually less accurate in that case and I explain why.

Because if you watch a movie without heavy grain (mainly static backgrounds like Tron: Legacy) what you actually do is not approximate it, you introduce a pattern to the whole movie that acts exactly like the thing you described some pages ago, the "grid effect" on IPS panels. And now suddenly, you like that more than the other? I canīt understand your reasoning in this case at all.

Of course on bit-starved movies, the GIGO principle applies and monoColor_dynamic looks more realistic but this is not actual reel grain and the noisier the lower the dynamics. Definitely not what I expect from a dithering process.
Think about this one again please. If you want to be true to the source as your holy grail, you would expect a compressed source that is so badly compressed that you see block artifacts to show you the blocks and NOT artificially smooth them out. This has nothing to do with lowering the dynamics. And it doesnīt matter if itīs real grain, the grain needs to be on the screen if itīs in the source, otherwise we donīt increase the bit-depth, we would actually decrease it. If you want to smooth out something, thatīs what artifact removal is about.

Regarding the latter, you said "resulting in gray ramps staying completely gray", that's exactly how I expect them to look like.
While I also think that gray bars should present themselves as grey bars and not colored bars, keep in mind that the gray bars are not real, they are artificially created. However, I also see no reason why we would have to introduce colors into the mix, because that would mean the result would basically be different from what is in the source ALL THE TIME. And thatīs not an approximation at all, thatīs just wrong.

BTW, not sure if everyone realizes that, but we are actually at a point now, where we may already have decided between our medium-noise and low-noise algorithm. At least I donīt see much potential for further improvements for a low-noise algorithm that is still true to the source without creating "a pattern" (like the static build does) or something along those lines.

So we could all be fine with the choice of the _dynamic and _static build. Iīm not sure about the Multicolor stuff, no one has yet shown anything where that may be beneficial, instead of maybe a little lower noise floor.

leeperry
20th February 2014, 20:44
All I'm saying is that with mono static I can see and enjoy the original movie grain(and the silver grain chunks size changes depending on the shade) but with mono dynamic it's veiled by the dithering algorithm that's constantly changing. That's very distracting and it kills the "impression of depth" as the original movie grain is barely discernable anymore.

Gray bars matter very much, whatever for B&W movies or for D65 sake's. I do not want my gray bars to look ever so slightly tinted as I run a dead-on REC709 D65 calibration for a reason.

James Freeman
20th February 2014, 21:12
Hmm... After some more testing I'm beginning to gravitate toward the MultiColor Dynamic build instead the MonoColor Dynamic.

Looking at movies (especially skin tones) and test patterns,
MultiColor appears to be less noisy (smaller noise?) and make the image look a tad smoother (higher bit) compared to MonoColor.
The grey test pattern also looks smoother and less noisy.

The MonoColor does have a more sterile look but it also noisier and less smooth in transition between shades.
Taking into consideration that these observations are in 4-bit; in 8-bit these differences will be negligible,

To conclude I much prefer to know we have the smoothest & most noiseless (less noisy), "higher bit depth looking", dithering available.

MultiColor Dynamic it is.

Shiandow
20th February 2014, 21:32
Gray bars matter very much, whatever for B&W movies or for D65 sake's. I do not want my gray bars to look ever so slightly tinted as I run a dead-on REC709 D65 calibration for a reason.

You should be careful about that, the way the algorithm currently is it will only be gray if all the pixels in that 16x16 block are gray. Actually at this point I would rather call it a 'coincidence' then an actual feature of the algorithm. It can be 'fixed' by performing error diffusion in YCbCr, but this is hard.

Also for what it's worth, I have been able to verify your claim that using uniform noise on all 3 RGB channels causes 'more' noise. The mean 'amplitude' of the noise becomes slightly higher. In RGB the mean amplitude is 11% higher using 'multiColor' noise but in YUV this rises to 24%. I'm not exactly sure how closely 'distance' in YUV corresponds to visual differences in colour, because I think distances in UV are less important than those in Y, but I don't know which colour space I should use to fix that.

lhan
20th February 2014, 21:58
I had same problem with gigabyte p55ud4 (i7 860- and R9 280x GFX
I tried clean win7 install and it was still KO with 13.12.
I tried nvidia gtx560ti gfx and no problem
I tried R9 280x on other motherboard (asus Z77 i7 3770k) and no problem :angry:
I guess there is some issues with AMD - p55 - openGL - 7xxx series.
Gigabyte P55UD3P + MSI R7970 + 14.1b Driver

When using NNEDI3 image doubling it eats all my gpu and frame lags. Tried setting other scaling algorithm to bilinear with no luck.

Same as just unchecking "use random dithering instead of OpenCL error diffusion" in trade quality for performance tab, it just lags and gpus in full usage.

Not trying revert to 13.12 though.

*Touche*
20th February 2014, 21:59
Finally got around to doing some testing:

Panasonic ST60 plasma (calibrated)
4:4:4
720p24 BRRip (Thor 2)
4bit (very hard to see the differences otherwise)

multiColor_dynamic - BEST, none to barely visible noise, more stable picture

monoColor_dynamic - worse than multi, visible noise

both static bulds - terrible! noise all over, hard to watch

I've even done blind tests between multi and mono and could immediately spot the higher noise with mono.


BTW: Do these builds use OpenCL or DirectCompute, because the performance is about the same as v0.87.4 for me?

The 8472
20th February 2014, 22:13
I'm not exactly sure how closely 'distance' in YUV corresponds to visual differences in colour, because I think distances in UV are less important than those in Y, but I don't know which colour space I should use to fix that.

Just measure the Y error amplitude since it combines components of RGB anyway? So you're only measuring the visually most significent component and thus could potentially claim that if anything it even underrepresents the error?

Skankee
20th February 2014, 22:25
Panasonic ST60 plasma (calibrated)
4:4:4

From what i see on hdtvtest.co.uk the Panasonic Plasma TVs (GT/VT/ZT) canīt do full 4:4:4, so i donīt think the ST60 can do it?

edit: ok, ST60 can do 4:4:4, nice to know :)

mithra66
20th February 2014, 22:30
I think I've an inclination for the same image characteristics as Lepeery but I have to disagree here: according to me, MultiColorDynamic increases depth and clarity, image dynamics, whatever.

I'm surprised that you don't see the same progress, maybe because of your specific "colorless" view.

To be honest I'm no good to see the noise fest you are describing , not in in this build, but not in previous builds either.

I thought that A4 was great but before these last build I was about to write that I regretted that there was something "lost" on edges compared to "no dithering". Don't mistake me, I prefered by large dithered image which has a lot overbalancing qualities.

So that you know, I watch a Pioneer G9 60' from 8 feets distance: pristine sources such as Game of Throne S01e01 King's arrival, Avatar, Jon Carter, Alice In Wonderland, The Avengers and some noisy too: Aliens, Black Swann

Now I'll watch the other 3 builds.

*Touche*
20th February 2014, 22:32
From what i see on hdtvtest.co.uk the Panasonic Plasma TVs (GT/VT/ZT) canīt do full 4:4:4, so i donīt think the ST60 can do it?

ST60 can:
http://www.hdtvtest.co.uk/news/panasonic-tx-p42st60-201303312779.htm

And firmware upgrade fixed the Photo setting requirement.

Shiandow
20th February 2014, 22:42
Just measure the Y error amplitude since it combines components of RGB anyway? So you're only measuring the visually most significent component and thus could potentially claim that if anything it even underrepresents the error?

Well if you only look at the Y component then multiColor is clearly better, but whereas the monoColor algorithm has no UV noise the multiColor algorithm does have UV noise, so you need some way to compare UV noise to Y noise, and I haven't found that yet.

And the fact that it underrepresents the error isn't really helpful; that just means I only get a lower bound, but to prove that one is better than the other I need an upper bound as well.

Edit: FWIW I redid the calculations in CIELAB, this caused the multicolor noise 'amplitude' to be 2 times as high although it depends heavily on what the original colour was.

madshi
20th February 2014, 23:02
The static versions do not seem to adapt to the background at all, remaining completely stationary with the same dither patterns in the same locations on the screen during the entire movie. I would at the very least expect to see a new randomly generated static pattern whenever the contents of each 16x16 block changed more than a certain threshold or something. Find a half-way point where we have static dither on motionless objects, and dynamic dither on objects in motion.
This is out of my control. If I use the same (static) random numbers for every frame it's clear that there will be visible structures which won't easily change. There's nothing I can do about this. Except using a different seed for every frame, which the dynamic builds do.

Switching between dynamic and static per block (or per frame) would look weird IMHO. I don't think I even want to try that.

The multiColor builds do seem to cause random color shifts on neutral colors, and they didn't appear to have any less luma noise than the monoColor builds.
Color shifts you can see with your naked eye? In real life content without zooming in? Can you provide a small sample? Would like to see that here.

You may want to revisit the luma noise question. I think you'll find that the multiColor builds do have lower luma noise. Of course it might be more visible with some videos than others. Whether the lowered luma noise is worth the higher chroma noise is a question worth asking, though.

I'm not into washing my laundry in public but if you want me to stop testing your VR, two words will do. I didn't plan on PM'ing you for that matter
I meant you shouldn't go PMing *other users*, asking them to vote for your favorite algorithm, like you did last time.

The less noisy the chroma, the clearer the picture looks
That applies even more so to luma. Which you totally ignore, as always.

My brain likes colors to be as "pure" as possible, it's got a hard time dealing with artificial colors, to my colorblind brain either colors are "natural" or "artificial".
I can understand that. But I can't pick algorithms which look best only to colorblind people. I need to pick for the majority of people. And the majority of people are bothered by luma noise more than by chroma noise.

Absolutely not. Three *totally different* noise structures for the R/G/B channels will together become a noise feast, it makes perfect sense.
No, it does not. Have you heard of wave cancelling? Basically if you produce noise that is the "opposite" of already existing noise, you can cancel the original noise out. Some noise protection headphones work that way. If you have 3 channels with exactly the same noise, the overall noise level actually increases by 3x. If you have 3 channels with different noise structures, some of the noise will cancel each other out. This is from the view point of luma noise, though. The situation is different for chroma noise. But this is a complicated technical topic.

If I may friendly suggest: Stick to what you're good at. Look at the image, describe what you're seeing and be done with that. Don't try to explain things on a technical level. That often weakens your argument more than it helps.

The same for multiColored noise, which is also NOT what we want, because thereīs no reason whatsoever to introduce colored noise into something which wasnīt there in the first place. Gray backgrounds with green/red dots? Makes no sense at all.
Are you talking about this from a theoretical point of view? Or have you actually tested the multiColor builds and found them not to your liking?

Itīs impressive that on some movies with your "4bit mode" I canīt see a difference between 8bit and 4bit. IMHO that speaks volumes about what kind of quality we already achieved with the dithering algorithm.
Yep, I was impressed with the results of the 4bit mode myself! :)

One thing I can easily recognize though, is it expected that your "4bit mode" has so much noise on black? Because I can see very visible elevated black levels, because of that. And itīs basically the same for all of the 4 new builds.
I don't know, but I don't think it matters. The 4bit mode is only for testing, for nothing else.

I have to change my opinion, fwiw. Just rolled these builds with some not-so-good SD material and monoColor_dynamic wins here.
JFMI: Why? In which way do they look better than with the multiColor_dynamic build?

Multicolor dynamic seems to have the lowest subjective noise level. monocolor dynamic a bit higher noise level but are free from colored noise on grey parts.
Agreed. So which do you prefer?

I also see no reason why we would have to introduce colors into the mix, because that would mean the result would basically be different from what is in the source ALL THE TIME. And thatīs not an approximation at all, thatīs just wrong.
Error diffusion (including multiColor_dynamic) does nothing if the source bitdepth and target bitdepth and the input and output levels match. If they don't match then you technically cannot display the source in its original form.

BTW, not sure if everyone realizes that, but we are actually at a point now, where we may already have decided between our medium-noise and low-noise algorithm. At least I donīt see much potential for further improvements for a low-noise algorithm that is still true to the source without creating "a pattern" (like the static build does) or something along those lines.
No, this is not decided yet. A low noise algorithm could still have less noise than any of the recent builds.

I do not want my gray bars to look ever so slightly tinted as I run a dead-on REC709 D65 calibration for a reason.
Why would they be tinted? The chroma noise should average itself out to pretty much perfect D65.

You should be careful about that, the way the algorithm currently is it will only be gray if all the pixels in that 16x16 block are gray. Actually at this point I would rather call it a 'coincidence' then an actual feature of the algorithm.
Yes. I've been wondering why so many of the test patterns stayed perfectly gray. I did expect some coloring to occur already with the monoColor build. Not sure. Maybe there's a small "safety margin" where the monoColor algorithm stays gray? But doesn't really matter too much, I guess...

Also for what it's worth, I have been able to verify your claim that using uniform noise on all 3 RGB channels causes 'more' noise. The mean 'amplitude' of the noise becomes slightly higher. In RGB the mean amplitude is 11% higher using 'multiColor' noise but in YUV this rises to 24%.
I'm not sure I understand this. leeperry claimed that uniform noise on all 3 RGB channels causes *LESS* noise, not more. And the 'multiColor' build does not use uniform noise. So I'm quite confused what you mean and what you tested and what your test results are?

I think I've an inclination for the same image characteristics as Lepeery but I have to disagree here: according to me, MultiColorDynamic increases depth and clarity, image dynamics, whatever.
Thanks for the feedback.

Hmm... After some more testing I'm beginning to gravitate toward the MultiColor Dynamic build instead the MonoColor Dynamic.

Looking at movies (especially skin tones) and test patterns,
MultiColor appears to be less noisy (smaller noise?) and make the image look a tad smoother (higher bit) compared to MonoColor.
The grey test pattern also looks smoother and less noisy.

The MonoColor does have a more sterile look but it also noisier and less smooth in transition between shades.
multiColor_dynamic - BEST, none to barely visible noise, more stable picture

monoColor_dynamic - worse than multi, visible noise

both static bulds - terrible! noise all over, hard to watch

I've even done blind tests between multi and mono and could immediately spot the higher noise with mono.
This is what I'm seeing here, too. But it seems not everybody agrees. Not sure yet how to solve this problem. I guess I should wait for more feedback before deciding which way to go.

Well if you only look at the Y component then multiColor is clearly better, but whereas the monoColor algorithm has no UV noise the multiColor algorithm does have UV noise, so you need some way to compare UV noise to Y noise, and I haven't found that yet.
Ah yes. This is exactly what I said all the time: The multiColor build should have lower luma noise, but higher chroma noise. FWIW, all the information I've seen suggests the luma noise is more critical than chroma noise. And my eyes seem to agree. However, I'm not sure how much lower the luma noise is and how much higher the chroma noise is in the multiColor build, so it's still to be decided whether it's a good tradeoff or not.

Do you have a favorite yet? Or are you not sure yet?

leeperry
20th February 2014, 23:28
Basically if you produce noise that is the "opposite" of already existing noise, you can cancel the original noise out. Some noise protection headphones work that way.
I fully understand your explanation but that definitely doesn't match what I'm seeing...figures.

Why would they be tinted? The chroma noise should average itself out to pretty much perfect D65.
You said yourself that static mono was "resulting in gray ramps staying completely gray" and that "mono-colored may look better for gray ramp", anyway I'm much against chroma noise due to personal taste and physiological limitations as it would appear. My brain color decoding sees it as wild interferences that kill the luma clarity and edges visibility.

I need to pick for the majority of people. And the majority of people are bothered by luma noise more than by chroma noise.
So I presume that cyberbeing ends up as a collateral casualty? Maybe he should consider running color blindness tests (http://www.colour-blindness.com/colour-blindness-tests/ishihara-colour-test-plates/) :D

So to be perfectly clear, mVR will come with two dithering algorithms and at least one of them will more than likely be completely unsuitable for at least 8% of the world population? Hopefully a registry key hack for the losing minority would be awesomtastic, we're people too :o

nevcairiel
20th February 2014, 23:51
I prefer the multicolor dynamic, it looks slightly smoother, even though the differences without enhancements are barely visible at all.
In 4bit, the advantage of multicolor dynamic is glaringly obvious, imho.

Shiandow
20th February 2014, 23:59
Switching between dynamic and static per block (or per frame) would look weird IMHO. I don't think I even want to try that.
Yes. I've been wondering why so many of the test patterns stayed perfectly gray. I did expect some coloring to occur already with the monoColor build. Not sure. Maybe there's a small "safety margin" where the monoColor algorithm stays gray? But doesn't really matter too much, I guess...


Most patterns I've seen were either entirely gray or didn't have any gray. There was one test with several coloured bars followed by a gray gradient, I'm pretty sure that those tests did have coloured noise. The problem is that it is hard to see if the RGB channels are only slightly misaligned, since pixels are supposed to be close enough that adjacent RGB values blend together (otherwise you'd just see red green blue dots).

I'm not sure I understand this. leeperry claimed that uniform noise on all 3 RGB channels causes *LESS* noise, not more. And the 'multiColor' build does not use uniform noise. So I'm quite confused what you mean and what you tested and what your test results are?


I basically calculated the expected value of the distance between some colour and that colour plus a random variable (i.e. noise). In one case I used the same uniform random variable for all 3 channels (monoColor), in the other I used 3 different uniform random variables (multiColor). If I calculated the distance in RGB then the value I got for the multiColor version was 11% higher than the one for monoColor. After that I've been trying to figure out how to factor in that Y noise is more noticeable than UV noise. I still haven't exactly succeeded but if I use the distance squared in YUV then I can at least say that the multiColor algorithm is better if Y noise is at least 2 times 'worse' than UV noise. And since I still prefer the multiColor dynamic algorithm it seems that Y noise is indeed more than 2 times worse than UV noise.

Oh and FWIW I'm pretty sure it should be possible to make noise which changes on changing parts of the image but remains static on static parts of the image, but I'm not sure if it's worth the trouble.

Ver Greeneyes
21st February 2014, 00:00
This is out of my control. If I use the same (static) random numbers for every frame it's clear that there will be visible structures which won't easily change. There's nothing I can do about this. Except using a different seed for every frame, which the dynamic builds do.madshi, did you see my post (http://forum.doom9.org/showthread.php?p=1669539#post1669539) on the subject? I don't know how expensive this would be, but I was thinking you could take a hash function from Brian Sharpe's GPU-Noise-Lib (https://github.com/BrianSharpe/GPU-Noise-Lib/blob/master/gpu_noise_lib.glsl) such as |vec4 FAST32_hash_3D_Cell( vec3 gridcell )|, use it on the color and multiply your random number for the pixel position by the result to get a random number that changes based on the color of the pixel. By the way, even if you don't do this, might be a good resource to keep in mind if you ever want to add a noise filter ;)

Shiandow
21st February 2014, 00:26
madshi, did you see my post (http://forum.doom9.org/showthread.php?p=1669539#post1669539) on the subject? I don't know how expensive this would be, but I was thinking you could take a hash function from Brian Sharpe's GPU-Noise-Lib (https://github.com/BrianSharpe/GPU-Noise-Lib/blob/master/gpu_noise_lib.glsl) such as |vec4 FAST32_hash_3D_Cell( vec3 gridcell )|, use it on the color and multiply your random number for the pixel position by the result to get a random number that changes based on the color of the pixel. By the way, even if you don't do this, might be a good resource to keep in mind if you ever want to add a noise filter ;)

If you want to do something like that then it'd be better to use a bitwise xor instead of a multiplication. If you multiply them then the result will no longer be uniform. For instance, the product of two random integers has a 3/4 chance to be even.

madshi
21st February 2014, 00:55
I fully understand your explanation but that definitely doesn't match what I'm seeing...figures.
It *may* have to do with the color blindness thing. I don't know for sure, though.

So I presume that cyberbeing ends up as a collateral casualty?
I think he might come around liking the "multiColor_dynamic" build (or the new "oppositeColor_dynamic" build, see below), after some more testing... :D

So to be perfectly clear, mVR will come with two dithering algorithms and at least one of them will more than likely be completely unsuitable for at least 8% of the world population? Hopefully a registry key hack for the losing minority would be awesomtastic, we're people too :o
Nothing is decided yet, so let's cross that bridge when we come to it.

I prefer the multicolor dynamic, it looks slightly smoother, even though the differences without enhancements are barely visible at all.
In 4bit, the advantage of multicolor dynamic is glaringly obvious, imho.
Thanks for the feedback!

I basically calculated the expected value of the distance between some colour and that colour plus a random variable (i.e. noise). In one case I used the same uniform random variable for all 3 channels (monoColor), in the other I used 3 different uniform random variables (multiColor). If I calculated the distance in RGB then the value I got for the multiColor version was 11% higher than the one for monoColor. After that I've been trying to figure out how to factor in that Y noise is more noticeable than UV noise. I still haven't exactly succeeded but if I use the distance squared in YUV then I can at least say that the multiColor algorithm is better if Y noise is at least 2 times 'worse' than UV noise. And since I still prefer the multiColor dynamic algorithm it seems that Y noise is indeed more than 2 times worse than UV noise.
Ok, I see. And the random numbers in your test had a 50% chance of being negative, correct? I'm wondering why the RGB distance was 11% higher. Well, anyway...

I've just had another idea, see bottom of this post.

Oh and FWIW I'm pretty sure it should be possible to make noise which changes on changing parts of the image but remains static on static parts of the image, but I'm not sure if it's worth the trouble.
The problem already starts when thinking about how to define "moving parts" and "static parts". E.g. does a 1bit change in one color component already qualify as a moving pixel? Such a change is almost invisible in 8bit. Or what happens if one pixel in a 16x16 block noticeably changes, but the other pixels are not? If I then change the random seed, *all* pixels will be affected by the change, not just the one "moving" pixel. This is getting complicated very fast...

madshi, did you see my post (http://forum.doom9.org/showthread.php?p=1669539#post1669539) on the subject? I don't know how expensive this would be, but I was thinking you could take a hash function from Brian Sharpe's GPU-Noise-Lib (https://github.com/BrianSharpe/GPU-Noise-Lib/blob/master/gpu_noise_lib.glsl) such as |vec4 FAST32_hash_3D_Cell( vec3 gridcell )|, use it on the color and multiply your random number for the pixel position by the result to get a random number that changes based on the color of the pixel. By the way, even if you don't do this, might be a good resource to keep in mind if you ever want to add a noise filter ;)
As Shiandow already hinted, just modifying (e.g. multiplying) the random value by using the pixel value is not that easy, if you still want the final result of the modification to still be white noise. Add to that the problems I mentioned above.

I don't think we'll find a good solution to make the dither patterns change only for moving parts of the image, without losing a lot of performance.

-------

I've just had another idea: Why not make better use of the "noise cancellation" technology I mentioned earlier? Practically, here's another test build (actually 2, one static, one dynamic) which is neither "monoColor" nor "multiColor", but instead it's "oppositeColor".

http://madshi.net/madVRopposite.rar

Basically this build uses the same random distribution for the red and blue channel, but the exact "opposite" (negative) random distribution for the green channel. This should further lower the luma noise level, and it might also lower the chroma noise level a bit (compared to multiColor), or at least make it slightly more predictable. Thoughts?

Here's a small comparison which shows the difference quite nicely, I think:

| -- monoColor (http://madshi.net/monoColor.png) -- | -- multiColor (http://madshi.net/multiColor.png) -- | -- oppositeColor (http://madshi.net/oppositeColor.png) -- |

*Touche*
21st February 2014, 01:03
Madshi, do these builds use OpenCL or DirectCompute, because the performance is about the same as v0.87.4 for me (A10-5800k)?

madshi
21st February 2014, 01:09
Madshi, do these builds use OpenCL or DirectCompute, because the performance is about the same as v0.87.4 for me (A10-5800k)?
DirectCompute, and performance should be noticeably better than v0.87.4. At the moment I'm not looking at performance, though, but just at image quality.

6233638
21st February 2014, 01:13
Well this is interesting - especially as I had done quite a bit of testing first before realizing there was a new 4bit mode. (hey, now my LCD looks like a plasma TV...)


Multicolor dither clearly lowers the perceived amount of noise in the image compared to monochromatic dither in my opinion, even though one of the aspects of Error Diffusion that I liked was that a monochrome image stayed monochrome.


However, the dynamic builds add a huge amount of noise compared to the static builds when using the 4-bit mode.
But the trade-off is that the dither pattern itself is more visible with a static pattern.

So when you're actually using this to dither down to 8-bit rather than 4-bit, it's probably preferable. But watching videos in the 4-bit mode, the dynamic builds are so much noisier.


And using the 4-bit mode still suggests to me that ED6 may not have been the best choice as the basis for the newer builds - there are clear patterns showing up with some images.
But again, it probably doesn't matter so much when you're dithering to 8-bit rather than 4-bit.
I fully understand your explanation but that definitely doesn't match what I'm seeing...I wonder if this is due to your color blindness. Certain colors which should appear to be "opposites" and cancel out in the dithering, may appear to be the same color to you and seem to add noise?