extern crate alloc;
#[rustfmt::skip]
pub(crate) const BLUE_NOISE_64: [u8; 4096] = [
0, 193, 109, 168, 230, 65, 216, 0, 76, 244, 161, 98, 123, 167, 0, 246,
99, 71, 238, 106, 148, 0, 170, 135, 69, 202, 104, 138, 0, 201, 99, 69,
184, 116, 94, 0, 76, 141, 221, 179, 160, 85, 0, 103, 164, 133, 84, 204,
153, 0, 174, 73, 200, 44, 148, 188, 0, 140, 72, 229, 12, 185, 222, 48,
172, 84, 239, 41, 95, 22, 161, 119, 180, 34, 62, 208, 22, 220, 68, 146,
34, 156, 177, 22, 124, 229, 84, 35, 252, 153, 22, 220, 84, 148, 35, 249,
154, 22, 231, 167, 242, 35, 120, 67, 22, 126, 227, 202, 36, 60, 239, 22,
52, 120, 216, 29, 103, 182, 82, 232, 116, 217, 177, 58, 131, 104, 153, 208,
128, 32, 151, 209, 123, 196, 248, 43, 93, 234, 145, 189, 80, 135, 196, 50,
226, 121, 85, 209, 66, 198, 50, 181, 114, 89, 189, 66, 237, 50, 178, 130,
84, 191, 66, 125, 50, 201, 93, 151, 240, 183, 50, 74, 117, 189, 145, 101,
179, 236, 64, 160, 248, 130, 22, 165, 48, 86, 23, 161, 248, 82, 23, 62,
225, 186, 68, 6, 143, 57, 82, 141, 218, 124, 6, 108, 41, 249, 114, 94,
183, 6, 252, 41, 140, 103, 154, 234, 6, 215, 41, 126, 158, 207, 109, 6,
219, 41, 205, 99, 147, 175, 6, 212, 41, 100, 142, 171, 233, 6, 218, 73,
202, 36, 138, 89, 6, 215, 65, 105, 194, 135, 208, 113, 5, 195, 235, 94,
16, 108, 250, 89, 175, 236, 12, 187, 26, 69, 176, 229, 158, 12, 174, 25,
216, 61, 162, 192, 12, 221, 26, 129, 62, 145, 176, 12, 95, 26, 241, 62,
168, 141, 12, 252, 26, 225, 62, 117, 190, 12, 252, 26, 92, 157, 45, 130,
12, 163, 112, 207, 54, 178, 144, 246, 10, 229, 42, 76, 179, 52, 142, 167,
205, 51, 159, 215, 38, 103, 162, 114, 210, 151, 53, 206, 91, 63, 236, 149,
80, 134, 115, 93, 240, 73, 170, 207, 83, 247, 107, 230, 198, 77, 183, 122,
229, 91, 115, 183, 77, 133, 90, 232, 155, 78, 124, 215, 66, 187, 110, 226,
82, 252, 190, 22, 230, 119, 33, 74, 173, 98, 151, 243, 127, 213, 34, 117,
80, 138, 27, 126, 190, 66, 229, 48, 84, 251, 103, 31, 136, 195, 125, 44,
206, 232, 31, 52, 177, 119, 44, 100, 191, 31, 52, 165, 137, 44, 101, 156,
31, 52, 210, 155, 44, 203, 169, 31, 53, 208, 168, 44, 136, 245, 31, 176,
150, 47, 100, 68, 155, 90, 203, 222, 124, 61, 29, 166, 11, 92, 64, 245,
0, 198, 234, 83, 19, 135, 202, 0, 126, 186, 17, 165, 231, 76, 0, 108,
165, 17, 187, 146, 210, 0, 159, 242, 17, 126, 209, 73, 0, 252, 211, 17,
196, 245, 73, 0, 237, 103, 17, 248, 139, 95, 0, 112, 196, 17, 97, 62,
210, 0, 133, 175, 244, 16, 50, 158, 1, 197, 225, 105, 188, 232, 147, 171,
102, 179, 60, 115, 220, 158, 94, 242, 144, 40, 223, 117, 50, 176, 250, 198,
94, 70, 242, 104, 79, 226, 137, 68, 181, 148, 93, 224, 114, 150, 68, 130,
85, 172, 140, 118, 180, 68, 127, 193, 73, 221, 181, 237, 70, 156, 232, 139,
111, 238, 193, 36, 110, 142, 189, 100, 252, 83, 136, 67, 43, 121, 21, 217,
132, 36, 152, 252, 46, 180, 32, 61, 169, 74, 202, 152, 92, 23, 146, 36,
220, 154, 44, 129, 23, 186, 36, 112, 230, 44, 169, 23, 188, 36, 177, 223,
44, 102, 23, 213, 36, 226, 158, 44, 108, 23, 148, 36, 91, 212, 44, 181,
25, 88, 58, 226, 79, 218, 63, 130, 40, 177, 20, 214, 157, 199, 77, 53,
230, 88, 203, 6, 105, 78, 197, 119, 234, 101, 6, 59, 239, 189, 129, 63,
119, 6, 201, 164, 251, 64, 94, 213, 6, 77, 248, 132, 64, 237, 107, 6,
162, 232, 188, 64, 147, 90, 6, 204, 167, 245, 65, 129, 171, 6, 119, 74,
208, 163, 122, 149, 7, 167, 29, 205, 227, 149, 115, 242, 5, 96, 249, 164,
15, 188, 64, 125, 215, 150, 12, 211, 25, 184, 135, 208, 108, 12, 224, 85,
177, 235, 81, 101, 12, 140, 199, 155, 123, 192, 102, 12, 199, 89, 140, 204,
75, 125, 12, 252, 112, 176, 238, 79, 121, 12, 192, 220, 109, 252, 188, 151,
13, 246, 42, 197, 96, 248, 119, 76, 10, 95, 46, 72, 185, 144, 30, 117,
50, 138, 244, 169, 39, 239, 131, 90, 156, 47, 253, 80, 171, 43, 155, 202,
27, 138, 52, 219, 173, 233, 48, 27, 241, 57, 146, 216, 162, 48, 27, 248,
57, 153, 97, 204, 48, 27, 129, 57, 214, 95, 144, 48, 27, 84, 56, 218,
104, 66, 177, 22, 216, 54, 183, 156, 194, 238, 169, 206, 128, 61, 212, 180,
222, 108, 26, 96, 72, 186, 51, 228, 70, 115, 163, 31, 127, 236, 99, 56,
249, 107, 191, 33, 122, 77, 108, 170, 87, 180, 33, 74, 112, 222, 175, 109,
192, 33, 171, 76, 141, 187, 223, 154, 33, 169, 76, 239, 198, 164, 126, 33,
142, 225, 128, 82, 112, 144, 38, 102, 61, 120, 30, 87, 11, 233, 100, 74,
1, 199, 155, 230, 19, 145, 104, 1, 195, 215, 17, 223, 64, 185, 1, 121,
169, 17, 149, 66, 206, 1, 135, 212, 17, 226, 128, 239, 1, 147, 85, 17,
135, 235, 215, 1, 240, 89, 17, 106, 251, 185, 1, 133, 103, 17, 231, 191,
92, 1, 203, 161, 240, 16, 201, 231, 1, 213, 141, 253, 161, 42, 174, 147,
235, 84, 59, 176, 120, 205, 250, 166, 133, 40, 99, 145, 200, 83, 151, 211,
72, 225, 90, 241, 161, 186, 253, 67, 156, 106, 49, 165, 188, 60, 244, 205,
71, 49, 106, 126, 60, 168, 199, 71, 49, 115, 223, 60, 212, 146, 71, 48,
170, 237, 57, 35, 71, 171, 89, 128, 163, 75, 189, 53, 110, 200, 21, 121,
186, 35, 134, 219, 45, 84, 32, 61, 80, 181, 246, 51, 118, 23, 243, 36,
134, 197, 43, 110, 23, 55, 98, 37, 191, 81, 203, 23, 92, 132, 37, 116,
181, 163, 23, 152, 210, 37, 118, 149, 206, 24, 159, 91, 37, 180, 249, 116,
25, 151, 102, 195, 137, 218, 58, 247, 40, 105, 20, 219, 133, 78, 241, 55,
164, 110, 244, 7, 101, 192, 153, 236, 113, 204, 7, 165, 228, 96, 171, 62,
105, 7, 179, 142, 229, 125, 150, 234, 7, 143, 249, 120, 212, 231, 156, 7,
221, 86, 242, 184, 97, 247, 7, 230, 86, 137, 236, 193, 124, 7, 96, 197,
218, 77, 125, 251, 7, 114, 29, 186, 144, 228, 169, 91, 5, 157, 209, 94,
15, 198, 64, 149, 213, 127, 13, 177, 25, 143, 89, 67, 136, 13, 194, 219,
159, 249, 79, 214, 13, 72, 178, 209, 116, 56, 175, 13, 46, 75, 195, 98,
54, 140, 13, 46, 74, 132, 165, 54, 182, 13, 46, 73, 219, 155, 51, 136,
13, 167, 42, 179, 90, 159, 202, 79, 10, 121, 45, 246, 183, 60, 30, 145,
49, 222, 89, 174, 39, 71, 228, 97, 214, 47, 235, 178, 211, 43, 124, 85,
27, 119, 51, 165, 95, 201, 47, 27, 91, 221, 73, 155, 104, 178, 27, 252,
122, 199, 225, 114, 193, 27, 219, 102, 122, 249, 168, 105, 27, 177, 227, 85,
241, 64, 207, 22, 227, 53, 243, 100, 173, 206, 72, 138, 104, 229, 124, 250,
180, 135, 26, 115, 252, 162, 51, 133, 73, 158, 121, 31, 103, 251, 147, 56,
229, 190, 137, 33, 244, 108, 136, 165, 242, 131, 33, 197, 241, 127, 147, 68,
173, 33, 80, 167, 233, 151, 68, 202, 33, 80, 204, 131, 244, 68, 115, 33,
188, 148, 112, 82, 140, 120, 38, 150, 62, 239, 30, 195, 11, 166, 69, 98,
1, 81, 233, 190, 19, 102, 199, 1, 246, 187, 17, 197, 63, 164, 1, 179,
106, 17, 208, 67, 182, 1, 222, 65, 17, 185, 97, 217, 1, 55, 224, 18,
213, 107, 143, 1, 56, 96, 18, 134, 227, 153, 2, 56, 149, 18, 209, 163,
97, 2, 235, 185, 215, 16, 191, 224, 2, 113, 159, 88, 217, 42, 192, 213,
144, 169, 59, 128, 77, 212, 145, 175, 112, 40, 98, 237, 138, 82, 205, 240,
72, 159, 90, 236, 121, 157, 85, 191, 112, 153, 49, 142, 84, 115, 181, 96,
156, 49, 240, 204, 126, 253, 188, 165, 49, 95, 180, 216, 86, 192, 129, 48,
253, 134, 57, 35, 71, 170, 109, 86, 136, 184, 231, 53, 129, 149, 21, 110,
244, 35, 220, 158, 45, 239, 32, 61, 81, 215, 154, 51, 220, 24, 118, 36,
130, 221, 43, 145, 24, 55, 247, 37, 214, 74, 253, 24, 166, 209, 37, 246,
75, 188, 24, 88, 176, 37, 114, 75, 243, 24, 117, 235, 37, 103, 228, 74,
25, 216, 167, 101, 153, 237, 58, 202, 40, 76, 20, 107, 249, 79, 225, 55,
87, 193, 107, 7, 181, 94, 121, 230, 132, 193, 7, 122, 175, 96, 189, 63,
172, 7, 195, 111, 178, 204, 101, 140, 7, 175, 196, 125, 235, 69, 149, 7,
127, 221, 112, 153, 69, 214, 7, 197, 106, 207, 140, 68, 161, 7, 174, 144,
197, 86, 122, 228, 8, 126, 29, 253, 162, 216, 142, 203, 5, 161, 182, 125,
15, 151, 64, 246, 139, 198, 13, 168, 25, 253, 89, 67, 243, 13, 212, 138,
253, 103, 79, 231, 13, 71, 160, 224, 122, 56, 99, 13, 46, 184, 106, 204,
54, 171, 13, 46, 229, 133, 162, 54, 148, 13, 46, 189, 125, 241, 51, 114,
13, 178, 42, 203, 79, 183, 142, 101, 10, 117, 45, 170, 94, 60, 31, 205,
49, 214, 173, 90, 39, 71, 210, 101, 146, 47, 183, 159, 132, 43, 157, 85,
27, 206, 51, 154, 124, 240, 47, 27, 85, 243, 158, 217, 83, 136, 27, 237,
93, 142, 248, 200, 97, 28, 241, 92, 224, 173, 248, 91, 28, 200, 96, 211,
246, 64, 149, 22, 245, 53, 220, 83, 195, 229, 72, 241, 194, 116, 232, 141,
253, 116, 26, 128, 233, 156, 51, 224, 73, 116, 205, 32, 219, 108, 235, 56,
164, 112, 185, 34, 214, 93, 189, 168, 203, 133, 34, 113, 198, 227, 160, 67,
187, 34, 77, 164, 118, 186, 67, 129, 34, 77, 114, 216, 167, 69, 151, 33,
84, 119, 194, 92, 111, 158, 38, 174, 62, 149, 30, 130, 11, 156, 70, 97,
2, 81, 193, 217, 19, 110, 184, 2, 172, 234, 18, 99, 63, 191, 2, 124,
224, 18, 245, 67, 141, 2, 117, 65, 18, 232, 73, 174, 2, 56, 124, 18,
111, 221, 131, 2, 56, 213, 18, 178, 206, 158, 2, 56, 134, 18, 219, 181,
138, 2, 231, 170, 215, 16, 134, 242, 2, 105, 187, 88, 214, 42, 198, 170,
223, 149, 59, 164, 77, 141, 250, 96, 131, 40, 150, 248, 169, 83, 148, 201,
73, 179, 128, 89, 172, 202, 250, 149, 109, 181, 49, 141, 242, 89, 170, 251,
204, 49, 176, 239, 87, 145, 253, 103, 49, 137, 237, 185, 85, 253, 105, 48,
238, 161, 57, 35, 71, 198, 88, 120, 210, 159, 251, 53, 139, 237, 21, 127,
182, 35, 106, 243, 45, 203, 32, 61, 218, 82, 200, 51, 134, 24, 241, 37,
100, 152, 43, 232, 24, 55, 81, 37, 209, 85, 221, 24, 104, 209, 37, 136,
75, 98, 24, 153, 192, 37, 123, 75, 230, 24, 99, 209, 37, 170, 125, 74,
25, 207, 102, 124, 144, 228, 58, 184, 40, 76, 20, 114, 175, 79, 107, 55,
87, 199, 131, 8, 177, 90, 123, 191, 145, 176, 8, 119, 217, 178, 111, 60,
219, 8, 194, 109, 216, 161, 128, 234, 8, 159, 121, 195, 150, 68, 187, 8,
157, 199, 231, 111, 68, 225, 8, 153, 196, 176, 125, 68, 146, 8, 228, 195,
135, 85, 187, 251, 8, 173, 29, 100, 223, 135, 196, 226, 5, 206, 161, 245,
15, 226, 64, 209, 147, 235, 13, 226, 25, 105, 233, 66, 91, 14, 208, 133,
171, 253, 78, 140, 14, 98, 197, 179, 105, 56, 253, 14, 46, 238, 107, 226,
54, 124, 14, 47, 136, 170, 203, 54, 92, 14, 47, 245, 190, 92, 51, 159,
14, 225, 43, 152, 79, 113, 236, 150, 10, 171, 45, 95, 151, 60, 31, 137,
49, 113, 160, 95, 39, 71, 165, 113, 76, 47, 160, 184, 246, 43, 155, 71,
28, 121, 51, 184, 238, 70, 47, 28, 139, 73, 186, 98, 168, 125, 28, 178,
93, 164, 207, 243, 90, 28, 107, 247, 132, 225, 163, 102, 28, 217, 118, 243,
100, 64, 168, 22, 210, 54, 200, 83, 121, 239, 72, 132, 249, 110, 217, 177,
234, 190, 26, 248, 126, 215, 51, 187, 253, 210, 123, 32, 141, 104, 189, 239,
97, 206, 160, 34, 113, 155, 212, 244, 168, 225, 34, 211, 82, 221, 146, 70,
250, 34, 78, 148, 188, 222, 70, 157, 34, 77, 200, 138, 174, 69, 149, 33,
180, 204, 114, 88, 241, 127, 38, 164, 62, 208, 30, 193, 11, 166, 70, 91,
2, 141, 78, 173, 19, 99, 135, 2, 146, 87, 18, 201, 77, 218, 2, 55,
146, 18, 231, 91, 200, 2, 122, 88, 18, 110, 129, 152, 3, 55, 196, 18,
131, 185, 113, 3, 56, 120, 18, 182, 210, 116, 3, 56, 236, 18, 211, 82,
131, 3, 228, 141, 180, 16, 190, 253, 3, 109, 180, 88, 233, 42, 202, 129,
102, 208, 59, 228, 148, 195, 242, 68, 176, 40, 234, 157, 60, 128, 171, 227,
117, 181, 67, 134, 250, 58, 185, 147, 67, 204, 49, 247, 182, 113, 237, 101,
211, 49, 233, 169, 214, 143, 242, 98, 49, 145, 251, 87, 130, 107, 192, 48,
254, 161, 57, 36, 71, 105, 136, 90, 154, 227, 138, 53, 120, 147, 21, 242,
162, 35, 185, 105, 46, 81, 32, 207, 127, 98, 183, 111, 250, 24, 93, 37,
83, 214, 43, 172, 24, 82, 221, 37, 239, 172, 91, 24, 74, 139, 37, 168,
66, 151, 24, 97, 74, 38, 171, 66, 226, 24, 176, 203, 38, 228, 165, 93,
25, 102, 200, 151, 233, 206, 58, 218, 40, 76, 20, 163, 217, 79, 179, 55,
86, 254, 122, 8, 166, 220, 111, 162, 59, 223, 8, 50, 137, 210, 192, 159,
245, 8, 144, 103, 197, 130, 165, 107, 8, 132, 192, 225, 162, 205, 93, 8,
224, 109, 190, 249, 129, 204, 8, 117, 196, 161, 104, 71, 139, 8, 65, 144,
183, 224, 123, 85, 9, 160, 29, 175, 117, 194, 236, 102, 5, 198, 113, 219,
15, 145, 66, 234, 191, 137, 14, 239, 25, 147, 198, 78, 168, 14, 108, 59,
122, 201, 78, 227, 14, 240, 48, 208, 157, 58, 104, 14, 47, 120, 254, 186,
80, 133, 14, 47, 155, 93, 238, 137, 83, 14, 47, 233, 182, 212, 121, 237,
14, 68, 43, 179, 249, 111, 81, 242, 10, 146, 45, 174, 250, 60, 31, 134,
50, 203, 158, 91, 39, 61, 100, 185, 86, 121, 232, 104, 217, 44, 240, 141,
28, 174, 52, 155, 119, 66, 97, 28, 228, 81, 244, 147, 218, 65, 28, 153,
52, 200, 228, 174, 65, 28, 183, 52, 215, 247, 126, 152, 28, 90, 51, 196,
109, 162, 211, 22, 131, 54, 196, 134, 96, 209, 72, 129, 90, 149, 170, 230,
182, 110, 26, 212, 125, 247, 156, 216, 44, 172, 64, 32, 152, 89, 184, 74,
224, 99, 250, 34, 191, 172, 143, 196, 116, 180, 34, 127, 187, 85, 176, 126,
238, 34, 90, 119, 209, 231, 109, 157, 34, 97, 187, 65, 112, 251, 171, 33,
84, 243, 137, 97, 222, 166, 38, 227, 62, 158, 30, 226, 11, 207, 70, 95,
3, 245, 78, 169, 19, 198, 75, 3, 139, 250, 18, 190, 236, 118, 3, 209,
154, 19, 116, 207, 88, 3, 247, 73, 19, 153, 54, 206, 3, 109, 223, 19,
101, 146, 166, 3, 79, 143, 19, 71, 172, 206, 3, 225, 160, 19, 131, 208,
155, 3, 58, 201, 75, 16, 121, 174, 3, 248, 179, 113, 188, 42, 236, 123,
216, 141, 59, 233, 98, 145, 36, 114, 194, 83, 108, 135, 70, 170, 57, 131,
39, 180, 70, 148, 56, 216, 128, 40, 214, 236, 101, 76, 248, 164, 40, 193,
70, 218, 57, 251, 186, 40, 194, 245, 118, 57, 136, 85, 40, 191, 78, 60,
229, 122, 187, 35, 145, 234, 87, 211, 107, 77, 137, 54, 99, 144, 21, 165,
88, 35, 190, 118, 44, 220, 171, 237, 57, 159, 207, 43, 224, 25, 254, 190,
93, 238, 126, 228, 25, 160, 106, 188, 87, 136, 170, 25, 134, 59, 150, 243,
122, 178, 25, 136, 97, 123, 219, 89, 148, 25, 235, 168, 213, 106, 242, 146,
26, 101, 163, 248, 111, 178, 58, 140, 41, 194, 20, 208, 242, 82, 199, 53,
133, 206, 157, 9, 181, 65, 88, 130, 28, 230, 9, 176, 94, 148, 110, 66,
213, 9, 47, 193, 96, 241, 63, 166, 9, 47, 197, 231, 105, 214, 87, 9,
47, 92, 200, 227, 63, 162, 9, 48, 212, 180, 100, 63, 125, 9, 48, 181,
85, 215, 43, 70, 9, 203, 28, 244, 154, 224, 119, 167, 5, 157, 114, 254,
15, 106, 68, 215, 136, 251, 14, 199, 100, 145, 78, 123, 217, 14, 167, 32,
135, 160, 108, 172, 14, 139, 32, 202, 254, 122, 68, 15, 185, 32, 176, 143,
211, 160, 15, 113, 32, 241, 177, 69, 112, 15, 251, 32, 194, 154, 226, 117,
15, 193, 133, 221, 94, 158, 127, 81, 11, 94, 67, 45, 228, 69, 29, 173,
227, 39, 239, 87, 29, 111, 155, 223, 39, 185, 249, 57, 195, 75, 236, 202,
84, 247, 63, 222, 81, 211, 117, 74, 151, 94, 219, 158, 81, 118, 234, 67,
104, 247, 77, 147, 193, 82, 140, 233, 193, 156, 81, 142, 219, 89, 66, 164,
252, 57, 152, 22, 184, 238, 39, 218, 163, 183, 250, 146, 187, 130, 212, 79,
143, 166, 127, 175, 197, 51, 80, 173, 66, 111, 20, 159, 38, 139, 118, 46,
178, 19, 124, 38, 153, 184, 46, 217, 19, 181, 39, 130, 249, 46, 201, 19,
132, 39, 170, 222, 46, 125, 19, 95, 39, 127, 204, 46, 110, 19, 187, 38,
127, 100, 229, 82, 123, 63, 101, 195, 54, 128, 30, 108, 11, 93, 48, 194,
3, 95, 55, 20, 230, 140, 211, 3, 238, 132, 201, 91, 240, 183, 4, 99,
218, 141, 197, 231, 94, 4, 244, 101, 138, 238, 63, 198, 4, 143, 96, 162,
226, 63, 205, 4, 106, 254, 202, 167, 63, 230, 4, 179, 241, 138, 232, 84,
197, 4, 173, 42, 204, 17, 151, 117, 4, 233, 83, 202, 220, 160, 245, 113,
185, 212, 249, 84, 159, 36, 123, 96, 153, 52, 220, 26, 108, 65, 229, 156,
59, 78, 26, 109, 65, 171, 129, 59, 169, 26, 114, 92, 175, 220, 59, 184,
26, 111, 137, 75, 180, 59, 148, 27, 216, 105, 75, 160, 60, 98, 27, 154,
216, 69, 245, 132, 163, 219, 254, 73, 211, 143, 178, 65, 41, 135, 22, 66,
152, 32, 121, 190, 107, 64, 247, 196, 34, 181, 78, 147, 171, 206, 131, 35,
240, 166, 186, 251, 148, 208, 35, 196, 81, 208, 229, 158, 75, 35, 116, 237,
83, 192, 232, 160, 35, 212, 86, 116, 182, 143, 248, 36, 124, 207, 175, 51,
109, 143, 33, 103, 58, 90, 30, 169, 43, 95, 20, 119, 236, 170, 82, 225,
48, 174, 70, 9, 222, 166, 16, 83, 232, 118, 9, 254, 49, 15, 86, 198,
104, 9, 123, 50, 15, 87, 227, 119, 9, 142, 50, 15, 245, 202, 137, 9,
154, 50, 15, 92, 243, 130, 9, 239, 50, 16, 93, 194, 223, 9, 80, 241,
16, 180, 223, 200, 10, 187, 136, 110, 191, 246, 155, 199, 5, 100, 192, 126,
105, 238, 147, 205, 45, 126, 186, 143, 56, 168, 210, 98, 127, 223, 164, 55,
139, 214, 91, 221, 135, 184, 55, 154, 254, 96, 189, 131, 104, 55, 172, 95,
250, 128, 203, 115, 55, 189, 165, 73, 204, 123, 173, 53, 151, 108, 140, 192,
122, 86, 63, 150, 118, 236, 65, 227, 11, 59, 129, 75, 217, 57, 254, 15,
215, 80, 23, 102, 235, 89, 29, 225, 104, 21, 138, 70, 192, 31, 113, 248,
21, 192, 69, 162, 31, 240, 106, 21, 178, 69, 222, 31, 153, 229, 21, 194,
69, 166, 31, 222, 144, 21, 102, 227, 153, 31, 234, 78, 21, 254, 64, 34,
231, 163, 23, 247, 44, 173, 23, 149, 91, 220, 186, 26, 114, 163, 36, 142,
59, 189, 129, 169, 62, 155, 203, 69, 174, 245, 42, 160, 238, 60, 179, 79,
152, 42, 244, 110, 61, 170, 79, 199, 42, 116, 167, 61, 209, 79, 123, 42,
218, 102, 61, 175, 78, 199, 42, 136, 61, 99, 201, 134, 189, 166, 211, 101,
52, 207, 132, 82, 213, 103, 74, 205, 167, 39, 103, 240, 148, 206, 92, 181,
4, 246, 41, 199, 10, 252, 115, 4, 132, 86, 201, 10, 92, 144, 4, 217,
120, 172, 10, 133, 210, 4, 231, 138, 214, 10, 246, 93, 4, 179, 244, 150,
10, 137, 234, 4, 252, 112, 213, 10, 247, 161, 4, 116, 43, 92, 10, 156,
183, 4, 110, 190, 12, 144, 232, 118, 4, 135, 177, 52, 10, 69, 235, 118,
86, 152, 112, 227, 83, 139, 45, 218, 182, 54, 235, 120, 186, 228, 102, 188,
53, 88, 226, 189, 94, 152, 120, 53, 88, 159, 124, 200, 142, 107, 53, 88,
174, 205, 120, 91, 156, 53, 167, 87, 182, 72, 212, 238, 67, 224, 130, 246,
75, 142, 234, 60, 167, 41, 185, 55, 246, 71, 222, 88, 191, 132, 28, 168,
195, 20, 65, 163, 30, 187, 96, 154, 20, 107, 150, 30, 72, 45, 134, 20,
237, 146, 30, 72, 45, 238, 20, 193, 223, 30, 72, 45, 230, 21, 196, 222,
30, 72, 45, 184, 21, 134, 226, 30, 126, 46, 144, 21, 173, 150, 29, 115,
45, 220, 23, 99, 252, 134, 20, 89, 198, 162, 20, 116, 250, 157, 50, 213,
127, 242, 99, 210, 124, 223, 67, 244, 195, 78, 221, 174, 211, 161, 246, 76,
201, 109, 177, 129, 205, 166, 76, 108, 172, 137, 240, 182, 163, 76, 131, 157,
115, 240, 143, 223, 200, 75, 107, 190, 240, 95, 195, 111, 83, 207, 61, 197,
175, 87, 152, 205, 70, 115, 218, 152, 106, 44, 140, 208, 39, 98, 232, 72,
146, 42, 182, 5, 54, 172, 11, 120, 41, 140, 5, 62, 95, 11, 117, 40,
157, 5, 62, 254, 11, 114, 41, 247, 5, 62, 100, 11, 113, 41, 254, 5,
62, 179, 11, 100, 41, 244, 5, 61, 158, 12, 221, 40, 250, 5, 105, 237,
11, 128, 41, 178, 6, 193, 59, 231, 10, 239, 183, 77, 5, 173, 115, 11,
225, 80, 156, 111, 249, 145, 93, 207, 166, 230, 111, 254, 133, 203, 182, 222,
86, 233, 188, 97, 141, 220, 183, 150, 87, 191, 213, 152, 224, 189, 87, 210,
103, 201, 80, 169, 123, 147, 172, 213, 133, 76, 177, 125, 157, 188, 139, 80,
161, 217, 109, 243, 84, 142, 32, 175, 81, 119, 57, 224, 128, 204, 60, 190,
97, 30, 219, 199, 77, 39, 235, 28, 58, 86, 184, 38, 154, 81, 29, 58,
139, 122, 38, 163, 80, 29, 58, 120, 232, 38, 128, 80, 29, 58, 139, 164,
38, 131, 247, 29, 58, 207, 86, 38, 112, 234, 29, 65, 94, 50, 221, 33,
63, 191, 21, 54, 162, 213, 98, 130, 205, 164, 20, 154, 90, 243, 23, 165,
254, 139, 61, 17, 132, 182, 106, 150, 201, 130, 16, 216, 52, 235, 110, 173,
200, 16, 214, 52, 194, 243, 99, 209, 16, 168, 52, 245, 177, 117, 233, 16,
221, 52, 150, 215, 186, 106, 16, 251, 53, 194, 143, 210, 243, 16, 176, 115,
251, 92, 138, 230, 118, 15, 241, 67, 39, 255, 102, 196, 41, 142, 74, 119,
];
pub(crate) const BLUE_NOISE_SIZE: usize = 64;
#[inline]
pub(crate) fn threshold(x: usize, y: usize) -> f32 {
let idx = (y % BLUE_NOISE_SIZE) * BLUE_NOISE_SIZE + (x % BLUE_NOISE_SIZE);
BLUE_NOISE_64[idx] as f32 / 255.0 - 0.5
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn map_has_correct_size() {
assert_eq!(BLUE_NOISE_64.len(), BLUE_NOISE_SIZE * BLUE_NOISE_SIZE);
assert_eq!(BLUE_NOISE_64.len(), 4096);
}
#[test]
fn mean_is_reasonable() {
let sum: u64 = BLUE_NOISE_64.iter().map(|&v| v as u64).sum();
let mean = sum as f64 / BLUE_NOISE_64.len() as f64;
assert!(
(mean - 127.5).abs() < 2.0,
"mean {mean:.1} too far from 127.5"
);
}
#[test]
fn threshold_range() {
for y in 0..BLUE_NOISE_SIZE {
for x in 0..BLUE_NOISE_SIZE {
let t = threshold(x, y);
assert!(
(-0.5..=0.5).contains(&t),
"threshold({x},{y}) = {t} out of range"
);
}
}
}
#[test]
fn threshold_tiles_seamlessly() {
for i in 0..BLUE_NOISE_SIZE {
assert_eq!(threshold(i, 0), threshold(i + BLUE_NOISE_SIZE, 0));
assert_eq!(threshold(0, i), threshold(0, i + BLUE_NOISE_SIZE));
}
}
}