Merge pull request #11 from xLightling/final

Final
This commit is contained in:
Lightling 2022-04-21 15:59:04 -04:00 committed by GitHub
commit d35f4ec52c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
43 changed files with 8215 additions and 113 deletions

View file

@ -0,0 +1,103 @@
# Blender v3.1.2 OBJ File: 'warped_archway.blend'
# www.blender.org
mtllib warped_archway_inner.mtl
o Cube.001
v 0.333333 -3.000000 2.000000
v -0.333333 -3.000000 2.000000
v -0.333333 1.000000 2.000000
v 0.333333 1.000000 2.000000
v -0.333333 2.000000 1.633975
v 0.333333 2.000000 1.633975
v -0.333333 2.716506 0.625000
v 0.333333 2.716506 0.625000
v 0.333333 -3.000000 -2.000000
v -0.333333 -3.000000 -2.000000
v -0.333333 1.000000 -2.000000
v 0.333333 1.000000 -2.000000
v -0.333333 2.000000 -1.633975
v 0.333333 2.000000 -1.633975
v -0.333333 2.716506 -0.625000
v 0.333333 2.716506 -0.625000
v -0.333333 2.934758 0.000000
v 0.333333 2.934758 0.000000
vt 0.483689 0.500000
vt 0.567023 0.500000
vt 0.567023 1.000000
vt 0.483689 1.000000
vt 0.675030 0.001549
vt 0.675030 0.675544
vt 0.001034 0.675544
vt 0.001034 0.001549
vt 0.675030 0.001549
vt 0.001034 0.001549
vt 0.001034 0.675544
vt 0.675030 0.675544
vt 0.613355 0.844043
vt 0.062709 0.844043
vt 0.613355 0.844043
vt 0.062709 0.844043
vt 0.443344 0.964774
vt 0.232720 0.964774
vt 0.443344 0.964774
vt 0.232720 0.964774
vt 0.338032 1.001549
vt 0.338032 1.001549
vt 0.650356 0.500000
vt 0.650356 0.992325
vt 0.567023 0.992325
vt 0.900356 0.500000
vt 0.900356 0.631067
vt 0.817023 0.631067
vt 0.817023 0.500000
vt 0.900356 0.778582
vt 0.900356 0.904703
vt 0.817023 0.904703
vt 0.817023 0.778582
vt 0.817023 0.500000
vt 0.817023 0.582751
vt 0.733690 0.582751
vt 0.733690 0.500000
vt 0.817023 0.647515
vt 0.733690 0.647515
vt 0.817023 0.778582
vt 0.817023 0.904703
vt 0.733690 0.904703
vt 0.733690 0.778582
vt 0.733690 0.778582
vt 0.733690 0.647515
vt 0.817023 0.647515
vt 0.817023 0.778582
vt 0.650356 0.500000
vt 0.733690 0.500000
vt 0.733689 0.992325
vt 0.650356 0.992325
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -0.3437 0.9391
vn 0.0000 -0.8153 0.5790
vn 0.0000 0.9441 -0.3297
vn 0.0000 0.9441 0.3297
vn 0.0000 -0.8153 -0.5790
vn 0.0000 -0.3437 -0.9391
vn 0.0000 0.0000 1.0000
usemtl Material
s off
f 10/1/1 9/2/1 1/3/1 2/4/1
f 9/5/2 12/6/2 4/7/2 1/8/2
f 10/9/3 2/10/3 3/11/3 11/12/3
f 13/13/3 11/12/3 3/11/3 5/14/3
f 14/15/2 6/16/2 4/7/2 12/6/2
f 16/17/2 8/18/2 6/16/2 14/15/2
f 15/19/3 13/13/3 5/14/3 7/20/3
f 17/21/3 15/19/3 7/20/3
f 18/22/2 8/18/2 16/17/2
f 9/2/4 10/23/4 11/24/4 12/25/4
f 12/26/5 14/27/5 13/28/5 11/29/5
f 14/30/6 16/31/6 15/32/6 13/33/6
f 15/34/7 17/35/7 18/36/7 16/37/7
f 17/35/8 7/38/8 8/39/8 18/36/8
f 8/40/9 6/41/9 5/42/9 7/43/9
f 6/44/10 4/45/10 3/46/10 5/47/10
f 2/48/11 1/49/11 4/50/11 3/51/11

View file

@ -0,0 +1,376 @@
# Blender v3.1.2 OBJ File: 'warped_archway.blend'
# www.blender.org
mtllib warped_archway_outer.mtl
o Cube
v 0.647394 0.844489 1.779065
v 0.648171 -2.982045 2.151808
v 0.709363 0.915902 2.433678
v 0.664594 -2.998657 2.306977
v -0.365853 0.432328 2.026797
v -0.607156 -3.197818 1.608701
v -0.508389 0.197726 2.884937
v -0.571419 -3.207649 2.566312
v 0.885319 1.402615 2.355126
v -0.167342 2.020625 2.544348
v 0.825964 1.201825 1.510522
v -0.503786 1.659840 1.746546
v 0.918760 2.795928 1.346349
v -0.192411 3.395928 0.848057
v 0.952539 2.178724 0.867699
v -0.570955 2.509147 0.917104
v 0.866348 2.929228 0.076846
v -0.567168 3.720003 0.082938
v 0.823990 2.815847 0.094488
v -0.421082 2.697860 0.206205
v 0.717860 -0.876668 -2.051334
v 0.788395 -2.713877 -2.076846
v 0.738271 -0.195421 -2.670219
v 0.796230 -2.163599 -2.680471
v -0.558215 0.196403 -1.746387
v -0.539779 -2.987749 -2.020333
v -0.529434 0.234490 -3.120491
v -0.582052 -3.192422 -2.953756
v 0.863061 1.766774 -2.437051
v -0.547794 2.079888 -2.869729
v 0.810009 1.741567 -1.814929
v -0.427862 1.309528 -1.877600
v 0.610907 3.073810 -1.703358
v -0.482877 3.350197 -1.403843
v 0.890835 2.138638 -1.221524
v -0.383479 2.310348 -0.991036
v 0.701919 0.742347 -2.127160
v 0.574563 -3.149879 -1.613413
v 0.755258 0.571463 -2.557435
v 0.583919 -3.191470 -2.952874
v 0.836730 -0.925277 1.985887
v 0.777907 0.013721 2.480864
v 0.868464 1.702039 1.406959
v 1.000924 1.855473 2.116263
v 0.496224 0.798170 1.740209
v 0.539437 -3.146888 1.939127
v 0.541496 0.215789 2.770111
v 0.579392 -3.208660 2.557164
v 0.737394 1.432710 1.286194
v 0.887945 1.737966 2.634621
v 1.006440 2.583314 1.232458
v 1.054842 2.357859 1.039250
v 0.832229 2.710802 -0.414260
v 0.887507 2.973711 -0.470462
v 0.708033 2.660622 -0.126416
v 0.703977 3.253709 -0.186615
v 0.780464 1.378205 -2.306453
v 0.778853 1.130704 -2.740750
v 0.793247 2.685123 -1.698149
v 1.006026 2.118070 -1.371361
v 0.502719 0.291466 -1.760607
v 0.514445 0.240581 -3.147381
v 0.680847 1.180655 -1.864596
v 0.675958 2.057626 -2.720594
vt 0.728549 0.333660
vt 0.727939 0.488445
vt 0.637598 0.411665
vt 0.667493 0.311311
vt 0.972165 0.488450
vt 0.972165 0.366339
vt 0.426754 0.481166
vt 0.382207 0.261516
vt 0.451599 0.270955
vt 0.450467 0.481455
vt 0.549154 0.305364
vt 0.623136 0.282380
vt 0.451649 0.238598
vt 0.371200 0.222679
vt 0.365077 0.189717
vt 0.435757 0.183767
vt 0.380644 0.597991
vt 0.367574 0.499118
vt 0.395459 0.503420
vt 0.413741 0.630121
vt 0.406652 0.157237
vt 0.349560 0.163655
vt 0.299448 0.131390
vt 0.323745 0.105595
vt 0.367869 0.791145
vt 0.367574 0.692584
vt 0.476533 0.663523
vt 0.476533 0.817917
vt 0.241329 0.117343
vt 0.246101 0.099954
vt 0.487697 0.244218
vt 0.609810 0.244220
vt 0.632469 0.683117
vt 0.487697 0.719368
vt 0.490975 0.619353
vt 0.638664 0.598414
vt 0.739102 0.173118
vt 0.677718 0.156357
vt 0.605826 0.038705
vt 0.727939 0.000000
vt 0.972165 0.000005
vt 0.961001 0.071109
vt 0.076558 0.470428
vt 0.033636 0.471151
vt 0.039164 0.284346
vt 0.100003 0.285093
vt 0.612300 0.194162
vt 0.517383 0.145003
vt 0.055527 0.232462
vt 0.078421 0.192130
vt 0.096554 0.211856
vt 0.099344 0.233918
vt 0.092362 0.135041
vt 0.131115 0.033647
vt 0.167140 0.144128
vt 0.123976 0.185419
vt 0.220470 0.081351
vt 0.212217 0.125339
vt 0.641939 0.531220
vt 0.518673 0.488450
vt 0.245480 0.828706
vt 0.274341 0.712197
vt 0.324123 0.708701
vt 0.314995 0.828706
vt 0.633311 0.820407
vt 0.488539 0.856658
vt 0.641939 0.933953
vt 0.519936 0.934078
vt 0.122859 0.558692
vt 0.009318 0.580311
vt 0.008501 0.532498
vt 0.122932 0.499118
vt 0.122932 0.782307
vt 0.000000 0.792566
vt 0.765884 0.620884
vt 0.785962 0.497689
vt 0.864960 0.488450
vt 0.864959 0.608801
vt 0.367574 0.708701
vt 0.245480 0.707583
vt 0.245480 0.499118
vt 0.367574 0.500236
vt 0.470351 0.513263
vt 0.470351 0.663523
vt 0.642202 0.646264
vt 0.644841 0.523802
vt 0.765884 0.488450
vt 0.739265 0.630786
vt 0.641939 0.773881
vt 0.763989 0.774472
vt 0.891645 0.620884
vt 0.891645 0.771262
vt 0.845476 0.782186
vt 0.850291 0.657233
vt 0.245480 0.741671
vt 0.123829 0.734349
vt 0.122932 0.506009
vt 0.245480 0.499118
vt 0.794312 0.629453
vt 0.845476 0.620884
vt 0.845476 0.741235
vt 0.765885 0.751378
vt 0.765884 1.000000
vt 0.643834 0.999409
vt 0.362910 0.709700
vt 0.365235 0.800398
vt 0.143363 0.258466
vt 0.102283 0.497039
vt 0.003594 0.499118
vt 0.000000 0.256387
vt 0.484103 0.256387
vt 0.344151 0.237726
vt 0.346953 0.175163
vt 0.448398 0.170888
vt 0.392521 0.497238
vt 0.487697 0.499118
vt 0.341742 0.082986
vt 0.278330 0.152225
vt 0.214279 0.157999
vt 0.241364 0.054743
vt 0.122597 0.204897
vt 0.078038 0.139514
vt 0.119680 0.000000
vt 0.180354 0.174937
vn -0.9965 0.0722 0.0433
vn -0.9979 0.0641 0.0103
vn -0.9566 0.2018 0.2102
vn -0.9507 0.2158 0.2226
vn -0.9975 0.0486 -0.0521
vn 0.9535 -0.3014 -0.0007
vn 0.9966 -0.0149 0.0809
vn 0.9586 0.1881 0.2138
vn 0.9559 -0.2277 0.1856
vn -0.9503 0.2010 0.2379
vn -0.9236 0.2632 0.2787
vn 0.9391 -0.3436 -0.0054
vn 0.9022 -0.4205 -0.0963
vn 0.9953 -0.0419 -0.0877
vn 0.9930 -0.1175 -0.0115
vn 0.0057 -0.9293 0.3693
vn 0.0008 -0.8212 0.5707
vn -0.0008 -0.7765 0.6301
vn 0.9842 -0.1347 0.1149
vn 0.9266 -0.3694 -0.0708
vn 0.9784 -0.1399 -0.1524
vn 0.9828 0.1798 0.0410
vn -0.2674 -0.1333 -0.9543
vn 0.9369 -0.0797 -0.3403
vn 0.9570 0.1674 -0.2367
vn -0.9709 0.1380 0.1959
vn 0.3244 0.8856 0.3323
vn 0.2220 0.8300 0.5116
vn 0.3829 0.9001 0.2080
vn -0.9994 0.0200 0.0274
vn -0.9977 0.0009 0.0682
vn -0.9971 -0.0120 0.0747
vn -0.9994 0.0203 0.0278
vn -1.0000 0.0051 0.0055
vn 0.9789 -0.1248 0.1616
vn 0.9727 -0.0388 -0.2289
vn 0.9781 0.1444 -0.1502
vn 0.9629 0.0740 0.2594
vn -0.9956 -0.0809 0.0468
vn -0.9955 -0.0876 0.0371
vn 0.9490 -0.3136 -0.0331
vn 0.9421 0.0265 -0.3343
vn 0.9735 0.1486 0.1738
vn 0.9666 -0.1440 0.2122
vn 0.9393 -0.1624 -0.3021
vn 0.9355 0.2973 -0.1911
vn 0.9891 -0.1405 0.0430
vn 0.9556 -0.2833 -0.0811
vn 0.9557 0.2787 0.0952
vn 0.9396 -0.1381 0.3133
vn -0.9926 -0.1210 -0.0109
vn 0.1835 0.9035 -0.3874
vn 0.2565 0.9506 -0.1747
vn 0.1400 0.8582 -0.4939
vn -0.2764 -0.4860 -0.8291
vn -0.2793 -0.4678 -0.8386
vn -0.2271 -0.7800 -0.5831
vn -0.2304 -0.7662 -0.5999
vn 0.1425 0.7670 0.6256
vn 0.0440 0.0201 0.9988
vn 0.0418 0.0367 0.9985
vn 0.0285 0.1351 0.9904
vn -0.1555 -0.2157 -0.9640
vn -0.1068 -0.1150 -0.9876
vn 0.2546 -0.0076 -0.9670
vn 0.0159 0.0285 -0.9995
vn 0.0282 -0.9985 -0.0467
vn 0.0567 -0.0777 0.9954
vn -0.0056 -0.6150 0.7885
vn 0.0554 0.4721 -0.8798
vn 0.0553 0.4937 -0.8679
vn 0.0213 0.0634 -0.9978
vn 0.0222 0.0666 -0.9975
vn 0.0024 0.1163 0.9932
vn -0.0972 0.0412 0.9944
vn -0.0789 0.0552 0.9954
vn -0.1783 -0.0212 0.9838
vn -0.0894 -0.9901 0.1086
vn -0.0116 -0.0526 -0.9985
vn -0.1780 -0.9191 -0.3516
vn 0.9570 0.2292 0.1779
vn 0.9683 -0.1328 0.2118
vn 0.9589 -0.2263 -0.1712
vn 0.9662 0.1482 -0.2111
vn 0.9201 -0.3822 -0.0853
vn 0.8725 -0.4494 -0.1919
vn 0.9782 0.1612 -0.1308
vn 0.9982 -0.0601 0.0059
vn 0.2883 -0.6405 -0.7118
vn 0.5971 -0.0631 -0.7997
vn 0.8683 0.2923 0.4008
vn 0.8585 -0.0408 0.5112
vn 0.9466 0.3217 -0.0193
vn 0.8781 -0.4654 -0.1112
vn 0.8467 -0.5320 0.0021
vn 0.8876 -0.4526 -0.0857
vn 0.9244 0.3592 0.1285
vn 0.9249 0.2859 0.2505
vn 0.9228 -0.2892 -0.2545
vn 0.8877 -0.1576 -0.4326
vn 0.8463 -0.1035 -0.5225
vn 0.9058 0.4237 0.0071
vn 0.8824 0.0112 0.4705
vn 0.8750 -0.1535 0.4592
vn 0.8528 -0.4998 -0.1513
vn 0.7835 -0.5414 -0.3049
vn 0.8837 0.3469 -0.3143
vn 0.8615 0.4642 -0.2057
vn 0.8315 -0.4551 0.3187
vn 0.8409 0.5211 -0.1463
vn 0.9205 -0.3328 0.2048
vn 0.9123 -0.3161 -0.2604
vn 0.9743 0.1769 -0.1398
vn 0.9659 -0.0206 0.2582
usemtl Material
s 1
f 5/1/1 7/2/2 10/3/3 12/4/4
f 8/5/5 7/2/2 5/1/1 6/6/5
f 2/7/6 41/8/7 42/9/8 4/10/9
f 12/4/4 10/3/3 14/11/10 16/12/11
f 3/13/12 1/14/13 11/15/14 9/16/15
f 55/17/16 20/18/16 36/19/17 35/20/18
f 44/21/19 43/22/20 52/23/21 51/24/22
f 55/25/23 20/26/23 18/27/23 56/28/23
f 51/24/22 52/23/21 19/29/24 17/30/25
f 16/12/11 14/11/10 18/31/26 20/32/26
f 14/33/27 13/34/28 56/35/29 18/36/29
f 25/37/30 32/38/31 30/39/32 27/40/33
f 28/41/34 26/42/34 25/37/30 27/40/33
f 22/43/35 24/44/36 23/45/37 21/46/38
f 32/38/31 36/47/39 34/48/40 30/39/32
f 39/49/41 58/50/42 57/51/43 37/52/44
f 29/53/45 59/54/46 60/55/47 31/56/48
f 59/54/46 54/57/49 53/58/50 60/55/47
f 36/47/39 20/32/51 18/31/51 34/48/40
f 34/59/52 18/36/53 56/35/53 33/60/54
f 49/61/55 12/62/56 16/63/57 15/64/58
f 10/65/59 50/66/59 13/34/28 14/33/27
f 7/67/60 47/68/61 50/66/62 10/65/62
f 45/69/63 5/70/64 12/71/56 49/72/55
f 5/70/64 45/69/63 46/73/65 6/74/66
f 6/75/67 46/76/67 48/77/67 8/78/67
f 47/79/61 7/80/60 8/81/68 48/82/68
f 35/20/18 36/19/17 32/83/69 63/84/69
f 30/85/70 34/86/52 33/87/54 64/88/71
f 27/89/72 30/85/70 64/88/71 62/90/73
f 63/91/74 32/92/74 25/93/75 61/94/76
f 26/95/77 38/96/77 61/97/76 25/98/75
f 26/99/78 28/100/78 40/101/78 38/102/78
f 40/103/79 28/104/79 27/89/72 62/90/73
f 15/64/58 16/63/57 20/105/80 55/106/80
f 22/43/35 21/46/38 61/107/81 38/108/82
f 23/45/37 24/44/36 40/109/83 62/110/84
f 21/46/38 23/45/37 62/110/84 61/107/81
f 24/44/36 22/43/35 38/108/82 40/109/83
f 1/14/13 3/13/12 47/111/85 45/112/86
f 9/16/15 11/15/14 49/113/87 50/114/88
f 11/15/89 1/14/89 45/112/89 49/113/89
f 3/13/12 9/16/15 50/114/88 47/111/85
f 41/8/90 2/7/90 46/115/65 45/112/63
f 4/10/9 42/9/8 47/111/91 48/116/92
f 42/9/8 45/112/93 47/111/91
f 2/7/6 4/10/9 48/116/94 46/115/94
f 42/9/8 41/8/7 45/112/93
f 43/22/20 44/21/19 50/114/95 49/113/96
f 44/21/19 51/24/22 13/117/97 50/114/98
f 52/23/21 43/22/20 49/113/96 15/118/99
f 17/30/25 19/29/24 55/119/100 56/120/101
f 19/29/24 52/23/21 15/118/99 55/119/100
f 51/24/22 17/30/25 56/120/102 13/117/97
f 53/58/50 54/57/49 56/120/103 55/119/104
f 29/53/45 31/56/48 63/121/105 64/122/106
f 59/54/46 29/53/45 64/122/107 33/123/108
f 31/56/48 60/55/47 35/124/109 63/121/105
f 60/55/47 53/58/50 55/119/104 35/124/109
f 54/57/49 59/54/46 33/123/108 56/120/110
f 39/49/41 61/107/111 62/110/112
f 57/51/43 64/122/113 63/121/114
f 37/52/44 63/121/114 61/107/111
f 58/50/42 62/110/112 64/122/113
f 57/51/43 58/50/42 64/122/113
f 58/50/42 39/49/41 62/110/112
f 39/49/41 37/52/44 61/107/111
f 37/52/44 57/51/43 63/121/114

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,680 @@
# Blender v3.1.2 OBJ File: 'warped_plane.blend'
# www.blender.org
mtllib warped_plane.mtl
o Plane
v -10.001247 0.393044 10.001604
v 10.017116 0.770388 10.023364
v -10.034986 0.482666 -10.072797
v 10.000000 0.038044 -10.000000
v -9.959428 0.856351 -8.364946
v -10.030936 0.998197 -6.438035
v -10.020771 0.994713 -4.575682
v -10.006404 0.897155 -2.735924
v -10.000211 0.831054 -0.909434
v -10.000000 0.886895 0.909091
v -9.999571 0.962538 2.727516
v -9.989867 1.033517 4.559471
v -9.926216 0.901362 6.385215
v -10.000121 0.767087 8.205304
v -8.187820 0.607545 10.007895
v -6.366998 0.568773 10.008320
v -4.545079 0.307929 10.000871
v -2.727272 0.096703 10.000000
v -0.909091 0.010655 10.000000
v 0.909941 0.071440 10.003100
v 2.731223 0.292231 10.013056
v 4.551075 0.654104 10.022904
v 6.372899 0.978763 10.030070
v 8.198269 1.231263 10.034519
v 10.027925 1.288079 8.225938
v 10.035616 1.112184 6.395381
v 10.023609 0.768241 4.572587
v 10.015825 0.637362 2.746982
v 10.009614 0.542979 0.920610
v 10.008208 0.466691 -0.905210
v 10.061106 0.601358 -2.725122
v 10.110694 0.647106 -4.552239
v 10.068602 0.431451 -6.371017
v 10.004469 0.135428 -8.182361
v 8.181818 0.209251 -10.000000
v 6.363636 0.458702 -10.000001
v 4.545384 0.615555 -10.000062
v 2.727212 0.559568 -10.000054
v 0.909045 0.508498 -10.000040
v -0.909122 0.458218 -10.000027
v -2.730253 0.483803 -10.013939
v -4.575308 0.781454 -10.072123
v -6.442127 1.004446 -10.095429
v -8.391385 0.981535 -9.984544
v -8.145267 1.058866 7.858055
v -7.950827 0.981335 5.782094
v -7.708778 1.072723 4.231118
v -8.257668 1.057851 3.055043
v -7.839109 1.076885 1.163396
v -8.174007 1.290529 -0.912972
v -8.205825 1.558524 -2.757120
v -8.248443 1.547740 -4.506283
v -8.177651 1.315516 -6.291956
v -8.202137 1.212061 -8.246601
v -6.444302 0.981697 8.302257
v -6.559785 1.091602 6.481739
v -6.476956 1.393639 4.687518
v -6.463397 1.394999 2.808674
v -5.788054 1.555862 1.026646
v -6.007804 1.358332 -0.637865
v -6.294371 1.654806 -2.665098
v -6.758218 1.680492 -4.179516
v -6.423933 1.448622 -5.787279
v -6.078459 1.197392 -8.024650
v -4.650405 0.751031 8.409057
v -4.872602 0.903238 6.945336
v -4.879559 1.065108 5.284533
v -4.898306 1.284787 3.442343
v -4.950133 1.556629 1.822974
v -4.092782 1.668086 -0.110504
v -4.171340 1.466659 -2.409281
v -4.757438 1.505345 -4.692768
v -4.485986 1.232786 -6.974539
v -4.162137 0.991188 -8.629816
v -2.756214 0.283159 8.247143
v -3.255267 0.875653 7.295647
v -2.950047 1.209463 5.990297
v -2.802400 1.468734 4.170186
v -2.703487 1.439720 1.908426
v -1.608989 1.374718 -0.068365
v -1.821341 1.465610 -2.160050
v -2.319918 1.189416 -4.276188
v -2.722850 1.175755 -6.442391
v -2.705494 0.886797 -8.260083
v -0.916110 0.134733 8.269689
v -1.282700 0.639334 7.006442
v -0.958979 1.044917 5.125468
v -0.670796 1.397815 3.034751
v -0.273743 1.555156 1.060437
v 0.075207 1.639483 -0.893793
v 0.490861 1.272782 -2.815364
v -0.280881 1.458321 -4.332350
v -0.852646 1.027568 -6.315584
v -0.909009 0.830197 -8.181712
v 0.879311 0.347913 8.210754
v 0.920251 0.723696 6.298014
v 1.101309 1.376416 3.855669
v 1.005504 1.436952 1.814832
v 1.145540 1.257485 0.160835
v 1.345896 1.553395 -1.610589
v 1.763476 1.334766 -3.106104
v 1.702662 1.519424 -4.542899
v 1.008680 1.198472 -6.270902
v 0.909270 0.962296 -8.181432
v 2.784295 0.546310 8.110281
v 3.016464 1.227844 5.547486
v 3.314899 1.749873 2.716025
v 3.026091 1.433812 0.856937
v 2.891731 1.111594 -0.743591
v 2.853016 1.260899 -2.410426
v 2.784739 1.274667 -3.919366
v 3.135620 1.579642 -5.056143
v 2.927610 1.546855 -6.274338
v 2.733842 1.147997 -8.176227
v 5.113654 0.955788 7.623774
v 4.989110 1.128940 4.874713
v 5.306241 1.342518 3.139747
v 4.944723 1.345766 1.689700
v 4.826906 1.146855 0.090646
v 4.653031 1.474524 -1.657730
v 4.176518 1.148004 -3.364437
v 3.930496 1.353771 -4.599633
v 4.408140 1.675050 -5.835200
v 4.578228 1.512367 -8.169654
v 7.203066 1.224783 8.180017
v 6.792888 1.205013 6.093022
v 6.689239 1.140026 4.051711
v 6.552394 1.046288 2.371611
v 6.449825 0.989121 0.773613
v 6.436122 1.429140 -0.933084
v 6.168241 1.759031 -2.714797
v 5.422056 1.433576 -4.545545
v 6.244213 1.610053 -6.293227
v 6.418836 1.301126 -8.191019
v 8.362508 1.513864 8.329351
v 8.396934 1.402747 6.968896
v 8.332067 1.336468 4.657400
v 8.173930 0.891899 2.756632
v 7.850024 0.871388 1.357007
v 8.144777 0.892356 -0.126009
v 8.152293 1.344261 -1.946822
v 7.821249 1.528514 -4.159733
v 8.332418 1.393978 -6.371129
v 8.220364 0.652942 -8.189486
vt 1.000000 0.909091
vt 0.909091 1.000000
vt 0.909091 0.909091
vt 0.000000 0.909091
vt 0.090909 1.000000
vt 0.000000 1.000000
vt 0.090909 0.909091
vt 0.181818 1.000000
vt 0.181818 0.909091
vt 0.272727 1.000000
vt 0.272727 0.909091
vt 0.363636 1.000000
vt 0.363636 0.909091
vt 0.454545 1.000000
vt 0.454545 0.909091
vt 0.545455 1.000000
vt 0.545455 0.909091
vt 0.636364 1.000000
vt 0.636364 0.909091
vt 0.727273 1.000000
vt 0.818182 0.909091
vt 0.727273 0.909091
vt 0.818182 1.000000
vt 0.090909 0.000000
vt 0.000000 0.090909
vt 0.000000 0.000000
vt 0.090909 0.090909
vt 0.000000 0.181818
vt 0.090909 0.181818
vt 0.000000 0.272727
vt 0.090909 0.363636
vt 0.000000 0.363636
vt 0.090909 0.454545
vt 0.000000 0.454545
vt 0.090909 0.545455
vt 0.000000 0.545455
vt 0.090909 0.636364
vt 0.000000 0.636364
vt 0.090909 0.727273
vt 0.000000 0.727273
vt 0.090909 0.818182
vt 0.000000 0.818182
vt 0.181818 0.090909
vt 0.181818 0.181818
vt 0.181818 0.272727
vt 0.090909 0.272727
vt 0.181818 0.363636
vt 0.181818 0.545455
vt 0.181818 0.636364
vt 0.181818 0.727273
vt 0.181818 0.818182
vt 0.181818 0.000000
vt 0.272727 0.090909
vt 0.272727 0.181818
vt 0.272727 0.272727
vt 0.272727 0.363636
vt 0.272727 0.454545
vt 0.181818 0.454545
vt 0.272727 0.545455
vt 0.272727 0.636364
vt 0.272727 0.727273
vt 0.272727 0.818182
vt 0.272727 0.000000
vt 0.363636 0.090909
vt 0.363636 0.181818
vt 0.363636 0.272727
vt 0.363636 0.363636
vt 0.363636 0.454545
vt 0.363636 0.636364
vt 0.363636 0.727273
vt 0.363636 0.818182
vt 0.363636 0.000000
vt 0.454545 0.090909
vt 0.454545 0.181818
vt 0.454545 0.272727
vt 0.454545 0.363636
vt 0.454545 0.454545
vt 0.363636 0.545455
vt 0.454545 0.545455
vt 0.454545 0.727273
vt 0.454545 0.818182
vt 0.545455 0.000000
vt 0.454545 0.000000
vt 0.545455 0.090909
vt 0.545455 0.181818
vt 0.545455 0.272727
vt 0.545455 0.363636
vt 0.545455 0.454545
vt 0.545455 0.545455
vt 0.454545 0.636364
vt 0.545455 0.727273
vt 0.545455 0.818182
vt 0.636364 0.000000
vt 0.636364 0.090909
vt 0.636364 0.181818
vt 0.636364 0.272727
vt 0.636364 0.363636
vt 0.636364 0.454545
vt 0.636364 0.545455
vt 0.545455 0.636364
vt 0.636364 0.636364
vt 0.636364 0.818182
vt 0.727273 0.000000
vt 0.727273 0.090909
vt 0.727273 0.181818
vt 0.727273 0.363636
vt 0.727273 0.454545
vt 0.727273 0.545455
vt 0.727273 0.636364
vt 0.727273 0.727273
vt 0.636364 0.727273
vt 0.727273 0.818182
vt 0.818182 0.000000
vt 0.818182 0.181818
vt 0.818182 0.272727
vt 0.727273 0.272727
vt 0.818182 0.363636
vt 0.818182 0.454545
vt 0.818182 0.545455
vt 0.818182 0.636364
vt 0.818182 0.727273
vt 0.818182 0.818182
vt 0.909091 0.000000
vt 0.818182 0.090909
vt 0.909091 0.181818
vt 0.909091 0.272727
vt 0.909091 0.363636
vt 0.909091 0.454545
vt 0.909091 0.545455
vt 0.909091 0.636364
vt 0.909091 0.727273
vt 0.909091 0.818182
vt 1.000000 0.090909
vt 0.909091 0.090909
vt 1.000000 0.181818
vt 1.000000 0.363636
vt 1.000000 0.454545
vt 1.000000 0.545455
vt 1.000000 0.636364
vt 1.000000 0.727273
vt 1.000000 0.818182
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 0.272727
vn 0.2304 0.9606 -0.1556
vn 0.1590 0.9683 -0.1925
vn 0.2970 0.9055 -0.3032
vn -0.2141 0.9697 -0.1174
vn -0.1347 0.9807 -0.1419
vn -0.2754 0.9416 -0.1938
vn -0.0868 0.9925 -0.0856
vn 0.0545 0.9922 -0.1120
vn 0.0388 0.9934 -0.1083
vn 0.1188 0.9804 -0.1571
vn 0.0981 0.9820 -0.1615
vn 0.0805 0.9732 -0.2153
vn 0.0690 0.9811 -0.1807
vn 0.0003 0.9785 -0.2064
vn -0.0041 0.9864 -0.1644
vn -0.0379 0.9721 -0.2314
vn -0.0782 0.9793 -0.1867
vn -0.0453 0.9559 -0.2901
vn -0.1322 0.9577 -0.2556
vn -0.0071 0.9156 -0.4021
vn 0.1790 0.9312 -0.3175
vn -0.0335 0.9593 -0.2803
vn 0.1524 0.9139 -0.3762
vn -0.0559 0.9758 0.2114
vn -0.1275 0.9813 0.1446
vn -0.1157 0.9724 0.2024
vn -0.0577 0.9939 0.0943
vn -0.0650 0.9972 0.0361
vn -0.0851 0.9958 0.0342
vn -0.0242 0.9994 0.0245
vn -0.0967 0.9953 0.0009
vn -0.0598 0.9978 -0.0299
vn -0.1320 0.9910 0.0220
vn -0.1296 0.9915 0.0069
vn -0.1302 0.9850 0.1134
vn -0.2698 0.9625 0.0295
vn -0.1917 0.9795 0.0623
vn -0.3330 0.9424 0.0320
vn -0.1890 0.9797 -0.0672
vn -0.2640 0.9645 -0.0071
vn -0.1114 0.9903 -0.0825
vn -0.1738 0.9843 -0.0320
vn 0.0622 0.9869 0.1486
vn 0.0154 0.9967 0.0792
vn -0.0493 0.9957 0.0788
vn -0.1431 0.9893 0.0272
vn -0.1112 0.9932 0.0355
vn -0.0889 0.9958 0.0231
vn 0.0175 0.9971 0.0737
vn -0.0064 0.9983 -0.0587
vn 0.0025 0.9923 -0.1241
vn 0.0742 0.9682 0.2388
vn 0.1482 0.9672 0.2063
vn 0.0279 0.9940 0.1056
vn 0.0049 0.9926 0.1211
vn 0.0052 0.9955 0.0948
vn -0.0008 0.9947 0.1031
vn -0.1408 0.9899 -0.0166
vn -0.0084 0.9998 -0.0174
vn 0.0348 0.9988 -0.0348
vn 0.0866 0.9944 -0.0600
vn 0.0648 0.9904 -0.1222
vn 0.1654 0.9623 0.2161
vn 0.1549 0.9467 0.2823
vn 0.1101 0.9437 0.3120
vn 0.0392 0.9806 0.1918
vn -0.0009 0.9961 0.0880
vn 0.0141 0.9994 0.0317
vn 0.0009 0.9984 -0.0564
vn 0.0101 0.9967 -0.0802
vn 0.0821 0.9922 -0.0934
vn 0.0888 0.9914 0.0957
vn -0.0155 0.9713 0.2372
vn 0.0773 0.9520 0.2963
vn 0.0735 0.9761 0.2044
vn 0.0119 0.9960 0.0887
vn 0.0284 0.9995 0.0159
vn -0.0208 0.9997 0.0107
vn 0.0316 0.9995 0.0017
vn -0.0518 0.9967 -0.0629
vn -0.0241 0.9924 -0.1206
vn -0.0969 0.9863 0.1337
vn 0.0067 0.9974 0.0715
vn -0.0815 0.9786 0.1887
vn -0.0538 0.9726 0.2261
vn -0.0724 0.9867 0.1452
vn -0.0117 0.9995 -0.0287
vn 0.1158 0.9932 0.0099
vn 0.0907 0.9958 -0.0099
vn 0.0006 0.9993 -0.0362
vn -0.0151 0.9992 0.0362
vn -0.1118 0.9832 -0.1441
vn -0.1498 0.9797 0.1330
vn -0.1290 0.9771 0.1694
vn -0.0452 0.9802 0.1929
vn 0.0376 0.9993 0.0059
vn 0.0224 0.9854 -0.1687
vn 0.0330 0.9994 0.0144
vn 0.0524 0.9985 -0.0135
vn 0.0433 0.9991 0.0045
vn 0.0842 0.9864 0.1411
vn -0.1257 0.9868 -0.1021
vn -0.1738 0.9802 0.0951
vn -0.1109 0.9895 0.0926
vn 0.0516 0.9941 0.0952
vn 0.1660 0.9811 -0.0990
vn 0.0283 0.9992 0.0300
vn -0.1173 0.9910 0.0648
vn -0.0874 0.9961 -0.0074
vn 0.0219 0.9734 0.2280
vn 0.0201 0.9891 0.1460
vn -0.0074 0.9981 0.0615
vn -0.1525 0.9856 0.0732
vn -0.0984 0.9951 0.0059
vn 0.0236 0.9986 -0.0479
vn 0.1670 0.9854 0.0321
vn 0.1521 0.9869 -0.0530
vn 0.1179 0.9913 0.0584
vn 0.0706 0.9748 0.2114
vn -0.0323 0.9994 0.0115
vn -0.0714 0.9960 0.0544
vn 0.0565 0.9976 -0.0400
vn -0.0031 0.9872 0.1595
vn -0.1694 0.9848 0.0388
vn 0.0015 0.9990 -0.0449
vn 0.0781 0.9900 -0.1173
vn 0.1019 0.9874 -0.1214
vn 0.1161 0.9932 -0.0108
vn 0.1931 0.9724 0.1313
vn 0.2695 0.9546 0.1266
vn 0.1985 0.9801 0.0008
vn 0.3103 0.9344 -0.1750
vn 0.1661 0.9840 0.0652
vn -0.0499 0.9977 0.0448
vn 0.1924 0.9768 -0.0945
vn 0.1782 0.9784 -0.1052
vn 0.1663 0.9857 -0.0255
vn 0.3010 0.9505 0.0774
vn 0.3757 0.9255 0.0476
vn 0.3968 0.9179 -0.0080
vn 0.4266 0.8833 -0.1944
vn 0.0936 0.9942 -0.0535
vn 0.2381 0.9329 0.2701
vn 0.3106 0.9428 -0.1211
usemtl None
s 1
f 34/1/1 35/2/2 144/3/3
f 5/4/4 44/5/5 3/6/6
f 54/7/7 43/8/8 44/5/5
f 64/9/9 42/10/10 43/8/8
f 74/11/11 41/12/12 42/10/10
f 84/13/13 40/14/14 41/12/12
f 94/15/15 39/16/16 40/14/14
f 104/17/17 38/18/18 39/16/16
f 114/19/19 37/20/20 38/18/18
f 134/21/21 37/20/20 124/22/22
f 144/3/3 36/23/23 134/21/21
f 15/24/24 14/25/25 1/26/26
f 45/27/27 13/28/28 14/25/25
f 46/29/29 12/30/30 13/28/28
f 12/30/30 48/31/31 11/32/32
f 11/32/32 49/33/33 10/34/34
f 10/34/34 50/35/35 9/36/36
f 9/36/36 51/37/37 8/38/38
f 8/38/38 52/39/39 7/40/40
f 7/40/40 53/41/41 6/42/42
f 6/42/42 54/7/7 5/4/4
f 15/24/24 55/43/43 45/27/27
f 45/27/27 56/44/44 46/29/29
f 46/29/29 57/45/45 47/46/46
f 47/46/46 58/47/47 48/31/31
f 58/47/47 49/33/33 48/31/31
f 49/33/33 60/48/48 50/35/35
f 50/35/35 61/49/49 51/37/37
f 51/37/37 62/50/50 52/39/39
f 52/39/39 63/51/51 53/41/41
f 53/41/41 64/9/9 54/7/7
f 16/52/52 65/53/53 55/43/43
f 55/43/43 66/54/54 56/44/44
f 56/44/44 67/55/55 57/45/45
f 57/45/45 68/56/56 58/47/47
f 58/47/47 69/57/57 59/58/58
f 59/58/58 70/59/59 60/48/48
f 60/48/48 71/60/60 61/49/49
f 61/49/49 72/61/61 62/50/50
f 72/61/61 63/51/51 62/50/50
f 73/62/62 64/9/9 63/51/51
f 17/63/63 75/64/64 65/53/53
f 65/53/53 76/65/65 66/54/54
f 66/54/54 77/66/66 67/55/55
f 67/55/55 78/67/67 68/56/56
f 68/56/56 79/68/68 69/57/57
f 79/68/68 70/59/59 69/57/57
f 70/59/59 81/69/69 71/60/60
f 71/60/60 82/70/70 72/61/61
f 72/61/61 83/71/71 73/62/62
f 73/62/62 84/13/13 74/11/11
f 18/72/72 85/73/73 75/64/64
f 75/64/64 86/74/74 76/65/65
f 86/74/74 77/66/66 76/65/65
f 87/75/75 78/67/67 77/66/66
f 88/76/76 79/68/68 78/67/67
f 89/77/77 80/78/78 79/68/68
f 90/79/79 81/69/69 80/78/78
f 81/69/69 92/80/80 82/70/70
f 82/70/70 93/81/81 83/71/71
f 83/71/71 94/15/15 84/13/13
f 20/82/82 85/73/73 19/83/83
f 95/84/84 86/74/74 85/73/73
f 96/85/85 87/75/75 86/74/74
f 97/86/86 88/76/76 87/75/75
f 98/87/87 89/77/77 88/76/76
f 99/88/88 90/79/79 89/77/77
f 100/89/89 91/90/90 90/79/79
f 91/90/90 102/91/91 92/80/80
f 92/80/80 103/92/92 93/81/81
f 93/81/81 104/17/17 94/15/15
f 21/93/93 95/84/84 20/82/82
f 105/94/94 96/85/85 95/84/84
f 106/95/95 97/86/86 96/85/85
f 107/96/96 98/87/87 97/86/86
f 108/97/97 99/88/88 98/87/87
f 109/98/98 100/89/89 99/88/88
f 110/99/99 101/100/100 100/89/89
f 111/101/101 102/91/91 101/100/100
f 102/91/91 113/102/102 103/92/92
f 103/92/92 114/19/19 104/17/17
f 22/103/103 105/94/94 21/93/93
f 115/104/104 106/95/95 105/94/94
f 116/105/105 107/96/96 106/95/95
f 107/96/96 118/106/106 108/97/97
f 108/97/97 119/107/107 109/98/98
f 109/98/98 120/108/108 110/99/99
f 110/99/99 121/109/109 111/101/101
f 111/101/101 122/110/110 112/111/111
f 112/111/111 123/112/112 113/102/102
f 113/102/102 124/22/22 114/19/19
f 23/113/113 115/104/104 22/103/103
f 115/104/104 126/114/114 116/105/105
f 116/105/105 127/115/115 117/116/116
f 117/116/116 128/117/117 118/106/106
f 118/106/106 129/118/118 119/107/107
f 119/107/107 130/119/119 120/108/108
f 120/108/108 131/120/120 121/109/109
f 121/109/109 132/121/121 122/110/110
f 132/121/121 123/112/112 122/110/110
f 133/122/122 124/22/22 123/112/112
f 24/123/123 125/124/124 23/113/113
f 125/124/124 136/125/125 126/114/114
f 126/114/114 137/126/126 127/115/115
f 127/115/115 138/127/127 128/117/117
f 128/117/117 139/128/128 129/118/118
f 129/118/118 140/129/129 130/119/119
f 130/119/119 141/130/130 131/120/120
f 131/120/120 142/131/131 132/121/121
f 142/131/131 133/122/122 132/121/121
f 143/132/132 134/21/21 133/122/122
f 24/123/123 25/133/133 135/134/134
f 25/133/133 136/125/125 135/134/134
f 26/135/135 137/126/126 136/125/125
f 137/126/126 28/136/136 138/127/127
f 138/127/127 29/137/137 139/128/128
f 29/137/137 140/129/129 139/128/128
f 30/138/138 141/130/130 140/129/129
f 31/139/139 142/131/131 141/130/130
f 32/140/140 143/132/132 142/131/131
f 33/141/141 144/3/3 143/132/132
f 34/1/1 4/142/142 35/2/2
f 5/4/4 54/7/7 44/5/5
f 54/7/7 64/9/9 43/8/8
f 64/9/9 74/11/11 42/10/10
f 74/11/11 84/13/13 41/12/12
f 84/13/13 94/15/15 40/14/14
f 94/15/15 104/17/17 39/16/16
f 104/17/17 114/19/19 38/18/18
f 114/19/19 124/22/22 37/20/20
f 134/21/21 36/23/23 37/20/20
f 144/3/3 35/2/2 36/23/23
f 15/24/24 45/27/27 14/25/25
f 45/27/27 46/29/29 13/28/28
f 46/29/29 47/46/46 12/30/30
f 12/30/30 47/46/46 48/31/31
f 11/32/32 48/31/31 49/33/33
f 10/34/34 49/33/33 50/35/35
f 9/36/36 50/35/35 51/37/37
f 8/38/38 51/37/37 52/39/39
f 7/40/40 52/39/39 53/41/41
f 6/42/42 53/41/41 54/7/7
f 15/24/24 16/52/52 55/43/43
f 45/27/27 55/43/43 56/44/44
f 46/29/29 56/44/44 57/45/45
f 47/46/46 57/45/45 58/47/47
f 58/47/47 59/58/58 49/33/33
f 49/33/33 59/58/58 60/48/48
f 50/35/35 60/48/48 61/49/49
f 51/37/37 61/49/49 62/50/50
f 52/39/39 62/50/50 63/51/51
f 53/41/41 63/51/51 64/9/9
f 16/52/52 17/63/63 65/53/53
f 55/43/43 65/53/53 66/54/54
f 56/44/44 66/54/54 67/55/55
f 57/45/45 67/55/55 68/56/56
f 58/47/47 68/56/56 69/57/57
f 59/58/58 69/57/57 70/59/59
f 60/48/48 70/59/59 71/60/60
f 61/49/49 71/60/60 72/61/61
f 72/61/61 73/62/62 63/51/51
f 73/62/62 74/11/11 64/9/9
f 17/63/63 18/72/72 75/64/64
f 65/53/53 75/64/64 76/65/65
f 66/54/54 76/65/65 77/66/66
f 67/55/55 77/66/66 78/67/67
f 68/56/56 78/67/67 79/68/68
f 79/68/68 80/78/78 70/59/59
f 70/59/59 80/78/78 81/69/69
f 71/60/60 81/69/69 82/70/70
f 72/61/61 82/70/70 83/71/71
f 73/62/62 83/71/71 84/13/13
f 18/72/72 19/83/83 85/73/73
f 75/64/64 85/73/73 86/74/74
f 86/74/74 87/75/75 77/66/66
f 87/75/75 88/76/76 78/67/67
f 88/76/76 89/77/77 79/68/68
f 89/77/77 90/79/79 80/78/78
f 90/79/79 91/90/90 81/69/69
f 81/69/69 91/90/90 92/80/80
f 82/70/70 92/80/80 93/81/81
f 83/71/71 93/81/81 94/15/15
f 20/82/82 95/84/84 85/73/73
f 95/84/84 96/85/85 86/74/74
f 96/85/85 97/86/86 87/75/75
f 97/86/86 98/87/87 88/76/76
f 98/87/87 99/88/88 89/77/77
f 99/88/88 100/89/89 90/79/79
f 100/89/89 101/100/100 91/90/90
f 91/90/90 101/100/100 102/91/91
f 92/80/80 102/91/91 103/92/92
f 93/81/81 103/92/92 104/17/17
f 21/93/93 105/94/94 95/84/84
f 105/94/94 106/95/95 96/85/85
f 106/95/95 107/96/96 97/86/86
f 107/96/96 108/97/97 98/87/87
f 108/97/97 109/98/98 99/88/88
f 109/98/98 110/99/99 100/89/89
f 110/99/99 111/101/101 101/100/100
f 111/101/101 112/111/111 102/91/91
f 102/91/91 112/111/111 113/102/102
f 103/92/92 113/102/102 114/19/19
f 22/103/103 115/104/104 105/94/94
f 115/104/104 116/105/105 106/95/95
f 116/105/105 117/116/116 107/96/96
f 107/96/96 117/116/116 118/106/106
f 108/97/97 118/106/106 119/107/107
f 109/98/98 119/107/107 120/108/108
f 110/99/99 120/108/108 121/109/109
f 111/101/101 121/109/109 122/110/110
f 112/111/111 122/110/110 123/112/112
f 113/102/102 123/112/112 124/22/22
f 23/113/113 125/124/124 115/104/104
f 115/104/104 125/124/124 126/114/114
f 116/105/105 126/114/114 127/115/115
f 117/116/116 127/115/115 128/117/117
f 118/106/106 128/117/117 129/118/118
f 119/107/107 129/118/118 130/119/119
f 120/108/108 130/119/119 131/120/120
f 121/109/109 131/120/120 132/121/121
f 132/121/121 133/122/122 123/112/112
f 133/122/122 134/21/21 124/22/22
f 24/123/123 135/134/134 125/124/124
f 125/124/124 135/134/134 136/125/125
f 126/114/114 136/125/125 137/126/126
f 127/115/115 137/126/126 138/127/127
f 128/117/117 138/127/127 139/128/128
f 129/118/118 139/128/128 140/129/129
f 130/119/119 140/129/129 141/130/130
f 131/120/120 141/130/130 142/131/131
f 142/131/131 143/132/132 133/122/122
f 143/132/132 144/3/3 134/21/21
f 24/123/123 2/143/143 25/133/133
f 25/133/133 26/135/135 136/125/125
f 26/135/135 27/144/144 137/126/126
f 137/126/126 27/144/144 28/136/136
f 138/127/127 28/136/136 29/137/137
f 29/137/137 30/138/138 140/129/129
f 30/138/138 31/139/139 141/130/130
f 31/139/139 32/140/140 142/131/131
f 32/140/140 33/141/141 143/132/132
f 33/141/141 34/1/1 144/3/3

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,7 @@
source:
https://www.deviantart.com/snowfall-the-cat/art/XenSkyBox-865914673
attrib:
" use the sky box as you wish!
made in blender
credit me if you can!"
- Snowfall-The-Cat : XenSkyBox

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 KiB

View file

@ -212,6 +212,12 @@
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Vertex</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Vertex</ShaderType>
</FxCompile>
<FxCompile Include="ToonShader.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Pixel</ShaderType>
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Pixel</ShaderType>
</FxCompile>
<FxCompile Include="VertexShader.hlsl">
<ShaderType Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Vertex</ShaderType>
<ShaderModel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">5.0</ShaderModel>
@ -1096,6 +1102,459 @@
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/PBR</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp1.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp2.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp3.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRampSpecular.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Ramps</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Models\warped_plane.obj">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Models</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Models\warped_building.obj">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Models</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Models\warped_archway_inner.obj">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Models</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_archway_outer.obj">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Models</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\back.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\bottom.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\front.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\left.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\right.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\top.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Skies/xenskybox</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Models\warped_monke.obj">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Models</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Models</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_albedo.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_metal.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_normals.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_roughness.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_albedo.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_metal.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_normals.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_roughness.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_albedo.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_metal.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_normals.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_roughness.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_albedo.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_metal.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_normals.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_roughness.png">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
<DestinationFolders Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(OutDir)/Assets/Textures/Transparent</DestinationFolders>
</CopyFileToFolders>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\Microsoft.XAudio2.Redist.1.2.8\build\native\Microsoft.XAudio2.Redist.targets" Condition="Exists('packages\Microsoft.XAudio2.Redist.1.2.8\build\native\Microsoft.XAudio2.Redist.targets')" />

View file

@ -40,6 +40,15 @@
<Filter Include="Assets\Textures\PBR">
<UniqueIdentifier>{5a00f65f-2015-451b-9c46-5131e9fd2555}</UniqueIdentifier>
</Filter>
<Filter Include="Assets\Textures\Ramps">
<UniqueIdentifier>{e1723348-5c0a-4f5f-8586-ccf0126a4509}</UniqueIdentifier>
</Filter>
<Filter Include="Assets\Textures\Skies\xenskybox">
<UniqueIdentifier>{9d91e2a4-da9d-42fe-9427-bfdb10083dd7}</UniqueIdentifier>
</Filter>
<Filter Include="Assets\Textures\Transparent">
<UniqueIdentifier>{513b1278-b493-4dfc-826f-abcd815c0561}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="DXCore.cpp">
@ -139,6 +148,9 @@
<FxCompile Include="SimpleVertexPBR.hlsl">
<Filter>Shaders</Filter>
</FxCompile>
<FxCompile Include="ToonShader.hlsl">
<Filter>Shaders</Filter>
</FxCompile>
</ItemGroup>
<ItemGroup>
<CopyFileToFolders Include="Assets\Models\cube.obj">
@ -321,6 +333,99 @@
<CopyFileToFolders Include="Assets\Textures\PBR\wood_roughness.png">
<Filter>Assets\Textures\PBR</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp1.png">
<Filter>Assets\Textures\Ramps</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp2.png">
<Filter>Assets\Textures\Ramps</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRamp3.png">
<Filter>Assets\Textures\Ramps</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Ramps\toonRampSpecular.png">
<Filter>Assets\Textures\Ramps</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_plane.obj">
<Filter>Assets\Models</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_building.obj">
<Filter>Assets\Models</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_archway_inner.obj">
<Filter>Assets\Models</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_archway_outer.obj">
<Filter>Assets\Models</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\top.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\back.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\bottom.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\front.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\left.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Skies\xenskybox\right.png">
<Filter>Assets\Textures\Skies\xenskybox</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Models\warped_monke.obj">
<Filter>Assets\Models</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_albedo.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_metal.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_normals.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\fence_roughness.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_albedo.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_metal.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_normals.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_pattern_roughness.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_albedo.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_metal.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_normals.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\glass_window_roughness.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_albedo.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_metal.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_normals.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
<CopyFileToFolders Include="Assets\Textures\Transparent\lattice_roughness.png">
<Filter>Assets\Textures\Transparent</Filter>
</CopyFileToFolders>
</ItemGroup>
<ItemGroup>
<None Include="Helpers.hlsli">

423
Game.cpp
View file

@ -2,6 +2,7 @@
#include "Vertex.h"
#include "Input.h"
#include "SimpleShader.h"
#include <algorithm>
// Needed for a helper function to read compiled shader files from the hard drive
#pragma comment(lib, "d3dcompiler.lib")
@ -34,7 +35,7 @@ Game::Game(HINSTANCE hInstance)
CreateConsoleWindow(500, 120, 32, 120);
printf("Console window created successfully. Feel free to printf() here.\n");
#endif
camera = std::make_shared<Camera>(0.0f, 0.0f, -10.0f, (float)width / height, 60, 0.01f, 1000.0f, 5.0f);
camera = std::make_shared<Camera>(0.0f, 5.0f, -15.0f, (float)width / height, 60, 0.01f, 1000.0f, 5.0f);
}
// --------------------------------------------------------
@ -58,8 +59,8 @@ void Game::Init()
{
LoadShadersAndMaterials();
LoadTextures();
LoadLighting();
CreateBasicGeometry();
LoadMeshes();
LoadScene(0);
// Tell the input assembler stage of the pipeline what kind of
// geometric primitives (points, lines or triangles) we want to draw.
@ -76,18 +77,26 @@ void Game::LoadShadersAndMaterials()
pixelShader = std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"SimplePixelShader.cso").c_str());
vertexShaderPBR = std::make_shared<SimpleVertexShader>(device, context, GetFullPathTo_Wide(L"SimpleVertexPBR.cso").c_str());
pixelShaderPBR = std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"SimplePixelPBR.cso").c_str());
pixelShaderToon = std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"ToonShader.cso").c_str());
XMFLOAT3 white = XMFLOAT3(1.0f, 1.0f, 1.0f);
XMFLOAT3 deepPurple = XMFLOAT3(0.1f, 0.02f, 0.1f);
materials = {
std::make_shared<Material>(false, white, 0, vertexShader, pixelShader),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(true, white, 0, vertexShaderPBR, pixelShaderPBR),
std::make_shared<Material>(MATTYPE_STANDARD, white, 0, vertexShader, pixelShader), //0: blueish bronze material with reflection map
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //1: bronze PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //2: cobblestone PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //3: metallic diamond-pattern floor PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //4: paint PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //5: rough metal PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //6: scratched metal PBR
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShaderPBR, pixelShaderPBR), //7: wood PBR
std::make_shared<Material>(MATTYPE_STANDARD, white, 0, vertexShader, pixelShader), //8: transparent floor grate for scene 1
std::make_shared<Material>(MATTYPE_TOON, white, 0, vertexShader, pixelShaderToon), //9: cushion toon
std::make_shared<Material>(MATTYPE_TOON, deepPurple, 0, vertexShader, pixelShaderToon), //10: emissive lava toon
std::make_shared<Material>(MATTYPE_STANDARD, white, 0, vertexShader, pixelShader), //11: lava toon
std::make_shared<Material>(MATTYPE_PBR, white, 0, vertexShader, pixelShaderPBR), //12: fence PBR
std::make_shared<Material>(MATTYPE_STANDARD, white, 0, vertexShader, pixelShader), //13: transparent floor grate for scene 2
};
}
@ -96,6 +105,8 @@ void Game::LoadShadersAndMaterials()
// --------------------------------------------------------
void Game::LoadTextures()
{
#pragma region Sampler Initialization
// Sampler description for wrapped texture sampling
D3D11_SAMPLER_DESC sampDesc = {};
sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
@ -105,7 +116,45 @@ void Game::LoadTextures()
sampDesc.MaxLOD = D3D11_FLOAT32_MAX;
device->CreateSamplerState(&sampDesc, sampler.GetAddressOf());
demoCubemap = CreateCubemap(
// Blend description for alpha support
D3D11_BLEND_DESC blendDesc = {};
blendDesc.RenderTarget[0].BlendEnable = true;
blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;
blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
device->CreateBlendState(&blendDesc, alphaBlendState.GetAddressOf());
// Rasterizer description for alpha support/rendering backfaces only
D3D11_RASTERIZER_DESC rastDesc = {};
rastDesc.DepthClipEnable = true;
rastDesc.CullMode = D3D11_CULL_FRONT;
rastDesc.FillMode = D3D11_FILL_SOLID;
device->CreateRasterizerState(&rastDesc, backfaceRasterState.GetAddressOf());
// Sampler description for clamping
sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
device->CreateSamplerState(&sampDesc, clampSampler.GetAddressOf());
#pragma endregion
#pragma region Cubemap Setup
demoCubemap1 = CreateCubemap(
device,
context,
L"Assets/Textures/Skies/xenskybox/right.png",
L"Assets/Textures/Skies/xenskybox/left.png",
L"Assets/Textures/Skies/xenskybox/top.png",
L"Assets/Textures/Skies/xenskybox/bottom.png",
L"Assets/Textures/Skies/xenskybox/front.png",
L"Assets/Textures/Skies/xenskybox/back.png"
);
demoCubemap2 = CreateCubemap(
device,
context,
L"Assets/Textures/Skies/planets/right.png",
@ -115,19 +164,24 @@ void Game::LoadTextures()
L"Assets/Textures/Skies/planets/front.png",
L"Assets/Textures/Skies/planets/back.png"
);
#pragma endregion
#pragma region Material Setup
materials[0]->PushSampler("BasicSampler", sampler);
materials[0]->PushTexture(TEXTYPE_REFLECTION, demoCubemap);
materials[0]->PushTexture(TEXTYPE_REFLECTION, demoCubemap1);
materials[0]->hasReflectionMap = true;
materials[0]->LoadTexture(L"Assets/Textures/WithNormals/cobblestone.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[0]->LoadTexture(L"Assets/Textures/WithNormals/cobblestone_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[0]->LoadTexture(L"Assets/Textures/WithNormals/cobblestone_specular.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
materials[0]->LoadTexture(L"Assets/Textures/PBR/bronze_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[0]->LoadTexture(L"Assets/Textures/PBR/bronze_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[0]->LoadTexture(L"Assets/Textures/PBR/bronze_roughness.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
materials[0]->SetNormalIntensity(2.5f);
materials[0]->SetTint(DirectX::XMFLOAT3(0.25f, 0.25f, 0.85f));
materials[1]->PushSampler("BasicSampler", sampler);
materials[1]->LoadTexture(L"Assets/Textures/PBR/bronze_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[1]->LoadTexture(L"Assets/Textures/PBR/bronze_metal.png", TEXTYPE_METALNESS, device.Get(), context.Get());
materials[1]->LoadTexture(L"Assets/Textures/PBR/bronze_roughness.png", TEXTYPE_ROUGHNESS, device.Get(), context.Get());
materials[1]->LoadTexture(L"Assets/Textures/PBR/bronze_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[1]->SetNormalIntensity(2.5f);
materials[2]->PushSampler("BasicSampler", sampler);
materials[2]->LoadTexture(L"Assets/Textures/PBR/cobblestone_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
@ -146,12 +200,14 @@ void Game::LoadTextures()
materials[4]->LoadTexture(L"Assets/Textures/PBR/paint_metal.png", TEXTYPE_METALNESS, device.Get(), context.Get());
materials[4]->LoadTexture(L"Assets/Textures/PBR/paint_roughness.png", TEXTYPE_ROUGHNESS, device.Get(), context.Get());
materials[4]->LoadTexture(L"Assets/Textures/PBR/paint_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[4]->SetNormalIntensity(0.5f);
materials[5]->PushSampler("BasicSampler", sampler);
materials[5]->LoadTexture(L"Assets/Textures/PBR/rough_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[5]->LoadTexture(L"Assets/Textures/PBR/rough_metal.png", TEXTYPE_METALNESS, device.Get(), context.Get());
materials[5]->LoadTexture(L"Assets/Textures/PBR/rough_roughness.png", TEXTYPE_ROUGHNESS, device.Get(), context.Get());
materials[5]->LoadTexture(L"Assets/Textures/PBR/rough_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[5]->SetNormalIntensity(3.5f);
materials[6]->PushSampler("BasicSampler", sampler);
materials[6]->LoadTexture(L"Assets/Textures/PBR/scratched_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
@ -164,30 +220,58 @@ void Game::LoadTextures()
materials[7]->LoadTexture(L"Assets/Textures/PBR/wood_metal.png", TEXTYPE_METALNESS, device.Get(), context.Get());
materials[7]->LoadTexture(L"Assets/Textures/PBR/wood_roughness.png", TEXTYPE_ROUGHNESS, device.Get(), context.Get());
materials[7]->LoadTexture(L"Assets/Textures/PBR/wood_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[7]->SetNormalIntensity(3.5f);
materials[8]->PushSampler("BasicSampler", sampler);
materials[8]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-floor_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[8]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-floor_specular.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
// this texture has some weird noise artifacts in the holes of the floor that I probably just never noticed
// when I used it in the game I made it for because it was also had Cutoff in Unity. add high cutoff, but not too high for distant mipmaps
materials[8]->SetCutoff(0.9f);
// this is just to test alpha
materials[8]->SetAlpha(0.8f);
materials[9]->PushSampler("BasicSampler", sampler);
materials[9]->PushSampler("ClampSampler", clampSampler);
materials[9]->SetRoughness(1);
materials[9]->LoadTexture(L"Assets/Textures/WithNormals/cushion.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[9]->LoadTexture(L"Assets/Textures/WithNormals/cushion_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[9]->LoadTexture(L"Assets/Textures/WithNormals/cushion_specular.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
materials[9]->SetOutlineThickness(0);
materials[10]->PushSampler("BasicSampler", sampler);
materials[10]->PushSampler("ClampSampler", clampSampler);
materials[10]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-deepfloor_emissive.png", TEXTYPE_EMISSIVE, device.Get(), context.Get());
materials[10]->LoadTexture(L"Assets/Textures/Ramps/toonRamp3.png", TEXTYPE_RAMPDIFFUSE, device.Get(), context.Get());
materials[10]->LoadTexture(L"Assets/Textures/Ramps/toonRampSpecular.png", TEXTYPE_RAMPSPECULAR, device.Get(), context.Get());
materials[10]->SetRimCutoff(0.15f);
materials[10]->SetEmitAmount(XMFLOAT3(0.05f, 0.1f, 0.01f));
materials[11]->PushSampler("BasicSampler", sampler);
materials[11]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-deepfloor_emissive.png", TEXTYPE_EMISSIVE, device.Get(), context.Get());
materials[11]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-deepfloor_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[11]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-deepfloor_specular.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
materials[11]->SetEmitAmount(XMFLOAT3(0.05f, 0.1f, 0.01f));
materials[12]->PushSampler("BasicSampler", sampler);
materials[12]->LoadTexture(L"Assets/Textures/Transparent/fence_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[12]->LoadTexture(L"Assets/Textures/Transparent/fence_metal.png", TEXTYPE_METALNESS, device.Get(), context.Get());
materials[12]->LoadTexture(L"Assets/Textures/Transparent/fence_roughness.png", TEXTYPE_ROUGHNESS, device.Get(), context.Get());
materials[12]->LoadTexture(L"Assets/Textures/Transparent/fence_normals.png", TEXTYPE_NORMAL, device.Get(), context.Get());
materials[12]->SetCutoff(0.95f);
materials[13]->PushSampler("BasicSampler", sampler);
materials[13]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-floor_albedo.png", TEXTYPE_ALBEDO, device.Get(), context.Get());
materials[13]->LoadTexture(L"Assets/Textures/HQGame/structure-endgame-floor_specular.png", TEXTYPE_SPECULAR, device.Get(), context.Get());
materials[13]->SetAlpha(0.85f);
materials[13]->SetCutoff(0.95f);
#pragma endregion
}
// --------------------------------------------------------
// Instantiates all the lighting in the scene
// Loads the geometry we're going to draw
// --------------------------------------------------------
void Game::LoadLighting()
{
ambient = XMFLOAT3(0.1f, 0.1f, 0.15f);
lights = {
Light::Directional(XMFLOAT3(1, 0.5f, -0.5f), XMFLOAT3(1, 1, 1), 1.0f),
Light::Directional(XMFLOAT3(-0.25f, -1, 0.75f), XMFLOAT3(1, 1, 1), 0.25f),
Light::Directional(XMFLOAT3(-1, 1, -0.5f), XMFLOAT3(1, 1, 1), 0.25f),
Light::Point(XMFLOAT3(-1.5f, 0, 0), XMFLOAT3(1, 1, 1), 0.35f, 10),
Light::Point(XMFLOAT3(1.5f, 0, 0), XMFLOAT3(1, 1, 1), 0.35f, 10),
Light::Point(XMFLOAT3(0, 2, 0), XMFLOAT3(1, 0, 0), 0.35f, 10),
Light::Point(XMFLOAT3(-27.5f, 0, 0), XMFLOAT3(1, 1, 0.5f), 0.35f, 20),
};
}
// --------------------------------------------------------
// Creates the geometry we're going to draw - a single triangle for now
// --------------------------------------------------------
void Game::CreateBasicGeometry()
void Game::LoadMeshes()
{
shapes = {
std::make_shared<Mesh>(
@ -211,9 +295,144 @@ void Game::CreateBasicGeometry()
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/quad_double_sided.obj").c_str(),
device, context),
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/warped_plane.obj").c_str(),
device, context),
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/warped_building.obj").c_str(),
device, context),
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/warped_archway_outer.obj").c_str(),
device, context),
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/warped_archway_inner.obj").c_str(),
device, context),
std::make_shared<Mesh>(
GetFullPathTo("Assets/Models/warped_monke.obj").c_str(),
device, context),
};
skybox1 = std::make_shared<Sky>(
shapes[0],
std::make_shared<SimpleVertexShader>(device, context, GetFullPathTo_Wide(L"SkyboxVertexShader.cso").c_str()),
std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"SkyboxPixelShader.cso").c_str()),
demoCubemap1,
sampler,
device
);
skybox2 = std::make_shared<Sky>(
shapes[0],
std::make_shared<SimpleVertexShader>(device, context, GetFullPathTo_Wide(L"SkyboxVertexShader.cso").c_str()),
std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"SkyboxPixelShader.cso").c_str()),
demoCubemap2,
sampler,
device
);
}
// --------------------------------------------------------
// Loads the entities, lighting, etc. based on scene
// --------------------------------------------------------
void Game::LoadScene(int _currentScene)
{
currentScene = _currentScene;
switch (currentScene)
{
case 0:
LoadScene1();
break;
case 1:
LoadScene2();
break;
}
}
void Game::LoadScene1()
{
camera->GetTransform()->SetPosition(0.0f, 9.0f, -15.0f);
camera->GetTransform()->SetRotation(0.1f, 0, 0);
ambient = XMFLOAT3(0.01f, 0.01f, 0.015f);
lights = {
Light::Directional(XMFLOAT3(1, 0.5f, -0.5f), XMFLOAT3(1, 1, 1), 1.0f),
};
#pragma region Entity Definition
entities = {
std::make_shared<Entity>(materials[2], shapes[7]), //0
std::make_shared<Entity>(materials[0], shapes[8]), //1
std::make_shared<Entity>(materials[0], shapes[8]), //2
std::make_shared<Entity>(materials[0], shapes[8]), //3
std::make_shared<Entity>(materials[0], shapes[8]), //4
std::make_shared<Entity>(materials[7], shapes[9]), //5
std::make_shared<Entity>(materials[11], shapes[10]), //6
std::make_shared<Entity>(materials[10], shapes[11]), //7
};
transpEntities = {
std::make_shared<Entity>(materials[12], shapes[5]), //0
std::make_shared<Entity>(materials[12], shapes[5]), //1
std::make_shared<Entity>(materials[12], shapes[5]), //2
std::make_shared<Entity>(materials[13], shapes[3]), //3
std::make_shared<Entity>(materials[13], shapes[3]), //4
std::make_shared<Entity>(materials[13], shapes[3]), //5
};
#pragma endregion
#pragma region Transform Setup
entities[1]->GetTransform()->SetPosition(-5, 0, 5);
entities[2]->GetTransform()->SetPosition(5, 0, 5);
entities[3]->GetTransform()->SetPosition(5, 0, -5);
entities[4]->GetTransform()->SetPosition(-5, 0, -5);
entities[5]->GetTransform()->SetPosition(0, 3, 5);
entities[6]->GetTransform()->SetPosition(0, 3, 5);
entities[5]->GetTransform()->SetRotation(0, 1.57f, 0);
entities[6]->GetTransform()->SetRotation(0, 1.57f, 0);
entities[5]->GetTransform()->SetScale(0.75f, 0.75f, 0.75f);
entities[6]->GetTransform()->SetScale(0.75f, 0.75f, 0.75f);
entities[7]->GetTransform()->SetPosition(0, 20, 20);
entities[7]->GetTransform()->SetScale(8, 8, 8);
entities[7]->GetTransform()->SetRotation(-0.5f, 0, 0);
transpEntities[0]->GetTransform()->SetPosition(0, 1, 5);
transpEntities[0]->GetTransform()->SetRotation(1.57079f, 0, 0);
transpEntities[0]->GetTransform()->SetScale(6, 6, 1);
transpEntities[1]->GetTransform()->SetPosition(-5, 1, 0);
transpEntities[1]->GetTransform()->SetRotation(1.57079f, 1.57079f, 0);
transpEntities[1]->GetTransform()->SetScale(6, 6, 1);
transpEntities[2]->GetTransform()->SetPosition(5, 1, 0);
transpEntities[2]->GetTransform()->SetRotation(1.57079f, -1.57079f, 0);
transpEntities[2]->GetTransform()->SetScale(6, 6, 1);
transpEntities[3]->GetTransform()->SetScale(-30, -30, -30);
transpEntities[4]->GetTransform()->SetScale(-60, -60, -60);
transpEntities[5]->GetTransform()->SetScale(-90, -90, -90);
#pragma endregion
materials[0]->SwapTexture(TEXTYPE_REFLECTION, demoCubemap1);
materials[0]->SetUVScale(DirectX::XMFLOAT2(10, 10));
materials[2]->SetUVScale(DirectX::XMFLOAT2(5, 5));
}
void Game::LoadScene2()
{
camera->GetTransform()->SetPosition(0.0f, 0.0f, -10.0f);
camera->GetTransform()->SetRotation(0, 0, 0);
ambient = XMFLOAT3(0.01f, 0.01f, 0.015f);
lights = {
Light::Directional(XMFLOAT3(1, 0.5f, -0.5f), XMFLOAT3(1, 1, 1), 1.0f),
};
#pragma region Entity Definition
entities = {
// PBR
std::make_shared<Entity>(materials[1], shapes[3]),
std::make_shared<Entity>(materials[2], shapes[3]),
std::make_shared<Entity>(materials[3], shapes[3]),
@ -221,25 +440,73 @@ void Game::CreateBasicGeometry()
std::make_shared<Entity>(materials[5], shapes[3]),
std::make_shared<Entity>(materials[6], shapes[3]),
std::make_shared<Entity>(materials[7], shapes[3]),
// std
std::make_shared<Entity>(materials[0], shapes[3]),
// toon
std::make_shared<Entity>(materials[9], shapes[3]),
std::make_shared<Entity>(materials[9], shapes[3]),
std::make_shared<Entity>(materials[9], shapes[3]),
std::make_shared<Entity>(materials[9], shapes[3]),
std::make_shared<Entity>(materials[10], shapes[3]),
std::make_shared<Entity>(materials[10], shapes[3]),
std::make_shared<Entity>(materials[10], shapes[3]),
std::make_shared<Entity>(materials[10], shapes[3]),
};
transpEntities = {
std::make_shared<Entity>(materials[8], shapes[3]),
std::make_shared<Entity>(materials[8], shapes[3]),
std::make_shared<Entity>(materials[8], shapes[3]),
};
#pragma endregion
#pragma region Transform Setup
transpEntities[0]->GetTransform()->SetPosition(0, 3, -5);
transpEntities[1]->GetTransform()->SetPosition(0, 3, 0);
transpEntities[2]->GetTransform()->SetPosition(0, 3, 5);
for (int i = 0; i < entities.size() / 2; ++i)
{
entities[i]->GetTransform()->SetPosition((-(int)(entities.size() / 4) + i + 0.5f) * 2.5f, -1.5f, 0);
}
for (int i = entities.size() / 2; i < entities.size(); ++i)
{
entities[i]->GetTransform()->SetPosition((-(int)(entities.size() / 4) + (i - (int)entities.size() / 2) + 0.5f) * 2.5f, 1.5f, 0);
}
for (int i = 0; i < transpEntities.size(); ++i)
{
transpEntities[i]->GetTransform()->SetPosition(0, -3.5f, (-(int)(transpEntities.size() / 2) + i) * 2.5f);
}
#pragma endregion
materials[0]->SwapTexture(TEXTYPE_REFLECTION, demoCubemap2);
materials[0]->SetUVScale(DirectX::XMFLOAT2(1, 1));
materials[2]->SetUVScale(DirectX::XMFLOAT2(1, 1));
materials[11]->SetEmitAmount(DirectX::XMFLOAT3(1, 1, 1));
}
void Game::UpdateScene1(float deltaTime, float totalTime)
{
for (int i = 1; i < 5; ++i)
{
DirectX::XMFLOAT3 pos = entities[i]->GetTransform()->GetPosition();
entities[i]->GetTransform()->SetPosition(pos.x, sin(totalTime / 2) * 0.5f + 1, pos.z);
entities[i]->GetTransform()->SetRotation(0, cos(totalTime / 4) * 4, 0);
}
materials[11]->SetUVOffset(DirectX::XMFLOAT2(0, -tan(totalTime / 4) * 0.15f));
materials[11]->SetEmitAmount(DirectX::XMFLOAT3(sin(totalTime / 1) * 0.25f + 0.25f, sin(totalTime / 1) * 0.25f + 0.25f, sin(totalTime / 1) * 0.25f + 0.25f));
}
void Game::UpdateScene2(float deltaTime, float totalTime)
{
for (int i = 0; i < entities.size(); ++i)
{
entities[i]->GetTransform()->SetPosition((-(int)(entities.size() / 2) + i + 0.5f) * 2.5f, 0, 0);
entities[i]->GetTransform()->SetRotation(0, sin(totalTime / 720) * 360, 0);
}
skybox = std::make_shared<Sky>(
shapes[0],
std::make_shared<SimpleVertexShader>(device, context, GetFullPathTo_Wide(L"SkyboxVertexShader.cso").c_str()),
std::make_shared<SimplePixelShader>(device, context, GetFullPathTo_Wide(L"SkyboxPixelShader.cso").c_str()),
demoCubemap,
sampler,
device
);
}
// --------------------------------------------------------
// Handle resizing DirectX "stuff" to match the new window size.
// For instance, updating our projection matrix's aspect ratio.
@ -261,12 +528,22 @@ void Game::Update(float deltaTime, float totalTime)
if (Input::GetInstance().KeyDown(VK_ESCAPE))
Quit();
camera->Update(deltaTime);
if (Input::GetInstance().KeyDown(0x31))
LoadScene(0);
else if (Input::GetInstance().KeyDown(0x32))
LoadScene(1);
for (int i = 0; i < entities.size(); ++i)
switch (currentScene)
{
entities[i]->GetTransform()->SetRotation(sin(totalTime / 720) * 360, 0, 0);
case 0:
UpdateScene1(deltaTime, totalTime);
break;
case 1:
UpdateScene2(deltaTime, totalTime);
break;
}
camera->Update(deltaTime);
}
// --------------------------------------------------------
@ -277,9 +554,7 @@ void Game::Draw(float deltaTime, float totalTime)
// Background color for clearing
static const float color[4] = { 0.1f, 0.1f, 0.1f, 0.0f };
// Clear the render target and depth buffer (erases what's on the screen)
// - Do this ONCE PER FRAME
// - At the beginning of Draw (before drawing *anything*)
// Clear the render target and depth buffer (erases what's on the screen) before doign anything else
context->ClearRenderTargetView(backBufferRTV.Get(), color);
context->ClearDepthStencilView(
depthStencilView.Get(),
@ -287,16 +562,50 @@ void Game::Draw(float deltaTime, float totalTime)
1.0f,
0);
// Render solid entities first
for (auto entity : entities)
{
entity->Draw(camera, ambient, lights);
}
skybox->Draw(context, camera);
// Draw the skybox after solid entities to avoid overdraw
switch (currentScene)
{
case 0:
skybox1->Draw(context, camera);
break;
case 1:
skybox2->Draw(context, camera);
break;
}
// Present the back buffer to the user
// - Puts the final frame we're drawing into the window so the user can see it
// - Do this exactly ONCE PER FRAME (always at the very end of the frame)
// Sort transparent entities
std::sort(transpEntities.begin(), transpEntities.end(), [&](std::shared_ptr<Entity> a, std::shared_ptr<Entity> b) -> bool
{
XMFLOAT3 positionA = a->GetTransform()->GetPosition();
XMFLOAT3 positionB = b->GetTransform()->GetPosition();
XMFLOAT3 camPos = camera->GetTransform()->GetPosition();
// compare distance
float aDist = XMVectorGetX(XMVector3Length(XMLoadFloat3(&positionA) - XMLoadFloat3(&camPos)));
float bDist = XMVectorGetX(XMVector3Length(XMLoadFloat3(&positionB) - XMLoadFloat3(&camPos)));
return aDist > bDist;
});
// Draw transparent entities with proper blendstate
context->OMSetBlendState(alphaBlendState.Get(), 0, 0xFFFFFFFF);
for (auto entity : transpEntities)
{
context->RSSetState(backfaceRasterState.Get());
entity->Draw(camera, ambient, lights);
context->RSSetState(0);
entity->Draw(camera, ambient, lights);
}
// Reset blendstate after drawing transparent entities
context->OMSetBlendState(0, 0, 0xFFFFFFFF);
// Present the back buffer (i.e. the final frame) to the user at the end of drawing
swapChain->Present(vsync ? 1 : 0, 0);
// Due to the usage of a more sophisticated swap chain,

22
Game.h
View file

@ -41,14 +41,19 @@ private:
void LoadShadersAndMaterials();
void LoadTextures();
void LoadLighting();
void CreateBasicGeometry();
void LoadMeshes();
void LoadScene(int _currentScene);
void LoadScene1();
void LoadScene2();
void UpdateScene1(float deltaTime, float totalTime);
void UpdateScene2(float deltaTime, float totalTime);
// Shaders and shader-related constructs
std::shared_ptr<SimplePixelShader> pixelShader;
std::shared_ptr<SimpleVertexShader> vertexShader;
std::shared_ptr<SimplePixelShader> pixelShaderPBR;
std::shared_ptr<SimpleVertexShader> vertexShaderPBR;
std::shared_ptr<SimplePixelShader> pixelShaderToon;
// A2 shapes
std::vector<std::shared_ptr<Mesh>> shapes;
@ -62,10 +67,19 @@ private:
std::vector<Light> lights;
DirectX::XMFLOAT3 ambient;
// A9 Normalmaps & Cubemaps
std::shared_ptr<Sky> skybox;
std::shared_ptr<Sky> skybox1;
std::shared_ptr<Sky> skybox2;
Microsoft::WRL::ComPtr<ID3D11SamplerState> sampler;
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> demoCubemap;
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> demoCubemap1;
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> demoCubemap2;
std::vector<std::shared_ptr<Entity>> transpEntities;
Microsoft::WRL::ComPtr<ID3D11Buffer> constantBufferVS;
Microsoft::WRL::ComPtr<ID3D11BlendState> alphaBlendState;
Microsoft::WRL::ComPtr<ID3D11RasterizerState> backfaceRasterState;
Microsoft::WRL::ComPtr<ID3D11SamplerState> clampSampler;
int currentScene;
};

View file

@ -60,4 +60,14 @@ float getFresnel(float3 normal, float3 view, float specularValue)
return specularValue + (1 - specularValue) * pow(1 - saturate(dot(normal, view)), 5);
}
// gets normal: n*TBN, where n = sampled normal map, N = normal vector, T = processed tangent vector (t*N-dot(t,N), B = processed bitangent vector (cross(T,N))
float3 getNormal(SamplerState normalSampler, Texture2D map, float2 uv, float3 normal, float3 tangent, float intensity)
{
float3 n = map.Sample(normalSampler, uv).rgb * 2 - 1;
float3 T = normalize(tangent - normal * dot(tangent, normal)) * intensity;
float3 B = cross(T, normal);
float3x3 TBN = float3x3(T, B, normal);
return mul(n, TBN);
}
#endif

View file

@ -1,24 +1,33 @@
#include "Material.h"
Material::Material(
bool _pbr,
int _mode,
DirectX::XMFLOAT3 _tint,
float _roughness,
std::shared_ptr<SimpleVertexShader> _vertexShader,
std::shared_ptr<SimplePixelShader> _pixelShader)
{
pbr = _pbr;
mode = _mode;
tint = _tint;
roughness = _roughness;
normalIntensity = 1.f;
alpha = 1;
cutoff = 0;
vertexShader = _vertexShader;
pixelShader = _pixelShader;
uvOffset = DirectX::XMFLOAT2(0, 0);
uvScale = DirectX::XMFLOAT2(1, 1);
emitAmount = 0;
emitAmount = DirectX::XMFLOAT3(0, 0, 0);
hasAlbedoMap = false;
hasEmissiveMap = false;
hasSpecularMap = false;
hasNormalMap = false;
hasReflectionMap = false;
hasRampDiffuse = false;
hasRampSpecular = false;
outlineThickness = 1;
rimCutoff = 0.075f;
rimTint = DirectX::XMFLOAT3(0.5f, 0.5f, 0.5f);
}
Material::~Material()
@ -27,10 +36,22 @@ Material::~Material()
void Material::Activate(Transform* _transform, std::shared_ptr<Camera> _camera, DirectX::XMFLOAT3 _ambient, std::vector<Light> _lights)
{
if (pbr) ActivatePBR(_transform, _camera, _ambient, _lights);
else ActivateStandard(_transform, _camera, _ambient, _lights);
switch (mode)
{
case MATTYPE_PBR:
ActivatePBR(_transform, _camera, _ambient, _lights);
break;
case MATTYPE_TOON:
ActivateToon(_transform, _camera, _ambient, _lights);
break;
case MATTYPE_STANDARD:
default:
ActivateStandard(_transform, _camera, _ambient, _lights);
break;
}
}
#pragma region Getters
DirectX::XMFLOAT3 Material::GetTint()
{
return tint;
@ -51,11 +72,46 @@ float Material::GetRoughness()
return roughness;
}
float Material::GetEmitAmount()
float Material::GetAlpha()
{
return alpha;
}
float Material::GetCutoff()
{
return cutoff;
}
float Material::GetNormalIntensity()
{
return normalIntensity;
}
float Material::GetRimCutoff()
{
return rimCutoff;
}
float Material::GetOutlineThickness()
{
return outlineThickness;
}
DirectX::XMFLOAT3 Material::GetEmitAmount()
{
return emitAmount;
}
DirectX::XMFLOAT3 Material::GetOutlineTint()
{
return outlineTint;
}
DirectX::XMFLOAT3 Material::GetRimTint()
{
return rimTint;
}
std::shared_ptr<SimpleVertexShader> Material::GetVertexShader()
{
return vertexShader;
@ -65,7 +121,9 @@ std::shared_ptr<SimplePixelShader> Material::GetPixelShader()
{
return pixelShader;
}
#pragma endregion
#pragma region Setters
void Material::SetTint(DirectX::XMFLOAT3 _tint)
{
tint = _tint;
@ -97,11 +155,46 @@ void Material::SetRoughness(float _roughness)
}
}
void Material::SetEmitAmount(float _emit)
void Material::SetAlpha(float _alpha)
{
alpha = _alpha;
}
void Material::SetCutoff(float _cutoff)
{
cutoff = _cutoff;
}
void Material::SetNormalIntensity(float _intensity)
{
normalIntensity = _intensity;
}
void Material::SetRimCutoff(float _cutoff)
{
rimCutoff = _cutoff;
}
void Material::SetOutlineThickness(float _thickness)
{
outlineThickness = _thickness;
}
void Material::SetEmitAmount(DirectX::XMFLOAT3 _emit)
{
emitAmount = _emit;
}
void Material::SetOutlineTint(DirectX::XMFLOAT3 _tint)
{
outlineTint = _tint;
}
void Material::SetRimTint(DirectX::XMFLOAT3 _tint)
{
rimTint = _tint;
}
void Material::SetVertexShader(std::shared_ptr<SimpleVertexShader> _vertexShader)
{
vertexShader = _vertexShader;
@ -111,17 +204,22 @@ void Material::SetPixelShader(std::shared_ptr<SimplePixelShader> _pixelShader)
{
pixelShader = _pixelShader;
}
#pragma endregion
#pragma region Utility
void Material::LoadTexture(const wchar_t* _path, const char* _type, ID3D11Device* _device, ID3D11DeviceContext* _context)
{
Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> shaderResourceView;
DirectX::CreateWICTextureFromFile(_device, _context, DXCore::GetFullPathTo_Wide(_path).c_str(), 0, shaderResourceView.GetAddressOf());
PushTexture(_type, shaderResourceView);
if (_type == TEXTYPE_EMISSIVE) hasEmissiveMap = true;
if (_type == TEXTYPE_ALBEDO) hasAlbedoMap = true;
else if (_type == TEXTYPE_EMISSIVE) hasEmissiveMap = true;
else if (_type == TEXTYPE_SPECULAR) hasSpecularMap = true;
else if (_type == TEXTYPE_NORMAL) hasNormalMap = true;
else if (_type == TEXTYPE_REFLECTION) hasReflectionMap = true;
else if (_type == TEXTYPE_RAMPDIFFUSE) hasRampDiffuse = true;
else if (_type == TEXTYPE_RAMPSPECULAR) hasRampSpecular = true;
}
void Material::PushSampler(std::string _name, Microsoft::WRL::ComPtr<ID3D11SamplerState> _sampler)
@ -133,7 +231,13 @@ void Material::PushTexture(std::string _name, Microsoft::WRL::ComPtr<ID3D11Shade
{
textures.insert({ _name, _texture });
}
void Material::SwapTexture(std::string _name, Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> _newTexture)
{
textures[_name] = _newTexture;
}
#pragma endregion
#pragma region Internal Material Activation
void Material::ActivateStandard(Transform* _transform, std::shared_ptr<Camera> _camera, DirectX::XMFLOAT3 _ambient, std::vector<Light> _lights)
{
vertexShader->SetMatrix4x4("world", _transform->GetWorldMatrix());
@ -145,12 +249,16 @@ void Material::ActivateStandard(Transform* _transform, std::shared_ptr<Camera> _
pixelShader->SetFloat3("cameraPosition", _camera->GetTransform()->GetPosition());
pixelShader->SetFloat("roughness", GetRoughness());
pixelShader->SetFloat("normalIntensity", GetNormalIntensity());
pixelShader->SetFloat("alpha", GetAlpha());
pixelShader->SetFloat("cutoff", GetCutoff());
pixelShader->SetFloat2("scale", GetUVScale());
pixelShader->SetFloat2("offset", GetUVOffset());
pixelShader->SetFloat3("ambient", _ambient);
pixelShader->SetFloat("emitAmount", GetEmitAmount());
pixelShader->SetFloat3("emitAmount", GetEmitAmount());
pixelShader->SetFloat3("tint", GetTint());
pixelShader->SetFloat("lightCount", (int)_lights.size());
pixelShader->SetInt("hasAlbedoMap", (int)hasAlbedoMap);
pixelShader->SetInt("hasEmissiveMap", (int)hasEmissiveMap);
pixelShader->SetInt("hasSpecularMap", (int)hasSpecularMap);
pixelShader->SetInt("hasNormalMap", (int)hasNormalMap);
@ -181,6 +289,7 @@ void Material::ActivatePBR(Transform* _transform, std::shared_ptr<Camera> _camer
pixelShader->SetFloat2("scale", GetUVScale());
pixelShader->SetFloat2("offset", GetUVOffset());
pixelShader->SetFloat3("cameraPosition", _camera->GetTransform()->GetPosition());
pixelShader->SetFloat("normalIntensity", GetNormalIntensity());
pixelShader->SetFloat("lightCount", (int)_lights.size());
pixelShader->SetData("lights", &_lights[0], sizeof(Light) * (int)_lights.size());
pixelShader->CopyAllBufferData();
@ -195,3 +304,48 @@ void Material::ActivatePBR(Transform* _transform, std::shared_ptr<Camera> _camer
pixelShader->SetSamplerState(s.first.c_str(), s.second.Get());
}
}
void Material::ActivateToon(Transform* _transform, std::shared_ptr<Camera> _camera, DirectX::XMFLOAT3 _ambient, std::vector<Light> _lights)
{
vertexShader->SetMatrix4x4("world", _transform->GetWorldMatrix());
vertexShader->SetMatrix4x4("worldInvTranspose", _transform->GetWorldMatrixInverseTranspose());
vertexShader->SetMatrix4x4("view", _camera->GetViewMatrix());
vertexShader->SetMatrix4x4("projection", _camera->GetProjectionMatrix());
vertexShader->CopyAllBufferData();
vertexShader->SetShader();
pixelShader->SetFloat3("cameraPosition", _camera->GetTransform()->GetPosition());
pixelShader->SetFloat("roughness", GetRoughness());
pixelShader->SetFloat("normalIntensity", GetNormalIntensity());
pixelShader->SetFloat("alpha", GetAlpha());
pixelShader->SetFloat("cutoff", GetCutoff());
pixelShader->SetFloat2("scale", GetUVScale());
pixelShader->SetFloat2("offset", GetUVOffset());
pixelShader->SetFloat3("ambient", _ambient);
pixelShader->SetFloat3("emitAmount", GetEmitAmount());
pixelShader->SetFloat3("tint", GetTint());
pixelShader->SetFloat3("rimTint", GetRimTint());
pixelShader->SetFloat3("outlineTint", GetOutlineTint());
pixelShader->SetFloat("outlineThickness", GetOutlineThickness());
pixelShader->SetFloat("rimCutoff", GetRimCutoff());
pixelShader->SetFloat("lightCount", (int)_lights.size());
pixelShader->SetInt("hasAlbedoMap", (int)hasAlbedoMap);
pixelShader->SetInt("hasEmissiveMap", (int)hasEmissiveMap);
pixelShader->SetInt("hasSpecularMap", (int)hasSpecularMap);
pixelShader->SetInt("hasNormalMap", (int)hasNormalMap);
pixelShader->SetInt("hasRampDiffuse", (int)hasRampDiffuse);
pixelShader->SetInt("hasRampSpecular", (int)hasRampSpecular);
pixelShader->SetData("lights", &_lights[0], sizeof(Light) * (int)_lights.size());
pixelShader->CopyAllBufferData();
pixelShader->SetShader();
for (auto& t : textures)
{
pixelShader->SetShaderResourceView(t.first.c_str(), t.second.Get());
}
for (auto& s : samplers)
{
pixelShader->SetSamplerState(s.first.c_str(), s.second.Get());
}
}
#pragma endregion

View file

@ -17,18 +17,31 @@ constexpr auto TEXTYPE_SPECULAR = "Specular";
constexpr auto TEXTYPE_REFLECTION = "Reflection";
constexpr auto TEXTYPE_ROUGHNESS = "Roughness";
constexpr auto TEXTYPE_METALNESS = "Metalness";
constexpr auto TEXTYPE_RAMPDIFFUSE = "RampDiffuse";
constexpr auto TEXTYPE_RAMPSPECULAR = "RampSpecular";
constexpr auto MATTYPE_STANDARD = 0;
constexpr auto MATTYPE_PBR = 1;
constexpr auto MATTYPE_TOON = 2;
class Material
{
public:
Material(
bool _pbr,
int _mode,
DirectX::XMFLOAT3 _tint,
float _roughness,
std::shared_ptr<SimpleVertexShader> _vertexShader,
std::shared_ptr<SimplePixelShader> _pixelShader);
~Material();
/// <summary>
/// Prepares a material before drawing a mesh
/// </summary>
/// <param name="_transform">The transform of the entity that the material is associated with</param>
/// <param name="_camera">The camera rendering the entity this material is associated with</param>
/// <param name="_ambient">The ambient lighting value</param>
/// <param name="_lights">The lights that are affecting this object</param>
void Activate(
Transform* _transform,
std::shared_ptr<Camera> _camera,
@ -39,7 +52,14 @@ public:
DirectX::XMFLOAT2 GetUVScale();
DirectX::XMFLOAT2 GetUVOffset();
float GetRoughness();
float GetEmitAmount();
float GetAlpha();
float GetCutoff();
float GetNormalIntensity();
float GetRimCutoff();
float GetOutlineThickness();
DirectX::XMFLOAT3 GetEmitAmount();
DirectX::XMFLOAT3 GetOutlineTint();
DirectX::XMFLOAT3 GetRimTint();
std::shared_ptr<SimpleVertexShader> GetVertexShader();
std::shared_ptr<SimplePixelShader> GetPixelShader();
@ -47,18 +67,51 @@ public:
void SetUVScale(DirectX::XMFLOAT2 _scale);
void SetUVOffset(DirectX::XMFLOAT2 _offset);
void SetRoughness(float _roughness);
void SetEmitAmount(float _emit);
void SetAlpha(float _alpha);
void SetCutoff(float _cutoff);
void SetNormalIntensity(float _intensity);
void SetRimCutoff(float _cutoff);
void SetOutlineThickness(float _thickness);
void SetEmitAmount(DirectX::XMFLOAT3 _emit);
void SetOutlineTint(DirectX::XMFLOAT3 _tint);
void SetRimTint(DirectX::XMFLOAT3 _tint);
void SetVertexShader(std::shared_ptr<SimpleVertexShader> _vertexShader);
void SetPixelShader(std::shared_ptr<SimplePixelShader> _pixelShader);
/// <summary>
/// Loads and adds a texture to the material
/// </summary>
/// <param name="_path">The path of the texture relative to the root where the executable is located</param>
/// <param name="_type">The type of texture this is (see TEXTYPE_{types}; should match shader Texture2D buffers)</param>
/// <param name="_device">The DirectX device</param>
/// <param name="_context">The DirectX context</param>
void LoadTexture(const wchar_t* _path, const char* _type, ID3D11Device* _device, ID3D11DeviceContext* _context);
/// <summary>
/// Adds a sampler to the material
/// </summary>
/// <param name="_name">The name of the sampler (should match shader SamplerState buffers)</param>
/// <param name="_sampler">The sampler to add</param>
void PushSampler(std::string _name, Microsoft::WRL::ComPtr<ID3D11SamplerState> _sampler);
/// <summary>
/// Adds a texture to the material
/// </summary>
/// <param name="_name">The type of texture this is (see TEXTYPE_{types}; should match shader Texture2D buffers)</param>
/// <param name="_texture">The texture to add</param>
void PushTexture(std::string _name, Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> _texture);
/// <summary>
/// Swaps a texture on the material
/// </summary>
/// <param name="_name">The type of texture this is (see TEXTYPE_{types}; should match shader Texture2D buffers)</param>
/// <param name="_texture">The texture to swap with</param>
void SwapTexture(std::string _name, Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> _newTexture);
bool hasAlbedoMap;
bool hasEmissiveMap;
bool hasSpecularMap;
bool hasNormalMap;
bool hasReflectionMap;
bool hasRampDiffuse;
bool hasRampSpecular;
private:
void ActivateStandard(
Transform* _transform,
@ -70,11 +123,23 @@ private:
std::shared_ptr<Camera> _camera,
DirectX::XMFLOAT3 _ambient,
std::vector<Light> _lights);
void ActivateToon(
Transform* _transform,
std::shared_ptr<Camera> _camera,
DirectX::XMFLOAT3 _ambient,
std::vector<Light> _lights);
bool pbr;
int mode;
DirectX::XMFLOAT3 tint;
float roughness;
float emitAmount;
float alpha;
float cutoff;
float normalIntensity;
float outlineThickness;
float rimCutoff;
DirectX::XMFLOAT3 emitAmount;
DirectX::XMFLOAT3 outlineTint;
DirectX::XMFLOAT3 rimTint;
DirectX::XMFLOAT2 uvScale;
DirectX::XMFLOAT2 uvOffset;
std::shared_ptr<SimpleVertexShader> vertexShader;

View file

@ -5,3 +5,12 @@ A WIP playground / rudimentary graphics engine for a class
Class: 2215.IGME.540.01 - Foundations of Game Graphics Programming
Normally I have school projects on a separate account, but decided a solo advanced c++ project would be fine on my primary account ( @xLightling )
## Controls
WASD - Directional Camera Movement (Locally Oriented)
Q/E - Move Up/Down (Globally Oriented)
R/F - Look Up/Down (Pitch)
Z/C - Look Left/Right (Yaw)
1 - Load Scene 1 (Surrealist WeirdScape)
2 - Load Scene 2 (Material Test Scene)

View file

@ -14,6 +14,8 @@ cbuffer ExternalData : register(b0)
float3 cameraPosition;
float lightCount;
float normalIntensity;
Light lights[MAX_LIGHTS];
}
@ -26,38 +28,43 @@ SamplerState Sampler : register(s0);
float4 main(VertexToPixel input) : SV_TARGET
{
// normalize inputs and set uv scaling
input.normal = normalize(input.normal);
input.tangent = normalize(input.tangent);
input.uv = input.uv * scale + offset;
float3 view = normalize(cameraPosition - input.worldPosition);
// gets albedo with gamma correction
float4 albedo = pow(Albedo.Sample(Sampler, input.uv), 2.2f);
float3 N = Normal.Sample(Sampler, input.uv).rgb * 2 - 1;
float3 T = normalize(input.tangent - input.normal * dot(input.tangent, input.normal));
float3 B = cross(T, input.normal);
float3x3 TBN = float3x3(T, B, input.normal);
input.normal = mul(N, TBN);
// gets normal map
float3 normal = getNormal(Sampler, Normal, input.uv, input.normal, input.tangent, normalIntensity);
// get pbr values
float roughness = Roughness.Sample(Sampler, input.uv).r;
float metalness = Metalness.Sample(Sampler, input.uv).r;
float3 specular = lerp(F0_NON_METAL.rrr, albedo.rgb, metalness);
// pre-calculate view
float3 view = normalize(cameraPosition - input.worldPosition);
// calculate lighting
float3 light = float3(0, 0, 0);
for (int i = 0; i < lightCount; i++)
{
switch (lights[i].Type)
{
case LIGHT_TYPE_DIRECTIONAL:
light += directionalLightPBR(lights[i], input.normal, view, roughness, metalness, albedo, specular);
light += directionalLightPBR(lights[i], normal, view, roughness, metalness, albedo, specular);
break;
case LIGHT_TYPE_POINT:
light += pointLightPBR(lights[i], input.normal, view, roughness, metalness, albedo, specular, input.worldPosition);
light += pointLightPBR(lights[i], normal, view, roughness, metalness, albedo, specular, input.worldPosition);
break;
}
}
// calculate the final color value with lighting
float3 final = light;
// gamma-correct the final value
return float4(pow(final, 1.0f / 2.2f), albedo.a);
}

View file

@ -7,20 +7,26 @@
cbuffer ExternalData : register(b0)
{
float3 cameraPosition;
float roughness;
int hasNormalMap;
float2 offset;
float2 scale;
float3 ambient;
float emitAmount;
float3 tint;
float lightCount;
float3 tint;
int hasAlbedoMap;
float3 emitAmount;
int hasEmissiveMap;
float alpha;
float cutoff;
float roughness;
float normalIntensity;
int hasSpecularMap;
int hasNormalMap;
int hasReflectionMap;
Light lights[MAX_LIGHTS];
@ -36,52 +42,71 @@ SamplerState BasicSampler : register(s0);
// shader entry point
float4 main(VertexToPixel input) : SV_TARGET
{
// ensure input normals are normalized
// normalize inputs and set uv scaling
input.normal = normalize(input.normal);
input.tangent = normalize(input.tangent);
if (hasNormalMap > 0)
{
float3 unpackedNormal = Normal.Sample(BasicSampler, input.uv).rgb * 2 - 1;
float3 T = normalize(input.tangent - input.normal * dot(input.tangent, input.normal));
float3 B = cross(T, input.normal);
float3x3 TBN = float3x3(T, B, input.normal);
input.normal = mul(unpackedNormal, TBN);
}
input.uv = input.uv * scale + offset;
// view only needs calculated once, so pre-calculate here and pass it to lights
// get surface from tint, multiply it by albedo if there is one
// get alpha from exposed alpha value, multiply it by albedo alpha if there is one
float3 surface = tint;
float alphaValue = alpha;
if (hasAlbedoMap)
{
float4 sampledAlbedo = Albedo.Sample(BasicSampler, input.uv);
// discard if the alpha of the texture is less than the cutoff point
if (sampledAlbedo.a < cutoff) discard;
// gamma-correct the RGB of the albedo
float3 albedo = pow(sampledAlbedo.rgb, 2.2f);
// multiply surface and alpha by the sampled texture
surface *= albedo.rgb;
alphaValue *= sampledAlbedo.a;
}
// gets normal map if there is one
float3 normal = input.normal;
if (hasNormalMap > 0)
normal = getNormal(BasicSampler, Normal, input.uv, input.normal, input.tangent, normalIntensity);
// gets specular value; if there is a specular map, use that instead
float specular = 1;
if (hasSpecularMap > 0)
specular = Specular.Sample(BasicSampler, input.uv).r;
// pre-calculate view
float3 view = getView(cameraPosition, input.worldPosition);
float4 albedo = pow(Albedo.Sample(BasicSampler, input.uv).rgba, 2.2f);
float specular = 1;
if (hasSpecularMap > 0) specular = Specular.Sample(BasicSampler, input.uv).r;
float3 emit = float3(1, 1, 1);
if (hasEmissiveMap > 0) emit = Emissive.Sample(BasicSampler, input.uv).rgb;
float3 surface = albedo.rgb * tint;
// calculate lighting
float3 light = ambient * surface;
// loop through lights
for (int i = 0; i < lightCount; i++)
{
switch (lights[i].Type)
{
case LIGHT_TYPE_DIRECTIONAL:
light += calculateDirectionalLight(lights[i], input.normal, view, roughness, surface, specular);
light += calculateDirectionalLight(lights[i], -normal, view, roughness, surface, specular);
break;
case LIGHT_TYPE_POINT:
light += calculatePointLight(lights[i], input.normal, view, input.worldPosition, roughness, surface, specular);
light += calculatePointLight(lights[i], normal, view, input.worldPosition, roughness, surface, specular);
break;
}
}
// get emission; use emissive map if there is one
float3 emit = float3(1, 1, 1);
if (hasEmissiveMap > 0)
emit = Emissive.Sample(BasicSampler, input.uv).rgb;
// calculate the final color value with lighting and emission
float3 final = float3(light + (emit * emitAmount));
// utilize reflection map if there is one
if (hasReflectionMap > 0)
{
float3 reflVec = getReflection(view, input.normal);
float3 reflVec = getReflection(view, normal);
float3 reflCol = Reflection.Sample(BasicSampler, reflVec).rgba;
final = lerp(final, reflCol, getFresnel(input.normal, view, F0_NON_METAL));
final = lerp(final, reflCol, getFresnel(normal, view, F0_NON_METAL));
}
return float4(pow(final, 1.0f/2.2f), albedo.a);
// gamma-correct the final value
return float4(pow(final, 1.0f/2.2f), alphaValue);
}

158
ToonShader.hlsl Normal file
View file

@ -0,0 +1,158 @@
#include "Defines.hlsli"
#include "Helpers.hlsli"
#include "Lights.hlsli"
#define MAX_LIGHTS 128
cbuffer ExternalData : register(b0)
{
float3 cameraPosition;
int hasNormalMap;
float2 offset;
float2 scale;
float3 ambient;
float lightCount;
float3 tint;
int hasAlbedoMap;
float3 emitAmount;
int hasEmissiveMap;
float alpha;
float cutoff;
float roughness;
float normalIntensity;
float3 outlineTint;
float outlineThickness;
float3 rimTint;
float rimCutoff;
int hasSpecularMap;
int hasRampDiffuse;
int hasRampSpecular;
Light lights[MAX_LIGHTS];
}
Texture2D Albedo : register(t0);
Texture2D Specular : register(t1);
Texture2D Normal : register(t2);
Texture2D Emissive : register(t3);
Texture2D RampDiffuse : register(t4);
Texture2D RampSpecular : register(t5);
SamplerState BasicSampler : register(s0);
SamplerState ClampSampler : register(s1);
float GetRampDiffuse(float original)
{
if (original < 0.25f) return 0.0f;
if (original < 0.33f) return 0.33f;
if (original < 0.8f) return 0.8f;
return 1;
}
float GetRampSpecular(float original)
{
if (original < 0.6f) return 0.0f;
return 1.0f;
}
float4 main(VertexToPixel input) : SV_TARGET
{
// normalize inputs and set uv scaling
input.normal = normalize(input.normal);
input.tangent = normalize(input.tangent);
input.uv = input.uv * scale + offset;
// get surface from tint, multiply it by albedo if there is one
// get alpha from exposed alpha value, multiply it by albedo alpha if there is one
float3 surface = tint;
float alphaValue = alpha;
if (hasAlbedoMap)
{
float4 sampledAlbedo = Albedo.Sample(BasicSampler, input.uv);
// discard if the alpha of the texture is less than the cutoff point
if (sampledAlbedo.a < cutoff) discard;
// gamma-correct the RGB of the albedo
float3 albedo = pow(sampledAlbedo.rgb, 2.2f);
// multiply surface and alpha by the sampled texture
surface *= albedo.rgb;
alphaValue *= sampledAlbedo.a;
}
// gets normal map if there is one
float3 normal = input.normal;
if (hasNormalMap > 0)
normal = getNormal(BasicSampler, Normal, input.uv, input.normal, input.tangent, normalIntensity);
// gets specular value; if there is a specular map, use that instead
float specularValue = 1;
if (hasSpecularMap > 0)
specularValue = Specular.Sample(BasicSampler, input.uv).r;
// pre-calculate view
float3 view = getView(cameraPosition, input.worldPosition);
// calculate lighting
float3 light = ambient * surface;
for (int i = 0; i < lightCount; i++)
{
float3 toLight = float3(0, 0, 0);
float attenuate = 1;
switch (lights[i].Type)
{
case LIGHT_TYPE_DIRECTIONAL:
toLight = normalize(lights[i].Direction);
break;
case LIGHT_TYPE_POINT:
toLight = normalize(lights[i].Position - input.worldPosition);
attenuate = getAttenuation(lights[i].Position, input.worldPosition, lights[i].Range);
break;
}
// applies the step-like effect of toon shading to the diffuse/specular of the lighting
float diffuse = 0;
float specular = 0;
if (hasRampDiffuse > 0)
diffuse = RampDiffuse.Sample(ClampSampler, float2(getDiffuse(normal, toLight), 0)).r;
else
diffuse = GetRampDiffuse(getDiffuse(normal, toLight));
if (hasRampSpecular > 0)
specular = RampSpecular.Sample(ClampSampler, float2(calculateSpecular(normal, toLight, view, specularValue, diffuse) * roughness, 0));
else
specular = GetRampSpecular(calculateSpecular(normal, toLight, view, specularValue, diffuse) * roughness);
light += (diffuse * surface.rgb + specular) * attenuate * lights[i].Intensity * lights[i].Color;
}
// get emission; use emissive map if there is one
float3 emit = float3(1, 1, 1);
if (hasEmissiveMap > 0)
emit = Emissive.Sample(BasicSampler, input.uv).rgb;
// calculate rim/outline value (i.e. whether there is any at this pixel)
float vDotN = (1 - dot(view, input.normal));
float rimValue = GetRampSpecular(vDotN * pow(light, rimCutoff));
float outlineValue = GetRampSpecular(vDotN * outlineThickness);
// return rim lighting if there is any; takes priority over outline
if (rimValue > 0)
return float4(light + (emit * emitAmount) + rimTint, alphaValue);
// return outline if there is any
if (outlineValue > 0)
return float4(outlineTint, alphaValue);
// calculate the final color value with lighting and emission
float3 final = float3(light + (emit * emitAmount));
// gamma-correct the final value
return float4(pow(final, 1.0f / 2.2f), alphaValue);
}