[OpenJDK Rasterizer] Fwd: Re: Fwd: RFR: Marlin renderer #3
Laurent Bourgès
bourges.laurent at gmail.com
Fri Jul 24 13:55:26 UTC 2015
Jim,
Did you have time to have a look to my last webrev ?
I made some improvements since on the cubic / quad breaking into lines to
use a proper norm instead of abs (ddx) or abs (ddy).
I tried the taxicab norm and now I use square = ddx * ddx + ddy * ddy.
Note: the test for quads was flawed:
Max (ddx, ddy) fails for negative values !
PS: I am now adjusting (lowering) the threshold to achieve better quality
without having too much performance loss.
I will be on vacation next week, but I may read emails but less often.
Cheers,
Laurent
Le 21 juil. 2015 23:33, "Laurent Bourgès" <bourges.laurent at gmail.com> a
écrit :
> Jim,
>
> Here is the first webrev including the new rounding approach:
> http://cr.openjdk.java.net/~lbourges/marlin/marlin-s3.2/
>
> 1. It is based on your fixed-point approach and use FloatMath ceil_int /
> floor_int for perfomance.
> I shift the subpixel y coordinates by - 0.5 in tosubpixy() as mentioned.
>
> 2. I tested many variants (Unsafe / Safe) with many subtle changes and I
> am now satisfied by the code and its performance (only 1% slower than
> previous) but the quality is a lot better and very close to ductus.
>
> If you are interested by the Safe variant (int[] arrays) I can provide
> another webrev (2-3% slower) as I now use offsets as long variables.
>
> 3. I finally understood the curve and quad AFD approach (reading the
> reference paper) and I reduced the initial step to lg=2 (instead or 3 and
> 4).
> It is of course faster without any quality loss:
> - cubic step is adaptive (based on dx/dy ie pixel distance between
> points): in my tests, it was mainly doubling to reach to count=2 !
> - quad step can only be divided so I selected an higher step to let the
> algo reduce it if needed: in my tests, the initial step (lg=4) was very too
> precise generating lots of small segments ! It improved a lot the
> performance of the first 2 maps (see below)
>
> To conclude, the curve / quad decimation is not optimal as the step
> criteria is only constrained by |dx/dy| so it is appropriate to draw pixels
> (depending on the previous one) and maybe not to estimate the error between
> the segment and the real curve.
>
> That's why it is generating more or less segments independently to the
> distance error:
> I propose to study *later* other algorithms present in Pisces Flattener
> or AGG (adaptive subdivision) that can provide a good estimation of the
> min/max (error):
>
>
> https://code.google.com/p/pisces-graphics/source/browse/trunk/src/pisces/d/Flattener.java?spec=svn24&r=24
> http://antigrain.com/research/adaptive_bezier/
>
> "Drawing Parametric Curves Using Chebyshev Polynomials ":
> http://graphicsinterface.org/wp-content/uploads/gi1991-3.pdf
>
> Maybe you have some ideas on Renderer's curve subdivision implementation
> and how to tune it better ... or propose another algorithms ...
>
> >>>> - do you know if the breakCurveAndAddLines (quad or cubic) really
>> takes
>> >>>> into account the supersampling scale to generate only segments needed
>> >>>> and no more ?
>> >>>
>> >>>
>> >>> I don't remember. I'd have to read the code and figure it out.
>> >>
>> >>
>> >> Thanks, it seems there are some thresholds BND... but I am unable to
>> >> find out what it is related to ?
>> >
>> >
>> > I'd have to research that as well. I briefly understood them when I
>> reviewed the code and I was able to fine-tune them once when we had
>> failures in the FX version, but they are essentially a variant of "epsilon"
>> but related to the adaptive subdivision algorithm so I mostly just treated
>> them as tuning parameters - an accuracy vs. time tradeoff.
>>
>> It seems these values are 32 (quad) and 8 (curve) so it seems related to
>> the scaling factor = 8. It would be great to express this dependency in the
>> constants.
>>
>
> Cheers,
> Laurent
>
> PS: Benchmark results with OpenJDK9 (after/before):
>
>
> New OpenJDK9 tests:
> mardi 21 juillet 2015, 22:53:05 (UTC+0200)
>
> TEST results:
> Test Threads Ops Med
> Pct95 Avg StdDev Min Max TotalOps [ms/op]
> dc_boulder_2013-13-30-06-13-17.ser 1 105 99.323
> 99.710 99.372 0.181 99.148 100.230 105
> dc_boulder_2013-13-30-06-13-17.ser 2 210 100.390
> 100.669 100.407 0.135 100.151 101.080 210
> dc_boulder_2013-13-30-06-13-17.ser 4 420 101.404
> 101.903 101.471 1.100 100.530 121.952 420
> dc_boulder_2013-13-30-06-13-20.ser 1 204 50.945
> 51.125 50.905 0.183 50.400 51.403 204
> dc_boulder_2013-13-30-06-13-20.ser 2 408 52.005
> 52.207 52.005 0.125 51.538 52.419 408
> dc_boulder_2013-13-30-06-13-20.ser 4 816 52.615
> 52.979 52.658 0.766 51.925 72.766 816
> dc_shp_alllayers_2013-00-30-07-00-43.ser 1 254 41.029
> 41.408 41.023 0.240 40.628 41.717 254
> dc_shp_alllayers_2013-00-30-07-00-43.ser 2 508 41.609
> 42.037 41.619 0.243 41.153 42.360 508
> dc_shp_alllayers_2013-00-30-07-00-43.ser 4 1016 42.371
> 42.701 42.418 0.680 41.722 63.057 1016
> dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 784.913
> 786.240 784.909 0.821 783.040 786.625 25
> dc_shp_alllayers_2013-00-30-07-00-47.ser 2 50 787.773
> 789.291 787.699 1.208 785.225 789.820 50
> dc_shp_alllayers_2013-00-30-07-00-47.ser 4 100 787.382
> 790.768 787.992 3.168 783.223 805.677 100
> dc_spearfish_2013-11-30-06-11-15.ser 1 808 13.012
> 13.247 13.051 0.098 12.992 13.545 808
> dc_spearfish_2013-11-30-06-11-15.ser 2 1616 13.046
> 13.168 13.065 0.079 13.003 13.568 1616
> dc_spearfish_2013-11-30-06-11-15.ser 4 3232 13.047
> 13.244 13.081 0.302 13.002 29.082 3232
> dc_spearfish_2013-11-30-06-11-19.ser 1 1585 6.632
> 6.733 6.648 0.053 6.619 6.979 1585
> dc_spearfish_2013-11-30-06-11-19.ser 2 3170 6.644
> 6.744 6.658 0.053 6.621 6.996 3170
> dc_spearfish_2013-11-30-06-11-19.ser 4 6340 6.641
> 6.754 6.663 0.234 6.619 22.091 6340
> dc_topp:states_2013-11-30-06-11-06.ser 1 841 12.556
> 12.668 12.572 0.060 12.458 12.759 841
> dc_topp:states_2013-11-30-06-11-06.ser 2 1682 12.505
> 12.614 12.523 0.059 12.395 12.749 1682
> dc_topp:states_2013-11-30-06-11-06.ser 4 3364 12.528
> 12.643 12.575 0.821 12.411 45.321 3364
> dc_topp:states_2013-11-30-06-11-07.ser 1 1355 7.721
> 7.781 7.705 0.058 7.568 7.950 1355
> dc_topp:states_2013-11-30-06-11-07.ser 2 2710 7.720
> 7.764 7.701 0.056 7.561 7.876 2710
> dc_topp:states_2013-11-30-06-11-07.ser 4 5420 7.729
> 7.799 7.721 0.237 7.565 24.055 5420
> test_z_625k.ser 1 63 165.148
> 165.499 165.208 0.200 164.967 166.228 63
> test_z_625k.ser 2 126 166.309
> 166.458 166.319 0.075 166.169 166.604 126
> test_z_625k.ser 4 252 167.391
> 168.287 167.599 1.352 166.501 188.421 252
>
> Scores:
> Tests 27 9 9 9
> Threads 4 1 2 4
> Pct95 132.313 131.601 132.328 133.009
>
>
> B/ Previous OpenJDK9 tests:
> vendredi 19 juin 2015, 23:37:44 (UTC+0200)
>
> TEST results:
> Test Threads Ops Med
> Pct95 Avg StdDev Min Max TotalOps [ms/op]
> dc_boulder_2013-13-30-06-13-17.ser 1 94 111.198
> 111.351 111.199 0.101 110.993 111.483 94
> dc_boulder_2013-13-30-06-13-17.ser 2 188 112.305
> 112.532 112.324 0.120 112.086 112.883 188
> dc_boulder_2013-13-30-06-13-17.ser 4 376 113.469
> 113.640 113.439 0.200 112.499 115.244 376
> dc_boulder_2013-13-30-06-13-20.ser 1 187 55.177
> 55.432 55.191 0.143 54.960 55.902 187
> dc_boulder_2013-13-30-06-13-20.ser 2 374 56.192
> 56.443 56.194 0.146 55.860 56.709 374
> dc_boulder_2013-13-30-06-13-20.ser 4 748 57.034
> 57.259 57.046 0.127 56.669 58.219 748
> dc_shp_alllayers_2013-00-30-07-00-43.ser 1 244 42.747
> 43.124 42.780 0.151 42.549 43.374 244
> dc_shp_alllayers_2013-00-30-07-00-43.ser 2 488 43.256
> 43.520 43.278 0.134 42.992 43.929 488
> dc_shp_alllayers_2013-00-30-07-00-43.ser 4 976 44.137
> 44.581 44.228 1.927 42.911 89.464 976
> dc_shp_alllayers_2013-00-30-07-00-47.ser 1 25 765.628
> 766.016 765.629 0.195 765.233 766.170 25
> dc_shp_alllayers_2013-00-30-07-00-47.ser 2 50 772.097
> 772.824 771.872 0.797 769.439 773.263 50
> dc_shp_alllayers_2013-00-30-07-00-47.ser 4 100 769.742
> 770.547 770.285 2.738 768.929 784.274 100
> dc_spearfish_2013-11-30-06-11-15.ser 1 822 12.675
> 12.748 12.685 0.039 12.648 13.445 822
> dc_spearfish_2013-11-30-06-11-15.ser 2 1644 12.686
> 12.746 12.692 0.035 12.651 13.474 1644
> dc_spearfish_2013-11-30-06-11-15.ser 4 3288 12.702
> 12.768 12.710 0.051 12.659 15.153 3288
> dc_spearfish_2013-11-30-06-11-19.ser 1 1604 6.545
> 6.611 6.554 0.027 6.523 6.810 1604
> dc_spearfish_2013-11-30-06-11-19.ser 2 3208 6.550
> 6.613 6.557 0.026 6.527 6.816 3208
> dc_spearfish_2013-11-30-06-11-19.ser 4 6416 6.556
> 6.627 6.564 0.028 6.531 6.967 6416
> dc_topp:states_2013-11-30-06-11-06.ser 1 876 12.004
> 12.083 11.995 0.064 11.861 12.583 876
> dc_topp:states_2013-11-30-06-11-06.ser 2 1752 12.005
> 12.082 11.995 0.061 11.837 12.173 1752
> dc_topp:states_2013-11-30-06-11-06.ser 4 3504 11.992
> 12.085 11.997 0.078 11.852 13.553 3504
> dc_topp:states_2013-11-30-06-11-07.ser 1 1446 7.266
> 7.343 7.252 0.066 7.120 7.903 1446
> dc_topp:states_2013-11-30-06-11-07.ser 2 2892 7.277
> 7.350 7.264 0.062 7.120 7.444 2892
> dc_topp:states_2013-11-30-06-11-07.ser 4 5784 7.276
> 7.347 7.263 0.069 7.116 9.590 5784
> test_z_625k.ser 1 62 166.409
> 166.693 166.430 0.158 166.098 166.865 62
> test_z_625k.ser 2 124 167.600
> 167.801 167.610 0.107 167.412 167.906 124
> test_z_625k.ser 4 248 168.970
> 169.217 168.979 0.188 168.510 170.056 248
>
> Scores:
> Tests 27 9 9 9
> Threads 4 1 2 4
> Pct95 132.125 131.267 132.435 132.675
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/graphics-rasterizer-dev/attachments/20150724/eb04d880/attachment-0001.html>
More information about the graphics-rasterizer-dev
mailing list