添加数据文件,确保拉取后直接编译运行

pull/2/head
InkSoul 2023-07-16 20:19:37 +08:00
parent b80813c7ec
commit e71c634bfe
295 changed files with 25042 additions and 2 deletions

4
.gitignore vendored
View File

@ -31,8 +31,8 @@
*.out
*.app
# gltf model
data/
# gltf model only for github
#data/
# vs compile file
out/

13
data/README.md 100644
View File

@ -0,0 +1,13 @@
# Getting the assets
Binary assets (models, textures, etc.) are not stored in this repository and need to be downloaded manually.
## Downloading the assets
### Option 1: Run the python script
Run the [download_assets.py](../download_assets.py) python script which will download the asset pack and unpacks it into the appropriate folder.
### Option 2: Manual download
Download the asset pack from [https://vulkan.gpuinfo.org/downloads/vulkan_asset_pack_gltf.zip](https://vulkan.gpuinfo.org/downloads/vulkan_asset_pack_gltf.zip) and extract it in the ```data``` directory.

View File

@ -0,0 +1,14 @@
# Vulkan samples asset pack
This repository contains the assets used by my [Vulkan samples](https://github.com/SaschaWillems/Vulkan) and is used there as a submodule.
# Licenses and acknowledgments
- HDR textures from http://gl.ict.usc.edu/Data/HighResProbes/
- HDR textures from http://www.hdrlabs.com/sibl/archive.html
- Cerberus gun model and textures by Andrew Maximov (http://artisaverb.info/Cerberus.html)
- Tree model created using Tree IT from http://www.evolved-software.com
- glTF sample models from https://github.com/KhronosGroup/glTF-Sample-Models
- Retro UFO models 2016 by Sascha Willems licensed under the CC BY 3.0 license (https://creativecommons.org/licenses/by/3.0/)
- Vulkan scene models (and derived work) 2016 by Dominic Agoro-Ombaka and Sascha Willems, do not use and distributed without request
- Roboto Medium fonts from [Google Fonts](https://fonts.google.com), under license [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)

View File

@ -0,0 +1,4 @@
Roboto-Medium.ttf
Apache License 2.0
by Christian Robertson
https://fonts.google.com/specimen/Roboto

Binary file not shown.

BIN
data/STXINWEI.TTF 100644

Binary file not shown.

View File

@ -0,0 +1,9 @@
Additional environment cube maps put here must be
- Stored as Khronos texture format files (.ktx)
- Cube maps (with mip maps)
- 16 bit HDR RGBA signed float (VK_FORMAT_R16G16B16A16_SFLOAT)
Converting hdr environment maps can be done with [cmft](https://github.com/dariomanesku/cmft) like this:
```cmft --input "papermill.hdr" --filter none --outputNum 1 --output0 "papermill_hdr16f_cube" --output0params ktx,rgba16f,cubemap --generateMipChain true --dstFaceSize 512```

Binary file not shown.

343
data/font.fnt 100644
View File

@ -0,0 +1,343 @@
info face="Arial Black Standard" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=4,4,4,4 spacing=-8,-8
common lineHeight=46 base=36 scaleW=512 scaleH=512 pages=1 packed=0
page id=0 file="sdf.png"
chars count=97
char id=0 x=237 y=102 width=25 height=29 xoffset=-4 yoffset=11 xadvance=24 page=0 chnl=0
char id=10 x=0 y=0 width=0 height=0 xoffset=-4 yoffset=0 xadvance=0 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-4 yoffset=0 xadvance=11 page=0 chnl=0
char id=33 x=27 y=102 width=15 height=32 xoffset=-4 yoffset=8 xadvance=11 page=0 chnl=0
char id=34 x=298 y=134 width=24 height=17 xoffset=-4 yoffset=8 xadvance=16 page=0 chnl=0
char id=35 x=154 y=102 width=28 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=36 x=150 y=0 width=28 height=37 xoffset=-4 yoffset=6 xadvance=21 page=0 chnl=0
char id=37 x=117 y=102 width=37 height=32 xoffset=-4 yoffset=8 xadvance=32 page=0 chnl=0
char id=38 x=182 y=102 width=34 height=32 xoffset=-4 yoffset=8 xadvance=28 page=0 chnl=0
char id=39 x=322 y=134 width=15 height=17 xoffset=-4 yoffset=8 xadvance=9 page=0 chnl=0
char id=40 x=20 y=0 width=18 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=41 x=38 y=0 width=19 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=42 x=279 y=134 width=19 height=21 xoffset=-4 yoffset=8 xadvance=18 page=0 chnl=0
char id=43 x=186 y=134 width=26 height=26 xoffset=-4 yoffset=11 xadvance=21 page=0 chnl=0
char id=44 x=264 y=134 width=15 height=21 xoffset=-4 yoffset=25 xadvance=11 page=0 chnl=0
char id=45 x=394 y=134 width=18 height=14 xoffset=-4 yoffset=20 xadvance=11 page=0 chnl=0
char id=46 x=363 y=134 width=15 height=15 xoffset=-4 yoffset=25 xadvance=11 page=0 chnl=0
char id=47 x=83 y=102 width=17 height=32 xoffset=-4 yoffset=8 xadvance=9 page=0 chnl=0
char id=48 x=0 y=102 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=49 x=261 y=70 width=22 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=50 x=283 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=51 x=310 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=52 x=337 y=70 width=29 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=53 x=366 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=54 x=393 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=55 x=420 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=56 x=447 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=57 x=474 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=58 x=171 y=134 width=15 height=26 xoffset=-4 yoffset=14 xadvance=11 page=0 chnl=0
char id=59 x=68 y=102 width=15 height=32 xoffset=-4 yoffset=14 xadvance=11 page=0 chnl=0
char id=60 x=262 y=102 width=26 height=27 xoffset=-4 yoffset=11 xadvance=21 page=0 chnl=0
char id=61 x=238 y=134 width=26 height=22 xoffset=-4 yoffset=13 xadvance=21 page=0 chnl=0
char id=62 x=288 y=102 width=26 height=27 xoffset=-4 yoffset=11 xadvance=21 page=0 chnl=0
char id=63 x=42 y=102 width=26 height=32 xoffset=-4 yoffset=8 xadvance=20 page=0 chnl=0
char id=64 x=178 y=0 width=33 height=35 xoffset=-4 yoffset=8 xadvance=24 page=0 chnl=0
char id=65 x=244 y=0 width=33 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=66 x=277 y=0 width=30 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=67 x=307 y=0 width=30 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=68 x=337 y=0 width=30 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=69 x=367 y=0 width=28 height=32 xoffset=-4 yoffset=8 xadvance=23 page=0 chnl=0
char id=70 x=395 y=0 width=26 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=71 x=421 y=0 width=33 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=72 x=454 y=0 width=31 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=73 x=485 y=0 width=16 height=32 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=74 x=0 y=38 width=26 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=75 x=26 y=38 width=33 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=76 x=59 y=38 width=26 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=77 x=85 y=38 width=34 height=32 xoffset=-4 yoffset=8 xadvance=30 page=0 chnl=0
char id=78 x=119 y=38 width=31 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=79 x=150 y=38 width=33 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=80 x=183 y=38 width=27 height=32 xoffset=-4 yoffset=8 xadvance=23 page=0 chnl=0
char id=81 x=211 y=0 width=33 height=34 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=82 x=210 y=38 width=31 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=83 x=241 y=38 width=30 height=32 xoffset=-4 yoffset=8 xadvance=23 page=0 chnl=0
char id=84 x=271 y=38 width=30 height=32 xoffset=-4 yoffset=8 xadvance=23 page=0 chnl=0
char id=85 x=301 y=38 width=31 height=32 xoffset=-4 yoffset=8 xadvance=27 page=0 chnl=0
char id=86 x=332 y=38 width=33 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=87 x=365 y=38 width=41 height=32 xoffset=-4 yoffset=8 xadvance=32 page=0 chnl=0
char id=88 x=406 y=38 width=33 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=89 x=439 y=38 width=33 height=32 xoffset=-4 yoffset=8 xadvance=25 page=0 chnl=0
char id=90 x=472 y=38 width=29 height=32 xoffset=-4 yoffset=8 xadvance=23 page=0 chnl=0
char id=91 x=57 y=0 width=19 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=92 x=100 y=102 width=17 height=32 xoffset=-4 yoffset=8 xadvance=9 page=0 chnl=0
char id=93 x=76 y=0 width=19 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=94 x=212 y=134 width=26 height=22 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=95 x=412 y=134 width=25 height=11 xoffset=-4 yoffset=33 xadvance=16 page=0 chnl=0
char id=96 x=378 y=134 width=16 height=14 xoffset=-4 yoffset=8 xadvance=11 page=0 chnl=0
char id=97 x=314 y=102 width=26 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=98 x=0 y=70 width=26 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=99 x=340 y=102 width=26 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=100 x=26 y=70 width=26 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=101 x=366 y=102 width=27 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=102 x=52 y=70 width=21 height=32 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=103 x=73 y=70 width=26 height=32 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=104 x=99 y=70 width=25 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=105 x=124 y=70 width=15 height=32 xoffset=-4 yoffset=8 xadvance=11 page=0 chnl=0
char id=106 x=0 y=0 width=20 height=38 xoffset=-4 yoffset=8 xadvance=11 page=0 chnl=0
char id=107 x=139 y=70 width=27 height=32 xoffset=-4 yoffset=8 xadvance=21 page=0 chnl=0
char id=108 x=166 y=70 width=15 height=32 xoffset=-4 yoffset=8 xadvance=11 page=0 chnl=0
char id=109 x=393 y=102 width=37 height=26 xoffset=-4 yoffset=14 xadvance=32 page=0 chnl=0
char id=110 x=430 y=102 width=25 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=111 x=455 y=102 width=27 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=112 x=181 y=70 width=26 height=32 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=113 x=207 y=70 width=26 height=32 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=114 x=482 y=102 width=22 height=26 xoffset=-4 yoffset=14 xadvance=14 page=0 chnl=0
char id=115 x=0 y=134 width=27 height=26 xoffset=-4 yoffset=14 xadvance=20 page=0 chnl=0
char id=116 x=216 y=102 width=21 height=31 xoffset=-4 yoffset=9 xadvance=14 page=0 chnl=0
char id=117 x=27 y=134 width=25 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=118 x=52 y=134 width=27 height=26 xoffset=-4 yoffset=14 xadvance=20 page=0 chnl=0
char id=119 x=79 y=134 width=39 height=26 xoffset=-4 yoffset=14 xadvance=30 page=0 chnl=0
char id=120 x=118 y=134 width=29 height=26 xoffset=-4 yoffset=14 xadvance=21 page=0 chnl=0
char id=121 x=233 y=70 width=28 height=32 xoffset=-4 yoffset=14 xadvance=20 page=0 chnl=0
char id=122 x=147 y=134 width=24 height=26 xoffset=-4 yoffset=14 xadvance=18 page=0 chnl=0
char id=123 x=95 y=0 width=21 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=124 x=137 y=0 width=13 height=38 xoffset=-4 yoffset=8 xadvance=9 page=0 chnl=0
char id=125 x=116 y=0 width=21 height=38 xoffset=-4 yoffset=8 xadvance=12 page=0 chnl=0
char id=126 x=337 y=134 width=26 height=17 xoffset=-4 yoffset=15 xadvance=21 page=0 chnl=0
kernings count=241
kerning first=102 second=101 amount=-1
kerning first=76 second=89 amount=-2
kerning first=76 second=79 amount=-1
kerning first=80 second=65 amount=-3
kerning first=102 second=111 amount=-1
kerning first=86 second=97 amount=-1
kerning first=84 second=114 amount=-1
kerning first=119 second=44 amount=-2
kerning first=65 second=79 amount=-1
kerning first=86 second=67 amount=-1
kerning first=66 second=44 amount=1
kerning first=84 second=45 amount=-2
kerning first=80 second=46 amount=-6
kerning first=65 second=89 amount=-3
kerning first=67 second=46 amount=1
kerning first=112 second=119 amount=-1
kerning first=84 second=67 amount=-1
kerning first=84 second=58 amount=-1
kerning first=84 second=59 amount=-1
kerning first=114 second=113 amount=1
kerning first=102 second=63 amount=3
kerning first=80 second=111 amount=-1
kerning first=86 second=114 amount=-1
kerning first=89 second=67 amount=-2
kerning first=114 second=111 amount=1
kerning first=88 second=71 amount=-1
kerning first=80 second=101 amount=-1
kerning first=87 second=46 amount=-2
kerning first=75 second=117 amount=-1
kerning first=114 second=100 amount=1
kerning first=86 second=117 amount=-1
kerning first=87 second=79 amount=-1
kerning first=86 second=79 amount=-1
kerning first=81 second=86 amount=-1
kerning first=82 second=81 amount=-1
kerning first=115 second=119 amount=-1
kerning first=65 second=85 amount=-1
kerning first=68 second=87 amount=1
kerning first=112 second=46 amount=-1
kerning first=81 second=89 amount=-2
kerning first=114 second=97 amount=1
kerning first=84 second=97 amount=-2
kerning first=65 second=86 amount=-2
kerning first=84 second=99 amount=-2
kerning first=89 second=100 amount=-3
kerning first=102 second=102 amount=1
kerning first=114 second=103 amount=1
kerning first=87 second=104 amount=1
kerning first=86 second=105 amount=1
kerning first=114 second=106 amount=1
kerning first=74 second=111 amount=-1
kerning first=99 second=108 amount=-1
kerning first=84 second=109 amount=-1
kerning first=114 second=110 amount=2
kerning first=118 second=111 amount=-1
kerning first=89 second=112 amount=-2
kerning first=70 second=114 amount=-1
kerning first=97 second=116 amount=-1
kerning first=89 second=117 amount=-2
kerning first=76 second=119 amount=-1
kerning first=101 second=120 amount=-1
kerning first=99 second=121 amount=-1
kerning first=82 second=119 amount=1
kerning first=66 second=65 amount=-1
kerning first=81 second=84 amount=-1
kerning first=80 second=44 amount=-6
kerning first=97 second=103 amount=1
kerning first=111 second=120 amount=-1
kerning first=65 second=112 amount=1
kerning first=84 second=46 amount=-5
kerning first=86 second=101 amount=-2
kerning first=119 second=104 amount=1
kerning first=114 second=117 amount=1
kerning first=121 second=44 amount=-3
kerning first=121 second=46 amount=-3
kerning first=89 second=97 amount=-3
kerning first=75 second=101 amount=-1
kerning first=65 second=118 amount=-1
kerning first=70 second=97 amount=-1
kerning first=119 second=113 amount=-1
kerning first=75 second=111 amount=-1
kerning first=75 second=71 amount=-1
kerning first=87 second=97 amount=-1
kerning first=101 second=103 amount=1
kerning first=87 second=105 amount=1
kerning first=81 second=46 amount=1
kerning first=86 second=71 amount=-1
kerning first=67 second=44 amount=1
kerning first=114 second=99 amount=1
kerning first=70 second=44 amount=-5
kerning first=66 second=85 amount=-1
kerning first=76 second=86 amount=-2
kerning first=89 second=59 amount=-2
kerning first=84 second=44 amount=-5
kerning first=120 second=101 amount=-1
kerning first=108 second=121 amount=1
kerning first=89 second=101 amount=-3
kerning first=114 second=46 amount=-2
kerning first=121 second=99 amount=-1
kerning first=114 second=101 amount=1
kerning first=101 second=118 amount=-1
kerning first=81 second=44 amount=1
kerning first=74 second=121 amount=-1
kerning first=82 second=79 amount=-1
kerning first=89 second=113 amount=-3
kerning first=119 second=46 amount=-3
kerning first=68 second=89 amount=-1
kerning first=119 second=111 amount=-1
kerning first=102 second=46 amount=-2
kerning first=86 second=44 amount=-4
kerning first=114 second=109 amount=2
kerning first=79 second=89 amount=-2
kerning first=86 second=65 amount=-2
kerning first=103 second=114 amount=1
kerning first=102 second=33 amount=3
kerning first=84 second=122 amount=-1
kerning first=86 second=46 amount=-4
kerning first=70 second=101 amount=-1
kerning first=99 second=104 amount=-1
kerning first=89 second=44 amount=-5
kerning first=68 second=86 amount=-1
kerning first=88 second=79 amount=-1
kerning first=82 second=89 amount=-1
kerning first=75 second=67 amount=-1
kerning first=98 second=118 amount=-1
kerning first=89 second=65 amount=-3
kerning first=114 second=107 amount=1
kerning first=84 second=101 amount=-2
kerning first=89 second=79 amount=-2
kerning first=114 second=118 amount=2
kerning first=84 second=111 amount=-2
kerning first=120 second=111 amount=-1
kerning first=82 second=111 amount=-1
kerning first=79 second=87 amount=-1
kerning first=84 second=71 amount=-1
kerning first=118 second=100 amount=-1
kerning first=74 second=97 amount=-1
kerning first=89 second=45 amount=-3
kerning first=84 second=81 amount=-1
kerning first=114 second=115 amount=1
kerning first=68 second=46 amount=-1
kerning first=79 second=44 amount=-1
kerning first=121 second=100 amount=-1
kerning first=114 second=112 amount=1
kerning first=87 second=71 amount=-1
kerning first=89 second=83 amount=-1
kerning first=86 second=111 amount=-2
kerning first=87 second=111 amount=-1
kerning first=70 second=46 amount=-5
kerning first=81 second=65 amount=1
kerning first=114 second=58 amount=1
kerning first=84 second=104 amount=1
kerning first=114 second=116 amount=2
kerning first=87 second=101 amount=-1
kerning first=65 second=67 amount=-1
kerning first=70 second=65 amount=-3
kerning first=65 second=81 amount=-1
kerning first=118 second=46 amount=-3
kerning first=103 second=121 amount=1
kerning first=87 second=67 amount=-1
kerning first=74 second=46 amount=-1
kerning first=76 second=67 amount=-1
kerning first=75 second=79 amount=-1
kerning first=87 second=44 amount=-1
kerning first=89 second=58 amount=-2
kerning first=86 second=59 amount=-1
kerning first=114 second=121 amount=2
kerning first=121 second=97 amount=-1
kerning first=76 second=87 amount=-1
kerning first=118 second=44 amount=-3
kerning first=79 second=84 amount=-1
kerning first=111 second=119 amount=-1
kerning first=111 second=118 amount=-1
kerning first=84 second=108 amount=1
kerning first=82 second=117 amount=-1
kerning first=89 second=46 amount=-5
kerning first=111 second=122 amount=1
kerning first=84 second=65 amount=-2
kerning first=74 second=117 amount=-1
kerning first=107 second=111 amount=-1
kerning first=85 second=65 amount=-1
kerning first=111 second=121 amount=-1
kerning first=114 second=59 amount=1
kerning first=65 second=84 amount=-2
kerning first=89 second=118 amount=-1
kerning first=86 second=58 amount=-1
kerning first=87 second=100 amount=-1
kerning first=76 second=84 amount=-2
kerning first=102 second=32 amount=2
kerning first=111 second=46 amount=-1
kerning first=114 second=114 amount=1
kerning first=82 second=86 amount=-1
kerning first=74 second=44 amount=-1
kerning first=118 second=99 amount=-1
kerning first=86 second=81 amount=-1
kerning first=79 second=88 amount=-2
kerning first=85 second=44 amount=-1
kerning first=118 second=101 amount=-1
kerning first=88 second=67 amount=-1
kerning first=79 second=86 amount=-1
kerning first=75 second=118 amount=-1
kerning first=76 second=85 amount=-1
kerning first=107 second=101 amount=-1
kerning first=84 second=117 amount=-1
kerning first=120 second=99 amount=-1
kerning first=75 second=121 amount=-1
kerning first=84 second=115 amount=-2
kerning first=114 second=44 amount=-2
kerning first=82 second=71 amount=-1
kerning first=85 second=46 amount=-1
kerning first=70 second=111 amount=-1
kerning first=97 second=118 amount=-1
kerning first=121 second=111 amount=-1
kerning first=79 second=65 amount=-1
kerning first=82 second=101 amount=-1
kerning first=65 second=71 amount=-1
kerning first=102 second=44 amount=-2
kerning first=112 second=121 amount=-1
kerning first=74 second=101 amount=-1
kerning first=86 second=45 amount=-1
kerning first=121 second=101 amount=-1
kerning first=84 second=79 amount=-1
kerning first=89 second=111 amount=-3
kerning first=118 second=113 amount=-1
kerning first=74 second=65 amount=-1
kerning first=76 second=71 amount=-1
kerning first=79 second=46 amount=-1
kerning first=68 second=65 amount=-1
kerning first=114 second=108 amount=1
kerning first=71 second=44 amount=1
kerning first=110 second=118 amount=-1
kerning first=82 second=85 amount=-1
kerning first=87 second=117 amount=-1
kerning first=120 second=100 amount=-1
kerning first=80 second=97 amount=-1
kerning first=99 second=107 amount=-1
kerning first=66 second=46 amount=1
kerning first=89 second=71 amount=-2
kerning first=107 second=121 amount=1
kerning first=82 second=67 amount=-1
kerning first=84 second=121 amount=-1

View File

@ -0,0 +1,10 @@
# Cesium Man
## Screenshot
![screenshot](screenshot/screenshot.gif)
## License Information
Donated by Cesium for glTF testing. Please follow the [Cesium Trademark Terms and Conditions](https://github.com/AnalyticalGraphicsInc/cesium/wiki/CesiumTrademark.pdf).
This model is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

View File

@ -0,0 +1,15 @@
# Damaged Helmet
## Screenshot
![screenshot](screenshot/screenshot.png)
## License Information
Battle Damaged Sci-fi Helmet - PBR by [theblueturtle_](https://sketchfab.com/theblueturtle_), published under a Creative Commons Attribution-NonCommercial license
https://sketchfab.com/models/b81008d513954189a063ff901f7abfe4
## Modifications
The original model was built on an early draft of glTF 2.0 that did not become final. This new model has been imported and re-exported from Blender to bring it into alignment with the final release glTF 2.0 specification.

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

View File

@ -0,0 +1,12 @@
# Flight Helmet
## Screenshot
![screenshot](screenshot/screenshot.jpg)
## License Information
Donated by Microsoft for glTF testing
[![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png)](http://creativecommons.org/publicdomain/zero/1.0/)
To the extent possible under law, Microsoft has waived all copyright and related or neighboring rights to this asset.

Binary file not shown.

View File

@ -0,0 +1,660 @@
{
"accessors": [
{
"bufferView": 0,
"componentType": 5126,
"count": 7165,
"type": "VEC2"
},
{
"bufferView": 1,
"componentType": 5126,
"count": 7165,
"type": "VEC3"
},
{
"bufferView": 2,
"componentType": 5126,
"count": 7165,
"type": "VEC4"
},
{
"bufferView": 3,
"componentType": 5126,
"count": 7165,
"type": "VEC3",
"max": [
0.131662,
0.137638986,
0.10078799
],
"min": [
-0.131333,
-0.028128,
-0.137763992
]
},
{
"bufferView": 4,
"componentType": 5123,
"count": 24408,
"type": "SCALAR"
},
{
"bufferView": 5,
"componentType": 5126,
"count": 12552,
"type": "VEC2"
},
{
"bufferView": 6,
"componentType": 5126,
"count": 12552,
"type": "VEC3"
},
{
"bufferView": 7,
"componentType": 5126,
"count": 12552,
"type": "VEC4"
},
{
"bufferView": 8,
"componentType": 5126,
"count": 12552,
"type": "VEC3",
"max": [
0.11722149,
0.196387976,
0.132422984
],
"min": [
-0.11722149,
-0.196387976,
-0.132422984
]
},
{
"bufferView": 9,
"componentType": 5123,
"count": 65688,
"type": "SCALAR"
},
{
"bufferView": 10,
"componentType": 5126,
"count": 436,
"type": "VEC2"
},
{
"bufferView": 11,
"componentType": 5126,
"count": 436,
"type": "VEC3"
},
{
"bufferView": 12,
"componentType": 5126,
"count": 436,
"type": "VEC4"
},
{
"bufferView": 13,
"componentType": 5126,
"count": 436,
"type": "VEC3",
"max": [
0.09527509,
0.114654,
-0.08429489
],
"min": [
-0.0952748954,
0.0551489964,
-0.14295499
]
},
{
"bufferView": 14,
"componentType": 5123,
"count": 2208,
"type": "SCALAR"
},
{
"bufferView": 15,
"componentType": 5126,
"count": 16077,
"type": "VEC2"
},
{
"bufferView": 16,
"componentType": 5126,
"count": 16077,
"type": "VEC3"
},
{
"bufferView": 17,
"componentType": 5126,
"count": 16077,
"type": "VEC4"
},
{
"bufferView": 18,
"componentType": 5126,
"count": 16077,
"type": "VEC3",
"max": [
0.1572095,
0.2716865,
0.162181988
],
"min": [
-0.1572095,
-0.2716865,
-0.162181988
]
},
{
"bufferView": 19,
"componentType": 5123,
"count": 60288,
"type": "SCALAR"
},
{
"bufferView": 20,
"componentType": 5126,
"count": 24136,
"type": "VEC2"
},
{
"bufferView": 21,
"componentType": 5126,
"count": 24136,
"type": "VEC3"
},
{
"bufferView": 22,
"componentType": 5126,
"count": 24136,
"type": "VEC4"
},
{
"bufferView": 23,
"componentType": 5126,
"count": 24136,
"type": "VEC3",
"max": [
0.1504075,
0.328366965,
0.173673
],
"min": [
-0.1504075,
-0.328366965,
-0.173673
]
},
{
"bufferView": 24,
"componentType": 5123,
"count": 131574,
"type": "SCALAR"
}
],
"asset": {
"generator": "glTF Tools for Unity",
"version": "2.0"
},
"bufferViews": [
{
"buffer": 0,
"byteLength": 57320
},
{
"buffer": 0,
"byteOffset": 57320,
"byteLength": 85980
},
{
"buffer": 0,
"byteOffset": 143300,
"byteLength": 114640
},
{
"buffer": 0,
"byteOffset": 257940,
"byteLength": 85980
},
{
"buffer": 0,
"byteOffset": 343920,
"byteLength": 48816
},
{
"buffer": 0,
"byteOffset": 392736,
"byteLength": 100416
},
{
"buffer": 0,
"byteOffset": 493152,
"byteLength": 150624
},
{
"buffer": 0,
"byteOffset": 643776,
"byteLength": 200832
},
{
"buffer": 0,
"byteOffset": 844608,
"byteLength": 150624
},
{
"buffer": 0,
"byteOffset": 995232,
"byteLength": 131376
},
{
"buffer": 0,
"byteOffset": 1126608,
"byteLength": 3488
},
{
"buffer": 0,
"byteOffset": 1130096,
"byteLength": 5232
},
{
"buffer": 0,
"byteOffset": 1135328,
"byteLength": 6976
},
{
"buffer": 0,
"byteOffset": 1142304,
"byteLength": 5232
},
{
"buffer": 0,
"byteOffset": 1147536,
"byteLength": 4416
},
{
"buffer": 0,
"byteOffset": 1151952,
"byteLength": 128616
},
{
"buffer": 0,
"byteOffset": 1280568,
"byteLength": 192924
},
{
"buffer": 0,
"byteOffset": 1473492,
"byteLength": 257232
},
{
"buffer": 0,
"byteOffset": 1730724,
"byteLength": 192924
},
{
"buffer": 0,
"byteOffset": 1923648,
"byteLength": 120576
},
{
"buffer": 0,
"byteOffset": 2044224,
"byteLength": 193088
},
{
"buffer": 0,
"byteOffset": 2237312,
"byteLength": 289632
},
{
"buffer": 0,
"byteOffset": 2526944,
"byteLength": 386176
},
{
"buffer": 0,
"byteOffset": 2913120,
"byteLength": 289632
},
{
"buffer": 0,
"byteOffset": 3202752,
"byteLength": 263148
}
],
"buffers": [
{
"uri": "FlightHelmet.bin",
"byteLength": 3465900
}
],
"images": [
{
"uri": "FlightHelmet_baseColor.png"
},
{
"uri": "FlightHelmet_occlusionRoughnessMetallic.png"
},
{
"uri": "FlightHelmet_normal.png"
},
{
"uri": "FlightHelmet_baseColor1.png"
},
{
"uri": "FlightHelmet_occlusionRoughnessMetallic1.png"
},
{
"uri": "FlightHelmet_normal1.png"
},
{
"uri": "FlightHelmet_baseColor2.png"
},
{
"uri": "FlightHelmet_occlusionRoughnessMetallic2.png"
},
{
"uri": "FlightHelmet_normal2.png"
},
{
"uri": "FlightHelmet_baseColor3.png"
},
{
"uri": "FlightHelmet_occlusionRoughnessMetallic3.png"
},
{
"uri": "FlightHelmet_normal3.png"
},
{
"uri": "FlightHelmet_baseColor4.png"
},
{
"uri": "FlightHelmet_occlusionRoughnessMetallic4.png"
},
{
"uri": "FlightHelmet_normal4.png"
}
],
"meshes": [
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 0,
"NORMAL": 1,
"TANGENT": 2,
"POSITION": 3
},
"indices": 4,
"material": 0
}
],
"name": "GlassPlastic_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 5,
"NORMAL": 6,
"TANGENT": 7,
"POSITION": 8
},
"indices": 9,
"material": 1
}
],
"name": "LeatherParts_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 10,
"NORMAL": 11,
"TANGENT": 12,
"POSITION": 13
},
"indices": 14,
"material": 2
}
],
"name": "Lenses_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 15,
"NORMAL": 16,
"TANGENT": 17,
"POSITION": 18
},
"indices": 19,
"material": 3
}
],
"name": "MetalParts_low"
},
{
"primitives": [
{
"attributes": {
"TEXCOORD_0": 20,
"NORMAL": 21,
"TANGENT": 22,
"POSITION": 23
},
"indices": 24,
"material": 4
}
],
"name": "RubberWood_low"
}
],
"materials": [
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 0
},
"metallicRoughnessTexture": {
"index": 1
}
},
"normalTexture": {
"index": 2
},
"occlusionTexture": {
"index": 1
},
"name": "GlassPlasticMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 3
},
"metallicRoughnessTexture": {
"index": 4
}
},
"normalTexture": {
"index": 5
},
"occlusionTexture": {
"index": 4
},
"name": "LeatherPartsMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 6
},
"metallicRoughnessTexture": {
"index": 7
}
},
"normalTexture": {
"index": 8
},
"occlusionTexture": {
"index": 7
},
"alphaMode": "BLEND",
"name": "LensesMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 9
},
"metallicRoughnessTexture": {
"index": 10
}
},
"normalTexture": {
"index": 11
},
"occlusionTexture": {
"index": 10
},
"name": "MetalPartsMat"
},
{
"pbrMetallicRoughness": {
"baseColorTexture": {
"index": 12
},
"metallicRoughnessTexture": {
"index": 13
}
},
"normalTexture": {
"index": 14
},
"occlusionTexture": {
"index": 13
},
"name": "RubberWoodMat"
}
],
"nodes": [
{
"mesh": 0,
"name": "GlassPlastic_low"
},
{
"mesh": 1,
"translation": [
0.000434499962,
0.032592997,
0.011676996
],
"name": "LeatherParts_low"
},
{
"mesh": 2,
"name": "Lenses_low"
},
{
"mesh": 3,
"translation": [
0.0331545,
-0.1488645,
-0.0242879968
],
"name": "MetalParts_low"
},
{
"mesh": 4,
"translation": [
-0.00190849893,
-0.111985,
-0.013313001
],
"name": "RubberWood_low"
},
{
"children": [
0,
1,
2,
3,
4
],
"rotation": [
0.0,
1.0,
0.0,
0.0
],
"name": "FlightHelmet"
}
],
"scene": 0,
"scenes": [
{
"nodes": [
5
]
}
],
"textures": [
{
"source": 0
},
{
"source": 1
},
{
"source": 2
},
{
"source": 3
},
{
"source": 4
},
{
"source": 5
},
{
"source": 6
},
{
"source": 7
},
{
"source": 8
},
{
"source": 9
},
{
"source": 10
},
{
"source": 11
},
{
"source": 12
},
{
"source": 13
},
{
"source": 14
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,3 @@
Model by piacenti (http://opengameart.org/content/knight-2)
Licensed under CC-BY 3.0

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 687 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 KiB

View File

@ -0,0 +1,5 @@
Buster Drone by LaVADraGoN, published under a [Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)](https://creativecommons.org/licenses/by-nc/4.0/) license
https://sketchfab.com/models/294e79652f494130ad2ab00a13fdbafd
https://sketchfab.com/lavadragon

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,15 @@
#version 450
layout (location = 0) in vec3 inPos;
layout(push_constant) uniform PushConsts {
layout (offset = 0) mat4 mvp;
} pushConsts;
layout (location = 0) out vec3 outUVW;
void main()
{
outUVW = inPos;
gl_Position = pushConsts.mvp * vec4(inPos.xyz, 1.0);
}

View File

@ -0,0 +1,90 @@
#version 450
layout (location = 0) in vec2 inUV;
layout (location = 0) out vec4 outColor;
layout (constant_id = 0) const uint NUM_SAMPLES = 1024u;
const float PI = 3.1415926536;
// Based omn http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
float random(vec2 co)
{
float a = 12.9898;
float b = 78.233;
float c = 43758.5453;
float dt= dot(co.xy ,vec2(a,b));
float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
vec2 hammersley2d(uint i, uint N)
{
// Radical inverse based on http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
uint bits = (i << 16u) | (i >> 16u);
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
float rdi = float(bits) * 2.3283064365386963e-10;
return vec2(float(i) /float(N), rdi);
}
// Based on http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf
vec3 importanceSample_GGX(vec2 Xi, float roughness, vec3 normal)
{
// Maps a 2D point to a hemisphere with spread based on roughness
float alpha = roughness * roughness;
float phi = 2.0 * PI * Xi.x + random(normal.xz) * 0.1;
float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (alpha*alpha - 1.0) * Xi.y));
float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
// Tangent space
vec3 up = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangentX = normalize(cross(up, normal));
vec3 tangentY = normalize(cross(normal, tangentX));
// Convert to world Space
return normalize(tangentX * H.x + tangentY * H.y + normal * H.z);
}
// Geometric Shadowing function
float G_SchlicksmithGGX(float dotNL, float dotNV, float roughness)
{
float k = (roughness * roughness) / 2.0;
float GL = dotNL / (dotNL * (1.0 - k) + k);
float GV = dotNV / (dotNV * (1.0 - k) + k);
return GL * GV;
}
vec2 BRDF(float NoV, float roughness)
{
// Normal always points along z-axis for the 2D lookup
const vec3 N = vec3(0.0, 0.0, 1.0);
vec3 V = vec3(sqrt(1.0 - NoV*NoV), 0.0, NoV);
vec2 LUT = vec2(0.0);
for(uint i = 0u; i < NUM_SAMPLES; i++) {
vec2 Xi = hammersley2d(i, NUM_SAMPLES);
vec3 H = importanceSample_GGX(Xi, roughness, N);
vec3 L = 2.0 * dot(V, H) * H - V;
float dotNL = max(dot(N, L), 0.0);
float dotNV = max(dot(N, V), 0.0);
float dotVH = max(dot(V, H), 0.0);
float dotNH = max(dot(H, N), 0.0);
if (dotNL > 0.0) {
float G = G_SchlicksmithGGX(dotNL, dotNV, roughness);
float G_Vis = (G * dotVH) / (dotNH * dotNV);
float Fc = pow(1.0 - dotVH, 5.0);
LUT += vec2((1.0 - Fc) * G_Vis, Fc * G_Vis);
}
}
return LUT / float(NUM_SAMPLES);
}
void main()
{
outColor = vec4(BRDF(inUV.s, inUV.t), 0.0, 1.0);
}

View File

@ -0,0 +1,9 @@
#version 450
layout (location = 0) out vec2 outUV;
void main()
{
outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
}

View File

@ -0,0 +1,37 @@
// Generates an irradiance cube from an environment map using convolution
#version 450
layout (location = 0) in vec3 inPos;
layout (location = 0) out vec4 outColor;
layout (binding = 0) uniform samplerCube samplerEnv;
layout(push_constant) uniform PushConsts {
layout (offset = 64) float deltaPhi;
layout (offset = 68) float deltaTheta;
} consts;
#define PI 3.1415926535897932384626433832795
void main()
{
vec3 N = normalize(inPos);
vec3 up = vec3(0.0, 1.0, 0.0);
vec3 right = normalize(cross(up, N));
up = cross(N, right);
const float TWO_PI = PI * 2.0;
const float HALF_PI = PI * 0.5;
vec3 color = vec3(0.0);
uint sampleCount = 0u;
for (float phi = 0.0; phi < TWO_PI; phi += consts.deltaPhi) {
for (float theta = 0.0; theta < HALF_PI; theta += consts.deltaTheta) {
vec3 tempVec = cos(phi) * right + sin(phi) * up;
vec3 sampleVector = cos(theta) * N + sin(theta) * tempVec;
color += texture(samplerEnv, sampleVector).rgb * cos(theta) * sin(theta);
sampleCount++;
}
}
outColor = vec4(PI * color / float(sampleCount), 1.0);
}

View File

@ -0,0 +1,158 @@
#version 450
layout (set = 1, binding = 0) uniform sampler2D samplerColorMap;
layout (set = 2, binding = 0) uniform sampler2D samplerNormalMap;
//metal in chanel b, roughness in chanel g
layout (set = 3, binding = 0) uniform sampler2D samplerMetalRoughMap;
layout (set = 4, binding = 0) uniform sampler2D samplerEmissiveMap;
layout (set = 0, binding = 0) uniform UBOScene
{
mat4 projection;
mat4 view;
vec4 lightPos;
vec4 viewPos;
vec4 bFlagSet;
} uboScene;
layout (set = 0, binding = 1) uniform samplerCube samplerIrradiance;
layout (set = 0, binding = 2) uniform sampler2D samplerBRDFLUT;
layout (set = 0, binding = 3) uniform samplerCube prefilteredMap;
layout(set = 5, binding = 0) uniform UBOMaterial
{
vec3 emissiveFactor;
vec4 baseColorFactor;
} materials;
layout (location = 0) in vec3 inNormal;
layout (location = 1) in vec3 inWorldPos;
layout (location = 2) in vec2 inUV;
layout (location = 3) in vec3 inTangent;
layout (location = 0) out vec4 outFragColor;
const float PI = 3.14159265359;
//-------------------------------------------------------------------------
float D_GGX(float dotNH, float roughness)
{
float alpha = roughness * roughness;
float alpha2 = alpha * alpha;
float denom = dotNH * dotNH * (alpha2 - 1.0) + 1.0;
return (alpha2)/(PI * denom*denom);
}
// Geometric Shadowing function --------------------------------------
float G_SchlicksmithGGX(float dotNL, float dotNV, float roughness)
{
float r = (roughness + 1.0);
float k = (r*r) / 8.0;
float GL = dotNL / (dotNL * (1.0 - k) + k);
float GV = dotNV / (dotNV * (1.0 - k) + k);
return GL * GV;
}
// Fresnel function ----------------------------------------------------
vec3 F_Schlick(float cosTheta, vec3 F0)
{
return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}
vec3 F_SchlickR(float cosTheta, vec3 F0, float roughness)
{
return F0 + (max(vec3(1.0 - roughness), F0) - F0) * pow(1.0 - cosTheta, 5.0);
}
vec3 prefilteredReflection(vec3 R, float roughness)
{
const float MAX_REFLECTION_LOD = 9.0; // todo: param/const
float lod = roughness * MAX_REFLECTION_LOD;
float lodf = floor(lod);
float lodc = ceil(lod);
vec3 a = textureLod(prefilteredMap, R, lodf).rgb;
vec3 b = textureLod(prefilteredMap, R, lodc).rgb;
return mix(a, b, lod - lodf);
}
vec3 specularContribution(vec3 L, vec3 V, vec3 N, vec3 F0, float metallic, float roughness, vec3 albedo)
{
// Precalculate vectors and dot products
vec3 H = normalize (V + L);
float dotNH = clamp(dot(N, H), 1e-4, 1.0);
float dotNV = clamp(dot(N, V), 1e-4, 1.0);
float dotNL = clamp(dot(N, L), 1e-4, 1.0);
// Light color fixed
vec3 lightColor = vec3(1.0);
vec3 color = vec3(0.0);
if (dotNL > 0.0) {
// D = Normal distribution (Distribution of the microfacets)
float D = D_GGX(dotNH, roughness);
// G = Geometric shadowing term (Microfacets shadowing)
float G = G_SchlicksmithGGX(dotNL, dotNV, roughness);
// F = Fresnel factor (Reflectance depending on angle of incidence)
vec3 F = F_Schlick(dotNV, F0);
vec3 spec = D * F * G / (4.0 * dotNL * dotNV + 0.001);
vec3 kD = (vec3(1.0) - F) * (1.0 - metallic);
color += (kD * albedo / PI + spec) * dotNL;
}
return color;
}
// ----------------------------------------------------------------------------
void main()
{
vec3 N = normalize(inNormal);
vec3 realN = N;
if(uboScene.bFlagSet.x > 0.0) //Flag to Control Normal mapping
{
vec3 T = normalize(inTangent);
vec3 B = cross(N, T);
mat3 TBN = mat3(T, B, N);
realN = TBN * normalize(texture(samplerNormalMap, inUV).rgb * 2.0 - vec3(1.0));
}
vec3 V = normalize(uboScene.viewPos.xyz - inWorldPos);
vec2 roughMetalic = texture(samplerMetalRoughMap, inUV).gb;
vec3 albedo = texture(samplerColorMap, inUV).rgb * materials.baseColorFactor.xyz;
vec3 Lo = vec3(0.0);
vec3 F0 = vec3(0.04);
F0 = mix(F0, albedo, roughMetalic.y);
//for(int i = 0; i < lightLength; ++i)
{
vec3 L = normalize(uboScene.lightPos.xyz - inWorldPos);
Lo += specularContribution(L, V, N, F0, roughMetalic.y, roughMetalic.x, albedo);
}
vec3 R = reflect(-V, realN);
vec2 brdf = texture(samplerBRDFLUT, vec2(max(dot(N, V), 0.0), roughMetalic.x)).rg;
vec3 reflection = prefilteredReflection(R, roughMetalic.x).rgb;
vec3 irradiance = texture(samplerIrradiance, N).rgb;
// Diffuse based on irradiance
vec3 diffuse = irradiance * albedo;
vec3 F = F_SchlickR(max(dot(N, V), 0.0), F0, roughMetalic.x);
// Specular reflectance
vec3 specular = reflection * (F * brdf.x + brdf.y);
// Ambient part
vec3 kD = 1.0 - F;
kD *= 1.0 - roughMetalic.y;
vec3 indirectRadiance = vec3(0.0);
if(uboScene.bFlagSet.y > 0.0)
{
indirectRadiance = (kD * diffuse + specular);
}
//Emissive color
vec3 emissive = texture(samplerEmissiveMap, inUV).rgb;
// Combine with ambient
vec3 color = indirectRadiance + Lo + emissive * materials.emissiveFactor;
outFragColor = vec4(color, 1.0);
}

View File

@ -0,0 +1,38 @@
#version 450
layout (location = 0) in vec3 inPos;
layout (location = 1) in vec3 inNormal;
layout (location = 2) in vec2 inUV;
layout (location = 3) in vec3 inColor;
layout (location = 4) in vec3 inTangent;
layout (set = 0, binding = 0) uniform UBOScene
{
mat4 projection;
mat4 view;
vec4 lightPos;
vec4 viewPos;
vec4 bFlagSet;
} uboScene;
layout(std430, set = 6, binding = 0) readonly buffer nodeMatrices
{
mat4 nodeMat[];
};
layout (location = 0) out vec3 outNormal;
layout (location = 1) out vec3 outWorldPos;
layout (location = 2) out vec2 outUV;
layout (location = 3) out vec3 outTangent;
void main()
{
int nodeId = int(inColor.z);
mat4 mat = nodeMat[nodeId];
outNormal = inNormal;
outUV = inUV;
outTangent = inTangent;
outWorldPos = vec3(mat * vec4(inPos, 1.0));
outNormal = transpose(inverse(mat3(mat))) * inNormal;
gl_Position = uboScene.projection * uboScene.view * mat * vec4(inPos.xyz, 1.0);
}

View File

@ -0,0 +1,105 @@
#version 450
layout (location = 0) in vec3 inPos;
layout (location = 0) out vec4 outColor;
layout (binding = 0) uniform samplerCube samplerEnv;
layout(push_constant) uniform PushConsts {
layout (offset = 64) float roughness;
layout (offset = 68) uint numSamples;
} consts;
const float PI = 3.1415926536;
// Based omn http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
float random(vec2 co)
{
float a = 12.9898;
float b = 78.233;
float c = 43758.5453;
float dt= dot(co.xy ,vec2(a,b));
float sn= mod(dt,3.14);
return fract(sin(sn) * c);
}
vec2 hammersley2d(uint i, uint N)
{
// Radical inverse based on http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html
uint bits = (i << 16u) | (i >> 16u);
bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u);
bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u);
bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u);
bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u);
float rdi = float(bits) * 2.3283064365386963e-10;
return vec2(float(i) /float(N), rdi);
}
// Based on http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf
vec3 importanceSample_GGX(vec2 Xi, float roughness, vec3 normal)
{
// Maps a 2D point to a hemisphere with spread based on roughness
float alpha = roughness * roughness;
float phi = 2.0 * PI * Xi.x + random(normal.xz) * 0.1;
float cosTheta = sqrt((1.0 - Xi.y) / (1.0 + (alpha*alpha - 1.0) * Xi.y));
float sinTheta = sqrt(1.0 - cosTheta * cosTheta);
vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta);
// Tangent space
vec3 up = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
vec3 tangentX = normalize(cross(up, normal));
vec3 tangentY = normalize(cross(normal, tangentX));
// Convert to world Space
return normalize(tangentX * H.x + tangentY * H.y + normal * H.z);
}
// Normal Distribution function
float D_GGX(float dotNH, float roughness)
{
float alpha = roughness * roughness;
float alpha2 = alpha * alpha;
float denom = dotNH * dotNH * (alpha2 - 1.0) + 1.0;
return (alpha2)/(PI * denom*denom);
}
vec3 prefilterEnvMap(vec3 R, float roughness)
{
vec3 N = R;
vec3 V = R;
vec3 color = vec3(0.0);
float totalWeight = 0.0;
float envMapDim = float(textureSize(samplerEnv, 0).s);
for(uint i = 0u; i < consts.numSamples; i++) {
vec2 Xi = hammersley2d(i, consts.numSamples);
vec3 H = importanceSample_GGX(Xi, roughness, N);
vec3 L = 2.0 * dot(V, H) * H - V;
float dotNL = clamp(dot(N, L), 0.0, 1.0);
if(dotNL > 0.0) {
// Filtering based on https://placeholderart.wordpress.com/2015/07/28/implementation-notes-runtime-environment-map-filtering-for-image-based-lighting/
float dotNH = clamp(dot(N, H), 0.0, 1.0);
float dotVH = clamp(dot(V, H), 0.0, 1.0);
// Probability Distribution Function
float pdf = D_GGX(dotNH, roughness) * dotNH / (4.0 * dotVH) + 0.0001;
// Slid angle of current smple
float omegaS = 1.0 / (float(consts.numSamples) * pdf);
// Solid angle of 1 pixel across all cube faces
float omegaP = 4.0 * PI / (6.0 * envMapDim * envMapDim);
// Biased (+1.0) mip level for better result
float mipLevel = roughness == 0.0 ? 0.0 : max(0.5 * log2(omegaS / omegaP) + 1.0, 0.0f);
color += textureLod(samplerEnv, L, mipLevel).rgb * dotNL;
totalWeight += dotNL;
}
}
return (color / totalWeight);
}
void main()
{
vec3 N = normalize(inPos);
outColor = vec4(prefilterEnvMap(N, consts.roughness), 1.0);
}

View File

@ -0,0 +1,34 @@
#version 450
//#define ENABLE_TONE_MAPPING
layout (location = 0) in vec2 inUV;
layout (location = 0) out vec4 outColor;
layout (set = 0, binding = 0) uniform sampler2D originColor;
vec3 Tonemap_ACES(const vec3 x) {
// Narkowicz 2015, "ACES Filmic Tone Mapping Curve"
// const float a = 2.51;
// const float b = 0.03;
// const float c = 2.43;
// const float d = 0.59;
// const float e = 0.14;
// return clamp( (x*(a*x+b))/(x*(c*x+d)+e), vec3(0.0), vec3(1.0));
//ACES RRT/ODT curve fit courtesy of Stephen Hill
vec3 a = x * (x + 0.0245786) - 0.000090537;
vec3 b = x * (0.983729 * x + 0.4329510) + 0.238081;
return a / b;
}
void main()
{
vec3 color = texture(originColor, inUV).rgb;
#ifdef ENABLE_TONE_MAPPING
color = Tonemap_ACES(color);
#endif
const float invGamma = 0.45454545;
color = pow(color, vec3(invGamma));
outColor = vec4(color, 1.0f);
}

View File

@ -0,0 +1,31 @@
// Copyright 2020 Google LLC
Texture2D textureColorMap : register(t0, space1);
SamplerState samplerColorMap : register(s0, space1);
struct PushConsts {
float4x4 model;
};
[[vk::push_constant]] PushConsts primitive;
struct VSOutput
{
[[vk::location(0)]] float3 Normal : NORMAL0;
[[vk::location(1)]] float3 Color : COLOR0;
[[vk::location(2)]] float2 UV : TEXCOORD0;
[[vk::location(3)]] float3 ViewVec : TEXCOORD1;
[[vk::location(4)]] float3 LightVec : TEXCOORD2;
};
float4 main(VSOutput input) : SV_TARGET
{
float4 color = textureColorMap.Sample(samplerColorMap, input.UV) * float4(input.Color, 1.0);
float3 N = normalize(input.Normal);
float3 L = normalize(input.LightVec);
float3 V = normalize(input.ViewVec);
float3 R = reflect(L, N);
float3 diffuse = max(dot(N, L), 0.0) * input.Color;
float3 specular = pow(max(dot(R, V), 0.0), 16.0) * float3(0.75, 0.75, 0.75);
return float4(diffuse * color.rgb + specular, 1.0);
}

View File

@ -0,0 +1,49 @@
// Copyright 2020 Google LLC
struct VSInput
{
[[vk::location(0)]] float3 Pos : POSITION0;
[[vk::location(1)]] float3 Normal : NORMAL0;
[[vk::location(2)]] float2 UV : TEXCOORD0;
[[vk::location(3)]] float3 Color : COLOR0;
};
struct UBO
{
float4x4 projection;
float4x4 view;
float4 lightPos;
float4 viewPos;
};
cbuffer ubo : register(b0) { UBO ubo; }
struct PushConsts {
float4x4 model;
};
[[vk::push_constant]] PushConsts primitive;
struct VSOutput
{
float4 Pos : SV_POSITION;
[[vk::location(0)]] float3 Normal : NORMAL0;
[[vk::location(1)]] float3 Color : COLOR0;
[[vk::location(2)]] float2 UV : TEXCOORD0;
[[vk::location(3)]] float3 ViewVec : TEXCOORD1;
[[vk::location(4)]] float3 LightVec : TEXCOORD2;
};
VSOutput main(VSInput input)
{
VSOutput output = (VSOutput)0;
output.Normal = input.Normal;
output.Color = input.Color;
output.UV = input.UV;
output.Pos = mul(ubo.projection, mul(ubo.view, mul(primitive.model, float4(input.Pos.xyz, 1.0))));
float4 pos = mul(ubo.view, float4(input.Pos, 1.0));
output.Normal = mul((float3x3)ubo.view, input.Normal);
output.LightVec = ubo.lightPos.xyz - pos.xyz;
output.ViewVec = ubo.viewPos.xyz - pos.xyz;
return output;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,153 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.0.5",
"version" : "2.0"
},
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
0,
1,
2
]
}
],
"nodes" : [
{
"name" : "Light",
"rotation" : [
0.16907575726509094,
0.7558803558349609,
-0.27217137813568115,
0.570947527885437
],
"translation" : [
4.076245307922363,
5.903861999511719,
-1.0054539442062378
]
},
{
"name" : "Camera",
"rotation" : [
0.483536034822464,
0.33687159419059753,
-0.20870360732078552,
0.7804827094078064
],
"translation" : [
7.358891487121582,
4.958309173583984,
6.925790786743164
]
},
{
"mesh" : 0,
"name" : "cube",
"rotation" : [
0.7071068286895752,
0,
0,
0.7071067094802856
]
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "Default OBJ",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"name" : "cube",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
},
"indices" : 3,
"material" : 0
}
]
}
],
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5126,
"count" : 24,
"max" : [
5,
5,
5
],
"min" : [
-5,
-5,
-5
],
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 24,
"type" : "VEC2"
},
{
"bufferView" : 3,
"componentType" : 5123,
"count" : 36,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 288,
"byteOffset" : 288
},
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 576
},
{
"buffer" : 0,
"byteLength" : 72,
"byteOffset" : 768
}
],
"buffers" : [
{
"byteLength" : 840,
"uri" : "data:application/octet-stream;base64,AACgwAAAoMAAAKBAAACgwAAAoMAAAKDAAACgQAAAoMAAAKDAAACgQAAAoMAAAKBAAACgwAAAoEAAAKBAAACgQAAAoEAAAKBAAACgQAAAoEAAAKDAAACgwAAAoEAAAKDAAACgwAAAoMAAAKBAAACgQAAAoMAAAKBAAACgQAAAoEAAAKBAAACgwAAAoEAAAKBAAACgQAAAoMAAAKBAAACgQAAAoMAAAKDAAACgQAAAoEAAAKDAAACgQAAAoEAAAKBAAACgQAAAoMAAAKDAAACgwAAAoMAAAKDAAACgwAAAoEAAAKDAAACgQAAAoEAAAKDAAACgwAAAoMAAAKDAAACgwAAAoMAAAKBAAACgwAAAoEAAAKBAAACgwAAAoEAAAKDAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAEVFJOAAAgL8uvTuz311IuAAAgL8uvTuzEVFJuAAAgD8uvTuz311IOAAAgD8uvTuzLr07swAAgL8RUUm4Lr07swAAgL/fXUg4Lr07swAAgD8RUUk4Lr07swAAgD/fXUi4EVFJuAAAgL8uvTsz311IOAAAgL8uvTszEVFJOAAAgD8uvTsz311IuAAAgD8uvTszLr07MwAAgL8RUUk4Lr07MwAAgL/fXUi4Lr07MwAAgD8RUUm4Lr07MwAAgD/fXUg4AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAAABAAIAAgADAAAABAAFAAYABgAHAAQACAAJAAoACgALAAgADAANAA4ADgAPAAwAEAARABIAEgATABAAFAAVABYAFgAXABQA"
}
]
}

Binary file not shown.

View File

@ -0,0 +1,122 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.2.75",
"version" : "2.0"
},
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
0
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "Cube",
"scale" : [
15,
15,
15
],
"translation" : [
0,
12.617369651794434,
0
]
}
],
"meshes" : [
{
"name" : "Cube.001",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TANGENT" : 2,
"TEXCOORD_0" : 3
},
"indices" : 4
}
]
}
],
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5126,
"count" : 16,
"max" : [
1,
1,
1
],
"min" : [
-1,
-1,
-1
],
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 16,
"type" : "VEC3"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 16,
"type" : "VEC4"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 16,
"type" : "VEC2"
},
{
"bufferView" : 4,
"componentType" : 5123,
"count" : 24,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 192
},
{
"buffer" : 0,
"byteLength" : 256,
"byteOffset" : 384
},
{
"buffer" : 0,
"byteLength" : 128,
"byteOffset" : 640
},
{
"buffer" : 0,
"byteLength" : 48,
"byteOffset" : 768
}
],
"buffers" : [
{
"byteLength" : 816,
"uri" : "data:application/octet-stream;base64,AACAvwAAgL8AAIA/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/AACAvwAAgL8AAIC/AACAPwAAgD8AAIC/AACAvwAAgD8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIA/AACAPwAAgD8AAIC/AACAPwAAgL8AAIA/AACAvwAAgL8AAIC/AACAvwAAgL8AAIA/AACAvwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIA/AACAPwAAgL8AAIC/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAACAvwAAAIAAAAAAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAAAAgAAAgD8AAACAAACAPwAAAAAAAACAAAAAgAAAAIAAAIA/AACAvwAAAAAAAACAAAAAgAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAIA/AAAAgAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAIA/AAAAgAAAgD8AAAAAAACAPwAAAIAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAIA/AAAAgAAAgL8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAAAAAIC/AACAPwAAAAAAAAAAAACAvwAAgD8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAIA/AAAAgAAAgD8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAAAAAIC/AACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AAAAAAGg0TgAwNE4dPl/P3P5fz9y+X8/AMDROAAAAAAAAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/N8DROHP5fz8AAAAAAAAAAAAAgD8AAIA/AAABAAIAAwAEAAUABgAHAAgACQAKAAsAAAAMAAEAAwANAAQABgAOAAcACQAPAAoA"
}
]
}

View File

@ -0,0 +1,122 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.2.75",
"version" : "2.0"
},
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
0
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "Plane",
"scale" : [
4,
4,
4
],
"translation" : [
0,
-2.3499999046325684,
0
]
}
],
"meshes" : [
{
"name" : "Plane",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TANGENT" : 2,
"TEXCOORD_0" : 3
},
"indices" : 4
}
]
}
],
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5126,
"count" : 4,
"max" : [
5,
0,
5
],
"min" : [
-5,
0,
-5
],
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 4,
"type" : "VEC3"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 4,
"type" : "VEC4"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 4,
"type" : "VEC2"
},
{
"bufferView" : 4,
"componentType" : 5123,
"count" : 6,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 48,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 48,
"byteOffset" : 48
},
{
"buffer" : 0,
"byteLength" : 64,
"byteOffset" : 96
},
{
"buffer" : 0,
"byteLength" : 32,
"byteOffset" : 160
},
{
"buffer" : 0,
"byteLength" : 12,
"byteOffset" : 192
}
],
"buffers" : [
{
"byteLength" : 204,
"uri" : "data:application/octet-stream;base64,AACgQAAAAAAAAKBAAACgQAAAAAAAAKDAAACgwAAAAAAAAKDAAACgwAAAAAAAAKBAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAADXCcCzAACAPwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAANcJwLMAAIA/AACAPwAAAADXCUC0AACAP3H5H0By+R9AcfkfQObyv7/j8r+/5vK/v+Pyv79v+R9AAAABAAIAAAACAAMA"
}
]
}

View File

@ -0,0 +1,140 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.2.75",
"version" : "2.0"
},
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
0
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "plane",
"rotation" : [
0.7071068286895752,
0,
0,
0.7071067094802856
]
}
],
"materials" : [
{
"doubleSided" : true,
"emissiveFactor" : [
0,
0,
0
],
"name" : "Default OBJ",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"name" : "plane",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TANGENT" : 2,
"TEXCOORD_0" : 3
},
"indices" : 4,
"material" : 0
}
]
}
],
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5126,
"count" : 25,
"max" : [
2.5,
2.5,
-2.046362990897662e-14
],
"min" : [
-2.5,
-2.5,
-2.046362990897662e-14
],
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 25,
"type" : "VEC3"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 25,
"type" : "VEC4"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 25,
"type" : "VEC2"
},
{
"bufferView" : 4,
"componentType" : 5123,
"count" : 96,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 300,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 300,
"byteOffset" : 300
},
{
"buffer" : 0,
"byteLength" : 400,
"byteOffset" : 600
},
{
"buffer" : 0,
"byteLength" : 200,
"byteOffset" : 1000
},
{
"buffer" : 0,
"byteLength" : 192,
"byteOffset" : 1200
}
],
"buffers" : [
{
"byteLength" : 1392,
"uri" : "data:application/octet-stream;base64,AAAgwAAAoD/rUbioAAAgwAAAIEDrUbioAACgvwAAoD/rUbioAACgvwAAIEDrUbioAAAAAAAAoD/rUbioAAAAAAAAIEDrUbioAACgPwAAoD/rUbioAACgPwAAIEDrUbioAAAgQAAAoD/rUbioAAAgQAAAIEDrUbioAAAgwPLne53rUbioAACgv/Lne53rUbioAAAAAPLne53rUbioAACgP/Lne53rUbioAAAgQPLne53rUbioAAAgwAAAoL/rUbioAACgvwAAoL/rUbioAAAAAAAAoL/rUbioAACgPwAAoL/rUbioAAAgQAAAoL/rUbioAAAgwAAAIMDrUbioAACgvwAAIMDrUbioAAAAAAAAIMDrUbioAACgPwAAIMDrUbioAAAgQAAAIMDrUbioAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACAv48GALQAAACAAACAPwAAgL8AAAAAAAAAgAAAgD8AAIC/NQigtAAAAIAAAIA/AACAv0RgVbQAAACAAACAPwAAgL82CKC0AAAAgAAAgD8AAIC/AAAAAAAAAIAAAIA/AACAv9MJwDQAAACAAACAPwAAgL86YFU0AAAAgAAAgD8AAIC/MQggNQAAAIAAAIA/AACAvwAAAAAAAACAAACAPwAAgL8sXAW1AAAAgAAAgD8AAIC/2glAtAAAAIAAAIA/AACAv0hg1bMAAACAAACAPwAAgL9qsyo0AAAAgAAAgD8AAIC/+1wVNQAAAIAAAIA/AACAv+ph9bQAAACAAACAPwAAgL9jB5C0AAAAgAAAgD8AAIC/AAAAAAAAAIAAAIA/AACAv2uzqrMAAACAAACAPwAAgL+0WLepAAAAgAAAgD8AAIC/ZbMqtAAAAIAAAIA/AACAv9cJQLQAAACAAACAPwAAgL8AAAAAAAAAgAAAgD8AAIC/a7OqswAAAIAAAIA/AACAv2qzKrQAAACAAACAPyX2/z+42H++Jfb/P1jsf78S+58/uNh/vhD7nz9Y7H+/9v//PpDYf77w//8+WOx/v7TYf76Q2H++wNh/vljsf79S7H+/uNh/vlTsf79Y7H+/Jfb/P/r//z4S+58/AwAAP/b//z4DAAA/sNh/vgMAAD9S7H+/+v//Pin2/z8S+58/EvufPxb7nz/5//8+FvufP6jYf74W+58/Tux/vxf7nz8p9v8/Kvb/PxP7nz8r9v8/////Piv2/z+o2H++K/b/P07sf78s9v8/AAABAAIAAwACAAEAAgADAAQABQAEAAMABAAFAAYABwAGAAUABgAHAAgACQAIAAcACgAAAAsAAgALAAAACwACAAwABAAMAAIADAAEAA0ABgANAAQADQAGAA4ACAAOAAYADwAKABAACwAQAAoAEAALABEADAARAAsAEQAMABIADQASAAwAEgANABMADgATAA0AFAAPABUAEAAVAA8AFQAQABYAEQAWABAAFgARABcAEgAXABEAFwASABgAEwAYABIA"
}
]
}

Binary file not shown.

View File

@ -0,0 +1,11 @@
Model Information:
* title: Flan_Kawaii
* source: https://sketchfab.com/3d-models/flan-kawaii-0f9fd4b5fce04594a4fc53e26a40f3b6
* author: Mafer Luna (https://sketchfab.com/Fernanda.Aldaco.de.Luna)
Model License:
* license type: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)
* requirements: Author must be credited. Commercial use is allowed.
If you use this 3D model in your project be sure to copy paste this credit wherever you share it:
This work is based on "Flan_Kawaii" (https://sketchfab.com/3d-models/flan-kawaii-0f9fd4b5fce04594a4fc53e26a40f3b6) by Mafer Luna (https://sketchfab.com/Fernanda.Aldaco.de.Luna) licensed under CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Some files were not shown because too many files have changed in this diff Show More