diff --git a/docs/TSL.md b/docs/TSL.md index a6d21a4f60785e..aee9dcef1aa2fc 100644 --- a/docs/TSL.md +++ b/docs/TSL.md @@ -1133,8 +1133,8 @@ const matcap = texture( matcapMap, matcapUV ); | Variable | Description | Type | | -- | -- | -- | -| `directionToColor( value )` | Converts direction vector to color. | `color` | -| `colorToDirection( value )` | Converts color to direction vector. | `vec3` | +| `packNormalToRGB( value )` | Converts normal vector to color. | `color` | +| `unpackRGBToNormal( value )` | Converts color to normal vector. | `vec3` | ## Render Pipeline @@ -1172,18 +1172,18 @@ MRT allows capturing multiple outputs from a single render pass. Instead of rend Use `setMRT()` with the `mrt()` function to define which outputs to capture: ```js -import { pass, mrt, output, normalView, velocity, directionToColor } from 'three/tsl'; +import { pass, mrt, output, normalView, velocity, packNormalToRGB } from 'three/tsl'; const scenePass = pass( scene, camera ); scenePass.setMRT( mrt( { output: output, // Final color output - normal: directionToColor( normalView ), // View-space normals encoded as colors + normal: packNormalToRGB( normalView ), // View-space normals encoded as colors velocity: velocity // Motion vectors for temporal effects } ) ); ``` -Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `directionToColor( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target. +Each MRT entry accepts any TSL node, allowing you to customize outputs using formulas, encoders, or material accessors. For example, `packNormalToRGB( normalView )` encodes view-space normals into RGB values. You can use any TSL function to transform, combine, or encode data before writing to the render target. Within a TSL function `Fn( ( { material, object } ) => { ... } )`, you have complete access to the current material and object being rendered, enabling full customization of outputs. diff --git a/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json b/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json new file mode 100644 index 00000000000000..a72b14a6e10c56 --- /dev/null +++ b/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json @@ -0,0 +1 @@ +{"familyName":"Rounded Mplus 1c","ascender":1493,"descender":-444,"underlinePosition":-174,"underlineThickness":69,"boundingBox":{"yMin":-476,"xMin":-151,"yMax":1493,"xMax":1943},"resolution":1000,"original_font_information":{"format":0,"copyright":"Copyright 2016 The Rounded M+ Project Authors.","fontFamily":"Rounded Mplus 1c","fontSubfamily":"Regular","uniqueID":"1.059.20150529g;GoogleFonts;RoundedMplus1c-Regular","fullName":"Rounded Mplus 1c","version":"Version 1.059.20150529","postScriptName":"RoundedMplus1c-Regular","manufacturerURL":"http://jikasei.me/","licence":"This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL","licenceURL":"http://scripts.sil.org/OFL"},"cssFontWeight":"normal","cssFontStyle":"normal","glyphs":{"0":{"ha":861,"x_min":65,"x_max":796,"o":"m 622 835 q 590 886 622 835 q 431 938 558 938 q 240 835 303 938 q 176 507 176 733 q 240 178 176 281 q 431 76 303 76 q 622 178 558 76 q 685 507 685 281 q 622 835 685 733 m 700 107 q 652 47 700 107 q 431 -14 604 -14 q 161 107 257 -14 q 65 507 65 228 q 161 907 65 786 q 431 1028 257 1028 q 700 907 604 1028 q 796 507 796 786 q 700 107 796 228 z "},"1":{"ha":861,"x_min":153,"x_max":551,"o":"m 200 699 q 169 695 186 688 q 153 721 153 703 q 200 821 153 782 l 397 979 q 496 1014 440 1014 q 535 997 519 1014 q 551 958 551 981 l 551 56 q 535 17 551 33 q 496 0 519 0 q 456 17 472 0 q 440 56 440 33 l 440 889 q 439 890 440 890 l 436 889 l 200 699 z "},"2":{"ha":861,"x_min":115,"x_max":740,"o":"m 654 952 q 695 914 654 952 q 736 740 736 876 q 638 465 736 604 q 269 96 539 325 q 268 94 268 96 q 269 93 268 93 l 694 93 q 726 79 713 93 q 740 46 740 65 q 727 14 740 28 q 694 0 714 0 l 163 0 q 129 14 143 0 q 115 46 115 28 q 151 122 115 93 q 524 483 425 351 q 622 732 622 614 q 568 882 622 831 q 410 933 514 933 q 185 878 304 933 q 152 880 168 871 q 136 907 136 889 q 186 983 136 963 q 424 1028 299 1028 q 654 952 572 1028 z "},"3":{"ha":861,"x_min":118,"x_max":740,"o":"m 164 921 q 132 935 146 921 q 118 968 118 949 q 131 1000 118 986 q 164 1014 144 1014 l 681 1014 q 713 1000 700 1014 q 726 968 726 986 q 694 889 726 921 l 394 596 l 394 593 q 396 592 394 592 l 436 592 q 662 521 583 592 q 740 315 740 450 q 647 72 740 157 q 379 -14 553 -14 q 178 19 272 -14 q 128 92 128 38 q 143 119 128 110 q 175 122 158 129 q 379 79 276 79 q 565 139 501 79 q 629 315 629 199 q 563 462 629 414 q 353 510 497 510 l 294 510 q 264 522 276 510 q 251 553 251 535 q 282 626 251 596 l 583 918 l 583 919 q 582 921 583 921 l 164 921 z "},"4":{"ha":861,"x_min":21,"x_max":789,"o":"m 135 331 l 135 328 q 136 326 135 326 l 494 326 q 507 339 507 326 l 507 850 q 506 851 507 851 q 503 850 503 851 l 135 331 m 67 236 q 34 250 47 236 q 21 282 21 264 q 47 364 21 326 l 475 969 q 561 1014 506 1014 q 601 998 585 1014 q 617 960 617 982 l 617 339 q 628 326 617 326 l 744 326 q 776 313 764 326 q 789 282 789 300 q 776 249 789 263 q 744 236 763 236 l 628 236 q 617 224 617 236 l 617 54 q 601 16 617 32 q 561 0 585 0 q 523 15 539 0 q 507 54 507 31 l 507 224 q 494 236 507 236 l 67 236 z "},"5":{"ha":861,"x_min":132,"x_max":753,"o":"m 181 19 q 132 92 132 38 q 147 120 132 110 q 179 124 163 131 q 379 79 290 79 q 575 144 508 79 q 642 333 642 208 q 585 497 642 440 q 421 553 528 553 q 279 517 344 553 q 190 489 229 489 q 157 503 171 489 q 144 538 143 518 l 167 935 q 193 991 169 968 q 250 1014 217 1014 l 664 1014 q 697 1000 683 1014 q 711 968 711 986 q 697 935 711 950 q 664 921 683 921 l 285 921 q 272 910 272 921 l 253 594 q 254 593 253 593 l 257 593 q 440 642 338 642 q 671 561 589 642 q 753 333 753 481 q 658 75 753 164 q 379 -14 563 -14 q 181 19 275 -14 z "},"6":{"ha":861,"x_min":79,"x_max":796,"o":"m 444 590 q 265 523 335 590 q 194 351 194 456 q 256 163 194 247 q 440 79 317 79 q 620 147 556 79 q 685 343 685 215 q 619 523 685 456 q 444 590 553 590 m 440 -14 q 79 444 79 -14 q 187 883 79 738 q 493 1028 294 1028 q 651 1008 571 1028 q 685 985 672 1003 q 697 946 697 968 q 683 917 697 928 q 651 913 668 907 q 493 935 579 935 q 285 838 365 935 q 196 560 206 742 q 197 558 196 558 q 200 560 200 558 q 468 676 285 676 q 707 585 618 676 q 796 343 796 494 q 699 81 796 176 q 440 -14 603 -14 z "},"7":{"ha":861,"x_min":108,"x_max":761,"o":"m 156 1014 l 715 1014 q 747 1000 733 1014 q 761 968 761 986 q 738 882 761 922 q 376 54 525 524 q 349 15 369 31 q 301 0 328 0 q 267 17 279 0 q 261 56 254 35 q 653 917 418 532 l 653 918 l 654 919 q 653 921 654 921 l 156 921 q 122 935 136 921 q 108 968 108 950 q 122 1000 108 986 q 156 1014 136 1014 z "},"8":{"ha":861,"x_min":65,"x_max":796,"o":"m 414 493 q 233 411 294 467 q 171 278 171 356 q 240 129 171 183 q 431 75 310 75 q 619 130 551 75 q 688 278 688 185 q 439 493 688 443 q 414 493 426 494 m 208 775 q 263 658 208 708 q 419 586 318 608 q 442 586 431 585 q 599 659 543 608 q 656 775 656 710 q 597 895 656 851 q 431 939 538 939 q 267 895 325 939 q 208 775 208 851 m 699 64 q 650 25 699 64 q 431 -14 601 -14 q 163 64 260 -14 q 65 274 65 142 q 124 431 65 363 q 294 535 183 500 q 296 538 296 535 q 294 539 296 539 q 152 638 203 574 q 101 785 101 703 q 190 961 101 894 q 431 1028 278 1028 q 672 961 583 1028 q 760 785 760 894 q 567 549 760 618 q 565 546 565 549 q 567 544 565 544 q 796 274 796 474 q 699 64 796 142 z "},"9":{"ha":861,"x_min":67,"x_max":785,"o":"m 424 935 q 244 869 311 935 q 178 685 178 803 q 244 494 178 564 q 419 424 310 424 q 599 493 531 424 q 668 676 668 563 q 655 760 668 718 q 615 843 642 803 q 538 909 588 883 q 424 935 489 935 m 396 338 q 156 431 244 338 q 67 685 67 524 q 165 935 67 842 q 424 1028 264 1028 q 785 583 785 1028 q 679 130 785 274 q 371 -14 574 -14 q 201 6 286 -14 q 166 28 179 11 q 153 68 153 46 q 168 97 153 86 q 201 101 183 107 q 371 79 288 79 q 585 174 506 79 q 667 456 664 268 q 665 458 667 458 q 663 457 663 458 q 396 338 576 338 z "}," ":{"ha":375,"x_min":0,"x_max":0,"o":""},"!":{"ha":447,"x_min":160,"x_max":288,"o":"m 260 297 q 252 290 260 297 q 224 282 244 282 q 188 297 203 282 q 172 333 172 313 l 160 949 q 178 995 160 976 q 224 1014 197 1014 q 269 995 250 1014 q 288 949 288 976 l 275 333 q 260 297 275 313 m 181 153 q 190 162 181 153 q 224 171 199 171 q 266 153 249 171 q 283 111 283 136 l 283 60 q 266 17 283 35 q 224 0 249 0 q 181 17 199 0 q 164 60 164 35 l 164 111 q 181 153 164 136 z "},"\"":{"ha":550,"x_min":96,"x_max":454,"o":"m 180 738 q 174 732 180 738 q 150 726 168 726 q 120 738 132 726 q 107 768 108 750 l 97 1014 q 112 1053 96 1038 q 151 1069 128 1069 q 189 1053 174 1069 q 203 1014 204 1038 l 193 768 q 180 738 192 750 m 430 738 q 424 732 430 738 q 400 726 418 726 q 370 738 382 726 q 357 768 358 750 l 347 1014 q 362 1053 346 1038 q 401 1069 378 1069 q 439 1053 424 1069 q 453 1014 454 1038 l 443 768 q 430 738 442 750 z "},"#":{"ha":942,"x_min":69,"x_max":872,"o":"m 399 675 l 343 367 q 353 356 340 356 l 533 356 q 547 367 544 356 l 601 675 q 592 686 604 686 l 413 686 q 399 675 401 686 m 114 267 q 82 279 94 267 q 69 311 69 292 q 82 343 69 331 q 114 356 94 356 l 228 356 q 242 367 239 356 l 296 675 q 286 686 299 686 l 185 686 q 153 699 167 686 q 140 731 140 711 q 153 763 140 750 q 185 775 167 775 l 303 775 q 317 788 314 775 l 347 964 q 368 1000 351 986 q 407 1014 385 1014 q 440 999 426 1014 q 450 964 453 983 l 418 788 q 420 779 417 783 q 428 775 424 775 l 608 775 q 622 788 619 775 l 653 964 q 674 1000 657 986 q 713 1014 690 1014 q 745 999 732 1014 q 756 964 758 983 l 724 788 q 726 779 722 783 q 733 775 729 775 l 828 775 q 860 763 847 775 q 872 731 872 750 q 860 699 872 711 q 828 686 847 686 l 718 686 q 704 675 707 686 l 649 367 q 658 356 646 356 l 757 356 q 788 343 775 356 q 801 311 801 331 q 788 279 801 292 q 757 267 775 267 l 643 267 q 629 254 632 267 l 593 50 q 572 14 589 28 q 533 0 556 0 q 501 15 514 0 q 492 50 489 31 l 528 254 q 526 263 529 258 q 518 267 522 267 l 338 267 q 324 254 326 267 l 288 50 q 267 14 283 28 q 228 0 250 0 q 196 15 208 0 q 186 50 183 31 l 222 254 q 220 263 224 258 q 213 267 217 267 l 114 267 z "},"$":{"ha":785,"x_min":76,"x_max":708,"o":"m 332 899 q 181 754 181 881 q 335 585 181 633 q 342 587 339 583 q 344 594 344 590 l 344 889 q 332 899 344 901 m 601 278 q 565 388 601 346 q 444 458 529 431 q 433 450 433 461 l 433 126 q 446 117 433 114 q 601 278 601 142 m 333 488 q 76 754 76 563 q 142 917 76 854 q 332 990 208 979 q 344 1003 344 990 l 344 1088 q 358 1119 344 1106 q 389 1132 371 1132 q 420 1119 407 1132 q 433 1088 433 1106 l 433 1004 q 446 992 433 992 q 628 965 543 985 q 663 942 649 960 q 676 903 676 925 q 661 874 676 885 q 628 868 646 863 q 446 900 538 894 q 433 889 433 900 l 433 572 q 446 557 433 560 q 650 449 592 517 q 708 278 708 381 q 640 104 708 169 q 446 25 572 39 q 433 11 433 22 l 433 -74 q 420 -105 433 -92 q 389 -118 407 -118 q 358 -105 371 -118 q 344 -74 344 -92 l 344 10 q 333 22 344 22 q 139 58 228 29 q 103 85 117 65 q 90 128 90 104 q 106 156 90 146 q 138 158 121 165 q 333 114 236 119 q 344 125 344 114 l 344 472 q 333 488 344 485 z "},"%":{"ha":1139,"x_min":56,"x_max":1083,"o":"m 847 1014 q 876 997 867 1014 q 876 964 886 981 l 375 50 q 292 0 347 0 q 263 17 272 0 q 263 50 253 33 l 764 964 q 847 1014 792 1014 m 850 69 q 976 253 976 69 q 850 435 976 435 q 722 253 722 435 q 850 69 722 69 m 677 449 q 708 483 677 449 q 850 518 739 518 q 1022 449 961 518 q 1083 253 1083 379 q 1022 56 1083 126 q 850 -14 961 -14 q 677 56 739 -14 q 615 253 615 126 q 677 449 615 379 m 289 944 q 163 761 163 944 q 289 579 163 579 q 417 761 417 579 q 289 944 417 944 m 462 565 q 431 531 462 565 q 289 496 400 496 q 117 565 178 496 q 56 761 56 635 q 117 958 56 888 q 289 1028 178 1028 q 462 958 400 1028 q 524 761 524 888 q 462 565 524 635 z "},"&":{"ha":957,"x_min":76,"x_max":956,"o":"m 383 478 q 232 351 276 407 q 188 240 188 296 q 244 118 188 161 q 406 75 300 75 q 552 95 489 75 q 683 165 615 115 q 685 181 693 172 l 401 476 q 383 478 393 485 m 283 824 q 306 740 283 779 q 407 617 328 700 q 426 615 417 607 q 565 730 532 688 q 599 824 599 772 q 558 910 599 879 q 440 940 518 940 q 325 908 367 940 q 283 824 283 876 m 401 -14 q 159 51 242 -14 q 76 236 76 115 q 132 385 76 313 q 321 547 188 458 q 321 561 331 551 l 313 571 q 205 708 236 650 q 174 824 174 767 q 245 972 174 915 q 440 1028 317 1028 q 634 975 567 1028 q 701 829 701 922 q 655 692 701 754 q 489 547 608 629 q 488 532 479 540 l 719 286 q 725 285 722 283 q 728 289 728 286 l 728 528 q 742 565 728 550 q 779 581 757 581 q 817 565 801 581 q 832 528 832 550 l 832 179 q 839 158 832 165 l 943 49 q 948 18 956 36 q 922 0 940 0 q 810 49 856 0 l 771 90 q 753 92 764 100 q 401 -14 585 -14 z "},"'":{"ha":325,"x_min":103,"x_max":222,"o":"m 196 740 q 189 733 196 740 q 163 726 182 726 q 129 740 143 726 q 114 774 115 754 l 104 1010 q 120 1052 103 1035 q 163 1069 138 1069 q 205 1052 188 1069 q 221 1010 222 1035 l 211 774 q 196 740 210 754 z "},"(":{"ha":504,"x_min":97,"x_max":446,"o":"m 419 -194 q 329 -157 364 -194 q 97 438 97 86 q 329 1032 97 789 q 419 1069 364 1069 q 440 1056 433 1069 q 435 1031 446 1042 q 204 438 204 788 q 435 -156 204 88 q 439 -181 444 -167 q 419 -194 433 -194 z "},")":{"ha":504,"x_min":58,"x_max":407,"o":"m 85 -194 q 64 -181 69 -194 q 69 -156 58 -167 q 300 438 300 88 q 69 1031 300 788 q 65 1056 60 1042 q 85 1069 71 1069 q 175 1032 139 1069 q 347 762 288 914 q 407 438 407 610 q 347 113 407 265 q 175 -157 288 -39 q 85 -194 139 -194 z "},"*":{"ha":710,"x_min":67,"x_max":643,"o":"m 100 781 q 75 802 83 786 q 72 836 67 818 q 94 863 76 854 q 128 864 111 871 l 301 806 q 309 807 306 804 q 313 814 313 810 l 310 997 q 323 1029 310 1017 q 355 1042 336 1042 q 386 1029 374 1042 q 399 997 399 1017 l 396 814 q 399 807 396 810 q 407 806 403 804 l 581 864 q 616 863 599 871 q 638 836 633 854 q 635 802 643 818 q 608 781 626 786 l 432 726 q 428 720 429 725 q 428 713 426 715 l 539 565 q 547 533 550 550 q 530 504 544 515 q 497 497 515 493 q 467 514 478 500 l 361 664 q 355 667 360 667 q 347 664 350 667 l 242 514 q 213 497 232 500 q 180 504 194 493 q 162 533 165 515 q 169 565 158 550 l 281 713 q 282 720 283 715 q 276 726 281 725 l 100 781 z "},"+":{"ha":1019,"x_min":111,"x_max":908,"o":"m 156 358 q 124 372 138 358 q 111 403 111 385 q 124 434 111 421 q 156 447 138 447 l 451 447 q 464 458 464 447 l 464 760 q 478 792 464 778 q 510 806 492 806 q 542 792 528 806 q 556 760 556 778 l 556 458 q 568 447 556 447 l 864 447 q 895 434 882 447 q 908 403 908 421 q 895 372 908 385 q 864 358 882 358 l 568 358 q 556 347 556 358 l 556 46 q 542 14 556 28 q 510 0 528 0 q 478 14 492 0 q 464 46 464 28 l 464 347 q 451 358 464 358 l 156 358 z "},",":{"ha":386,"x_min":79,"x_max":294,"o":"m 121 -153 q 91 -137 103 -153 q 85 -104 79 -122 l 151 124 q 185 172 160 153 q 242 190 211 190 q 281 169 267 190 q 285 125 294 149 l 192 -106 q 164 -140 183 -128 q 121 -153 144 -153 z "},"-":{"ha":647,"x_min":111,"x_max":536,"o":"m 154 354 q 124 367 136 354 q 111 399 111 381 q 124 429 111 417 q 154 442 136 442 l 493 442 q 524 429 511 442 q 536 399 536 417 q 524 367 536 381 q 493 354 511 354 l 154 354 z "},".":{"ha":394,"x_min":132,"x_max":263,"o":"m 244 19 q 234 10 244 19 q 197 0 225 0 q 151 19 169 0 q 132 65 132 39 l 132 125 q 151 172 132 153 q 197 190 169 190 q 244 172 225 190 q 263 125 263 153 l 263 65 q 244 19 263 39 z "},"/":{"ha":665,"x_min":44,"x_max":600,"o":"m 83 -56 q 54 -40 64 -56 q 51 -7 44 -25 l 486 965 q 517 1001 497 988 q 561 1014 538 1014 q 590 999 581 1014 q 593 965 600 983 l 158 -7 q 127 -42 147 -29 q 83 -56 107 -56 z "},":":{"ha":506,"x_min":188,"x_max":318,"o":"m 299 561 q 290 551 299 561 q 253 542 281 542 q 206 561 225 542 q 188 607 188 581 l 188 667 q 206 713 188 694 q 253 732 225 732 q 299 713 281 732 q 318 667 318 694 l 318 607 q 299 561 318 581 m 299 19 q 290 10 299 19 q 253 0 281 0 q 206 19 225 0 q 188 65 188 39 l 188 125 q 206 172 188 153 q 253 190 225 190 q 299 172 281 190 q 318 125 318 153 l 318 65 q 299 19 318 39 z "},";":{"ha":503,"x_min":107,"x_max":322,"o":"m 149 -153 q 119 -137 131 -153 q 113 -104 107 -122 l 179 124 q 213 172 188 153 q 269 190 239 190 q 308 169 294 190 q 313 125 322 149 l 219 -106 q 192 -140 211 -128 q 149 -153 172 -153 m 211 713 q 221 723 211 713 q 258 732 231 732 q 303 713 285 732 q 322 667 322 694 l 322 607 q 303 561 322 581 q 258 542 285 542 q 211 561 231 542 q 192 607 192 581 l 192 667 q 211 713 192 694 z "},"<":{"ha":926,"x_min":90,"x_max":794,"o":"m 143 322 q 90 403 90 346 q 143 483 90 460 l 750 763 q 780 760 765 769 q 794 733 794 751 q 750 664 794 683 l 161 404 q 160 403 160 404 q 161 401 160 401 l 750 142 q 794 72 794 122 q 780 45 794 54 q 750 43 765 36 l 143 322 z "},"=":{"ha":1047,"x_min":125,"x_max":922,"o":"m 169 518 q 138 531 151 518 q 125 563 125 544 q 138 594 125 581 q 169 607 151 607 l 878 607 q 909 594 896 607 q 922 563 922 581 q 909 531 922 544 q 878 518 896 518 l 169 518 m 169 199 q 138 212 151 199 q 125 243 125 225 q 138 274 125 261 q 169 288 151 288 l 878 288 q 909 274 896 288 q 922 243 922 261 q 909 212 922 225 q 878 199 896 199 l 169 199 z "},">":{"ha":926,"x_min":132,"x_max":836,"o":"m 176 142 l 765 401 q 767 403 767 401 q 765 404 767 404 l 176 664 q 132 733 132 683 q 147 760 132 751 q 176 763 161 769 l 783 483 q 836 403 836 460 q 783 322 836 346 l 176 43 q 147 45 161 36 q 132 72 132 54 q 176 142 132 122 z "},"?":{"ha":865,"x_min":118,"x_max":775,"o":"m 168 897 q 133 903 149 892 q 118 932 118 914 q 131 973 118 956 q 167 996 144 990 q 438 1028 303 1028 q 688 967 600 1028 q 775 801 775 907 q 762 713 775 751 q 719 642 749 674 q 667 592 689 610 q 603 546 644 574 q 526 492 553 513 q 472 431 500 471 q 433 342 443 390 q 412 303 429 318 q 372 288 394 288 q 333 304 349 288 q 321 343 318 321 q 346 428 328 390 q 396 498 364 465 q 449 547 428 531 q 513 592 469 563 q 588 647 564 626 q 636 706 613 667 q 660 792 660 744 q 424 933 660 933 q 168 897 296 933 m 313 111 q 330 153 313 136 q 372 171 347 171 q 415 153 397 171 q 433 111 433 136 l 433 60 q 415 17 433 35 q 372 0 397 0 q 330 17 347 0 q 313 60 313 35 l 313 111 z "},"@":{"ha":1144,"x_min":56,"x_max":1089,"o":"m 701 349 l 701 374 q 661 516 701 465 q 551 567 621 567 q 441 513 481 567 q 401 361 401 460 q 442 209 401 263 q 551 156 483 156 q 661 206 621 156 q 701 349 701 257 m 572 -156 q 203 -11 350 -156 q 56 361 56 133 q 202 733 56 588 q 572 878 349 878 q 944 735 800 878 q 1089 361 1089 592 q 1047 147 1089 249 q 1001 95 1033 114 q 932 76 969 76 l 778 76 q 728 97 749 76 q 707 146 708 117 l 706 156 l 704 157 q 703 156 703 157 q 521 65 635 65 q 355 143 418 65 q 292 361 292 221 q 353 580 292 503 q 521 657 415 657 q 703 569 635 657 q 706 568 703 568 l 707 568 l 707 592 q 723 630 707 614 q 761 646 739 646 q 799 630 783 646 q 815 592 815 614 l 815 172 q 826 160 815 160 l 949 160 q 965 171 961 160 q 1006 361 1006 260 q 886 675 1006 556 q 572 794 767 794 q 260 674 381 794 q 139 361 139 553 q 260 49 139 169 q 572 -72 381 -72 q 794 -17 696 -72 q 826 -11 808 -8 q 854 -28 844 -14 q 861 -59 864 -42 q 843 -85 858 -76 q 572 -156 726 -156 z "},"A":{"ha":888,"x_min":38,"x_max":850,"o":"m 440 913 l 271 396 q 272 388 269 392 q 279 385 275 385 l 606 385 q 612 388 610 385 q 614 396 614 392 l 444 913 q 443 914 444 914 q 440 913 440 914 m 83 0 q 50 17 63 0 q 44 54 38 35 l 361 956 q 394 998 371 982 q 444 1014 417 1014 q 495 998 472 1014 q 528 956 518 982 l 843 56 q 838 17 850 35 q 804 0 825 0 q 755 16 776 0 q 725 57 733 32 l 651 285 q 635 296 647 296 l 250 296 q 235 285 239 296 l 158 54 q 130 15 150 29 q 83 0 110 0 z "},"B":{"ha":831,"x_min":118,"x_max":775,"o":"m 229 489 l 229 101 q 239 88 229 89 q 376 76 308 76 q 665 301 665 76 q 321 501 665 501 l 240 501 q 229 489 229 501 m 229 913 l 229 601 q 240 590 229 590 l 321 590 q 624 768 624 590 q 561 896 624 854 q 363 938 499 938 q 240 926 303 938 q 229 913 229 924 m 196 -4 q 140 26 163 0 q 118 86 118 51 l 118 928 q 140 988 118 963 q 194 1018 161 1014 q 363 1028 271 1028 q 729 782 729 1028 q 673 635 729 697 q 521 553 617 574 q 519 551 519 553 q 522 550 519 550 q 708 460 642 531 q 775 292 775 390 q 376 -14 775 -14 q 196 -4 278 -14 z "},"C":{"ha":851,"x_min":56,"x_max":740,"o":"m 497 -14 q 176 123 297 -14 q 56 507 56 260 q 172 890 56 753 q 493 1028 288 1028 q 686 1007 601 1028 q 720 983 707 1001 q 733 943 733 965 q 719 915 733 925 q 686 910 704 904 q 503 935 604 935 q 257 822 346 935 q 168 507 168 710 q 260 192 168 306 q 507 79 353 79 q 693 104 610 79 q 726 99 711 110 q 740 71 740 89 q 727 31 740 49 q 693 8 714 14 q 497 -14 600 -14 z "},"D":{"ha":914,"x_min":118,"x_max":858,"o":"m 229 911 l 229 103 q 242 89 229 92 q 364 79 296 79 q 659 183 565 79 q 753 521 753 288 q 658 834 753 733 q 364 935 563 935 q 242 925 296 935 q 229 911 229 922 m 196 -4 q 140 26 163 0 q 118 86 118 51 l 118 928 q 140 988 118 963 q 196 1018 161 1014 q 364 1028 272 1028 q 858 521 858 1028 q 364 -14 858 -14 q 196 -4 272 -14 z "},"E":{"ha":815,"x_min":118,"x_max":711,"o":"m 197 0 q 142 24 165 0 q 118 79 118 47 l 118 935 q 142 990 118 967 q 197 1014 165 1014 l 664 1014 q 697 1000 683 1014 q 711 968 711 986 q 697 935 711 950 q 664 921 683 921 l 242 921 q 229 910 229 921 l 229 601 q 242 590 229 590 l 639 590 q 671 577 658 590 q 683 546 683 564 q 671 515 683 528 q 639 501 658 501 l 242 501 q 229 489 229 501 l 229 104 q 242 93 229 93 l 664 93 q 697 78 683 93 q 711 46 711 64 q 697 14 711 28 q 664 0 683 0 l 197 0 z "},"F":{"ha":794,"x_min":118,"x_max":697,"o":"m 213 17 q 205 8 213 17 q 174 0 197 0 q 134 17 150 0 q 118 56 118 33 l 118 935 q 142 990 118 967 q 197 1014 165 1014 l 650 1014 q 683 1000 669 1014 q 697 968 697 986 q 683 935 697 950 q 650 921 669 921 l 242 921 q 229 910 229 921 l 229 588 q 242 576 229 576 l 625 576 q 657 563 644 576 q 669 532 669 550 q 657 501 669 514 q 625 488 644 488 l 242 488 q 229 475 229 488 l 229 56 q 213 17 229 33 z "},"G":{"ha":954,"x_min":56,"x_max":843,"o":"m 528 -14 q 188 127 319 -14 q 56 507 56 268 q 189 888 56 749 q 551 1028 322 1028 q 750 1007 661 1028 q 784 985 771 1003 q 797 947 797 968 q 782 918 797 929 q 749 913 767 907 q 561 938 658 938 q 273 824 376 938 q 169 507 169 711 q 270 192 169 308 q 538 76 371 76 q 725 106 639 76 q 736 122 736 110 l 736 489 q 725 501 736 501 l 453 501 q 421 515 433 501 q 408 546 408 528 q 421 577 408 564 q 453 590 433 590 l 764 590 q 819 567 796 590 q 843 511 843 543 l 843 126 q 823 60 843 90 q 769 19 803 31 q 528 -14 664 -14 z "},"H":{"ha":939,"x_min":118,"x_max":821,"o":"m 213 17 q 205 8 213 17 q 174 0 197 0 q 134 17 150 0 q 118 56 118 33 l 118 958 q 134 997 118 981 q 174 1014 150 1014 q 213 997 197 1014 q 229 958 229 981 l 229 601 q 240 590 229 590 l 699 590 q 710 601 710 590 l 710 958 q 726 997 710 981 q 765 1014 742 1014 q 805 997 789 1014 q 821 958 821 981 l 821 56 q 805 17 821 33 q 765 0 789 0 q 726 17 742 0 q 710 56 710 33 l 710 489 q 699 501 710 501 l 240 501 q 229 489 229 501 l 229 56 q 213 17 229 33 z "},"I":{"ha":439,"x_min":160,"x_max":279,"o":"m 262 17 q 253 9 262 17 q 219 0 244 0 q 177 17 194 0 q 160 60 160 35 l 160 954 q 177 997 160 979 q 219 1014 194 1014 q 262 997 244 1014 q 279 954 279 979 l 279 60 q 262 17 279 35 z "},"J":{"ha":735,"x_min":56,"x_max":631,"o":"m 106 13 q 69 38 83 19 q 56 79 56 56 q 71 108 56 97 q 104 113 86 119 q 301 79 200 79 q 463 144 411 79 q 514 361 514 210 l 514 956 q 531 997 514 979 q 572 1014 549 1014 q 613 997 596 1014 q 631 956 631 979 l 631 333 q 550 69 631 153 q 301 -14 469 -14 q 106 13 203 -14 z "},"K":{"ha":814,"x_min":118,"x_max":771,"o":"m 213 17 q 205 8 213 17 q 174 0 197 0 q 134 17 150 0 q 118 56 118 33 l 118 958 q 134 997 118 981 q 174 1014 150 1014 q 213 997 197 1014 q 229 958 229 981 l 229 564 q 231 563 229 563 l 233 563 l 610 965 q 722 1014 656 1014 q 749 997 742 1014 q 743 965 757 979 l 338 536 q 336 519 329 528 l 758 50 q 763 18 771 36 q 736 0 754 0 q 625 50 668 0 l 233 493 q 231 494 232 494 q 229 492 229 494 l 229 56 q 213 17 229 33 z "},"L":{"ha":808,"x_min":118,"x_max":725,"o":"m 197 0 q 142 24 165 0 q 118 79 118 47 l 118 956 q 135 997 118 979 q 176 1014 153 1014 q 217 997 200 1014 q 235 956 235 979 l 235 107 q 246 94 235 94 l 678 94 q 711 81 697 94 q 725 47 725 67 q 711 14 725 28 q 678 0 697 0 l 197 0 z "},"M":{"ha":1133,"x_min":118,"x_max":1015,"o":"m 209 16 q 201 8 209 16 q 171 0 193 0 q 133 16 149 0 q 118 54 118 32 l 118 957 q 134 997 118 981 q 174 1014 150 1014 q 258 964 231 1014 l 563 404 q 565 403 563 403 q 567 404 567 403 l 871 963 q 957 1014 897 1014 q 998 997 981 1014 q 1015 956 1015 979 l 1015 56 q 999 17 1015 33 q 960 0 983 0 q 920 17 936 0 q 904 56 904 33 l 904 826 q 903 828 904 828 q 901 826 901 828 l 642 347 q 565 301 617 301 q 489 347 514 301 l 228 826 q 226 828 228 828 q 225 826 225 828 l 225 54 q 209 16 225 32 z "},"N":{"ha":953,"x_min":118,"x_max":835,"o":"m 210 15 q 202 8 210 15 q 172 0 194 0 q 134 15 150 0 q 118 54 118 31 l 118 957 q 135 997 118 981 q 175 1014 151 1014 q 261 964 232 1014 l 722 182 q 725 181 722 181 q 726 182 726 181 l 726 960 q 742 999 726 983 q 781 1014 758 1014 q 819 999 803 1014 q 835 960 835 983 l 835 57 q 818 17 835 33 q 778 0 801 0 q 692 50 721 0 l 231 832 q 228 833 231 833 q 226 832 226 833 l 226 54 q 210 15 226 31 z "},"O":{"ha":992,"x_min":56,"x_max":936,"o":"m 738 826 q 696 881 738 826 q 496 935 654 935 q 253 826 338 935 q 169 507 169 718 q 253 188 169 296 q 496 79 338 79 q 738 188 654 79 q 822 507 822 296 q 738 826 822 718 m 819 123 q 760 55 819 123 q 496 -14 701 -14 q 173 123 290 -14 q 56 507 56 260 q 173 891 56 754 q 496 1028 290 1028 q 819 891 701 1028 q 936 507 936 754 q 819 123 936 260 z "},"P":{"ha":833,"x_min":118,"x_max":785,"o":"m 229 913 l 229 504 q 242 490 229 493 q 392 481 308 481 q 602 540 529 481 q 675 711 675 600 q 603 880 675 822 q 392 938 532 938 q 242 926 317 938 q 229 913 229 924 m 213 17 q 205 8 213 17 q 174 0 197 0 q 134 17 150 0 q 118 56 118 33 l 118 928 q 140 987 118 961 q 196 1017 163 1013 q 400 1028 303 1028 q 687 948 589 1028 q 785 719 785 868 q 686 475 785 558 q 400 392 588 392 q 242 399 325 392 q 229 389 229 399 l 229 56 q 213 17 229 33 z "},"Q":{"ha":1003,"x_min":56,"x_max":1015,"o":"m 738 826 q 695 881 738 826 q 494 935 653 935 q 252 826 336 935 q 168 507 168 718 q 252 188 168 296 q 494 79 336 79 q 738 188 653 79 q 822 507 822 296 q 738 826 822 718 m 494 -14 q 173 123 290 -14 q 56 507 56 260 q 173 891 56 754 q 494 1028 290 1028 q 817 891 700 1028 q 935 507 935 754 q 873 216 935 336 q 699 40 811 96 q 697 39 697 40 q 699 36 697 36 q 1003 -156 883 -8 q 1006 -190 1015 -171 q 975 -208 996 -208 q 869 -156 913 -208 q 718 -46 803 -78 q 494 -14 633 -14 z "},"R":{"ha":842,"x_min":118,"x_max":785,"o":"m 229 913 l 229 543 q 242 531 229 531 l 340 531 q 583 584 506 531 q 661 743 661 638 q 368 938 661 938 q 242 926 306 938 q 229 913 229 924 m 213 17 q 205 8 213 17 q 174 0 197 0 q 134 17 150 0 q 118 56 118 33 l 118 928 q 140 988 118 963 q 196 1018 163 1014 q 378 1028 278 1028 q 672 956 572 1028 q 771 753 771 885 q 715 577 771 647 q 554 481 658 507 q 553 478 553 481 q 554 476 553 476 q 676 296 614 442 l 776 53 q 773 17 785 35 q 740 0 761 0 q 692 15 714 0 q 661 54 671 31 l 564 293 q 485 417 522 393 q 340 442 449 442 l 242 442 q 229 431 229 442 l 229 56 q 213 17 229 33 z "},"S":{"ha":768,"x_min":83,"x_max":685,"o":"m 371 476 q 83 781 83 574 q 158 963 83 897 q 368 1028 233 1028 q 600 990 493 1028 q 636 962 622 982 q 650 917 650 942 q 635 890 650 899 q 603 888 619 881 q 376 938 490 938 q 242 899 293 938 q 192 781 192 860 q 374 583 192 644 q 615 453 546 526 q 685 264 685 379 q 603 57 685 128 q 363 -14 521 -14 q 147 29 243 -14 q 99 107 99 51 q 114 133 99 125 q 144 133 129 142 q 354 79 239 79 q 574 264 574 79 q 526 389 574 339 q 371 476 479 439 z "},"T":{"ha":881,"x_min":83,"x_max":797,"o":"m 131 919 q 97 933 111 919 q 83 967 83 947 q 97 1000 83 986 q 131 1014 111 1014 l 750 1014 q 783 1000 769 1014 q 797 967 797 986 q 783 933 797 947 q 750 919 769 919 l 508 919 q 496 907 496 919 l 496 56 q 480 17 496 33 q 440 0 464 0 q 401 17 417 0 q 385 56 385 33 l 385 907 q 372 919 385 919 l 131 919 z "},"U":{"ha":911,"x_min":104,"x_max":807,"o":"m 717 77 q 672 32 717 77 q 456 -14 626 -14 q 194 77 285 -14 q 104 347 104 168 l 104 957 q 121 997 104 981 q 160 1014 138 1014 q 200 997 183 1014 q 217 957 217 981 l 217 343 q 276 144 217 208 q 457 81 335 81 q 639 144 579 81 q 699 343 699 208 l 699 960 q 715 999 699 983 q 753 1014 731 1014 q 791 999 775 1014 q 807 960 807 983 l 807 347 q 717 77 807 168 z "},"V":{"ha":888,"x_min":38,"x_max":850,"o":"m 360 58 l 44 958 q 49 997 38 979 q 83 1014 61 1014 q 132 998 110 1014 q 163 957 154 982 l 443 111 q 444 110 443 110 q 447 111 447 110 l 728 960 q 757 999 736 985 q 804 1014 778 1014 q 838 997 825 1014 q 843 960 850 979 l 526 58 q 494 16 517 32 q 443 0 471 0 q 392 16 415 0 q 360 58 369 32 z "},"W":{"ha":1200,"x_min":60,"x_max":1142,"o":"m 258 68 l 64 958 q 73 997 60 981 q 108 1014 86 1014 q 152 998 133 1014 q 176 958 171 982 l 342 121 q 343 119 342 119 q 344 121 344 119 l 515 943 q 545 994 521 974 q 601 1014 569 1014 q 657 994 632 1014 q 689 943 682 974 l 860 121 q 861 119 860 119 q 863 121 863 119 l 1028 960 q 1050 999 1032 983 q 1093 1014 1068 1014 q 1128 997 1114 1014 q 1138 960 1142 981 l 942 68 q 911 19 935 38 q 857 0 888 0 q 802 19 826 0 q 772 68 778 38 l 601 893 q 600 894 601 894 q 599 893 599 894 l 428 68 q 397 19 421 38 q 343 0 374 0 q 288 19 313 0 q 258 68 264 38 z "},"X":{"ha":847,"x_min":71,"x_max":778,"o":"m 113 0 q 81 18 92 0 q 81 54 71 36 l 347 503 q 347 524 356 514 l 89 958 q 89 996 79 978 q 119 1014 99 1014 q 176 999 150 1014 q 217 958 203 985 l 424 592 l 425 592 l 428 592 l 636 960 q 729 1014 668 1014 q 760 996 750 1014 q 760 960 771 978 l 500 524 q 500 503 493 514 l 765 56 q 767 18 778 36 q 733 0 756 0 q 678 15 704 0 q 636 57 651 31 l 424 435 q 422 436 424 436 q 419 435 419 436 l 207 56 q 113 0 176 0 z "},"Y":{"ha":847,"x_min":36,"x_max":811,"o":"m 360 439 l 47 958 q 47 996 36 978 q 79 1014 57 1014 q 176 957 144 1014 l 424 524 q 425 522 424 522 q 428 524 428 522 l 675 958 q 769 1014 706 1014 q 801 996 790 1014 q 800 960 811 978 l 488 439 q 482 417 482 429 l 482 58 q 465 17 482 35 q 424 0 447 0 q 383 17 400 0 q 365 58 365 35 l 365 417 q 360 439 365 429 z "},"Z":{"ha":856,"x_min":104,"x_max":751,"o":"m 128 132 l 621 917 l 622 918 l 622 919 q 621 921 622 921 l 150 921 q 118 935 132 921 q 104 968 104 949 q 117 1000 104 986 q 150 1014 131 1014 l 706 1014 q 738 1000 725 1014 q 751 968 751 986 q 728 882 751 917 l 235 97 l 233 96 l 233 94 q 235 93 233 93 l 706 93 q 738 79 724 93 q 751 46 751 65 q 738 14 751 28 q 706 0 725 0 l 150 0 q 117 14 131 0 q 104 46 104 28 q 128 132 104 97 z "},"[":{"ha":653,"x_min":160,"x_max":535,"o":"m 239 -194 q 183 -171 207 -194 q 160 -115 160 -147 l 160 990 q 183 1046 160 1022 q 239 1069 207 1069 l 493 1069 q 523 1058 511 1069 q 535 1028 535 1046 q 523 998 535 1010 q 493 986 511 986 l 272 986 q 263 975 263 986 l 263 -99 q 274 -111 263 -111 l 493 -111 q 523 -123 511 -111 q 535 -153 535 -135 q 523 -183 535 -171 q 493 -194 511 -194 l 239 -194 z "},"\\":{"ha":665,"x_min":65,"x_max":621,"o":"m 507 -7 l 72 965 q 75 999 65 983 q 104 1014 85 1014 q 148 1001 128 1014 q 179 965 168 988 l 614 -7 q 611 -40 621 -25 q 582 -56 601 -56 q 538 -42 558 -56 q 507 -7 518 -29 z "},"]":{"ha":653,"x_min":118,"x_max":493,"o":"m 379 -111 q 390 -100 390 -111 l 390 974 q 381 986 390 986 l 158 986 q 130 999 142 986 q 118 1028 118 1011 q 130 1058 118 1046 q 160 1069 142 1069 l 414 1069 q 469 1046 446 1069 q 493 990 493 1022 l 493 -115 q 469 -171 493 -147 q 414 -194 446 -194 l 160 -194 q 130 -183 142 -194 q 118 -153 118 -171 q 130 -123 118 -135 q 160 -111 142 -111 l 379 -111 z "},"^":{"ha":836,"x_min":50,"x_max":786,"o":"m 90 389 q 60 406 71 389 q 60 440 50 422 l 321 954 q 361 998 335 982 q 418 1014 388 1014 q 475 998 449 1014 q 515 954 501 982 l 776 440 q 776 406 786 422 q 746 389 765 389 q 697 403 719 389 q 663 440 674 417 l 418 942 l 418 943 l 418 942 l 174 440 q 140 403 163 417 q 90 389 117 389 z "},"_":{"ha":781,"x_min":-3,"x_max":783,"o":"m 39 -194 q 9 -183 21 -194 q -3 -153 -3 -171 q 9 -123 -3 -135 q 39 -111 21 -111 l 742 -111 q 772 -123 760 -111 q 783 -153 783 -135 q 772 -183 783 -171 q 742 -194 760 -194 l 39 -194 z "},"`":{"ha":331,"x_min":15,"x_max":279,"o":"m 174 814 l 26 1064 q 26 1104 15 1083 q 60 1125 38 1125 q 119 1108 92 1125 q 160 1061 146 1090 l 272 815 q 270 788 279 801 q 244 774 261 774 q 174 814 199 774 z "},"a":{"ha":742,"x_min":69,"x_max":644,"o":"m 454 382 q 247 338 317 382 q 176 213 176 293 q 212 112 176 150 q 306 74 247 74 q 472 140 406 74 q 538 317 538 207 l 538 369 q 525 382 538 382 l 454 382 m 283 -14 q 129 46 189 -14 q 69 204 69 106 q 161 389 69 319 q 454 458 253 458 l 525 458 q 538 469 538 458 l 538 496 q 499 615 538 581 q 361 649 460 649 q 154 613 265 649 q 124 617 138 607 q 110 644 110 626 q 156 707 110 693 q 361 736 258 736 q 583 678 521 736 q 644 468 644 619 l 644 50 q 630 15 644 29 q 594 0 615 0 q 558 15 574 0 q 543 50 543 29 l 542 122 q 540 124 542 124 q 538 121 538 124 q 283 -14 456 -14 z "},"b":{"ha":803,"x_min":111,"x_max":740,"o":"m 218 468 l 218 254 q 282 126 218 182 q 426 69 346 69 q 580 143 525 69 q 635 361 635 217 q 426 653 635 653 q 281 596 344 653 q 218 468 218 539 m 197 15 q 190 7 197 15 q 161 0 182 0 q 126 15 140 0 q 111 50 111 29 l 111 989 q 126 1026 111 1011 q 164 1042 142 1042 q 202 1026 186 1042 q 218 989 218 1011 l 218 629 q 219 628 218 628 q 222 629 221 628 q 449 736 313 736 q 662 638 583 736 q 740 361 740 540 q 659 87 740 188 q 449 -14 578 -14 q 217 101 310 -14 q 214 103 215 103 q 213 101 213 103 l 213 50 q 197 15 213 29 z "},"c":{"ha":685,"x_min":56,"x_max":588,"o":"m 396 -14 q 144 81 232 -14 q 56 361 56 176 q 141 640 56 544 q 382 736 226 736 q 535 721 454 736 q 567 701 554 717 q 581 664 581 685 q 566 638 581 647 q 535 632 551 628 q 389 650 464 650 q 167 361 167 650 q 225 142 167 211 q 403 72 283 72 q 544 93 481 72 q 574 89 560 99 q 588 63 588 79 q 575 25 588 42 q 542 3 563 8 q 396 -14 476 -14 z "},"d":{"ha":803,"x_min":63,"x_max":692,"o":"m 376 653 q 168 361 168 653 q 223 143 168 217 q 376 69 278 69 q 521 126 457 69 q 585 254 585 182 l 585 468 q 522 596 585 539 q 376 653 458 653 m 354 -14 q 144 87 225 -14 q 63 361 63 188 q 141 638 63 540 q 354 736 219 736 q 581 629 490 736 q 583 628 582 628 q 585 629 585 628 l 585 989 q 601 1026 585 1011 q 639 1042 617 1042 q 676 1026 661 1042 q 692 989 692 1011 l 692 50 q 677 15 692 29 q 642 0 663 0 q 606 15 621 0 q 590 50 590 29 l 590 101 q 589 103 590 103 q 586 101 588 103 q 354 -14 493 -14 z "},"e":{"ha":728,"x_min":56,"x_max":667,"o":"m 375 656 q 164 426 182 656 q 176 415 164 415 l 550 415 q 561 426 561 415 q 375 656 553 656 m 404 -14 q 144 80 233 -14 q 56 361 56 174 q 141 645 56 554 q 375 736 226 736 q 665 413 649 736 q 642 356 667 379 q 585 333 618 333 l 174 333 q 163 321 163 333 q 414 67 175 67 q 576 96 493 67 q 606 92 592 101 q 619 67 619 83 q 576 8 619 19 q 404 -14 488 -14 z "},"f":{"ha":706,"x_min":76,"x_max":608,"o":"m 118 611 q 88 623 100 611 q 76 653 76 635 q 88 683 76 671 q 118 694 100 694 l 235 694 q 247 707 247 694 l 247 774 q 303 967 247 907 q 483 1028 360 1028 q 568 1018 529 1028 q 597 999 586 1014 q 608 965 608 985 q 596 941 608 950 q 569 936 583 932 q 501 944 536 944 q 390 909 421 944 q 358 778 358 874 l 358 707 q 371 694 358 694 l 553 694 q 583 683 571 694 q 594 653 594 671 q 583 623 594 635 q 553 611 571 611 l 371 611 q 358 599 358 611 l 358 56 q 342 17 358 33 q 303 0 325 0 q 264 17 281 0 q 247 56 247 33 l 247 599 q 235 611 247 611 l 118 611 z "},"g":{"ha":782,"x_min":63,"x_max":678,"o":"m 371 653 q 169 371 169 653 q 223 157 169 231 q 371 83 276 83 q 512 143 451 83 q 572 286 572 203 l 572 447 q 512 592 572 531 q 371 653 451 653 m 343 0 q 140 98 217 0 q 63 371 63 196 q 140 646 63 556 q 343 736 217 736 q 572 621 483 736 q 575 619 574 619 q 576 621 576 619 l 578 672 q 592 708 578 693 q 628 722 607 722 q 663 708 649 722 q 678 672 678 693 l 678 42 q 597 -233 678 -146 q 344 -319 517 -319 q 186 -301 258 -319 q 142 -243 142 -290 q 155 -216 142 -226 q 183 -211 168 -206 q 344 -236 261 -236 q 519 -172 465 -236 q 572 38 572 -108 l 572 106 q 571 107 572 107 q 568 106 569 107 q 343 0 483 0 z "},"h":{"ha":792,"x_min":111,"x_max":694,"o":"m 203 15 q 195 8 203 15 q 165 0 188 0 q 127 15 143 0 q 111 53 111 31 l 111 989 q 127 1026 111 1011 q 165 1042 143 1042 q 203 1026 188 1042 q 218 989 218 1011 l 218 614 q 219 613 218 613 q 222 614 221 613 q 454 736 322 736 q 638 666 581 736 q 694 431 694 596 l 694 53 q 680 15 694 31 q 643 0 665 0 q 606 15 621 0 q 590 53 590 31 l 590 413 q 553 601 590 553 q 426 649 517 649 q 286 580 354 649 q 218 439 218 511 l 218 53 q 203 15 218 31 z "},"i":{"ha":431,"x_min":160,"x_max":271,"o":"m 255 17 q 247 8 255 17 q 215 0 239 0 q 176 17 192 0 q 160 56 160 33 l 160 667 q 176 706 160 689 q 215 722 192 722 q 255 706 239 722 q 271 667 271 689 l 271 56 q 255 17 271 33 m 255 909 q 247 901 255 909 q 215 893 239 893 q 176 909 192 893 q 160 949 160 925 l 160 986 q 176 1025 160 1008 q 215 1042 192 1042 q 255 1025 239 1042 q 271 986 271 1008 l 271 949 q 255 909 271 925 z "},"j":{"ha":493,"x_min":-14,"x_max":333,"o":"m 31 -306 q -1 -293 11 -306 q -14 -261 -14 -281 q -1 -230 -14 -243 q 31 -215 11 -217 q 187 -171 151 -211 q 222 -4 222 -131 l 222 667 q 239 706 222 689 q 278 722 256 722 q 317 706 300 722 q 333 667 333 689 l 333 -4 q 273 -238 333 -176 q 31 -306 213 -300 m 222 986 q 239 1025 222 1008 q 278 1042 256 1042 q 317 1025 300 1042 q 333 986 333 1008 l 333 949 q 317 909 333 925 q 278 893 300 893 q 239 909 256 893 q 222 949 222 925 l 222 986 z "},"k":{"ha":726,"x_min":111,"x_max":668,"o":"m 201 15 q 194 8 201 15 q 164 0 186 0 q 126 15 142 0 q 111 53 111 31 l 111 989 q 126 1026 111 1011 q 164 1042 142 1042 q 201 1026 186 1042 q 217 989 217 1011 l 217 401 q 218 400 217 400 l 221 401 l 521 678 q 635 722 568 722 q 659 706 653 722 q 653 678 665 689 l 331 383 q 329 367 322 375 l 657 46 q 661 17 668 35 q 638 0 654 0 q 526 46 572 0 l 221 349 q 218 350 219 350 q 217 349 217 350 l 217 53 q 201 15 217 31 z "},"l":{"ha":431,"x_min":160,"x_max":271,"o":"m 255 17 q 247 8 255 17 q 215 0 239 0 q 176 17 192 0 q 160 56 160 33 l 160 986 q 176 1025 160 1008 q 215 1042 192 1042 q 255 1025 239 1042 q 271 986 271 1008 l 271 56 q 255 17 271 33 z "},"m":{"ha":1090,"x_min":104,"x_max":993,"o":"m 196 15 q 188 8 196 15 q 158 0 181 0 q 120 15 136 0 q 104 53 104 31 l 104 671 q 119 707 104 692 q 156 722 135 722 q 192 707 176 722 q 207 671 207 692 l 208 625 q 210 624 208 624 q 213 626 213 624 q 401 736 292 736 q 509 707 468 736 q 576 610 550 678 q 578 607 576 607 q 581 610 581 607 q 783 736 658 736 q 944 672 894 736 q 993 458 993 608 l 993 53 q 978 15 993 31 q 942 0 964 0 q 904 15 919 0 q 889 53 889 31 l 889 431 q 859 606 889 560 q 754 653 829 653 q 653 598 703 653 q 603 485 603 543 l 603 53 q 588 15 603 31 q 550 0 572 0 q 513 15 528 0 q 497 53 497 31 l 497 431 q 467 606 497 560 q 364 653 438 653 q 262 598 313 653 q 211 485 211 543 l 211 53 q 196 15 211 31 z "},"n":{"ha":785,"x_min":104,"x_max":688,"o":"m 195 15 q 187 8 195 15 q 157 0 179 0 q 119 15 135 0 q 104 53 104 31 l 104 672 q 119 708 104 693 q 154 722 133 722 q 190 708 175 722 q 206 672 206 693 l 206 615 q 207 614 206 614 q 210 615 208 614 q 447 736 310 736 q 631 665 574 736 q 688 431 688 594 l 688 53 q 673 15 688 31 q 636 0 658 0 q 599 15 614 0 q 583 53 583 31 l 583 417 q 546 603 583 554 q 419 653 508 653 q 279 585 347 653 q 211 447 211 518 l 211 53 q 195 15 211 31 z "},"o":{"ha":772,"x_min":56,"x_max":717,"o":"m 608 361 q 608 507 608 361 q 386 653 608 653 q 164 361 164 653 q 386 69 164 69 q 608 361 608 69 m 629 85 q 585 35 629 85 q 386 -14 542 -14 q 143 85 231 -14 q 56 361 56 183 q 143 638 56 539 q 386 736 231 736 q 629 638 542 736 q 717 361 717 539 q 629 85 717 183 z "},"p":{"ha":797,"x_min":104,"x_max":735,"o":"m 211 460 l 211 263 q 274 126 211 183 q 419 69 336 69 q 573 144 518 69 q 628 361 628 218 q 419 653 628 653 q 273 595 335 653 q 211 460 211 538 m 196 -290 q 188 -298 196 -290 q 158 -306 181 -306 q 120 -290 136 -306 q 104 -253 104 -275 l 104 672 q 119 708 104 693 q 154 722 133 722 q 190 708 175 722 q 206 672 206 693 l 207 619 q 208 618 207 618 l 211 621 q 443 736 303 736 q 656 638 578 736 q 735 361 735 540 q 653 87 735 188 q 443 -14 572 -14 q 215 93 301 -14 q 213 94 214 94 q 211 93 211 94 l 211 -253 q 196 -290 211 -275 z "},"q":{"ha":797,"x_min":63,"x_max":693,"o":"m 378 653 q 169 361 169 653 q 224 144 169 218 q 378 69 279 69 q 524 126 461 69 q 586 263 586 183 l 586 460 q 524 595 586 538 q 378 653 463 653 m 354 -14 q 144 87 225 -14 q 63 361 63 188 q 141 638 63 540 q 354 736 219 736 q 586 621 494 736 l 589 618 q 590 619 590 618 l 592 672 q 607 708 592 693 q 643 722 622 722 q 678 708 664 722 q 693 672 693 693 l 693 -253 q 677 -290 693 -275 q 639 -306 661 -306 q 601 -290 617 -306 q 586 -253 586 -275 l 586 93 q 585 94 586 94 q 582 93 583 94 q 354 -14 496 -14 z "},"r":{"ha":625,"x_min":104,"x_max":549,"o":"m 199 17 q 191 8 199 17 q 160 0 183 0 q 120 17 136 0 q 104 56 104 33 l 104 669 q 119 707 104 692 q 157 722 135 722 q 194 707 179 722 q 210 669 210 692 l 210 563 q 211 561 210 561 q 214 564 214 561 q 331 676 256 633 q 501 722 407 718 q 535 710 521 724 q 549 676 549 696 q 535 644 549 658 q 503 629 522 631 q 290 549 365 624 q 215 342 215 475 l 215 56 q 199 17 215 33 z "},"s":{"ha":690,"x_min":83,"x_max":607,"o":"m 333 324 q 141 406 199 356 q 83 538 83 457 q 152 683 83 629 q 349 736 221 736 q 539 711 444 736 q 582 654 582 700 q 569 629 582 638 q 540 625 557 621 q 357 653 449 653 q 190 546 190 653 q 224 467 190 499 q 344 417 257 436 q 551 332 494 383 q 607 185 607 281 q 535 39 607 92 q 333 -14 464 -14 q 140 17 232 -14 q 97 76 97 31 q 111 101 97 92 q 140 104 125 110 q 325 69 231 69 q 500 185 500 69 q 465 268 500 235 q 333 324 429 301 z "},"t":{"ha":697,"x_min":69,"x_max":593,"o":"m 111 611 q 81 623 93 611 q 69 653 69 635 q 81 683 69 671 q 111 694 93 694 l 213 694 q 225 707 225 694 l 225 906 q 240 943 225 928 q 278 958 256 958 q 315 943 300 958 q 331 906 331 928 l 331 707 q 343 694 331 694 l 551 694 q 581 683 569 694 q 593 653 593 671 q 581 623 593 635 q 551 611 569 611 l 343 611 q 331 599 331 611 l 331 232 q 357 101 331 132 q 458 69 383 69 q 532 76 503 69 q 560 70 547 79 q 574 46 574 61 q 562 11 574 26 q 532 -7 550 -4 q 440 -14 496 -14 q 272 37 318 -14 q 225 222 225 88 l 225 599 q 213 611 225 611 l 111 611 z "},"u":{"ha":778,"x_min":97,"x_max":674,"o":"m 331 -14 q 153 53 210 -14 q 97 274 97 119 l 97 669 q 112 707 97 692 q 149 722 126 722 q 186 707 171 722 q 201 669 201 692 l 201 288 q 239 116 201 163 q 358 69 276 69 q 500 134 433 69 q 567 275 567 199 l 567 669 q 583 707 567 692 q 621 722 599 722 q 658 707 643 722 q 674 669 674 692 l 674 50 q 659 15 674 29 q 624 0 644 0 q 588 15 603 0 q 572 50 572 29 l 572 107 q 571 108 572 108 q 568 107 569 108 q 331 -14 472 -14 z "},"v":{"ha":726,"x_min":44,"x_max":682,"o":"m 267 68 l 51 668 q 56 705 44 688 q 89 722 68 722 q 136 707 115 722 q 165 667 157 692 l 363 64 q 364 63 363 63 q 367 64 367 63 l 564 669 q 592 708 571 693 q 638 722 613 722 q 670 706 658 722 q 675 669 682 689 l 458 68 q 421 19 447 38 q 363 0 394 0 q 303 19 331 0 q 267 68 276 38 z "},"w":{"ha":1069,"x_min":58,"x_max":1011,"o":"m 229 67 l 64 667 q 72 705 58 688 q 107 722 85 722 q 152 707 132 722 q 178 667 172 692 l 315 93 q 317 92 315 92 q 318 93 318 92 l 449 653 q 481 703 457 683 q 537 722 506 722 q 593 703 568 722 q 625 653 618 683 l 754 93 q 757 92 754 92 q 758 93 758 92 l 896 668 q 922 707 903 692 q 965 722 940 722 q 999 705 986 722 q 1006 668 1011 688 l 840 67 q 808 19 832 38 q 753 0 783 0 q 699 19 724 0 q 667 68 675 39 l 536 619 q 535 621 536 621 q 533 619 533 621 l 403 68 q 372 19 396 39 q 317 0 347 0 q 263 19 288 0 q 229 67 238 38 z "},"x":{"ha":700,"x_min":64,"x_max":635,"o":"m 100 0 q 73 17 82 0 q 75 49 64 33 l 282 357 q 282 378 290 367 l 82 672 q 80 705 71 688 q 108 722 89 722 q 201 672 171 722 l 350 436 q 351 435 350 435 q 354 436 354 435 l 504 674 q 593 722 535 722 q 620 706 611 722 q 618 674 629 689 l 418 378 q 418 357 410 367 l 625 50 q 626 17 635 35 q 599 0 617 0 q 506 50 536 0 l 350 299 l 349 299 l 346 299 l 189 49 q 100 0 158 0 z "},"y":{"ha":725,"x_min":44,"x_max":681,"o":"m 294 17 l 51 669 q 56 706 44 689 q 89 722 68 722 q 134 708 114 722 q 163 669 154 693 l 353 129 q 354 128 353 128 q 357 129 357 128 l 567 672 q 595 708 575 694 q 640 722 615 722 q 670 706 660 722 q 674 672 681 690 l 292 -256 q 262 -292 282 -278 q 217 -306 242 -306 q 188 -290 197 -306 q 185 -256 178 -274 l 294 -6 q 294 17 299 6 z "},"z":{"ha":744,"x_min":104,"x_max":640,"o":"m 129 117 l 513 635 l 513 638 q 511 639 513 639 l 146 639 q 116 651 128 639 q 104 681 104 663 q 116 710 104 699 q 146 722 128 722 l 599 722 q 628 710 617 722 q 640 681 640 699 q 615 606 640 639 l 232 88 l 232 85 q 233 83 232 83 l 599 83 q 628 72 617 83 q 640 42 640 60 q 628 12 640 24 q 599 0 617 0 l 146 0 q 116 12 128 0 q 104 42 104 24 q 129 117 104 83 z "},"{":{"ha":714,"x_min":83,"x_max":589,"o":"m 128 393 q 97 406 110 393 q 83 438 83 419 q 97 469 83 456 q 128 482 110 482 l 144 482 q 260 653 260 482 l 260 861 q 305 1021 260 972 q 450 1069 350 1069 l 547 1069 q 577 1058 565 1069 q 589 1028 589 1046 q 577 998 589 1010 q 547 986 565 986 l 496 986 q 391 957 421 986 q 361 833 361 928 l 361 649 q 247 440 361 493 q 246 438 246 440 q 247 435 246 435 q 361 226 361 382 l 361 42 q 391 -82 361 -53 q 496 -111 421 -111 l 547 -111 q 577 -123 565 -111 q 589 -153 589 -135 q 577 -183 589 -171 q 547 -194 565 -194 l 450 -194 q 305 -146 350 -194 q 260 14 260 -97 l 260 222 q 144 393 260 393 l 128 393 z "},"|":{"ha":478,"x_min":188,"x_max":290,"o":"m 275 -290 q 267 -298 275 -290 q 239 -306 260 -306 q 203 -290 218 -306 q 188 -254 188 -275 l 188 1074 q 203 1110 188 1094 q 239 1125 218 1125 q 275 1110 260 1125 q 290 1074 290 1094 l 290 -254 q 275 -290 290 -275 z "},"}":{"ha":714,"x_min":125,"x_max":631,"o":"m 467 435 q 468 438 468 435 q 467 440 468 440 q 353 649 353 493 l 353 833 q 323 957 353 928 q 218 986 293 986 l 167 986 q 137 998 149 986 q 125 1028 125 1010 q 137 1058 125 1046 q 167 1069 149 1069 l 264 1069 q 409 1021 364 1069 q 454 861 454 972 l 454 653 q 569 482 454 482 l 586 482 q 617 469 604 482 q 631 438 631 456 q 617 406 631 419 q 586 393 604 393 l 569 393 q 454 222 454 393 l 454 14 q 409 -146 454 -97 q 264 -194 364 -194 l 167 -194 q 137 -183 149 -194 q 125 -153 125 -171 q 137 -123 125 -135 q 167 -111 149 -111 l 218 -111 q 323 -82 293 -111 q 353 42 353 -53 l 353 226 q 467 435 353 382 z "},"~":{"ha":936,"x_min":75,"x_max":861,"o":"m 93 372 q 77 401 79 383 q 85 432 75 418 q 299 542 169 542 q 493 451 403 542 q 638 381 564 381 q 786 454 724 381 q 813 469 797 467 q 843 461 829 471 q 859 433 857 450 q 851 401 861 415 q 638 292 767 292 q 443 382 533 292 q 299 453 372 453 q 150 379 213 453 q 123 365 139 367 q 93 372 107 363 z "},"א":{"ha":758,"x_min":65,"x_max":693,"o":"m 107 0 q 77 15 89 0 q 71 47 65 29 l 121 226 q 236 458 168 396 q 239 476 247 467 l 90 678 q 88 707 81 692 q 113 722 94 722 q 201 678 168 722 l 453 338 q 468 336 460 328 q 543 506 507 375 l 590 675 q 614 709 597 696 q 651 722 631 722 q 682 708 671 722 q 688 675 693 693 l 638 496 q 522 264 590 326 q 519 246 513 256 l 668 44 q 672 15 679 31 q 646 0 664 0 q 557 44 590 0 l 306 385 q 290 386 299 394 q 215 217 251 347 l 168 47 q 146 13 163 26 q 107 0 129 0 z "},"ב":{"ha":769,"x_min":83,"x_max":700,"o":"m 125 0 q 95 12 107 0 q 83 42 83 24 q 95 72 83 60 q 125 83 107 83 l 475 83 q 486 96 486 83 l 486 544 q 465 619 486 599 q 389 639 443 639 l 169 639 q 140 651 151 639 q 128 681 128 663 q 140 710 128 699 q 169 722 151 722 l 419 722 q 589 553 589 722 l 589 96 q 600 83 589 83 l 658 83 q 688 72 676 83 q 700 42 700 60 q 688 12 700 24 q 658 0 676 0 l 125 0 z "},"ג":{"ha":678,"x_min":58,"x_max":626,"o":"m 88 0 q 65 15 71 0 q 69 42 58 31 l 396 381 q 403 400 403 388 q 401 451 401 417 l 401 535 q 376 615 401 592 q 288 639 350 639 l 151 639 q 122 651 133 639 q 110 681 110 663 q 122 710 110 699 q 151 722 133 722 l 308 722 q 500 549 500 722 l 500 461 q 527 263 500 360 q 618 47 554 167 q 617 16 626 32 q 590 0 608 0 q 544 13 565 0 q 511 49 522 26 q 422 275 450 169 q 417 281 421 279 q 411 279 414 282 l 186 43 q 88 0 146 0 z "},"ד":{"ha":742,"x_min":56,"x_max":672,"o":"m 97 639 q 67 651 79 639 q 56 681 56 663 q 67 710 56 699 q 97 722 79 722 l 631 722 q 660 710 649 722 q 672 681 672 699 q 660 651 672 663 q 631 639 649 639 l 572 639 q 561 626 561 639 l 561 54 q 545 16 561 32 q 507 0 529 0 q 469 16 485 0 q 453 54 453 32 l 453 626 q 442 639 453 639 l 97 639 z "},"ה":{"ha":849,"x_min":63,"x_max":751,"o":"m 174 435 q 188 471 174 456 q 224 486 203 486 q 260 471 244 486 q 275 435 275 456 l 275 101 l 275 51 q 260 15 275 31 q 224 0 244 0 q 188 15 203 0 q 174 51 174 31 l 174 101 l 174 435 m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 560 722 q 751 549 751 722 l 751 50 q 737 15 751 29 q 701 0 722 0 q 666 15 681 0 q 651 50 651 29 l 651 535 q 626 615 651 592 q 539 639 600 639 l 104 639 z "},"ו":{"ha":501,"x_min":63,"x_max":404,"o":"m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 213 722 q 404 549 404 722 l 404 54 q 389 16 404 32 q 351 0 374 0 q 313 16 329 0 q 297 54 297 32 l 297 535 q 271 615 297 592 q 183 639 244 639 l 104 639 z "},"ז":{"ha":586,"x_min":63,"x_max":524,"o":"m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 482 722 q 512 710 500 722 q 524 681 524 699 q 482 626 524 644 q 375 531 414 599 q 336 371 336 464 l 336 54 q 320 16 336 32 q 282 0 304 0 q 244 16 260 0 q 228 54 228 32 l 228 351 q 365 635 228 549 q 367 638 367 635 q 365 639 367 639 l 104 639 z "},"ח":{"ha":849,"x_min":63,"x_max":751,"o":"m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 560 722 q 751 549 751 722 l 751 50 q 737 15 751 29 q 701 0 722 0 q 666 15 681 0 q 651 50 651 29 l 651 535 q 626 615 651 592 q 539 639 600 639 l 288 639 q 275 626 275 639 l 275 51 q 260 15 275 31 q 224 0 244 0 q 188 15 203 0 q 174 51 174 31 l 174 626 q 161 639 174 639 l 104 639 z "},"ט":{"ha":797,"x_min":44,"x_max":735,"o":"m 208 76 l 50 668 q 58 706 44 689 q 93 722 71 722 q 137 706 118 722 q 163 667 156 690 l 303 104 q 318 93 306 93 q 421 131 365 93 q 524 228 476 168 q 602 369 571 288 q 633 531 633 450 q 608 615 633 590 q 519 639 582 639 l 453 639 q 423 651 435 639 q 411 681 411 663 q 423 710 411 699 q 453 722 435 722 l 543 722 q 735 549 735 722 q 710 390 735 469 q 644 245 686 311 q 547 126 601 179 q 431 41 493 74 q 306 1 368 8 q 245 19 272 -3 q 208 76 218 42 z "},"י":{"ha":488,"x_min":56,"x_max":397,"o":"m 97 639 q 67 651 79 639 q 56 681 56 663 q 67 710 56 699 q 97 722 79 722 l 206 722 q 397 549 397 722 l 397 332 q 382 294 397 310 q 344 278 367 278 q 306 294 322 278 q 290 332 290 310 l 290 535 q 264 615 290 592 q 176 639 238 639 l 97 639 z "},"ך":{"ha":665,"x_min":56,"x_max":561,"o":"m 97 639 q 67 651 79 639 q 56 681 56 663 q 67 710 56 699 q 97 722 79 722 l 482 722 q 538 699 514 722 q 561 643 561 675 l 561 -251 q 545 -290 561 -274 q 507 -306 529 -306 q 469 -290 485 -306 q 453 -251 453 -274 l 453 626 q 442 639 453 639 l 97 639 z "},"כ":{"ha":704,"x_min":90,"x_max":642,"o":"m 429 83 q 447 94 443 83 q 539 535 539 275 q 513 615 539 592 q 426 639 488 639 l 132 639 q 102 651 114 639 q 90 681 90 663 q 102 710 90 699 q 132 722 114 722 l 449 722 q 642 549 642 722 q 540 68 642 274 q 493 18 525 36 q 424 0 461 0 l 132 0 q 102 12 114 0 q 90 42 90 24 q 102 72 90 60 q 132 83 114 83 l 429 83 z "},"ל":{"ha":683,"x_min":69,"x_max":621,"o":"m 149 639 q 93 663 117 639 q 69 718 69 686 l 69 907 q 85 943 69 928 q 121 958 100 958 q 156 943 142 958 q 171 907 171 928 l 171 733 q 183 722 171 722 l 428 722 q 621 549 621 722 q 443 47 621 318 q 356 0 411 0 q 331 15 338 0 q 333 46 324 31 q 518 539 518 315 q 492 616 518 593 q 406 639 467 639 l 149 639 z "},"ם":{"ha":849,"x_min":63,"x_max":751,"o":"m 275 626 l 275 96 q 288 83 275 83 l 640 83 q 651 96 651 83 l 651 535 q 626 615 651 592 q 539 639 600 639 l 288 639 q 275 626 275 639 m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 560 722 q 751 549 751 722 l 751 79 q 728 24 751 47 q 674 0 706 0 l 275 0 l 251 0 q 197 24 219 0 q 174 79 174 47 l 174 626 q 161 639 174 639 l 104 639 z "},"מ":{"ha":846,"x_min":65,"x_max":749,"o":"m 90 51 q 117 234 110 175 q 130 354 125 293 q 127 460 135 415 q 108 551 119 506 q 71 675 97 597 q 76 708 65 693 q 106 722 88 722 q 147 710 129 722 q 172 675 165 697 q 208 472 207 572 q 210 469 208 469 q 213 472 213 469 q 333 674 268 613 q 485 736 399 736 q 678 641 608 736 q 749 354 749 546 l 749 79 q 726 24 749 47 q 671 0 704 0 l 425 0 q 396 12 408 0 q 383 42 383 24 q 396 72 383 60 q 425 83 408 83 l 638 83 q 649 94 649 83 l 649 344 q 602 571 649 493 q 475 649 556 649 q 365 602 410 649 q 276 423 319 556 q 193 51 233 290 q 173 15 190 29 q 133 0 156 0 q 101 16 114 0 q 90 51 88 32 z "},"ן":{"ha":501,"x_min":63,"x_max":404,"o":"m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 213 722 q 404 549 404 722 l 404 -251 q 389 -290 404 -274 q 351 -306 374 -306 q 313 -290 329 -306 q 297 -251 297 -274 l 297 535 q 271 615 297 592 q 183 639 244 639 l 104 639 z "},"נ":{"ha":585,"x_min":90,"x_max":488,"o":"m 132 0 q 102 12 114 0 q 90 42 90 24 q 102 72 90 60 q 132 83 114 83 l 368 83 q 381 96 381 83 l 381 535 q 354 615 381 592 q 267 639 328 639 l 188 639 q 158 651 169 639 q 146 681 146 663 q 158 710 146 699 q 188 722 169 722 l 296 722 q 488 549 488 722 l 488 79 q 465 24 488 47 q 410 0 442 0 l 132 0 z "},"ס":{"ha":876,"x_min":63,"x_max":814,"o":"m 283 639 q 274 628 271 639 l 382 104 q 397 93 385 93 q 535 155 461 93 q 660 321 608 217 q 713 531 713 425 q 687 615 713 590 q 599 639 661 639 l 283 639 m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 622 722 q 814 549 814 722 q 680 185 814 350 q 385 1 546 21 q 324 19 351 -3 q 289 76 297 42 l 161 628 q 147 639 158 639 l 104 639 z "},"ע":{"ha":797,"x_min":56,"x_max":736,"o":"m 97 -110 q 67 -99 79 -111 q 56 -69 56 -87 q 67 -40 56 -51 q 96 -26 79 -28 q 275 24 189 -18 q 283 40 286 29 l 115 668 q 123 706 110 689 q 158 722 136 722 q 202 706 183 722 q 228 667 221 690 l 369 97 q 381 93 372 88 q 558 333 490 185 q 633 672 625 482 q 649 708 635 693 q 685 722 664 722 q 721 708 706 722 q 735 672 736 693 q 674 363 728 507 q 533 119 619 219 q 333 -41 446 19 q 97 -110 221 -101 z "},"ף":{"ha":772,"x_min":69,"x_max":675,"o":"m 347 265 q 225 273 272 267 q 145 292 178 279 q 97 333 113 306 q 76 394 82 360 q 69 485 69 428 l 69 643 q 92 699 69 675 q 147 722 115 722 l 483 722 q 675 549 675 722 l 675 -256 q 660 -291 675 -276 q 625 -306 646 -306 q 590 -291 604 -306 q 575 -256 575 -276 l 575 535 q 549 615 575 592 q 463 639 524 639 l 183 639 q 171 626 171 639 l 171 486 q 174 413 171 436 q 197 373 178 390 q 248 351 215 356 q 347 347 281 347 q 376 335 364 347 q 389 306 389 322 q 376 277 389 289 q 347 265 364 265 z "},"פ":{"ha":779,"x_min":76,"x_max":682,"o":"m 571 83 q 582 96 582 83 l 582 535 q 556 615 582 592 q 469 639 531 639 l 190 639 q 178 626 178 639 l 178 542 q 181 469 178 492 q 203 428 185 446 q 255 407 222 411 q 354 403 288 403 q 383 391 371 403 q 396 363 396 379 q 383 334 396 346 q 354 322 371 322 q 232 330 279 324 q 152 349 185 336 q 104 390 119 363 q 83 451 89 417 q 76 542 76 485 l 76 643 q 99 699 76 675 q 154 722 122 722 l 490 722 q 682 549 682 722 l 682 79 q 659 24 682 47 q 604 0 636 0 l 118 0 q 88 12 100 0 q 76 42 76 24 q 88 72 76 60 q 118 83 100 83 l 571 83 z "},"ץ":{"ha":708,"x_min":44,"x_max":663,"o":"m 282 203 l 53 672 q 54 706 44 689 q 83 722 64 722 q 128 709 107 722 q 163 672 150 696 l 354 276 q 369 274 358 267 q 442 355 408 301 q 514 506 475 408 l 561 675 q 583 709 567 696 q 622 722 600 722 q 651 708 640 722 q 658 675 663 693 l 608 496 q 517 303 564 374 q 406 190 471 232 q 394 171 394 183 l 394 -251 q 378 -290 394 -274 q 341 -306 363 -306 q 303 -290 319 -306 q 288 -251 288 -274 l 288 181 q 282 203 288 189 z "},"צ":{"ha":754,"x_min":69,"x_max":696,"o":"m 111 0 q 81 12 93 0 q 69 42 69 24 q 81 72 69 60 q 111 83 93 83 l 506 83 q 507 85 507 83 q 506 88 507 88 q 287 305 385 169 q 90 671 189 440 q 94 706 83 690 q 124 722 104 722 q 200 671 179 722 q 410 296 296 440 q 426 293 418 285 q 546 506 489 351 l 592 675 q 615 709 599 696 q 654 722 632 722 q 684 708 672 722 q 690 675 696 693 l 640 496 q 488 228 575 308 q 486 213 479 219 q 631 103 561 143 q 667 42 667 82 q 655 12 667 24 q 625 0 643 0 l 111 0 z "},"ק":{"ha":878,"x_min":63,"x_max":815,"o":"m 174 435 q 189 471 174 456 q 225 486 204 486 q 261 471 246 486 q 276 435 276 456 l 276 -254 q 261 -290 276 -275 q 225 -306 246 -306 q 189 -290 204 -306 q 174 -254 174 -275 l 174 435 m 104 639 q 74 651 86 639 q 63 681 63 663 q 74 710 63 699 q 104 722 86 722 l 624 722 q 815 549 815 722 q 589 42 815 315 q 496 0 556 0 q 474 15 481 0 q 476 42 467 29 q 714 539 714 318 q 688 615 714 592 q 600 639 661 639 l 104 639 z "},"ר":{"ha":658,"x_min":56,"x_max":561,"o":"m 97 639 q 67 651 79 639 q 56 681 56 663 q 67 710 56 699 q 97 722 79 722 l 368 722 q 561 549 561 722 l 561 54 q 545 16 561 32 q 507 0 529 0 q 469 16 485 0 q 453 54 453 32 l 453 535 q 427 615 453 592 q 340 639 401 639 l 97 639 z "},"ש":{"ha":871,"x_min":53,"x_max":824,"o":"m 153 78 l 56 667 q 67 706 53 689 q 101 722 81 722 q 144 706 126 722 q 165 667 163 690 l 221 297 q 235 290 224 285 q 344 417 301 321 q 392 674 386 513 q 407 708 393 693 q 440 722 421 722 q 475 708 461 722 q 488 675 489 694 q 413 358 481 482 q 246 206 344 235 q 238 190 235 203 l 251 97 q 264 86 254 86 q 428 131 349 89 q 572 248 508 174 q 676 433 635 322 q 722 674 717 544 q 738 708 724 694 q 774 722 753 722 q 809 707 794 722 q 822 671 824 692 q 770 395 817 519 q 648 185 724 271 q 469 52 572 100 q 244 0 365 4 q 185 22 211 -1 q 153 78 158 44 z "},"ת":{"ha":863,"x_min":76,"x_max":765,"o":"m 306 83 q 307 85 307 83 l 304 88 q 188 532 188 194 l 188 626 q 175 639 188 639 l 118 639 q 88 651 100 639 q 76 681 76 663 q 88 710 76 699 q 118 722 100 722 l 574 722 q 765 549 765 722 l 765 50 q 751 15 765 29 q 715 0 736 0 q 680 15 694 0 q 665 50 665 29 l 665 535 q 640 615 665 592 q 553 639 614 639 l 301 639 q 289 626 289 639 l 289 532 q 394 107 289 201 q 429 42 429 78 q 417 12 429 24 q 388 0 406 0 l 118 0 q 88 12 100 0 q 76 42 76 24 q 88 72 76 60 q 118 83 100 83 l 306 83 z "},"文":{"ha":1389,"x_min":88,"x_max":1301,"o":"m 136 850 q 102 865 117 850 q 88 899 88 879 q 102 933 88 918 q 136 947 117 947 l 626 947 q 639 958 639 947 l 639 1097 q 656 1136 639 1119 q 694 1153 672 1153 q 733 1136 717 1153 q 750 1097 750 1119 l 750 958 q 761 947 750 947 l 1253 947 q 1287 933 1272 947 q 1301 899 1301 918 q 1287 865 1301 879 q 1253 850 1272 850 l 1117 850 q 1101 838 1107 850 q 782 258 976 453 q 782 243 775 250 q 1251 21 950 118 q 1280 -3 1271 14 q 1283 -40 1289 -21 q 1258 -69 1276 -60 q 1221 -74 1240 -79 q 704 174 897 28 q 685 174 694 181 q 169 -72 500 32 q 131 -69 150 -79 q 106 -40 111 -60 q 108 -2 99 -21 q 138 22 118 17 q 604 243 438 118 q 604 260 614 250 q 328 711 438 425 q 331 749 321 731 q 361 775 340 768 q 403 771 383 781 q 431 740 422 761 q 683 328 532 478 q 701 328 694 319 q 985 839 871 499 q 976 850 988 850 l 136 850 z "},"字":{"ha":1389,"x_min":65,"x_max":1324,"o":"m 113 303 q 79 317 93 303 q 65 351 65 332 q 79 385 65 371 q 113 399 93 399 l 646 399 q 657 410 657 399 l 657 472 q 673 511 657 494 q 713 528 689 528 q 729 538 722 528 q 740 547 732 542 q 922 688 839 614 q 924 692 925 689 q 919 694 922 694 l 364 694 q 331 708 344 694 q 317 740 317 722 q 331 773 317 758 q 364 788 344 788 l 1031 788 q 1063 774 1049 788 q 1076 740 1076 760 q 1043 661 1076 694 q 804 469 938 558 q 781 461 797 464 q 768 450 768 461 l 768 410 q 781 399 768 399 l 1276 399 q 1310 385 1296 399 q 1324 351 1324 371 q 1310 317 1324 332 q 1276 303 1296 303 l 781 303 q 768 292 768 303 l 768 43 q 742 -83 768 -60 q 601 -107 715 -107 q 431 -101 583 -107 q 397 -86 411 -100 q 382 -53 383 -72 q 394 -19 381 -33 q 428 -7 408 -6 q 590 -11 539 -11 q 649 -3 640 -11 q 657 56 657 6 l 657 292 q 646 303 657 303 l 113 303 m 1253 698 q 1246 691 1253 698 q 1217 683 1239 683 q 1179 698 1194 683 q 1164 735 1164 713 l 1164 900 q 1153 913 1164 913 l 236 913 q 225 900 225 913 l 225 735 q 210 698 225 713 q 172 683 194 683 q 135 698 150 683 q 121 735 121 713 l 121 924 q 144 979 121 956 q 199 1003 167 1003 l 626 1003 q 639 1014 639 1003 l 639 1097 q 656 1136 639 1119 q 694 1153 672 1153 q 733 1136 717 1153 q 750 1097 750 1119 l 750 1014 q 763 1003 750 1003 l 1190 1003 q 1245 979 1222 1003 q 1268 924 1268 956 l 1268 735 q 1253 698 1268 713 z "},"描":{"ha":1389,"x_min":75,"x_max":1324,"o":"m 1279 993 q 1310 980 1297 993 q 1324 947 1324 967 q 1310 915 1324 928 q 1279 903 1297 903 l 1156 903 q 1143 890 1143 903 l 1143 803 q 1128 767 1143 782 q 1093 753 1114 753 q 1057 767 1072 753 q 1042 803 1042 782 l 1042 890 q 1029 903 1042 903 l 754 903 q 743 890 743 903 l 743 803 q 728 767 743 782 q 692 753 713 753 q 656 767 671 753 q 642 803 642 782 l 642 890 q 629 903 642 903 l 506 903 q 474 915 486 903 q 461 947 461 928 q 474 980 461 967 q 506 993 488 993 l 629 993 q 642 1006 642 993 l 642 1093 q 656 1128 642 1114 q 692 1143 671 1143 q 728 1128 713 1143 q 743 1093 743 1114 l 743 1006 q 754 993 743 993 l 1029 993 q 1042 1006 1042 993 l 1042 1093 q 1057 1128 1042 1114 q 1093 1143 1072 1143 q 1128 1128 1114 1143 q 1143 1093 1143 1114 l 1143 1006 q 1156 993 1143 993 l 1279 993 m 121 771 q 89 784 103 771 q 75 817 75 797 q 89 850 75 836 q 121 864 103 864 l 238 864 q 249 875 249 864 l 249 1067 q 264 1105 249 1089 q 301 1121 279 1121 q 340 1105 324 1121 q 356 1067 356 1089 l 356 875 q 367 864 356 864 l 468 864 q 501 850 486 864 q 515 817 515 836 q 501 785 515 799 q 468 771 488 771 l 367 771 q 356 758 356 771 l 356 468 q 365 460 356 457 q 464 496 408 474 q 482 499 469 499 q 493 508 493 499 l 493 615 q 517 671 493 647 q 572 694 540 694 l 1213 694 q 1268 671 1244 694 q 1292 615 1292 647 l 1292 -69 q 1276 -106 1292 -90 q 1240 -121 1261 -121 q 1205 -106 1219 -121 q 1190 -69 1190 -90 l 1190 -56 q 1181 -46 1190 -46 l 603 -46 q 593 -56 593 -46 l 593 -71 q 578 -106 593 -92 q 543 -121 564 -121 q 508 -106 522 -121 q 493 -71 493 -92 l 493 399 q 482 404 493 407 q 368 363 463 396 q 356 346 356 357 l 356 74 q 335 -73 356 -44 q 225 -101 314 -101 q 133 -99 172 -101 q 101 -83 114 -97 q 86 -50 88 -69 q 99 -19 85 -32 q 131 -8 113 -7 q 214 -11 167 -11 q 244 -1 240 -11 q 249 69 249 8 l 249 314 q 238 322 249 325 q 128 293 188 307 q 95 300 110 289 q 78 331 81 311 q 88 369 75 351 q 119 390 100 386 q 238 421 192 407 q 249 435 249 424 l 249 758 q 238 771 249 771 l 121 771 m 940 592 l 940 382 q 951 371 940 371 l 1178 371 q 1190 382 1190 371 l 1190 592 q 1178 604 1190 604 l 951 604 q 940 592 940 604 m 940 272 l 940 56 q 951 44 940 44 l 1178 44 q 1190 56 1190 44 l 1190 272 q 1178 285 1190 285 l 951 285 q 940 272 940 285 m 593 592 l 593 382 q 604 371 593 371 l 831 371 q 843 382 843 371 l 843 592 q 831 604 843 604 l 604 604 q 593 592 593 604 m 593 272 l 593 56 q 604 44 593 44 l 831 44 q 843 56 843 44 l 843 272 q 831 285 843 285 l 604 285 q 593 272 593 285 z "},"邊":{"ha":1389,"x_min":63,"x_max":1319,"o":"m 261 894 q 119 1013 204 944 q 102 1044 104 1025 q 114 1078 100 1064 q 150 1094 129 1093 q 186 1083 171 1096 q 326 967 222 1056 q 343 933 342 953 q 331 899 344 913 q 297 882 317 883 q 261 894 276 881 m 119 707 q 102 739 104 719 q 114 772 100 758 q 149 788 128 786 q 186 776 171 789 q 329 658 285 697 q 346 624 344 644 q 333 590 347 604 q 299 574 319 575 q 264 588 279 574 q 119 707 217 629 m 108 358 q 76 372 90 358 q 63 406 63 386 q 76 438 63 425 q 108 451 89 451 l 267 451 q 322 428 299 451 q 344 372 344 404 l 344 181 q 351 158 344 169 q 509 35 406 67 q 868 3 613 3 l 1268 3 q 1300 -11 1286 3 q 1313 -44 1314 -25 q 1297 -77 1311 -64 q 1264 -90 1283 -90 l 864 -90 q 501 -58 625 -90 q 313 53 376 -26 q 297 53 306 61 q 140 -83 239 -10 q 103 -92 124 -96 q 72 -69 83 -87 q 67 -29 63 -50 q 90 4 72 -8 q 243 136 179 68 q 240 139 240 136 l 240 347 q 229 358 240 358 l 108 358 m 769 308 l 765 283 q 774 272 763 272 l 1176 272 q 1232 248 1210 272 q 1251 192 1254 224 q 1207 74 1243 106 q 1086 43 1171 43 q 872 46 961 43 q 844 58 856 46 q 831 86 832 69 q 840 112 829 101 q 868 122 851 122 q 1044 119 940 119 q 1115 135 1094 119 q 1140 189 1136 150 q 1129 200 1140 200 l 736 200 q 717 192 722 200 q 533 58 649 106 q 456 83 488 40 q 450 117 444 99 q 474 142 456 135 q 601 217 550 172 q 663 310 651 263 q 653 319 665 319 l 432 319 q 405 331 417 319 q 393 358 393 343 q 405 385 393 374 q 432 396 417 396 l 789 396 q 801 408 801 396 l 801 435 q 819 478 801 460 q 863 496 838 496 q 871 504 871 496 l 871 568 q 860 579 871 579 l 815 579 q 799 569 803 579 q 540 413 744 460 q 510 417 524 408 q 489 442 496 425 l 474 476 l 467 476 q 428 492 444 476 q 413 531 413 508 l 413 567 q 435 622 413 599 q 490 646 458 646 l 789 646 q 801 658 801 646 l 801 676 q 789 688 801 688 l 581 688 l 551 688 q 496 711 519 688 q 472 767 472 735 l 472 993 q 496 1049 472 1025 q 551 1072 519 1072 l 754 1072 q 771 1082 767 1072 q 776 1098 772 1088 q 782 1114 781 1108 q 854 1161 801 1165 q 888 1141 875 1158 q 893 1104 900 1124 q 889 1093 892 1100 q 885 1082 886 1086 q 892 1072 882 1072 l 1163 1072 q 1217 1049 1194 1072 q 1240 993 1240 1025 l 1240 767 q 1217 711 1240 735 q 1163 688 1194 688 l 924 688 q 913 676 913 688 l 913 658 q 924 646 913 646 l 1222 646 q 1278 622 1254 646 q 1301 567 1301 599 l 1301 556 q 1278 499 1301 522 q 1221 476 1254 476 q 1204 467 1211 476 q 1158 440 1190 446 q 1040 435 1126 435 q 925 439 963 435 q 913 429 913 442 l 913 408 q 924 396 913 396 l 1281 396 q 1308 385 1296 396 q 1319 358 1319 374 q 1308 331 1319 343 q 1281 319 1296 319 l 783 319 q 769 308 772 319 m 972 568 l 972 522 q 982 503 972 506 q 1044 500 992 500 q 1111 511 1104 500 q 1168 553 1143 554 l 1189 553 q 1199 563 1199 553 l 1199 568 q 1188 579 1199 579 l 985 579 q 972 568 972 579 m 697 571 q 699 576 700 572 q 694 579 697 579 l 526 579 q 514 568 514 579 l 514 497 q 526 488 514 485 q 697 571 643 517 m 581 982 l 581 963 q 593 950 581 950 l 1119 950 q 1132 963 1132 950 l 1132 982 q 1119 993 1132 993 l 593 993 q 581 982 581 993 m 581 883 l 581 864 q 593 853 581 853 l 1119 853 q 1132 864 1132 853 l 1132 883 q 1119 896 1132 896 l 593 896 q 581 883 581 896 m 593 754 l 1119 754 q 1132 767 1132 754 l 1132 786 q 1119 799 1132 799 l 593 799 q 581 786 581 799 l 581 767 q 593 754 581 754 z "}}} \ No newline at end of file diff --git a/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip b/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip deleted file mode 100644 index 305e0f23ee7c57..00000000000000 Binary files a/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip and /dev/null differ diff --git a/examples/webgl_geometry_text_stroke.html b/examples/webgl_geometry_text_stroke.html index e5cb122cab84b4..d23ec24e70599f 100644 --- a/examples/webgl_geometry_text_stroke.html +++ b/examples/webgl_geometry_text_stroke.html @@ -39,8 +39,7 @@ import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; import { SVGLoader } from 'three/addons/loaders/SVGLoader.js'; - import { Font } from 'three/addons/loaders/FontLoader.js'; - import { unzipSync, strFromU8 } from 'three/addons/libs/fflate.module.js'; + import { FontLoader } from 'three/addons/loaders/FontLoader.js'; let camera, scene, renderer; @@ -54,59 +53,54 @@ scene = new THREE.Scene(); scene.background = new THREE.Color( 0xf0f0f0 ); - new THREE.FileLoader() - .setResponseType( 'arraybuffer' ) - .load( 'fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip', function ( data ) { + const loader = new FontLoader(); + loader.load( 'fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json', function ( font ) { - const zip = unzipSync( new Uint8Array( data ) ); - const strArray = strFromU8( new Uint8Array( zip[ 'MPLUSRounded1c-Regular.typeface.json' ].buffer ) ); + const color = new THREE.Color( 0x006699 ); - const font = new Font( JSON.parse( strArray ) ); - const color = new THREE.Color( 0x006699 ); + const matDark = new THREE.MeshBasicMaterial( { + color: color, + side: THREE.DoubleSide + } ); - const matDark = new THREE.MeshBasicMaterial( { - color: color, - side: THREE.DoubleSide - } ); + const matLite = new THREE.MeshBasicMaterial( { + color: color, + transparent: true, + opacity: 0.4, + side: THREE.DoubleSide + } ); - const matLite = new THREE.MeshBasicMaterial( { - color: color, - transparent: true, - opacity: 0.4, - side: THREE.DoubleSide - } ); + const material = { + dark: matDark, + lite: matLite, + color: color + }; - const material = { - dark: matDark, - lite: matLite, - color: color - }; + const english = ' Three.js\nStroke text.'; // Left to right - const english = ' Three.js\nStroke text.'; // Left to right + const hebrew = 'טקסט קו'; // Right to left - const hebrew = 'טקסט קו'; // Right to left + const chinese = '文字描邊'; // Top to bottom - const chinese = '文字描邊'; // Top to bottom + const message1 = generateStrokeText( font, material, english, 80, 'ltr' ); - const message1 = generateStrokeText( font, material, english, 80, 'ltr' ); + const message2 = generateStrokeText( font, material, hebrew, 80, 'rtl' ); - const message2 = generateStrokeText( font, material, hebrew, 80, 'rtl' ); + const message3 = generateStrokeText( font, material, chinese, 80, 'tb' ); - const message3 = generateStrokeText( font, material, chinese, 80, 'tb' ); + message1.position.x = - 100; - message1.position.x = - 100; + message2.position.x = - 100; + message2.position.y = - 300; - message2.position.x = - 100; - message2.position.y = - 300; + message3.position.x = 300; + message3.position.y = - 300; - message3.position.x = 300; - message3.position.y = - 300; + scene.add( message1, message2, message3 ); - scene.add( message1, message2, message3 ); + render(); - render(); - - } ); //end load function + } ); //end load function renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setPixelRatio( window.devicePixelRatio ); diff --git a/package.json b/package.json index 0154f07cb738aa..0ac5bb157ed092 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "files": [ "build", "examples/jsm", - "examples/fonts", "LICENSE", "package.json", "README.md", diff --git a/src/Three.TSL.js b/src/Three.TSL.js index abb05231f7a44b..d5d14c5cf3a470 100644 --- a/src/Three.TSL.js +++ b/src/Three.TSL.js @@ -569,6 +569,8 @@ export const toneMappingExposure = TSL.toneMappingExposure; export const toonOutlinePass = TSL.toonOutlinePass; export const transformDirection = TSL.transformDirection; export const transformNormal = TSL.transformNormal; +export const transformNormalByInverseViewMatrix = TSL.transformNormalByInverseViewMatrix; +export const transformNormalByViewMatrix = TSL.transformNormalByViewMatrix; export const transformNormalToView = TSL.transformNormalToView; export const transformedClearcoatNormalView = TSL.transformedClearcoatNormalView; export const transformedNormalView = TSL.transformedNormalView; diff --git a/src/nodes/accessors/Normal.js b/src/nodes/accessors/Normal.js index 9ba97f3f44a879..2026806f95d81b 100644 --- a/src/nodes/accessors/Normal.js +++ b/src/nodes/accessors/Normal.js @@ -1,7 +1,7 @@ import { attribute } from '../core/AttributeNode.js'; import { cameraViewMatrix } from './Camera.js'; import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js'; -import { mat3, vec3, Fn } from '../tsl/TSLBase.js'; +import { mat3, vec3, Fn, addMethodChaining } from '../tsl/TSLBase.js'; import { positionView } from './Position.js'; import { directionToFaceDirection } from '../display/FrontFacingNode.js'; import { warn } from '../../utils.js'; @@ -74,7 +74,7 @@ export const normalViewGeometry = /*@__PURE__*/ ( Fn( ( builder ) => { */ export const normalWorldGeometry = /*@__PURE__*/ ( Fn( ( builder ) => { - let normal = normalViewGeometry.transformDirection( cameraViewMatrix ); + let normal = normalViewGeometry.transformNormalByInverseViewMatrix( cameraViewMatrix ); if ( builder.isFlatShading() !== true ) { @@ -124,7 +124,7 @@ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => { * @tsl * @type {Node} */ -export const normalWorld = /*@__PURE__*/ normalView.transformDirection( cameraViewMatrix ).toVar( 'normalWorld' ); +export const normalWorld = /*@__PURE__*/ normalView.transformNormalByInverseViewMatrix( cameraViewMatrix ).toVar( 'normalWorld' ); /** * TSL object that represents the clearcoat vertex normal of the current rendered object in view space. @@ -153,24 +153,24 @@ export const clearcoatNormalView = /*@__PURE__*/ ( Fn( ( { subBuildFn, context } }, 'vec3' ).once( [ 'NORMAL', 'VERTEX' ] ) )().toVar( 'clearcoatNormalView' ); /** - * Transforms the normal with the given matrix. + * Transforms the normal by the normal matrix of the given matrix and then normalizes the result. * * @tsl * @function * @param {Node} normal - The normal. - * @param {Node} [matrix=modelWorldMatrix] - The matrix. + * @param {Node} [matrix=modelWorldMatrix] - The matrix. * @return {Node} The transformed normal. */ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => { - const m = mat3( matrix ); + const normalMatrix = mat3( matrix ).inverse().transpose(); - const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) ); - - return m.mul( transformedNormal ).xyz; + return normalMatrix.mul( normal ).normalize(); } ); +addMethodChaining( 'transformNormal', transformNormal ); + /** * Transforms the given normal from local to view space. * @@ -186,7 +186,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) = if ( modelNormalViewMatrix ) { - return modelNormalViewMatrix.transformDirection( normal ); + return normal.transformNormalByViewMatrix( modelNormalViewMatrix ); } @@ -194,7 +194,7 @@ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) = const transformedNormal = modelNormalMatrix.mul( normal ); - return cameraViewMatrix.transformDirection( transformedNormal ); + return transformedNormal.transformNormalByViewMatrix( cameraViewMatrix ); } ); diff --git a/src/nodes/accessors/ReflectVector.js b/src/nodes/accessors/ReflectVector.js index f7274b5c722238..cc9ff03849419f 100644 --- a/src/nodes/accessors/ReflectVector.js +++ b/src/nodes/accessors/ReflectVector.js @@ -1,4 +1,4 @@ -import { cameraViewMatrix } from './Camera.js'; +import { cameraWorldMatrix } from './Camera.js'; import { normalView } from './Normal.js'; import { positionViewDirection } from './Position.js'; import { materialRefractionRatio } from './MaterialProperties.js'; @@ -25,7 +25,7 @@ export const refractView = /*@__PURE__*/ positionViewDirection.negate().refract( * @tsl * @type {Node} */ -export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' ); +export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( cameraWorldMatrix ).toVar( 'reflectVector' ); /** * Used for sampling cube maps when using cube refraction mapping. @@ -33,4 +33,4 @@ export const reflectVector = /*@__PURE__*/ reflectView.transformDirection( camer * @tsl * @type {Node} */ -export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' ); +export const refractVector = /*@__PURE__*/ refractView.transformDirection( cameraWorldMatrix ).toVar( 'refractVector' ); diff --git a/src/nodes/accessors/Tangent.js b/src/nodes/accessors/Tangent.js index 40a9fabeec6033..f01f383eae8e2c 100644 --- a/src/nodes/accessors/Tangent.js +++ b/src/nodes/accessors/Tangent.js @@ -1,5 +1,5 @@ import { attribute } from '../core/AttributeNode.js'; -import { cameraViewMatrix } from './Camera.js'; +import { cameraWorldMatrix } from './Camera.js'; import { modelViewMatrix } from './ModelNode.js'; import { Fn, vec4 } from '../tsl/TSLBase.js'; import { tangentViewFrame } from './TangentUtils.js'; @@ -57,4 +57,4 @@ export const tangentView = /*@__PURE__*/ ( Fn( ( builder ) => { * @tsl * @type {Node} */ -export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraViewMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' ); +export const tangentWorld = /*@__PURE__*/ tangentView.transformDirection( cameraWorldMatrix ).toVarying( 'v_tangentWorld' ).normalize().toVar( 'tangentWorld' ); diff --git a/src/nodes/lighting/EnvironmentNode.js b/src/nodes/lighting/EnvironmentNode.js index afed15d0f793ec..f794d638815d01 100644 --- a/src/nodes/lighting/EnvironmentNode.js +++ b/src/nodes/lighting/EnvironmentNode.js @@ -1,7 +1,7 @@ import LightingNode from './LightingNode.js'; import { isolate } from '../core/IsolateNode.js'; import { roughness, clearcoatRoughness } from '../core/PropertyNode.js'; -import { cameraViewMatrix } from '../accessors/Camera.js'; +import { cameraWorldMatrix } from '../accessors/Camera.js'; import { normalView, clearcoatNormalView, normalWorld } from '../accessors/Normal.js'; import { positionViewDirection } from '../accessors/Position.js'; import { float, pow4 } from '../tsl/TSLBase.js'; @@ -144,7 +144,7 @@ const createRadianceContext = ( roughnessNode, normalViewNode ) => { // Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane. reflectVec = pow4( roughnessNode ).mix( reflectVec, normalViewNode ).normalize(); - reflectVec = reflectVec.transformDirection( cameraViewMatrix ); + reflectVec = reflectVec.transformDirection( cameraWorldMatrix ); } diff --git a/src/nodes/math/MathNode.js b/src/nodes/math/MathNode.js index 33498b83fe4aa7..407962a3f112a9 100644 --- a/src/nodes/math/MathNode.js +++ b/src/nodes/math/MathNode.js @@ -181,25 +181,23 @@ class MathNode extends TempNode { } else if ( method === MathNode.TRANSFORM_DIRECTION ) { - // dir can be either a direction vector or a normal vector - // upper-left 3x3 of matrix is assumed to be orthogonal + // pre-multiplies the direction by the matrix and normalizes the result - let tA = aNode; - let tB = bNode; + let matrixNode, directionNode; - if ( builder.isMatrix( tA.getNodeType( builder ) ) ) { + if ( builder.isMatrix( aNode.getNodeType( builder ) ) ) { - tB = vec4( vec3( tB ), 0.0 ); + matrixNode = aNode; + directionNode = bNode; } else { - tA = vec4( vec3( tA ), 0.0 ); + matrixNode = bNode; + directionNode = aNode; } - const mulNode = mul( tA, tB ).xyz; - - outputNode = normalize( mulNode ); + outputNode = normalize( mul( matrixNode, vec4( vec3( directionNode ), 0.0 ) ).xyz ); } @@ -988,6 +986,34 @@ export const pow4 = ( x ) => mul( x, x, x, x ); */ export const transformDirection = /*@__PURE__*/ nodeProxyIntent( MathNode, MathNode.TRANSFORM_DIRECTION ).setParameterLength( 2 ); +/** + * Transforms a normal vector by the view matrix and then normalizes the result. + * + * The upper-left 3x3 of the view matrix is assumed to be orthonormal, so the + * normal can be transformed directly without involving the normal matrix. + * + * @tsl + * @function + * @param {Node} normal - The normal vector, given in world space. + * @param {Node} viewMatrix - The view matrix. + * @returns {Node} The normal vector in view space. + */ +export const transformNormalByViewMatrix = ( normal, viewMatrix ) => normalize( mul( viewMatrix, vec4( vec3( normal ), 0.0 ) ).xyz ); + +/** + * Transforms a normal vector by the inverse of the view matrix and then normalizes the result. + * + * The upper-left 3x3 of the view matrix is assumed to be orthonormal, so post-multiplying + * by the view matrix is equivalent to pre-multiplying by its inverse. + * + * @tsl + * @function + * @param {Node} normal - The normal vector, given in view space. + * @param {Node} viewMatrix - The view matrix. + * @returns {Node} The normal vector in world space. + */ +export const transformNormalByInverseViewMatrix = ( normal, viewMatrix ) => normalize( vec4( vec3( normal ), 0.0 ).mul( viewMatrix ).xyz ); + /** * Returns the cube root of a number. * @@ -1188,6 +1214,8 @@ addMethodChaining( 'pow2', pow2 ); addMethodChaining( 'pow3', pow3 ); addMethodChaining( 'pow4', pow4 ); addMethodChaining( 'transformDirection', transformDirection ); +addMethodChaining( 'transformNormalByViewMatrix', transformNormalByViewMatrix ); +addMethodChaining( 'transformNormalByInverseViewMatrix', transformNormalByInverseViewMatrix ); addMethodChaining( 'mix', mixElement ); addMethodChaining( 'clamp', clamp ); addMethodChaining( 'refract', refract ); diff --git a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js index bbc543cd4743c1..be07536301cd47 100644 --- a/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +++ b/src/renderers/webgpu/nodes/WGSLNodeBuilder.js @@ -91,6 +91,83 @@ const wgslPolyfill = { repeatWrapping_float: new CodeNode( 'fn tsl_repeatWrapping_float( coord: f32 ) -> f32 { return fract( coord ); }' ), mirrorWrapping_float: new CodeNode( 'fn tsl_mirrorWrapping_float( coord: f32 ) -> f32 { let mirrored = fract( coord * 0.5 ) * 2.0; return 1.0 - abs( 1.0 - mirrored ); }' ), clampWrapping_float: new CodeNode( 'fn tsl_clampWrapping_float( coord: f32 ) -> f32 { return clamp( coord, 0.0, 1.0 ); }' ), + inverse_mat2: new CodeNode( /* wgsl */` +fn tsl_inverse_mat2( m : mat2x2 ) -> mat2x2 { + + let det = m[ 0 ][ 0 ] * m[ 1 ][ 1 ] - m[ 0 ][ 1 ] * m[ 1 ][ 0 ]; + + return mat2x2( + m[ 1 ][ 1 ], - m[ 0 ][ 1 ], + - m[ 1 ][ 0 ], m[ 0 ][ 0 ] + ) * ( 1.0 / det ); + +} +` ), + inverse_mat3: new CodeNode( /* wgsl */` +fn tsl_inverse_mat3( m : mat3x3 ) -> mat3x3 { + + let a00 = m[ 0 ][ 0 ]; let a01 = m[ 0 ][ 1 ]; let a02 = m[ 0 ][ 2 ]; + let a10 = m[ 1 ][ 0 ]; let a11 = m[ 1 ][ 1 ]; let a12 = m[ 1 ][ 2 ]; + let a20 = m[ 2 ][ 0 ]; let a21 = m[ 2 ][ 1 ]; let a22 = m[ 2 ][ 2 ]; + + let b01 = a22 * a11 - a12 * a21; + let b11 = - a22 * a10 + a12 * a20; + let b21 = a21 * a10 - a11 * a20; + + let det = a00 * b01 + a01 * b11 + a02 * b21; + + return mat3x3( + b01, ( - a22 * a01 + a02 * a21 ), ( a12 * a01 - a02 * a11 ), + b11, ( a22 * a00 - a02 * a20 ), ( - a12 * a00 + a02 * a10 ), + b21, ( - a21 * a00 + a01 * a20 ), ( a11 * a00 - a01 * a10 ) + ) * ( 1.0 / det ); + +} +` ), + inverse_mat4: new CodeNode( /* wgsl */` +fn tsl_inverse_mat4( m : mat4x4 ) -> mat4x4 { + + let a00 = m[ 0 ][ 0 ]; let a01 = m[ 0 ][ 1 ]; let a02 = m[ 0 ][ 2 ]; let a03 = m[ 0 ][ 3 ]; + let a10 = m[ 1 ][ 0 ]; let a11 = m[ 1 ][ 1 ]; let a12 = m[ 1 ][ 2 ]; let a13 = m[ 1 ][ 3 ]; + let a20 = m[ 2 ][ 0 ]; let a21 = m[ 2 ][ 1 ]; let a22 = m[ 2 ][ 2 ]; let a23 = m[ 2 ][ 3 ]; + let a30 = m[ 3 ][ 0 ]; let a31 = m[ 3 ][ 1 ]; let a32 = m[ 3 ][ 2 ]; let a33 = m[ 3 ][ 3 ]; + + let b00 = a00 * a11 - a01 * a10; + let b01 = a00 * a12 - a02 * a10; + let b02 = a00 * a13 - a03 * a10; + let b03 = a01 * a12 - a02 * a11; + let b04 = a01 * a13 - a03 * a11; + let b05 = a02 * a13 - a03 * a12; + let b06 = a20 * a31 - a21 * a30; + let b07 = a20 * a32 - a22 * a30; + let b08 = a20 * a33 - a23 * a30; + let b09 = a21 * a32 - a22 * a31; + let b10 = a21 * a33 - a23 * a31; + let b11 = a22 * a33 - a23 * a32; + + let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; + + return mat4x4( + a11 * b11 - a12 * b10 + a13 * b09, + a02 * b10 - a01 * b11 - a03 * b09, + a31 * b05 - a32 * b04 + a33 * b03, + a22 * b04 - a21 * b05 - a23 * b03, + a12 * b08 - a10 * b11 - a13 * b07, + a00 * b11 - a02 * b08 + a03 * b07, + a32 * b02 - a30 * b05 - a33 * b01, + a20 * b05 - a22 * b02 + a23 * b01, + a10 * b10 - a11 * b08 + a13 * b06, + a01 * b08 - a00 * b10 - a03 * b06, + a30 * b04 - a31 * b02 + a33 * b00, + a21 * b02 - a20 * b04 - a23 * b00, + a11 * b07 - a10 * b09 - a12 * b06, + a00 * b09 - a01 * b07 + a02 * b06, + a31 * b01 - a30 * b03 - a32 * b00, + a20 * b03 - a21 * b01 + a22 * b00 + ) * ( 1.0 / det ); + +} +` ), biquadraticTexture: new CodeNode( /* wgsl */` fn tsl_biquadraticTexture( map : texture_2d, coord : vec2f, iRes : vec2u, level : u32 ) -> vec4f { @@ -150,6 +227,9 @@ const wgslMethods = { equals_bvec2: 'tsl_equals_bvec2', equals_bvec3: 'tsl_equals_bvec3', equals_bvec4: 'tsl_equals_bvec4', + inverse_mat2: 'tsl_inverse_mat2', + inverse_mat3: 'tsl_inverse_mat3', + inverse_mat4: 'tsl_inverse_mat4', inversesqrt: 'inverseSqrt', bitcast: 'bitcast', floatpack_snorm_2x16: 'pack2x16snorm',