├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── LICENSE ├── README.md ├── data ├── mesh │ ├── bunny.mtl │ ├── bunny.obj │ ├── cylinder.mtl │ ├── cylinder.obj │ ├── ground.mtl │ ├── ground.obj │ ├── sphere.mtl │ └── sphere.obj ├── screenshot_1.jpg └── screenshot_2.jpg └── src ├── .clang-format ├── CMakeLists.txt ├── main.cpp └── shader ├── bake_sdf_cs.glsl ├── mesh_fs.glsl └── mesh_vs.glsl /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | 9 | # Precompiled Headers 10 | *.gch 11 | *.pch 12 | 13 | # Compiled Dynamic libraries 14 | *.so 15 | *.dylib 16 | *.dll 17 | 18 | # Fortran module files 19 | *.mod 20 | *.smod 21 | 22 | # Compiled Static libraries 23 | *.lai 24 | *.la 25 | *.a 26 | *.lib 27 | 28 | # Executables 29 | *.exe 30 | *.out 31 | *.app 32 | 33 | external/ 34 | external/* 35 | external/dwSampleFramwork 36 | bin/ 37 | bin/* 38 | build/ 39 | build/* 40 | lib/ 41 | lib/* 42 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "external/dwSampleFramework"] 2 | path = external/dwSampleFramework 3 | url = https://github.com/diharaw/dwSampleFramework.git 4 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.8 FATAL_ERROR) 2 | 3 | project("SDFBaking") 4 | 5 | set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE BOOL "ASSIMP_BUILD_ASSIMP_TOOLS") 6 | set(ASSIMP_BUILD_ASSIMP_VIEW OFF CACHE BOOL "ASSIMP_BUILD_ASSIMP_VIEW") 7 | set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "ASSIMP_BUILD_TESTS") 8 | set(ASSIMP_INSTALL OFF CACHE BOOL "ASSIMP_INSTALL") 9 | set(ASSIMP_INSTALL_PDB OFF CACHE BOOL "ASSIMP_INSTALL_PDB") 10 | set(ASSIMP_NO_EXPORT ON CACHE BOOL "ASSIMP_NO_EXPORT") 11 | set(BUILD_SAMPLES OFF CACHE BOOL "BUILD_SAMPLES") 12 | set(GLFW_BUILD_DOCS OFF CACHE BOOL "GLFW_BUILD_DOCS") 13 | set(GLFW_INSTALL OFF CACHE BOOL "GLFW_INSTALL") 14 | 15 | IF(APPLE) 16 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14") 17 | set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") 18 | ENDIF() 19 | 20 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib") 21 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/lib") 22 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) 23 | 24 | add_subdirectory(external/dwSampleFramework) 25 | 26 | include_directories("${DW_SAMPLE_FRAMEWORK_INCLUDES}") 27 | 28 | add_subdirectory(src) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Dihara Wijetunga 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![License: MIT](https://img.shields.io/packagist/l/doctrine/orm.svg)](https://opensource.org/licenses/MIT) 2 | 3 | # SDF Baking 4 | An OpenGL sample that demonstrates baking Signed Distance Fields (SDF) into 3D textures using compute shaders and using them to add Soft Shadows and Ambient Occlusion to a rasterized scene. 5 | 6 | ## Screenshots 7 | ![SDFBaking](data/screenshot_1.jpg) 8 | ![SDFBaking](data/screenshot_2.jpg) 9 | 10 | ## Building 11 | 12 | ### Windows 13 | Tested on: Windows 10 version 21H1 14 | 15 | Prerequisites 16 | * MSVC 19.00 or higher 17 | * CMake 3.8 or higher 18 | 19 | ``` 20 | git clone --recursive https://github.com/diharaw/SDFBaking.git 21 | cd SDFBaking 22 | mkdir build 23 | cd build 24 | cmake -G "Visual Studio 16 2019" .. 25 | ``` 26 | 27 | ## Dependencies 28 | * [dwSampleFramework](https://github.com/diharaw/dwSampleFramework) 29 | 30 | ## License 31 | ``` 32 | Copyright (c) 2021 Dihara Wijetunga 33 | 34 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 35 | associated documentation files (the "Software"), to deal in the Software without restriction, 36 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 37 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 38 | subject to the following conditions: 39 | 40 | The above copyright notice and this permission notice shall be included in all copies or substantial 41 | portions of the Software. 42 | 43 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 44 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 45 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 46 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 47 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 48 | ``` 49 | -------------------------------------------------------------------------------- /data/mesh/bunny.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl Default_OBJ 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.800000 0.800000 0.800000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.450000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /data/mesh/cylinder.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl None 5 | Ns 500 6 | Ka 0.8 0.8 0.8 7 | Kd 0.8 0.8 0.8 8 | Ks 0.8 0.8 0.8 9 | d 1 10 | illum 2 11 | -------------------------------------------------------------------------------- /data/mesh/cylinder.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.82 (sub 7) OBJ File: '' 2 | # www.blender.org 3 | mtllib cylinder.mtl 4 | o Cylinder_Cylinder.001 5 | v 0.000000 0.000000 -0.000000 6 | v 0.000000 4.000000 -0.000000 7 | v 0.000000 0.000000 -0.558189 8 | v 0.000000 4.000000 -0.558189 9 | v 0.108897 0.000000 -0.547463 10 | v 0.108897 4.000000 -0.547463 11 | v 0.213609 0.000000 -0.515699 12 | v 0.213609 4.000000 -0.515699 13 | v 0.310113 0.000000 -0.464117 14 | v 0.310113 4.000000 -0.464117 15 | v 0.394699 0.000000 -0.394699 16 | v 0.394699 4.000000 -0.394699 17 | v 0.464117 0.000000 -0.310113 18 | v 0.464117 4.000000 -0.310113 19 | v 0.515699 0.000000 -0.213610 20 | v 0.515699 4.000000 -0.213610 21 | v 0.547463 0.000000 -0.108897 22 | v 0.547463 4.000000 -0.108897 23 | v 0.558188 0.000000 -0.000000 24 | v 0.558188 4.000000 -0.000000 25 | v 0.547463 0.000000 0.108897 26 | v 0.547463 4.000000 0.108897 27 | v 0.515699 0.000000 0.213609 28 | v 0.515699 4.000000 0.213609 29 | v 0.464117 0.000000 0.310113 30 | v 0.464117 4.000000 0.310113 31 | v 0.394699 0.000000 0.394699 32 | v 0.394699 4.000000 0.394699 33 | v 0.310113 0.000000 0.464117 34 | v 0.310113 4.000000 0.464117 35 | v 0.213609 0.000000 0.515699 36 | v 0.213609 4.000000 0.515699 37 | v 0.108897 0.000000 0.547463 38 | v 0.108897 4.000000 0.547463 39 | v -0.000000 0.000000 0.558188 40 | v -0.000000 4.000000 0.558188 41 | v -0.108897 0.000000 0.547463 42 | v -0.108897 4.000000 0.547463 43 | v -0.213610 0.000000 0.515699 44 | v -0.213610 4.000000 0.515699 45 | v -0.310113 0.000000 0.464116 46 | v -0.310113 4.000000 0.464116 47 | v -0.394699 0.000000 0.394698 48 | v -0.394699 4.000000 0.394698 49 | v -0.464117 0.000000 0.310112 50 | v -0.464117 4.000000 0.310112 51 | v -0.515699 0.000000 0.213609 52 | v -0.515699 4.000000 0.213609 53 | v -0.547463 0.000000 0.108897 54 | v -0.547463 4.000000 0.108897 55 | v -0.558188 0.000000 -0.000001 56 | v -0.558188 4.000000 -0.000001 57 | v -0.547463 0.000000 -0.108898 58 | v -0.547463 4.000000 -0.108898 59 | v -0.515699 0.000000 -0.213610 60 | v -0.515699 4.000000 -0.213610 61 | v -0.464116 0.000000 -0.310114 62 | v -0.464116 4.000000 -0.310114 63 | v -0.394698 0.000000 -0.394699 64 | v -0.394698 4.000000 -0.394699 65 | v -0.310112 0.000000 -0.464117 66 | v -0.310112 4.000000 -0.464117 67 | v -0.213609 0.000000 -0.515699 68 | v -0.213609 4.000000 -0.515699 69 | v -0.108896 0.000000 -0.547463 70 | v -0.108896 4.000000 -0.547463 71 | vt 0.750000 0.250000 72 | vt 0.750000 0.490000 73 | vt 0.796822 0.485388 74 | vt 0.250000 0.250000 75 | vt 0.296822 0.485388 76 | vt 0.250000 0.490000 77 | vt 1.000000 0.500000 78 | vt 1.000000 1.000000 79 | vt 0.968750 1.000000 80 | vt 0.968750 0.500000 81 | vt 0.841844 0.471731 82 | vt 0.341844 0.471731 83 | vt 0.937500 1.000000 84 | vt 0.937500 0.500000 85 | vt 0.883337 0.449553 86 | vt 0.383337 0.449553 87 | vt 0.906250 1.000000 88 | vt 0.906250 0.500000 89 | vt 0.919706 0.419706 90 | vt 0.419706 0.419706 91 | vt 0.875000 1.000000 92 | vt 0.875000 0.500000 93 | vt 0.949553 0.383337 94 | vt 0.449553 0.383337 95 | vt 0.843750 1.000000 96 | vt 0.843750 0.500000 97 | vt 0.971731 0.341844 98 | vt 0.471731 0.341844 99 | vt 0.812500 1.000000 100 | vt 0.812500 0.500000 101 | vt 0.985388 0.296822 102 | vt 0.485388 0.296822 103 | vt 0.781250 1.000000 104 | vt 0.781250 0.500000 105 | vt 0.990000 0.250000 106 | vt 0.490000 0.250000 107 | vt 0.750000 1.000000 108 | vt 0.750000 0.500000 109 | vt 0.985388 0.203178 110 | vt 0.485388 0.203178 111 | vt 0.718750 1.000000 112 | vt 0.718750 0.500000 113 | vt 0.971731 0.158156 114 | vt 0.471731 0.158156 115 | vt 0.687500 1.000000 116 | vt 0.687500 0.500000 117 | vt 0.949553 0.116663 118 | vt 0.449553 0.116663 119 | vt 0.656250 1.000000 120 | vt 0.656250 0.500000 121 | vt 0.919706 0.080294 122 | vt 0.419706 0.080294 123 | vt 0.625000 1.000000 124 | vt 0.625000 0.500000 125 | vt 0.883337 0.050447 126 | vt 0.383337 0.050447 127 | vt 0.593750 1.000000 128 | vt 0.593750 0.500000 129 | vt 0.841844 0.028269 130 | vt 0.341844 0.028269 131 | vt 0.562500 1.000000 132 | vt 0.562500 0.500000 133 | vt 0.796822 0.014612 134 | vt 0.296822 0.014612 135 | vt 0.531250 1.000000 136 | vt 0.531250 0.500000 137 | vt 0.750000 0.010000 138 | vt 0.250000 0.010000 139 | vt 0.500000 1.000000 140 | vt 0.500000 0.500000 141 | vt 0.703178 0.014612 142 | vt 0.203178 0.014612 143 | vt 0.468750 1.000000 144 | vt 0.468750 0.500000 145 | vt 0.658156 0.028269 146 | vt 0.158156 0.028269 147 | vt 0.437500 1.000000 148 | vt 0.437500 0.500000 149 | vt 0.616663 0.050447 150 | vt 0.116663 0.050447 151 | vt 0.406250 1.000000 152 | vt 0.406250 0.500000 153 | vt 0.580294 0.080294 154 | vt 0.080294 0.080294 155 | vt 0.375000 1.000000 156 | vt 0.375000 0.500000 157 | vt 0.550447 0.116663 158 | vt 0.050447 0.116663 159 | vt 0.343750 1.000000 160 | vt 0.343750 0.500000 161 | vt 0.528269 0.158156 162 | vt 0.028269 0.158156 163 | vt 0.312500 1.000000 164 | vt 0.312500 0.500000 165 | vt 0.514611 0.203179 166 | vt 0.014611 0.203179 167 | vt 0.281250 1.000000 168 | vt 0.281250 0.500000 169 | vt 0.510000 0.250000 170 | vt 0.010000 0.250000 171 | vt 0.250000 1.000000 172 | vt 0.250000 0.500000 173 | vt 0.514612 0.296822 174 | vt 0.014612 0.296822 175 | vt 0.218750 1.000000 176 | vt 0.218750 0.500000 177 | vt 0.528269 0.341844 178 | vt 0.028269 0.341844 179 | vt 0.187500 1.000000 180 | vt 0.187500 0.500000 181 | vt 0.550447 0.383337 182 | vt 0.050447 0.383337 183 | vt 0.156250 1.000000 184 | vt 0.156250 0.500000 185 | vt 0.580295 0.419706 186 | vt 0.080295 0.419706 187 | vt 0.125000 1.000000 188 | vt 0.125000 0.500000 189 | vt 0.616663 0.449553 190 | vt 0.116663 0.449553 191 | vt 0.093750 1.000000 192 | vt 0.093750 0.500000 193 | vt 0.658156 0.471731 194 | vt 0.158156 0.471731 195 | vt 0.062500 1.000000 196 | vt 0.062500 0.500000 197 | vt 0.703179 0.485389 198 | vt 0.203179 0.485389 199 | vt 0.031250 1.000000 200 | vt 0.031250 0.500000 201 | vt 0.000000 1.000000 202 | vt 0.000000 0.500000 203 | vn 0.0000 -1.0000 0.0000 204 | vn 0.0000 1.0000 -0.0000 205 | vn 0.0000 0.0000 -1.0000 206 | vn 0.1951 0.0000 -0.9808 207 | vn 0.3827 0.0000 -0.9239 208 | vn 0.5556 0.0000 -0.8315 209 | vn 0.7071 0.0000 -0.7071 210 | vn 0.8315 0.0000 -0.5556 211 | vn 0.9239 0.0000 -0.3827 212 | vn 0.9808 0.0000 -0.1951 213 | vn 1.0000 0.0000 -0.0000 214 | vn 0.9808 0.0000 0.1951 215 | vn 0.9239 0.0000 0.3827 216 | vn 0.8315 0.0000 0.5556 217 | vn 0.7071 0.0000 0.7071 218 | vn 0.5556 0.0000 0.8315 219 | vn 0.3827 0.0000 0.9239 220 | vn 0.1951 0.0000 0.9808 221 | vn -0.0000 0.0000 1.0000 222 | vn -0.1951 0.0000 0.9808 223 | vn -0.3827 0.0000 0.9239 224 | vn -0.5556 0.0000 0.8315 225 | vn -0.7071 0.0000 0.7071 226 | vn -0.8315 0.0000 0.5556 227 | vn -0.9239 0.0000 0.3827 228 | vn -0.9808 0.0000 0.1951 229 | vn -1.0000 0.0000 -0.0000 230 | vn -0.9808 0.0000 -0.1951 231 | vn -0.9239 0.0000 -0.3827 232 | vn -0.8315 0.0000 -0.5556 233 | vn -0.7071 0.0000 -0.7071 234 | vn -0.5556 0.0000 -0.8315 235 | vn -0.3827 0.0000 -0.9239 236 | vn -0.1951 0.0000 -0.9808 237 | usemtl None 238 | s 1 239 | f 1/1/1 3/2/1 5/3/1 240 | f 2/4/2 6/5/2 4/6/2 241 | f 3/7/3 4/8/3 6/9/4 5/10/4 242 | f 1/1/1 5/3/1 7/11/1 243 | f 2/4/2 8/12/2 6/5/2 244 | f 5/10/4 6/9/4 8/13/5 7/14/5 245 | f 1/1/1 7/11/1 9/15/1 246 | f 2/4/2 10/16/2 8/12/2 247 | f 7/14/5 8/13/5 10/17/6 9/18/6 248 | f 1/1/1 9/15/1 11/19/1 249 | f 2/4/2 12/20/2 10/16/2 250 | f 9/18/6 10/17/6 12/21/7 11/22/7 251 | f 1/1/1 11/19/1 13/23/1 252 | f 2/4/2 14/24/2 12/20/2 253 | f 11/22/7 12/21/7 14/25/8 13/26/8 254 | f 1/1/1 13/23/1 15/27/1 255 | f 2/4/2 16/28/2 14/24/2 256 | f 13/26/8 14/25/8 16/29/9 15/30/9 257 | f 1/1/1 15/27/1 17/31/1 258 | f 2/4/2 18/32/2 16/28/2 259 | f 15/30/9 16/29/9 18/33/10 17/34/10 260 | f 1/1/1 17/31/1 19/35/1 261 | f 2/4/2 20/36/2 18/32/2 262 | f 17/34/10 18/33/10 20/37/11 19/38/11 263 | f 1/1/1 19/35/1 21/39/1 264 | f 2/4/2 22/40/2 20/36/2 265 | f 19/38/11 20/37/11 22/41/12 21/42/12 266 | f 1/1/1 21/39/1 23/43/1 267 | f 2/4/2 24/44/2 22/40/2 268 | f 21/42/12 22/41/12 24/45/13 23/46/13 269 | f 1/1/1 23/43/1 25/47/1 270 | f 2/4/2 26/48/2 24/44/2 271 | f 23/46/13 24/45/13 26/49/14 25/50/14 272 | f 1/1/1 25/47/1 27/51/1 273 | f 2/4/2 28/52/2 26/48/2 274 | f 25/50/14 26/49/14 28/53/15 27/54/15 275 | f 1/1/1 27/51/1 29/55/1 276 | f 2/4/2 30/56/2 28/52/2 277 | f 27/54/15 28/53/15 30/57/16 29/58/16 278 | f 1/1/1 29/55/1 31/59/1 279 | f 2/4/2 32/60/2 30/56/2 280 | f 29/58/16 30/57/16 32/61/17 31/62/17 281 | f 1/1/1 31/59/1 33/63/1 282 | f 2/4/2 34/64/2 32/60/2 283 | f 31/62/17 32/61/17 34/65/18 33/66/18 284 | f 1/1/1 33/63/1 35/67/1 285 | f 2/4/2 36/68/2 34/64/2 286 | f 33/66/18 34/65/18 36/69/19 35/70/19 287 | f 1/1/1 35/67/1 37/71/1 288 | f 2/4/2 38/72/2 36/68/2 289 | f 35/70/19 36/69/19 38/73/20 37/74/20 290 | f 1/1/1 37/71/1 39/75/1 291 | f 2/4/2 40/76/2 38/72/2 292 | f 37/74/20 38/73/20 40/77/21 39/78/21 293 | f 1/1/1 39/75/1 41/79/1 294 | f 2/4/2 42/80/2 40/76/2 295 | f 39/78/21 40/77/21 42/81/22 41/82/22 296 | f 1/1/1 41/79/1 43/83/1 297 | f 2/4/2 44/84/2 42/80/2 298 | f 41/82/22 42/81/22 44/85/23 43/86/23 299 | f 1/1/1 43/83/1 45/87/1 300 | f 2/4/2 46/88/2 44/84/2 301 | f 43/86/23 44/85/23 46/89/24 45/90/24 302 | f 1/1/1 45/87/1 47/91/1 303 | f 2/4/2 48/92/2 46/88/2 304 | f 45/90/24 46/89/24 48/93/25 47/94/25 305 | f 1/1/1 47/91/1 49/95/1 306 | f 2/4/2 50/96/2 48/92/2 307 | f 47/94/25 48/93/25 50/97/26 49/98/26 308 | f 1/1/1 49/95/1 51/99/1 309 | f 2/4/2 52/100/2 50/96/2 310 | f 49/98/26 50/97/26 52/101/27 51/102/27 311 | f 1/1/1 51/99/1 53/103/1 312 | f 2/4/2 54/104/2 52/100/2 313 | f 51/102/27 52/101/27 54/105/28 53/106/28 314 | f 1/1/1 53/103/1 55/107/1 315 | f 2/4/2 56/108/2 54/104/2 316 | f 53/106/28 54/105/28 56/109/29 55/110/29 317 | f 1/1/1 55/107/1 57/111/1 318 | f 2/4/2 58/112/2 56/108/2 319 | f 55/110/29 56/109/29 58/113/30 57/114/30 320 | f 1/1/1 57/111/1 59/115/1 321 | f 2/4/2 60/116/2 58/112/2 322 | f 57/114/30 58/113/30 60/117/31 59/118/31 323 | f 1/1/1 59/115/1 61/119/1 324 | f 2/4/2 62/120/2 60/116/2 325 | f 59/118/31 60/117/31 62/121/32 61/122/32 326 | f 1/1/1 61/119/1 63/123/1 327 | f 2/4/2 64/124/2 62/120/2 328 | f 61/122/32 62/121/32 64/125/33 63/126/33 329 | f 1/1/1 63/123/1 65/127/1 330 | f 2/4/2 66/128/2 64/124/2 331 | f 63/126/33 64/125/33 66/129/34 65/130/34 332 | f 1/1/1 65/127/1 3/2/1 333 | f 2/4/2 4/6/2 66/128/2 334 | f 65/130/34 66/129/34 4/131/3 3/132/3 335 | -------------------------------------------------------------------------------- /data/mesh/ground.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl None 5 | Ns 500.000001 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.800000 0.800000 0.800000 8 | Ks 0.800000 0.800000 0.800000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.450000 11 | d 1.000000 12 | illum 2 13 | -------------------------------------------------------------------------------- /data/mesh/ground.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.82 (sub 7) OBJ File: '' 2 | # www.blender.org 3 | mtllib ground.mtl 4 | o Cube_Cube.001 5 | v -10.009432 -0.199224 10.009432 6 | v -10.009432 -0.003017 10.009432 7 | v -10.009432 -0.003013 -10.009432 8 | v -10.009432 -0.199220 -10.009432 9 | v 10.009432 -0.003013 -10.009432 10 | v 10.009432 -0.199220 -10.009432 11 | v 10.009432 -0.003017 10.009432 12 | v 10.009432 -0.199224 10.009432 13 | vt 0.375000 0.000000 14 | vt 0.625000 0.000000 15 | vt 0.625000 0.250000 16 | vt 0.375000 0.250000 17 | vt 0.625000 0.500000 18 | vt 0.375000 0.500000 19 | vt 0.625000 0.750000 20 | vt 0.375000 0.750000 21 | vt 0.625000 1.000000 22 | vt 0.375000 1.000000 23 | vt 0.125000 0.500000 24 | vt 0.125000 0.750000 25 | vt 0.875000 0.500000 26 | vt 0.875000 0.750000 27 | vn -1.0000 0.0000 0.0000 28 | vn 0.0000 0.0000 -1.0000 29 | vn 1.0000 0.0000 0.0000 30 | vn 0.0000 0.0000 1.0000 31 | vn 0.0000 -1.0000 -0.0000 32 | vn 0.0000 1.0000 0.0000 33 | usemtl None 34 | s 1 35 | f 1/1/1 2/2/1 3/3/1 4/4/1 36 | f 4/4/2 3/3/2 5/5/2 6/6/2 37 | f 6/6/3 5/5/3 7/7/3 8/8/3 38 | f 8/8/4 7/7/4 2/9/4 1/10/4 39 | f 4/11/5 6/6/5 8/8/5 1/12/5 40 | f 5/5/6 3/13/6 2/14/6 7/7/6 41 | -------------------------------------------------------------------------------- /data/mesh/sphere.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl None 5 | Ns 500 6 | Ka 0.8 0.8 0.8 7 | Kd 0.8 0.8 0.8 8 | Ks 0.8 0.8 0.8 9 | d 1 10 | illum 2 11 | -------------------------------------------------------------------------------- /data/mesh/sphere.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.82 (sub 7) OBJ File: '' 2 | # www.blender.org 3 | mtllib sphere.mtl 4 | o Sphere 5 | v 0.000000 1.980785 -0.195090 6 | v 0.000000 1.923880 -0.382683 7 | v 0.000000 1.831470 -0.555570 8 | v 0.000000 1.707107 -0.707107 9 | v 0.000000 1.555570 -0.831470 10 | v 0.000000 1.382683 -0.923880 11 | v 0.000000 1.195090 -0.980785 12 | v 0.000000 1.000000 -1.000000 13 | v 0.000000 0.804910 -0.980785 14 | v 0.000000 0.168530 -0.555570 15 | v 0.038060 1.980785 -0.191342 16 | v 0.074658 1.923880 -0.375330 17 | v 0.108386 1.831470 -0.544895 18 | v 0.137950 1.707107 -0.693520 19 | v 0.162212 1.555570 -0.815493 20 | v 0.180240 1.382683 -0.906127 21 | v 0.191342 1.195090 -0.961940 22 | v 0.195090 1.000000 -0.980785 23 | v 0.191342 0.804910 -0.961940 24 | v 0.180240 0.617317 -0.906127 25 | v 0.162212 0.444430 -0.815493 26 | v 0.137950 0.292893 -0.693520 27 | v 0.108386 0.168530 -0.544895 28 | v 0.074658 0.076120 -0.375330 29 | v 0.038060 0.019215 -0.191341 30 | v 0.074658 1.980785 -0.180240 31 | v 0.146447 1.923880 -0.353553 32 | v 0.212608 1.831470 -0.513280 33 | v 0.270598 1.707107 -0.653281 34 | v 0.318190 1.555570 -0.768178 35 | v 0.353553 1.382683 -0.853553 36 | v 0.375330 1.195090 -0.906127 37 | v 0.382684 1.000000 -0.923879 38 | v 0.375330 0.804910 -0.906127 39 | v 0.353554 0.617317 -0.853553 40 | v 0.318190 0.444430 -0.768178 41 | v 0.270598 0.292893 -0.653281 42 | v 0.212608 0.168530 -0.513280 43 | v 0.146447 0.076120 -0.353553 44 | v 0.074658 0.019215 -0.180240 45 | v 0.108387 1.980785 -0.162212 46 | v 0.212608 1.923880 -0.318190 47 | v 0.308658 1.831470 -0.461940 48 | v 0.392848 1.707107 -0.587938 49 | v 0.461940 1.555570 -0.691342 50 | v 0.513280 1.382683 -0.768178 51 | v 0.544895 1.195090 -0.815493 52 | v 0.555570 1.000000 -0.831469 53 | v 0.544895 0.804910 -0.815493 54 | v 0.513280 0.617317 -0.768178 55 | v 0.461940 0.444430 -0.691342 56 | v 0.392848 0.292893 -0.587938 57 | v 0.308658 0.168530 -0.461940 58 | v 0.212608 0.076120 -0.318189 59 | v 0.108386 0.019215 -0.162211 60 | v 0.137950 1.980785 -0.137950 61 | v 0.270598 1.923880 -0.270598 62 | v 0.392848 1.831470 -0.392847 63 | v 0.500000 1.707107 -0.500000 64 | v 0.587938 1.555570 -0.587938 65 | v 0.653282 1.382683 -0.653281 66 | v 0.693520 1.195090 -0.693520 67 | v 0.707107 1.000000 -0.707107 68 | v 0.693520 0.804910 -0.693520 69 | v 0.653282 0.617317 -0.653281 70 | v 0.587938 0.444430 -0.587938 71 | v 0.500000 0.292893 -0.500000 72 | v 0.392848 0.168530 -0.392847 73 | v 0.270598 0.076120 -0.270598 74 | v 0.137950 0.019215 -0.137949 75 | v 0.162212 1.980785 -0.108386 76 | v 0.318190 1.923880 -0.212607 77 | v 0.461940 1.831470 -0.308658 78 | v 0.587938 1.707107 -0.392847 79 | v 0.691342 1.555570 -0.461940 80 | v 0.768178 1.382683 -0.513280 81 | v 0.815493 1.195090 -0.544895 82 | v 0.831470 1.000000 -0.555570 83 | v 0.815493 0.804910 -0.544895 84 | v 0.768178 0.617317 -0.513280 85 | v 0.691342 0.444430 -0.461940 86 | v 0.587938 0.292893 -0.392847 87 | v 0.461940 0.168530 -0.308658 88 | v 0.318190 0.076120 -0.212607 89 | v 0.162212 0.019215 -0.108386 90 | v 0.180240 1.980785 -0.074658 91 | v 0.353554 1.923880 -0.146446 92 | v 0.513280 1.831470 -0.212607 93 | v 0.653282 1.707107 -0.270598 94 | v 0.768178 1.555570 -0.318189 95 | v 0.853554 1.382683 -0.353553 96 | v 0.906128 1.195090 -0.375330 97 | v 0.923880 1.000000 -0.382683 98 | v 0.906128 0.804910 -0.375330 99 | v 0.853554 0.617317 -0.353553 100 | v 0.768178 0.444430 -0.318189 101 | v 0.653282 0.292893 -0.270598 102 | v 0.513280 0.168530 -0.212607 103 | v 0.353554 0.076120 -0.146446 104 | v 0.180240 0.019215 -0.074658 105 | v 0.191342 1.980785 -0.038060 106 | v 0.375331 1.923880 -0.074658 107 | v 0.544895 1.831470 -0.108386 108 | v 0.693520 1.707107 -0.137949 109 | v 0.815493 1.555570 -0.162211 110 | v 0.906128 1.382683 -0.180240 111 | v 0.961940 1.195090 -0.191341 112 | v 0.980785 1.000000 -0.195090 113 | v 0.961940 0.804910 -0.191341 114 | v 0.906128 0.617317 -0.180240 115 | v 0.815493 0.444430 -0.162211 116 | v 0.693520 0.292893 -0.137949 117 | v 0.544895 0.168530 -0.108386 118 | v 0.375330 0.076120 -0.074658 119 | v 0.191342 0.019215 -0.038060 120 | v 0.195091 1.980785 0.000000 121 | v 0.382684 1.923880 0.000000 122 | v 0.555570 1.831470 0.000000 123 | v 0.707107 1.707107 0.000000 124 | v 0.831470 1.555570 0.000000 125 | v 0.923880 1.382683 0.000000 126 | v 0.980785 1.195090 0.000000 127 | v 1.000000 1.000000 0.000000 128 | v 0.980785 0.804910 0.000000 129 | v 0.923880 0.617317 0.000000 130 | v 0.831470 0.444430 0.000000 131 | v 0.707107 0.292893 0.000000 132 | v 0.555570 0.168530 0.000000 133 | v 0.382684 0.076120 0.000000 134 | v 0.195090 0.019215 0.000000 135 | v 0.191342 1.980785 0.038061 136 | v 0.375331 1.923880 0.074658 137 | v 0.544895 1.831470 0.108387 138 | v 0.693520 1.707107 0.137950 139 | v 0.815493 1.555570 0.162212 140 | v 0.906128 1.382683 0.180240 141 | v 0.961940 1.195090 0.191342 142 | v 0.980785 1.000000 0.195091 143 | v 0.961940 0.804910 0.191342 144 | v 0.906128 0.617317 0.180240 145 | v 0.815493 0.444430 0.162212 146 | v 0.693520 0.292893 0.137950 147 | v 0.544895 0.168530 0.108387 148 | v 0.375330 0.076120 0.074658 149 | v 0.191342 0.019215 0.038061 150 | v 0.180240 1.980785 0.074658 151 | v 0.353554 1.923880 0.146447 152 | v 0.513280 1.831470 0.212608 153 | v 0.653282 1.707107 0.270598 154 | v 0.768178 1.555570 0.318190 155 | v 0.853554 1.382683 0.353554 156 | v 0.906127 1.195090 0.375331 157 | v 0.923880 1.000000 0.382684 158 | v 0.906127 0.804910 0.375331 159 | v 0.853554 0.617317 0.353554 160 | v 0.768178 0.444430 0.318190 161 | v 0.653282 0.292893 0.270598 162 | v 0.513280 0.168530 0.212608 163 | v 0.353553 0.076120 0.146447 164 | v 0.180240 0.019215 0.074658 165 | v 0.162212 1.980785 0.108387 166 | v 0.318190 1.923880 0.212608 167 | v 0.461940 1.831470 0.308659 168 | v 0.587938 1.707107 0.392848 169 | v 0.691342 1.555570 0.461940 170 | v 0.768178 1.382683 0.513280 171 | v 0.815493 1.195090 0.544895 172 | v 0.831470 1.000000 0.555571 173 | v 0.815493 0.804910 0.544895 174 | v 0.768178 0.617317 0.513280 175 | v 0.691342 0.444430 0.461940 176 | v 0.587938 0.292893 0.392848 177 | v 0.461940 0.168530 0.308659 178 | v 0.318190 0.076120 0.212608 179 | v 0.162212 0.019215 0.108387 180 | v 0.137950 1.980785 0.137950 181 | v 0.270598 1.923880 0.270599 182 | v 0.392848 1.831470 0.392848 183 | v 0.500000 1.707107 0.500000 184 | v 0.587938 1.555570 0.587938 185 | v 0.653282 1.382683 0.653282 186 | v 0.693520 1.195090 0.693520 187 | v 0.707107 1.000000 0.707107 188 | v 0.693520 0.804910 0.693520 189 | v 0.653282 0.617317 0.653282 190 | v 0.587938 0.444430 0.587938 191 | v 0.500000 0.292893 0.500000 192 | v 0.392848 0.168530 0.392848 193 | v 0.270598 0.076120 0.270598 194 | v 0.137950 0.019215 0.137950 195 | v 0.108386 1.980785 0.162212 196 | v 0.212608 1.923880 0.318190 197 | v 0.308658 1.831470 0.461940 198 | v 0.392848 1.707107 0.587938 199 | v 0.461940 1.555570 0.691342 200 | v 0.513280 1.382683 0.768178 201 | v 0.544895 1.195090 0.815493 202 | v 0.555570 1.000000 0.831470 203 | v 0.544895 0.804910 0.815493 204 | v 0.513280 0.617317 0.768178 205 | v 0.461940 0.444430 0.691342 206 | v 0.392848 0.292893 0.587938 207 | v 0.308658 0.168530 0.461940 208 | v 0.212608 0.076120 0.318190 209 | v 0.108386 0.019215 0.162212 210 | v 0.000000 0.000000 0.000000 211 | v 0.074658 1.980785 0.180240 212 | v 0.146447 1.923880 0.353554 213 | v 0.212608 1.831470 0.513280 214 | v 0.270598 1.707107 0.653282 215 | v 0.318190 1.555570 0.768178 216 | v 0.353553 1.382683 0.853554 217 | v 0.375330 1.195090 0.906128 218 | v 0.382683 1.000000 0.923880 219 | v 0.375330 0.804910 0.906128 220 | v 0.353553 0.617317 0.853554 221 | v 0.318190 0.444430 0.768178 222 | v 0.270598 0.292893 0.653282 223 | v 0.212608 0.168530 0.513280 224 | v 0.146447 0.076120 0.353554 225 | v 0.074658 0.019215 0.180240 226 | v 0.038060 1.980785 0.191342 227 | v 0.074658 1.923880 0.375331 228 | v 0.108386 1.831470 0.544896 229 | v 0.137950 1.707107 0.693520 230 | v 0.162212 1.555570 0.815493 231 | v 0.180240 1.382683 0.906128 232 | v 0.191342 1.195090 0.961940 233 | v 0.195090 1.000000 0.980786 234 | v 0.191342 0.804910 0.961940 235 | v 0.180240 0.617317 0.906128 236 | v 0.162212 0.444430 0.815493 237 | v 0.137950 0.292893 0.693520 238 | v 0.108386 0.168530 0.544895 239 | v 0.074658 0.076120 0.375331 240 | v 0.038060 0.019215 0.191342 241 | v -0.000000 1.980785 0.195091 242 | v 0.000000 1.923880 0.382684 243 | v 0.000000 1.831470 0.555571 244 | v -0.000000 1.707107 0.707107 245 | v -0.000000 1.555570 0.831470 246 | v 0.000000 1.382683 0.923880 247 | v -0.000000 1.195090 0.980785 248 | v -0.000000 1.000000 1.000000 249 | v -0.000000 0.804910 0.980785 250 | v 0.000000 0.617317 0.923880 251 | v -0.000000 0.444430 0.831470 252 | v -0.000000 0.292893 0.707107 253 | v -0.000000 0.168530 0.555570 254 | v 0.000000 0.076120 0.382684 255 | v 0.000000 0.019215 0.195091 256 | v -0.038060 1.980785 0.191342 257 | v -0.074658 1.923880 0.375331 258 | v -0.108386 1.831470 0.544896 259 | v -0.137950 1.707107 0.693520 260 | v -0.162212 1.555570 0.815493 261 | v -0.180240 1.382683 0.906128 262 | v -0.191342 1.195090 0.961940 263 | v -0.195090 1.000000 0.980786 264 | v -0.191342 0.804910 0.961940 265 | v -0.180240 0.617317 0.906128 266 | v -0.162212 0.444430 0.815493 267 | v -0.137950 0.292893 0.693520 268 | v -0.108386 0.168530 0.544895 269 | v -0.074658 0.076120 0.375331 270 | v -0.038060 0.019215 0.191342 271 | v -0.074658 1.980785 0.180240 272 | v -0.146447 1.923880 0.353554 273 | v -0.212608 1.831470 0.513280 274 | v -0.270598 1.707107 0.653282 275 | v -0.318190 1.555570 0.768178 276 | v -0.353553 1.382683 0.853554 277 | v -0.375330 1.195090 0.906127 278 | v -0.382684 1.000000 0.923880 279 | v -0.375330 0.804910 0.906127 280 | v -0.353553 0.617317 0.853554 281 | v -0.318190 0.444430 0.768178 282 | v -0.270598 0.292893 0.653282 283 | v -0.212608 0.168530 0.513280 284 | v -0.146447 0.076120 0.353554 285 | v -0.074658 0.019215 0.180240 286 | v -0.108386 1.980785 0.162212 287 | v -0.212608 1.923880 0.318190 288 | v -0.308658 1.831470 0.461940 289 | v -0.392847 1.707107 0.587938 290 | v -0.461940 1.555570 0.691342 291 | v -0.513280 1.382683 0.768178 292 | v -0.544895 1.195090 0.815493 293 | v -0.555570 1.000000 0.831470 294 | v -0.544895 0.804910 0.815493 295 | v -0.513280 0.617317 0.768178 296 | v -0.461940 0.444430 0.691342 297 | v -0.392847 0.292893 0.587938 298 | v -0.308658 0.168530 0.461940 299 | v -0.212607 0.076120 0.318190 300 | v -0.108386 0.019215 0.162212 301 | v -0.000000 2.000000 0.000001 302 | v -0.137950 1.980785 0.137950 303 | v -0.270598 1.923880 0.270598 304 | v -0.392848 1.831470 0.392848 305 | v -0.500000 1.707107 0.500000 306 | v -0.587938 1.555570 0.587938 307 | v -0.653281 1.382683 0.653282 308 | v -0.693520 1.195090 0.693520 309 | v -0.707107 1.000000 0.707107 310 | v -0.693520 0.804910 0.693520 311 | v -0.653281 0.617317 0.653282 312 | v -0.587938 0.444430 0.587938 313 | v -0.500000 0.292893 0.500000 314 | v -0.392847 0.168530 0.392848 315 | v -0.270598 0.076120 0.270598 316 | v -0.137950 0.019215 0.137950 317 | v -0.162212 1.980785 0.108387 318 | v -0.318190 1.923880 0.212608 319 | v -0.461940 1.831470 0.308659 320 | v -0.587938 1.707107 0.392848 321 | v -0.691342 1.555570 0.461940 322 | v -0.768178 1.382683 0.513280 323 | v -0.815493 1.195090 0.544895 324 | v -0.831470 1.000000 0.555570 325 | v -0.815493 0.804910 0.544895 326 | v -0.768178 0.617317 0.513280 327 | v -0.691342 0.444430 0.461940 328 | v -0.587938 0.292893 0.392848 329 | v -0.461940 0.168530 0.308658 330 | v -0.318190 0.076120 0.212608 331 | v -0.162212 0.019215 0.108387 332 | v -0.180240 1.980785 0.074658 333 | v -0.353553 1.923880 0.146447 334 | v -0.513280 1.831470 0.212608 335 | v -0.653281 1.707107 0.270598 336 | v -0.768177 1.555570 0.318190 337 | v -0.853553 1.382683 0.353554 338 | v -0.906127 1.195090 0.375330 339 | v -0.923880 1.000000 0.382684 340 | v -0.906127 0.804910 0.375330 341 | v -0.853553 0.617317 0.353554 342 | v -0.768177 0.444430 0.318190 343 | v -0.653281 0.292893 0.270598 344 | v -0.513280 0.168530 0.212608 345 | v -0.353553 0.076120 0.146447 346 | v -0.180240 0.019215 0.074658 347 | v -0.191342 1.980785 0.038061 348 | v -0.375330 1.923880 0.074658 349 | v -0.544895 1.831470 0.108387 350 | v -0.693520 1.707107 0.137950 351 | v -0.815493 1.555570 0.162212 352 | v -0.906127 1.382683 0.180240 353 | v -0.961939 1.195090 0.191342 354 | v -0.980785 1.000000 0.195090 355 | v -0.961939 0.804910 0.191342 356 | v -0.906127 0.617317 0.180240 357 | v -0.815493 0.444430 0.162212 358 | v -0.693520 0.292893 0.137950 359 | v -0.544895 0.168530 0.108387 360 | v -0.375330 0.076120 0.074658 361 | v -0.191342 0.019215 0.038061 362 | v -0.195090 1.980785 0.000000 363 | v -0.382683 1.923880 0.000000 364 | v -0.555570 1.831470 0.000000 365 | v -0.707107 1.707107 0.000000 366 | v -0.831469 1.555570 0.000000 367 | v -0.923879 1.382683 0.000000 368 | v -0.980785 1.195090 0.000000 369 | v -1.000000 1.000000 0.000000 370 | v -0.980785 0.804910 0.000000 371 | v -0.923879 0.617317 0.000000 372 | v -0.831469 0.444430 0.000000 373 | v -0.707107 0.292893 0.000000 374 | v -0.555570 0.168530 0.000000 375 | v -0.382683 0.076120 0.000000 376 | v -0.195090 0.019215 0.000000 377 | v -0.191342 1.980785 -0.038060 378 | v -0.375330 1.923880 -0.074658 379 | v -0.544895 1.831470 -0.108386 380 | v -0.693520 1.707107 -0.137949 381 | v -0.815493 1.555570 -0.162211 382 | v -0.906127 1.382683 -0.180240 383 | v -0.961939 1.195090 -0.191342 384 | v -0.980785 1.000000 -0.195090 385 | v -0.961939 0.804910 -0.191342 386 | v -0.906127 0.617317 -0.180240 387 | v -0.815493 0.444430 -0.162211 388 | v -0.693520 0.292893 -0.137949 389 | v -0.544895 0.168530 -0.108386 390 | v -0.375330 0.076120 -0.074658 391 | v -0.191342 0.019215 -0.038060 392 | v -0.180240 1.980785 -0.074658 393 | v -0.353553 1.923880 -0.146446 394 | v -0.513280 1.831470 -0.212607 395 | v -0.653281 1.707107 -0.270598 396 | v -0.768177 1.555570 -0.318189 397 | v -0.853553 1.382683 -0.353553 398 | v -0.906127 1.195090 -0.375330 399 | v -0.923879 1.000000 -0.382683 400 | v -0.906127 0.804910 -0.375330 401 | v -0.853553 0.617317 -0.353553 402 | v -0.768177 0.444430 -0.318189 403 | v -0.653281 0.292893 -0.270598 404 | v -0.513280 0.168530 -0.212607 405 | v -0.353553 0.076120 -0.146446 406 | v -0.180240 0.019215 -0.074657 407 | v -0.162212 1.980785 -0.108386 408 | v -0.318190 1.923880 -0.212607 409 | v -0.461940 1.831470 -0.308658 410 | v -0.587938 1.707107 -0.392847 411 | v -0.691341 1.555570 -0.461939 412 | v -0.768178 1.382683 -0.513280 413 | v -0.815493 1.195090 -0.544895 414 | v -0.831469 1.000000 -0.555570 415 | v -0.815493 0.804910 -0.544895 416 | v -0.768178 0.617317 -0.513280 417 | v -0.691341 0.444430 -0.461939 418 | v -0.587938 0.292893 -0.392847 419 | v -0.461940 0.168530 -0.308658 420 | v -0.318189 0.076120 -0.212607 421 | v -0.162212 0.019215 -0.108386 422 | v -0.137950 1.980785 -0.137949 423 | v -0.270598 1.923880 -0.270598 424 | v -0.392847 1.831470 -0.392847 425 | v -0.500000 1.707107 -0.500000 426 | v -0.587937 1.555570 -0.587937 427 | v -0.653281 1.382683 -0.653281 428 | v -0.693519 1.195090 -0.693519 429 | v -0.707106 1.000000 -0.707106 430 | v -0.693519 0.804910 -0.693519 431 | v -0.653281 0.617317 -0.653281 432 | v -0.587937 0.444430 -0.587937 433 | v -0.500000 0.292893 -0.500000 434 | v -0.392847 0.168530 -0.392847 435 | v -0.270598 0.076120 -0.270598 436 | v -0.137950 0.019215 -0.137949 437 | v -0.108386 1.980785 -0.162211 438 | v -0.212607 1.923880 -0.318189 439 | v -0.308658 1.831470 -0.461939 440 | v -0.392847 1.707107 -0.587937 441 | v -0.461939 1.555570 -0.691341 442 | v -0.513280 1.382683 -0.768177 443 | v -0.544895 1.195090 -0.815492 444 | v -0.555570 1.000000 -0.831469 445 | v -0.544895 0.804910 -0.815492 446 | v -0.513280 0.617317 -0.768177 447 | v -0.461939 0.444430 -0.691341 448 | v -0.392847 0.292893 -0.587937 449 | v -0.308658 0.168530 -0.461939 450 | v -0.212607 0.076120 -0.318189 451 | v -0.108386 0.019215 -0.162211 452 | v -0.074658 1.980785 -0.180240 453 | v -0.146447 1.923880 -0.353553 454 | v -0.212607 1.831470 -0.513280 455 | v -0.270598 1.707107 -0.653281 456 | v -0.318189 1.555570 -0.768177 457 | v -0.353553 1.382683 -0.853553 458 | v -0.375330 1.195090 -0.906127 459 | v -0.382683 1.000000 -0.923879 460 | v -0.375330 0.804910 -0.906127 461 | v -0.353553 0.617317 -0.853553 462 | v -0.318189 0.444430 -0.768177 463 | v -0.270598 0.292893 -0.653281 464 | v -0.212607 0.168530 -0.513279 465 | v -0.146446 0.076120 -0.353553 466 | v -0.074658 0.019215 -0.180240 467 | v -0.038060 1.980785 -0.191342 468 | v -0.074658 1.923880 -0.375330 469 | v -0.108386 1.831470 -0.544895 470 | v -0.137950 1.707107 -0.693520 471 | v -0.162211 1.555570 -0.815492 472 | v -0.180240 1.382683 -0.906127 473 | v -0.191341 1.195090 -0.961939 474 | v -0.195090 1.000000 -0.980785 475 | v -0.191341 0.804910 -0.961939 476 | v -0.180240 0.617317 -0.906127 477 | v -0.162211 0.444430 -0.815492 478 | v -0.137950 0.292893 -0.693520 479 | v -0.108386 0.168530 -0.544895 480 | v -0.074658 0.076120 -0.375330 481 | v -0.038060 0.019215 -0.191341 482 | v 0.000000 0.617317 -0.923879 483 | v 0.000000 0.444430 -0.831469 484 | v 0.000000 0.292893 -0.707106 485 | v 0.000000 0.076120 -0.382683 486 | v 0.000000 0.019215 -0.195090 487 | vt 0.750000 0.937500 488 | vt 0.734375 1.000000 489 | vt 0.718750 0.937500 490 | vt 0.734375 0.000000 491 | vt 0.750000 0.062500 492 | vt 0.718750 0.062500 493 | vt 0.750000 0.437500 494 | vt 0.750000 0.500000 495 | vt 0.718750 0.500000 496 | vt 0.718750 0.437500 497 | vt 0.750000 0.875000 498 | vt 0.718750 0.875000 499 | vt 0.750000 0.375000 500 | vt 0.718750 0.375000 501 | vt 0.750000 0.812500 502 | vt 0.718750 0.812500 503 | vt 0.750000 0.312500 504 | vt 0.718750 0.312500 505 | vt 0.750000 0.750000 506 | vt 0.718750 0.750000 507 | vt 0.750000 0.250000 508 | vt 0.718750 0.250000 509 | vt 0.750000 0.687500 510 | vt 0.718750 0.687500 511 | vt 0.750000 0.187500 512 | vt 0.718750 0.187500 513 | vt 0.750000 0.625000 514 | vt 0.718750 0.625000 515 | vt 0.750000 0.125000 516 | vt 0.718750 0.125000 517 | vt 0.750000 0.562500 518 | vt 0.718750 0.562500 519 | vt 0.687500 0.125000 520 | vt 0.687500 0.062500 521 | vt 0.687500 0.562500 522 | vt 0.687500 0.500000 523 | vt 0.703125 1.000000 524 | vt 0.687500 0.937500 525 | vt 0.703125 0.000000 526 | vt 0.687500 0.437500 527 | vt 0.687500 0.875000 528 | vt 0.687500 0.375000 529 | vt 0.687500 0.812500 530 | vt 0.687500 0.312500 531 | vt 0.687500 0.750000 532 | vt 0.687500 0.250000 533 | vt 0.687500 0.687500 534 | vt 0.687500 0.187500 535 | vt 0.687500 0.625000 536 | vt 0.656250 0.812500 537 | vt 0.656250 0.750000 538 | vt 0.656250 0.312500 539 | vt 0.656250 0.250000 540 | vt 0.656250 0.687500 541 | vt 0.656250 0.187500 542 | vt 0.656250 0.625000 543 | vt 0.656250 0.125000 544 | vt 0.656250 0.562500 545 | vt 0.656250 0.062500 546 | vt 0.656250 0.500000 547 | vt 0.671875 1.000000 548 | vt 0.656250 0.937500 549 | vt 0.671875 0.000000 550 | vt 0.656250 0.437500 551 | vt 0.656250 0.875000 552 | vt 0.656250 0.375000 553 | vt 0.625000 0.562500 554 | vt 0.625000 0.500000 555 | vt 0.640625 1.000000 556 | vt 0.625000 0.937500 557 | vt 0.640625 0.000000 558 | vt 0.625000 0.062500 559 | vt 0.625000 0.437500 560 | vt 0.625000 0.875000 561 | vt 0.625000 0.375000 562 | vt 0.625000 0.812500 563 | vt 0.625000 0.312500 564 | vt 0.625000 0.750000 565 | vt 0.625000 0.250000 566 | vt 0.625000 0.687500 567 | vt 0.625000 0.187500 568 | vt 0.625000 0.625000 569 | vt 0.625000 0.125000 570 | vt 0.593750 0.312500 571 | vt 0.593750 0.250000 572 | vt 0.593750 0.750000 573 | vt 0.593750 0.687500 574 | vt 0.593750 0.187500 575 | vt 0.593750 0.625000 576 | vt 0.593750 0.125000 577 | vt 0.593750 0.562500 578 | vt 0.593750 0.062500 579 | vt 0.593750 0.500000 580 | vt 0.609375 1.000000 581 | vt 0.593750 0.937500 582 | vt 0.609375 0.000000 583 | vt 0.593750 0.437500 584 | vt 0.593750 0.875000 585 | vt 0.593750 0.375000 586 | vt 0.593750 0.812500 587 | vt 0.578125 1.000000 588 | vt 0.562500 0.937500 589 | vt 0.578125 0.000000 590 | vt 0.562500 0.062500 591 | vt 0.562500 0.500000 592 | vt 0.562500 0.437500 593 | vt 0.562500 0.875000 594 | vt 0.562500 0.375000 595 | vt 0.562500 0.812500 596 | vt 0.562500 0.312500 597 | vt 0.562500 0.750000 598 | vt 0.562500 0.250000 599 | vt 0.562500 0.687500 600 | vt 0.562500 0.187500 601 | vt 0.562500 0.625000 602 | vt 0.562500 0.125000 603 | vt 0.562500 0.562500 604 | vt 0.531250 0.750000 605 | vt 0.531250 0.687500 606 | vt 0.531250 0.250000 607 | vt 0.531250 0.187500 608 | vt 0.531250 0.625000 609 | vt 0.531250 0.125000 610 | vt 0.531250 0.562500 611 | vt 0.531250 0.062500 612 | vt 0.531250 0.500000 613 | vt 0.546875 1.000000 614 | vt 0.531250 0.937500 615 | vt 0.546875 0.000000 616 | vt 0.531250 0.437500 617 | vt 0.531250 0.875000 618 | vt 0.531250 0.375000 619 | vt 0.531250 0.812500 620 | vt 0.531250 0.312500 621 | vt 0.500000 0.500000 622 | vt 0.500000 0.437500 623 | vt 0.500000 0.937500 624 | vt 0.500000 0.875000 625 | vt 0.500000 0.375000 626 | vt 0.500000 0.812500 627 | vt 0.500000 0.312500 628 | vt 0.500000 0.750000 629 | vt 0.500000 0.250000 630 | vt 0.500000 0.687500 631 | vt 0.500000 0.187500 632 | vt 0.500000 0.625000 633 | vt 0.500000 0.125000 634 | vt 0.500000 0.562500 635 | vt 0.500000 0.062500 636 | vt 0.515625 1.000000 637 | vt 0.515625 0.000000 638 | vt 0.468750 0.250000 639 | vt 0.468750 0.187500 640 | vt 0.468750 0.687500 641 | vt 0.468750 0.625000 642 | vt 0.468750 0.125000 643 | vt 0.468750 0.562500 644 | vt 0.468750 0.062500 645 | vt 0.468750 0.500000 646 | vt 0.484374 1.000000 647 | vt 0.468750 0.937500 648 | vt 0.484375 0.000000 649 | vt 0.468750 0.437500 650 | vt 0.468750 0.875000 651 | vt 0.468750 0.375000 652 | vt 0.468750 0.812500 653 | vt 0.468750 0.312500 654 | vt 0.468750 0.750000 655 | vt 0.437500 0.437500 656 | vt 0.437500 0.375000 657 | vt 0.437500 0.875000 658 | vt 0.437500 0.812500 659 | vt 0.437500 0.312500 660 | vt 0.437500 0.750000 661 | vt 0.437500 0.250000 662 | vt 0.437500 0.687500 663 | vt 0.437500 0.187500 664 | vt 0.437500 0.625000 665 | vt 0.437500 0.125000 666 | vt 0.437500 0.562500 667 | vt 0.437500 0.062500 668 | vt 0.437500 0.500000 669 | vt 0.453124 1.000000 670 | vt 0.437500 0.937500 671 | vt 0.453125 0.000000 672 | vt 0.406250 0.187500 673 | vt 0.406250 0.125000 674 | vt 0.406250 0.625000 675 | vt 0.406250 0.562500 676 | vt 0.406250 0.062500 677 | vt 0.406250 0.500000 678 | vt 0.421874 1.000000 679 | vt 0.406250 0.937500 680 | vt 0.421875 0.000000 681 | vt 0.406250 0.437500 682 | vt 0.406250 0.875000 683 | vt 0.406250 0.375000 684 | vt 0.406250 0.812500 685 | vt 0.406250 0.312500 686 | vt 0.406250 0.750000 687 | vt 0.406250 0.250000 688 | vt 0.406250 0.687500 689 | vt 0.375000 0.875000 690 | vt 0.375000 0.812500 691 | vt 0.375000 0.375000 692 | vt 0.375000 0.312500 693 | vt 0.375000 0.750000 694 | vt 0.375000 0.250000 695 | vt 0.375000 0.687500 696 | vt 0.375000 0.187500 697 | vt 0.375000 0.625000 698 | vt 0.375000 0.125000 699 | vt 0.375000 0.562500 700 | vt 0.375000 0.062500 701 | vt 0.375000 0.500000 702 | vt 0.390625 1.000000 703 | vt 0.375000 0.937500 704 | vt 0.390625 0.000000 705 | vt 0.375000 0.437500 706 | vt 0.343750 0.625000 707 | vt 0.343750 0.562500 708 | vt 0.343750 0.125000 709 | vt 0.343750 0.062500 710 | vt 0.343750 0.500000 711 | vt 0.359375 1.000000 712 | vt 0.343750 0.937500 713 | vt 0.359375 0.000000 714 | vt 0.343750 0.437500 715 | vt 0.343750 0.875000 716 | vt 0.343750 0.375000 717 | vt 0.343750 0.812500 718 | vt 0.343750 0.312500 719 | vt 0.343750 0.750000 720 | vt 0.343750 0.250000 721 | vt 0.343750 0.687500 722 | vt 0.343750 0.187500 723 | vt 0.312500 0.375000 724 | vt 0.312500 0.312500 725 | vt 0.312500 0.812500 726 | vt 0.312500 0.750000 727 | vt 0.312500 0.250000 728 | vt 0.312500 0.687500 729 | vt 0.312500 0.187500 730 | vt 0.312500 0.625000 731 | vt 0.312500 0.125000 732 | vt 0.312500 0.562500 733 | vt 0.312500 0.062500 734 | vt 0.312500 0.500000 735 | vt 0.328125 1.000000 736 | vt 0.312500 0.937500 737 | vt 0.328125 0.000000 738 | vt 0.312500 0.437500 739 | vt 0.312500 0.875000 740 | vt 0.281250 0.125000 741 | vt 0.281250 0.062500 742 | vt 0.281250 0.562500 743 | vt 0.281250 0.500000 744 | vt 0.296875 1.000000 745 | vt 0.281250 0.937500 746 | vt 0.296875 0.000000 747 | vt 0.281250 0.437500 748 | vt 0.281250 0.875000 749 | vt 0.281250 0.375000 750 | vt 0.281250 0.812500 751 | vt 0.281250 0.312500 752 | vt 0.281250 0.750000 753 | vt 0.281250 0.250000 754 | vt 0.281250 0.687500 755 | vt 0.281250 0.187500 756 | vt 0.281250 0.625000 757 | vt 0.250000 0.812500 758 | vt 0.250000 0.750000 759 | vt 0.250000 0.312500 760 | vt 0.250000 0.250000 761 | vt 0.250000 0.687500 762 | vt 0.250000 0.187500 763 | vt 0.250000 0.625000 764 | vt 0.250000 0.125000 765 | vt 0.250000 0.562500 766 | vt 0.250000 0.062500 767 | vt 0.250000 0.500000 768 | vt 0.265625 1.000000 769 | vt 0.250000 0.937500 770 | vt 0.265625 0.000000 771 | vt 0.250000 0.437500 772 | vt 0.250000 0.875000 773 | vt 0.250000 0.375000 774 | vt 0.218750 0.562500 775 | vt 0.218750 0.500000 776 | vt 0.234375 1.000000 777 | vt 0.218750 0.937500 778 | vt 0.234375 0.000000 779 | vt 0.218750 0.062500 780 | vt 0.218750 0.437500 781 | vt 0.218750 0.875000 782 | vt 0.218750 0.375000 783 | vt 0.218750 0.812500 784 | vt 0.218750 0.312500 785 | vt 0.218750 0.750000 786 | vt 0.218750 0.250000 787 | vt 0.218750 0.687500 788 | vt 0.218750 0.187500 789 | vt 0.218750 0.625000 790 | vt 0.218750 0.125000 791 | vt 0.187500 0.312500 792 | vt 0.187500 0.250000 793 | vt 0.187500 0.750000 794 | vt 0.187500 0.687500 795 | vt 0.187500 0.187500 796 | vt 0.187500 0.625000 797 | vt 0.187500 0.125000 798 | vt 0.187500 0.562500 799 | vt 0.187500 0.062500 800 | vt 0.187500 0.500000 801 | vt 0.203125 1.000000 802 | vt 0.187500 0.937500 803 | vt 0.203125 0.000000 804 | vt 0.187500 0.437500 805 | vt 0.187500 0.875000 806 | vt 0.187500 0.375000 807 | vt 0.187500 0.812500 808 | vt 0.171875 0.000000 809 | vt 0.156250 0.062500 810 | vt 0.156250 0.500000 811 | vt 0.156250 0.437500 812 | vt 0.156250 0.937500 813 | vt 0.156250 0.875000 814 | vt 0.156250 0.375000 815 | vt 0.156250 0.812500 816 | vt 0.156250 0.312500 817 | vt 0.156250 0.750000 818 | vt 0.156250 0.250000 819 | vt 0.156250 0.687500 820 | vt 0.156250 0.187500 821 | vt 0.156250 0.625000 822 | vt 0.156250 0.125000 823 | vt 0.156250 0.562500 824 | vt 0.171875 1.000000 825 | vt 0.125000 0.250000 826 | vt 0.125000 0.187500 827 | vt 0.125000 0.687500 828 | vt 0.125000 0.625000 829 | vt 0.125000 0.125000 830 | vt 0.125000 0.562500 831 | vt 0.125000 0.062500 832 | vt 0.125000 0.500000 833 | vt 0.140625 1.000000 834 | vt 0.125000 0.937500 835 | vt 0.140625 0.000000 836 | vt 0.125000 0.437500 837 | vt 0.125000 0.875000 838 | vt 0.125000 0.375000 839 | vt 0.125000 0.812500 840 | vt 0.125000 0.312500 841 | vt 0.125000 0.750000 842 | vt 0.093750 0.937500 843 | vt 0.093750 0.875000 844 | vt 0.093750 0.437500 845 | vt 0.093750 0.375000 846 | vt 0.093750 0.812500 847 | vt 0.093750 0.312500 848 | vt 0.093750 0.750000 849 | vt 0.093750 0.250000 850 | vt 0.093750 0.687500 851 | vt 0.093750 0.187500 852 | vt 0.093750 0.625000 853 | vt 0.093750 0.125000 854 | vt 0.093750 0.562500 855 | vt 0.093750 0.062500 856 | vt 0.093750 0.500000 857 | vt 0.109375 1.000000 858 | vt 0.109375 0.000000 859 | vt 0.062500 0.687500 860 | vt 0.062500 0.625000 861 | vt 0.062500 0.187500 862 | vt 0.062500 0.125000 863 | vt 0.062500 0.562500 864 | vt 0.062500 0.062500 865 | vt 0.062500 0.500000 866 | vt 0.078125 1.000000 867 | vt 0.062500 0.937500 868 | vt 0.078125 0.000000 869 | vt 0.062500 0.437500 870 | vt 0.062500 0.875000 871 | vt 0.062500 0.375000 872 | vt 0.062500 0.812500 873 | vt 0.062500 0.312500 874 | vt 0.062500 0.750000 875 | vt 0.062500 0.250000 876 | vt 0.031250 0.437500 877 | vt 0.031250 0.375000 878 | vt 0.031250 0.875000 879 | vt 0.031250 0.812500 880 | vt 0.031250 0.312500 881 | vt 0.031250 0.750000 882 | vt 0.031250 0.250000 883 | vt 0.031250 0.687500 884 | vt 0.031250 0.187500 885 | vt 0.031250 0.625000 886 | vt 0.031250 0.125000 887 | vt 0.031250 0.562500 888 | vt 0.031250 0.062500 889 | vt 0.031250 0.500000 890 | vt 0.046875 1.000000 891 | vt 0.031250 0.937500 892 | vt 0.046875 0.000000 893 | vt 0.000000 0.187500 894 | vt 0.000000 0.125000 895 | vt 0.000000 0.625000 896 | vt 0.000000 0.562500 897 | vt 0.000000 0.062500 898 | vt 0.000000 0.500000 899 | vt 0.015625 1.000000 900 | vt 0.000000 0.937500 901 | vt 0.015625 0.000000 902 | vt 0.000000 0.437500 903 | vt 0.000000 0.875000 904 | vt 0.000000 0.375000 905 | vt 0.000000 0.812500 906 | vt 0.000000 0.312500 907 | vt 0.000000 0.750000 908 | vt 0.000000 0.250000 909 | vt 0.000000 0.687500 910 | vt 1.000000 0.812500 911 | vt 1.000000 0.875000 912 | vt 0.968750 0.875000 913 | vt 0.968750 0.812500 914 | vt 1.000000 0.312500 915 | vt 1.000000 0.375000 916 | vt 0.968750 0.375000 917 | vt 0.968750 0.312500 918 | vt 1.000000 0.750000 919 | vt 0.968750 0.750000 920 | vt 1.000000 0.250000 921 | vt 0.968750 0.250000 922 | vt 1.000000 0.687500 923 | vt 0.968750 0.687500 924 | vt 1.000000 0.187500 925 | vt 0.968750 0.187500 926 | vt 1.000000 0.625000 927 | vt 0.968750 0.625000 928 | vt 1.000000 0.125000 929 | vt 0.968750 0.125000 930 | vt 1.000000 0.562500 931 | vt 0.968750 0.562500 932 | vt 1.000000 0.062500 933 | vt 0.968750 0.062500 934 | vt 1.000000 0.500000 935 | vt 0.968750 0.500000 936 | vt 1.000000 0.937500 937 | vt 0.984375 1.000000 938 | vt 0.968750 0.937500 939 | vt 0.984375 0.000000 940 | vt 1.000000 0.437500 941 | vt 0.968750 0.437500 942 | vt 0.937500 0.625000 943 | vt 0.937500 0.562500 944 | vt 0.937500 0.125000 945 | vt 0.937500 0.062500 946 | vt 0.937500 0.500000 947 | vt 0.953125 1.000000 948 | vt 0.937500 0.937500 949 | vt 0.953125 0.000000 950 | vt 0.937500 0.437500 951 | vt 0.937500 0.875000 952 | vt 0.937500 0.375000 953 | vt 0.937500 0.812500 954 | vt 0.937500 0.312500 955 | vt 0.937500 0.750000 956 | vt 0.937500 0.250000 957 | vt 0.937500 0.687500 958 | vt 0.937500 0.187500 959 | vt 0.906250 0.375000 960 | vt 0.906250 0.312500 961 | vt 0.906250 0.812500 962 | vt 0.906250 0.750000 963 | vt 0.906250 0.250000 964 | vt 0.906250 0.687500 965 | vt 0.906250 0.187500 966 | vt 0.906250 0.625000 967 | vt 0.906250 0.125000 968 | vt 0.906250 0.562500 969 | vt 0.906250 0.062500 970 | vt 0.906250 0.500000 971 | vt 0.921875 1.000000 972 | vt 0.906250 0.937500 973 | vt 0.921875 0.000000 974 | vt 0.906250 0.437500 975 | vt 0.906250 0.875000 976 | vt 0.875000 0.125000 977 | vt 0.875000 0.062500 978 | vt 0.875000 0.562500 979 | vt 0.875000 0.500000 980 | vt 0.890625 1.000000 981 | vt 0.875000 0.937500 982 | vt 0.890625 0.000000 983 | vt 0.875000 0.437500 984 | vt 0.875000 0.875000 985 | vt 0.875000 0.375000 986 | vt 0.875000 0.812500 987 | vt 0.875000 0.312500 988 | vt 0.875000 0.750000 989 | vt 0.875000 0.250000 990 | vt 0.875000 0.687500 991 | vt 0.875000 0.187500 992 | vt 0.875000 0.625000 993 | vt 0.843750 0.312500 994 | vt 0.843750 0.250000 995 | vt 0.843750 0.750000 996 | vt 0.843750 0.687500 997 | vt 0.843750 0.187500 998 | vt 0.843750 0.625000 999 | vt 0.843750 0.125000 1000 | vt 0.843750 0.562500 1001 | vt 0.843750 0.062500 1002 | vt 0.843750 0.500000 1003 | vt 0.859375 1.000000 1004 | vt 0.843750 0.937500 1005 | vt 0.859375 0.000000 1006 | vt 0.843750 0.437500 1007 | vt 0.843750 0.875000 1008 | vt 0.843750 0.375000 1009 | vt 0.843750 0.812500 1010 | vt 0.828125 1.000000 1011 | vt 0.812500 0.937500 1012 | vt 0.828125 0.000000 1013 | vt 0.812500 0.062500 1014 | vt 0.812500 0.500000 1015 | vt 0.812500 0.437500 1016 | vt 0.812500 0.875000 1017 | vt 0.812500 0.375000 1018 | vt 0.812500 0.812500 1019 | vt 0.812500 0.312500 1020 | vt 0.812500 0.750000 1021 | vt 0.812500 0.250000 1022 | vt 0.812500 0.687500 1023 | vt 0.812500 0.187500 1024 | vt 0.812500 0.625000 1025 | vt 0.812500 0.125000 1026 | vt 0.812500 0.562500 1027 | vt 0.781250 0.750000 1028 | vt 0.781250 0.687500 1029 | vt 0.781250 0.250000 1030 | vt 0.781250 0.187500 1031 | vt 0.781250 0.625000 1032 | vt 0.781250 0.125000 1033 | vt 0.781250 0.562500 1034 | vt 0.781250 0.062500 1035 | vt 0.781250 0.500000 1036 | vt 0.796875 1.000000 1037 | vt 0.781250 0.937500 1038 | vt 0.796875 0.000000 1039 | vt 0.781250 0.437500 1040 | vt 0.781250 0.875000 1041 | vt 0.781250 0.375000 1042 | vt 0.781250 0.812500 1043 | vt 0.781250 0.312500 1044 | vt 0.765625 1.000000 1045 | vt 0.765625 0.000000 1046 | vn 0.0000 0.9796 -0.2010 1047 | vn 0.0000 1.0000 0.0000 1048 | vn 0.0392 0.9796 -0.1971 1049 | vn 0.0000 -1.0000 0.0000 1050 | vn 0.0000 -0.9796 -0.2010 1051 | vn 0.0392 -0.9796 -0.1971 1052 | vn 0.0000 -0.1939 -0.9810 1053 | vn 0.0000 0.0000 -1.0000 1054 | vn 0.1951 0.0000 -0.9808 1055 | vn 0.1914 -0.1939 -0.9622 1056 | vn 0.0000 0.9217 -0.3879 1057 | vn 0.0757 0.9217 -0.3804 1058 | vn 0.0000 -0.3805 -0.9247 1059 | vn 0.1804 -0.3805 -0.9070 1060 | vn 0.0000 0.8286 -0.5598 1061 | vn 0.1092 0.8286 -0.5490 1062 | vn 0.0000 -0.5528 -0.8333 1063 | vn 0.1626 -0.5528 -0.8173 1064 | vn 0.0000 0.7040 -0.7101 1065 | vn 0.1385 0.7040 -0.6965 1066 | vn 0.0000 -0.7040 -0.7101 1067 | vn 0.1385 -0.7040 -0.6965 1068 | vn 0.0000 0.5528 -0.8333 1069 | vn 0.1626 0.5528 -0.8173 1070 | vn 0.0000 -0.8286 -0.5598 1071 | vn 0.1092 -0.8286 -0.5490 1072 | vn 0.0000 0.3805 -0.9247 1073 | vn 0.1804 0.3805 -0.9070 1074 | vn 0.0000 -0.9217 -0.3879 1075 | vn 0.0757 -0.9217 -0.3804 1076 | vn 0.0000 0.1939 -0.9810 1077 | vn 0.1914 0.1939 -0.9622 1078 | vn 0.1484 -0.9217 -0.3583 1079 | vn 0.0769 -0.9796 -0.1856 1080 | vn 0.3754 0.1939 -0.9063 1081 | vn 0.3827 0.0000 -0.9239 1082 | vn 0.0769 0.9796 -0.1856 1083 | vn 0.3754 -0.1939 -0.9063 1084 | vn 0.1484 0.9217 -0.3583 1085 | vn 0.3539 -0.3805 -0.8544 1086 | vn 0.2142 0.8286 -0.5171 1087 | vn 0.3189 -0.5528 -0.7699 1088 | vn 0.2717 0.7040 -0.6561 1089 | vn 0.2717 -0.7040 -0.6561 1090 | vn 0.3189 0.5528 -0.7699 1091 | vn 0.2142 -0.8286 -0.5171 1092 | vn 0.3539 0.3805 -0.8544 1093 | vn 0.3110 0.8286 -0.4654 1094 | vn 0.3945 0.7040 -0.5904 1095 | vn 0.4630 -0.5528 -0.6929 1096 | vn 0.3945 -0.7040 -0.5904 1097 | vn 0.4630 0.5528 -0.6929 1098 | vn 0.3110 -0.8286 -0.4654 1099 | vn 0.5137 0.3805 -0.7689 1100 | vn 0.2155 -0.9217 -0.3225 1101 | vn 0.5450 0.1939 -0.8157 1102 | vn 0.1116 -0.9796 -0.1671 1103 | vn 0.5556 0.0000 -0.8314 1104 | vn 0.1116 0.9796 -0.1671 1105 | vn 0.5450 -0.1939 -0.8157 1106 | vn 0.2155 0.9217 -0.3225 1107 | vn 0.5137 -0.3805 -0.7689 1108 | vn 0.6937 0.1939 -0.6937 1109 | vn 0.7071 0.0000 -0.7071 1110 | vn 0.1421 0.9796 -0.1421 1111 | vn 0.1421 -0.9796 -0.1421 1112 | vn 0.6937 -0.1939 -0.6937 1113 | vn 0.2743 0.9217 -0.2743 1114 | vn 0.6539 -0.3805 -0.6539 1115 | vn 0.3958 0.8286 -0.3958 1116 | vn 0.5893 -0.5528 -0.5893 1117 | vn 0.5021 0.7040 -0.5021 1118 | vn 0.5021 -0.7040 -0.5021 1119 | vn 0.5893 0.5528 -0.5893 1120 | vn 0.3958 -0.8286 -0.3958 1121 | vn 0.6539 0.3805 -0.6539 1122 | vn 0.2743 -0.9217 -0.2743 1123 | vn 0.6929 -0.5528 -0.4630 1124 | vn 0.5904 -0.7040 -0.3945 1125 | vn 0.5904 0.7040 -0.3945 1126 | vn 0.6929 0.5528 -0.4630 1127 | vn 0.4654 -0.8286 -0.3110 1128 | vn 0.7689 0.3805 -0.5137 1129 | vn 0.3225 -0.9217 -0.2155 1130 | vn 0.8157 0.1939 -0.5450 1131 | vn 0.1671 -0.9796 -0.1116 1132 | vn 0.8314 0.0000 -0.5556 1133 | vn 0.1671 0.9796 -0.1116 1134 | vn 0.8157 -0.1939 -0.5450 1135 | vn 0.3225 0.9217 -0.2155 1136 | vn 0.7689 -0.3805 -0.5137 1137 | vn 0.4654 0.8286 -0.3110 1138 | vn 0.1856 0.9796 -0.0769 1139 | vn 0.1856 -0.9796 -0.0769 1140 | vn 0.9239 0.0000 -0.3827 1141 | vn 0.9063 -0.1939 -0.3754 1142 | vn 0.3583 0.9217 -0.1484 1143 | vn 0.8544 -0.3805 -0.3539 1144 | vn 0.5171 0.8286 -0.2142 1145 | vn 0.7699 -0.5528 -0.3189 1146 | vn 0.6561 0.7040 -0.2717 1147 | vn 0.6561 -0.7040 -0.2717 1148 | vn 0.7699 0.5528 -0.3189 1149 | vn 0.5171 -0.8286 -0.2142 1150 | vn 0.8544 0.3805 -0.3539 1151 | vn 0.3583 -0.9217 -0.1484 1152 | vn 0.9063 0.1939 -0.3754 1153 | vn 0.6965 0.7040 -0.1385 1154 | vn 0.8173 0.5528 -0.1626 1155 | vn 0.6965 -0.7040 -0.1385 1156 | vn 0.5490 -0.8286 -0.1092 1157 | vn 0.9070 0.3805 -0.1804 1158 | vn 0.3804 -0.9217 -0.0757 1159 | vn 0.9622 0.1939 -0.1914 1160 | vn 0.1971 -0.9796 -0.0392 1161 | vn 0.9808 0.0000 -0.1951 1162 | vn 0.1971 0.9796 -0.0392 1163 | vn 0.9622 -0.1939 -0.1914 1164 | vn 0.3804 0.9217 -0.0757 1165 | vn 0.9070 -0.3805 -0.1804 1166 | vn 0.5490 0.8286 -0.1092 1167 | vn 0.8173 -0.5528 -0.1626 1168 | vn 1.0000 0.0000 0.0000 1169 | vn 0.9810 -0.1939 0.0000 1170 | vn 0.2010 0.9796 0.0000 1171 | vn 0.3879 0.9217 0.0000 1172 | vn 0.9247 -0.3805 0.0000 1173 | vn 0.5598 0.8286 0.0000 1174 | vn 0.8333 -0.5528 0.0000 1175 | vn 0.7101 0.7040 0.0000 1176 | vn 0.7101 -0.7040 0.0000 1177 | vn 0.8333 0.5528 0.0000 1178 | vn 0.5598 -0.8286 0.0000 1179 | vn 0.9247 0.3805 0.0000 1180 | vn 0.3879 -0.9217 0.0000 1181 | vn 0.9810 0.1939 0.0000 1182 | vn 0.2010 -0.9796 0.0000 1183 | vn 0.6965 -0.7040 0.1385 1184 | vn 0.5490 -0.8286 0.1092 1185 | vn 0.8173 0.5528 0.1626 1186 | vn 0.9070 0.3805 0.1804 1187 | vn 0.3804 -0.9217 0.0757 1188 | vn 0.9622 0.1939 0.1914 1189 | vn 0.1971 -0.9796 0.0392 1190 | vn 0.9808 0.0000 0.1951 1191 | vn 0.1971 0.9796 0.0392 1192 | vn 0.9622 -0.1939 0.1914 1193 | vn 0.3804 0.9217 0.0757 1194 | vn 0.9070 -0.3805 0.1804 1195 | vn 0.5490 0.8286 0.1092 1196 | vn 0.8173 -0.5528 0.1626 1197 | vn 0.6965 0.7040 0.1385 1198 | vn 0.9063 -0.1939 0.3754 1199 | vn 0.8544 -0.3805 0.3539 1200 | vn 0.3583 0.9217 0.1484 1201 | vn 0.5171 0.8286 0.2142 1202 | vn 0.7699 -0.5528 0.3189 1203 | vn 0.6561 0.7040 0.2717 1204 | vn 0.6561 -0.7040 0.2717 1205 | vn 0.7699 0.5528 0.3189 1206 | vn 0.5171 -0.8286 0.2142 1207 | vn 0.8544 0.3805 0.3539 1208 | vn 0.3583 -0.9217 0.1484 1209 | vn 0.9063 0.1939 0.3754 1210 | vn 0.1856 -0.9796 0.0769 1211 | vn 0.9239 0.0000 0.3827 1212 | vn 0.1856 0.9796 0.0769 1213 | vn 0.4654 -0.8286 0.3110 1214 | vn 0.3225 -0.9217 0.2155 1215 | vn 0.7689 0.3805 0.5137 1216 | vn 0.8157 0.1939 0.5450 1217 | vn 0.1671 -0.9796 0.1116 1218 | vn 0.8314 0.0000 0.5556 1219 | vn 0.1671 0.9796 0.1116 1220 | vn 0.8157 -0.1939 0.5450 1221 | vn 0.3225 0.9217 0.2155 1222 | vn 0.7689 -0.3805 0.5137 1223 | vn 0.4654 0.8286 0.3110 1224 | vn 0.6929 -0.5528 0.4630 1225 | vn 0.5904 0.7040 0.3945 1226 | vn 0.5904 -0.7040 0.3945 1227 | vn 0.6929 0.5528 0.4630 1228 | vn 0.2743 0.9217 0.2743 1229 | vn 0.3958 0.8286 0.3958 1230 | vn 0.6539 -0.3805 0.6539 1231 | vn 0.5893 -0.5528 0.5893 1232 | vn 0.5021 0.7040 0.5021 1233 | vn 0.5021 -0.7040 0.5021 1234 | vn 0.5893 0.5528 0.5893 1235 | vn 0.3958 -0.8286 0.3958 1236 | vn 0.6539 0.3805 0.6539 1237 | vn 0.2743 -0.9217 0.2743 1238 | vn 0.6937 0.1939 0.6937 1239 | vn 0.1421 -0.9796 0.1421 1240 | vn 0.7071 0.0000 0.7071 1241 | vn 0.1421 0.9796 0.1421 1242 | vn 0.6937 -0.1939 0.6937 1243 | vn 0.5137 0.3805 0.7689 1244 | vn 0.5450 0.1939 0.8157 1245 | vn 0.2155 -0.9217 0.3225 1246 | vn 0.1116 -0.9796 0.1671 1247 | vn 0.5556 0.0000 0.8314 1248 | vn 0.1116 0.9796 0.1671 1249 | vn 0.5450 -0.1939 0.8157 1250 | vn 0.2155 0.9217 0.3225 1251 | vn 0.5137 -0.3805 0.7689 1252 | vn 0.3110 0.8286 0.4654 1253 | vn 0.4630 -0.5528 0.6929 1254 | vn 0.3945 0.7040 0.5904 1255 | vn 0.3945 -0.7040 0.5904 1256 | vn 0.4630 0.5528 0.6929 1257 | vn 0.3110 -0.8286 0.4654 1258 | vn 0.3539 -0.3805 0.8544 1259 | vn 0.3189 -0.5528 0.7699 1260 | vn 0.2142 0.8286 0.5171 1261 | vn 0.2717 0.7040 0.6561 1262 | vn 0.2717 -0.7040 0.6561 1263 | vn 0.3189 0.5528 0.7699 1264 | vn 0.2142 -0.8286 0.5171 1265 | vn 0.3539 0.3805 0.8544 1266 | vn 0.1484 -0.9217 0.3583 1267 | vn 0.3754 0.1939 0.9063 1268 | vn 0.0769 -0.9796 0.1856 1269 | vn 0.3827 0.0000 0.9239 1270 | vn 0.0769 0.9796 0.1856 1271 | vn 0.3754 -0.1939 0.9063 1272 | vn 0.1484 0.9217 0.3583 1273 | vn 0.0757 -0.9217 0.3804 1274 | vn 0.0392 -0.9796 0.1971 1275 | vn 0.1914 0.1939 0.9622 1276 | vn 0.1951 0.0000 0.9808 1277 | vn 0.0392 0.9796 0.1971 1278 | vn 0.1914 -0.1939 0.9622 1279 | vn 0.0757 0.9217 0.3804 1280 | vn 0.1804 -0.3805 0.9070 1281 | vn 0.1092 0.8286 0.5490 1282 | vn 0.1626 -0.5528 0.8173 1283 | vn 0.1385 0.7040 0.6965 1284 | vn 0.1385 -0.7040 0.6965 1285 | vn 0.1626 0.5528 0.8173 1286 | vn 0.1092 -0.8286 0.5490 1287 | vn 0.1804 0.3805 0.9070 1288 | vn 0.0000 0.8286 0.5598 1289 | vn 0.0000 0.7040 0.7101 1290 | vn 0.0000 -0.5528 0.8333 1291 | vn 0.0000 -0.7040 0.7101 1292 | vn 0.0000 0.5528 0.8333 1293 | vn 0.0000 -0.8286 0.5598 1294 | vn 0.0000 0.3805 0.9247 1295 | vn 0.0000 -0.9217 0.3879 1296 | vn 0.0000 0.1939 0.9810 1297 | vn 0.0000 -0.9796 0.2010 1298 | vn 0.0000 0.0000 1.0000 1299 | vn 0.0000 0.9796 0.2010 1300 | vn 0.0000 -0.1939 0.9810 1301 | vn 0.0000 0.9217 0.3879 1302 | vn 0.0000 -0.3805 0.9247 1303 | vn -0.1914 0.1939 0.9622 1304 | vn -0.1951 0.0000 0.9808 1305 | vn -0.0392 0.9796 0.1971 1306 | vn -0.0392 -0.9796 0.1971 1307 | vn -0.1914 -0.1939 0.9622 1308 | vn -0.0757 0.9217 0.3804 1309 | vn -0.1804 -0.3805 0.9070 1310 | vn -0.1092 0.8286 0.5490 1311 | vn -0.1626 -0.5528 0.8173 1312 | vn -0.1385 0.7040 0.6965 1313 | vn -0.1385 -0.7040 0.6965 1314 | vn -0.1626 0.5528 0.8173 1315 | vn -0.1092 -0.8286 0.5490 1316 | vn -0.1804 0.3805 0.9070 1317 | vn -0.0757 -0.9217 0.3804 1318 | vn -0.3189 -0.5528 0.7699 1319 | vn -0.2717 -0.7040 0.6561 1320 | vn -0.2717 0.7040 0.6561 1321 | vn -0.3189 0.5528 0.7699 1322 | vn -0.2142 -0.8286 0.5171 1323 | vn -0.3539 0.3805 0.8544 1324 | vn -0.1484 -0.9217 0.3583 1325 | vn -0.3754 0.1939 0.9063 1326 | vn -0.0769 -0.9796 0.1856 1327 | vn -0.3827 0.0000 0.9239 1328 | vn -0.0769 0.9796 0.1856 1329 | vn -0.3754 -0.1939 0.9063 1330 | vn -0.1484 0.9217 0.3583 1331 | vn -0.3539 -0.3805 0.8544 1332 | vn -0.2142 0.8286 0.5171 1333 | vn -0.1116 -0.9796 0.1671 1334 | vn -0.5556 0.0000 0.8314 1335 | vn -0.5450 -0.1939 0.8157 1336 | vn -0.1116 0.9796 0.1671 1337 | vn -0.2155 0.9217 0.3225 1338 | vn -0.5137 -0.3805 0.7689 1339 | vn -0.3110 0.8286 0.4654 1340 | vn -0.4630 -0.5528 0.6929 1341 | vn -0.3945 0.7040 0.5904 1342 | vn -0.3945 -0.7040 0.5904 1343 | vn -0.4630 0.5528 0.6929 1344 | vn -0.3110 -0.8286 0.4654 1345 | vn -0.5137 0.3805 0.7689 1346 | vn -0.2155 -0.9217 0.3225 1347 | vn -0.5450 0.1939 0.8157 1348 | vn -0.5021 -0.7040 0.5021 1349 | vn -0.3958 -0.8286 0.3958 1350 | vn -0.5893 0.5528 0.5893 1351 | vn -0.6539 0.3805 0.6539 1352 | vn -0.2743 -0.9217 0.2743 1353 | vn -0.6937 0.1939 0.6937 1354 | vn -0.1421 -0.9796 0.1421 1355 | vn -0.7071 0.0000 0.7071 1356 | vn -0.1421 0.9796 0.1421 1357 | vn -0.6937 -0.1939 0.6937 1358 | vn -0.2743 0.9217 0.2743 1359 | vn -0.6539 -0.3805 0.6539 1360 | vn -0.3958 0.8286 0.3958 1361 | vn -0.5893 -0.5528 0.5893 1362 | vn -0.5021 0.7040 0.5021 1363 | vn -0.1671 0.9796 0.1116 1364 | vn -0.3225 0.9217 0.2155 1365 | vn -0.8157 -0.1939 0.5450 1366 | vn -0.7689 -0.3805 0.5137 1367 | vn -0.4654 0.8286 0.3110 1368 | vn -0.6929 -0.5528 0.4630 1369 | vn -0.5904 0.7040 0.3945 1370 | vn -0.5904 -0.7040 0.3945 1371 | vn -0.6929 0.5528 0.4630 1372 | vn -0.4654 -0.8286 0.3110 1373 | vn -0.7689 0.3805 0.5137 1374 | vn -0.3225 -0.9217 0.2155 1375 | vn -0.8157 0.1939 0.5450 1376 | vn -0.1671 -0.9796 0.1116 1377 | vn -0.8314 0.0000 0.5556 1378 | vn -0.7699 0.5528 0.3189 1379 | vn -0.8544 0.3805 0.3539 1380 | vn -0.5171 -0.8286 0.2142 1381 | vn -0.3583 -0.9217 0.1484 1382 | vn -0.9063 0.1939 0.3754 1383 | vn -0.1856 -0.9796 0.0769 1384 | vn -0.9239 0.0000 0.3827 1385 | vn -0.1856 0.9796 0.0769 1386 | vn -0.9063 -0.1939 0.3754 1387 | vn -0.3583 0.9217 0.1484 1388 | vn -0.8544 -0.3805 0.3539 1389 | vn -0.5171 0.8286 0.2142 1390 | vn -0.7699 -0.5528 0.3189 1391 | vn -0.6561 0.7040 0.2717 1392 | vn -0.6561 -0.7040 0.2717 1393 | vn -0.9622 -0.1939 0.1914 1394 | vn -0.9070 -0.3805 0.1804 1395 | vn -0.3804 0.9217 0.0757 1396 | vn -0.5490 0.8286 0.1092 1397 | vn -0.8173 -0.5528 0.1626 1398 | vn -0.6965 0.7040 0.1385 1399 | vn -0.6965 -0.7040 0.1385 1400 | vn -0.8173 0.5528 0.1626 1401 | vn -0.5490 -0.8286 0.1092 1402 | vn -0.9070 0.3805 0.1804 1403 | vn -0.3804 -0.9217 0.0757 1404 | vn -0.9622 0.1939 0.1914 1405 | vn -0.1971 -0.9796 0.0392 1406 | vn -0.9808 0.0000 0.1951 1407 | vn -0.1971 0.9796 0.0392 1408 | vn -0.5598 -0.8286 0.0000 1409 | vn -0.3879 -0.9217 0.0000 1410 | vn -0.9247 0.3805 0.0000 1411 | vn -0.9810 0.1939 0.0000 1412 | vn -0.2010 -0.9796 0.0000 1413 | vn -1.0000 0.0000 0.0000 1414 | vn -0.2010 0.9796 0.0000 1415 | vn -0.9810 -0.1939 0.0000 1416 | vn -0.3879 0.9217 0.0000 1417 | vn -0.9247 -0.3805 0.0000 1418 | vn -0.5598 0.8286 0.0000 1419 | vn -0.8333 -0.5528 0.0000 1420 | vn -0.7101 0.7040 0.0000 1421 | vn -0.7101 -0.7040 0.0000 1422 | vn -0.8333 0.5528 0.0000 1423 | vn -0.3804 0.9217 -0.0757 1424 | vn -0.5490 0.8286 -0.1092 1425 | vn -0.9070 -0.3805 -0.1804 1426 | vn -0.8173 -0.5528 -0.1626 1427 | vn -0.6965 0.7040 -0.1385 1428 | vn -0.6965 -0.7040 -0.1385 1429 | vn -0.8173 0.5528 -0.1626 1430 | vn -0.5490 -0.8286 -0.1092 1431 | vn -0.9070 0.3805 -0.1804 1432 | vn -0.3804 -0.9217 -0.0757 1433 | vn -0.9622 0.1939 -0.1914 1434 | vn -0.1971 -0.9796 -0.0392 1435 | vn -0.9808 0.0000 -0.1951 1436 | vn -0.1971 0.9796 -0.0392 1437 | vn -0.9622 -0.1939 -0.1914 1438 | vn -0.8544 0.3805 -0.3539 1439 | vn -0.9063 0.1939 -0.3754 1440 | vn -0.3583 -0.9217 -0.1484 1441 | vn -0.1856 -0.9796 -0.0769 1442 | vn -0.9239 0.0000 -0.3827 1443 | vn -0.1856 0.9796 -0.0769 1444 | vn -0.9063 -0.1939 -0.3754 1445 | vn -0.3583 0.9217 -0.1484 1446 | vn -0.8544 -0.3805 -0.3539 1447 | vn -0.5171 0.8286 -0.2142 1448 | vn -0.7699 -0.5528 -0.3189 1449 | vn -0.6561 0.7040 -0.2717 1450 | vn -0.6561 -0.7040 -0.2717 1451 | vn -0.7699 0.5528 -0.3189 1452 | vn -0.5171 -0.8286 -0.2142 1453 | vn -0.7689 -0.3805 -0.5137 1454 | vn -0.6929 -0.5528 -0.4630 1455 | vn -0.4654 0.8286 -0.3110 1456 | vn -0.5904 0.7040 -0.3945 1457 | vn -0.5904 -0.7040 -0.3945 1458 | vn -0.6929 0.5528 -0.4630 1459 | vn -0.4654 -0.8286 -0.3110 1460 | vn -0.7689 0.3805 -0.5137 1461 | vn -0.3225 -0.9217 -0.2155 1462 | vn -0.8157 0.1939 -0.5450 1463 | vn -0.1671 -0.9796 -0.1116 1464 | vn -0.8314 0.0000 -0.5556 1465 | vn -0.1671 0.9796 -0.1116 1466 | vn -0.8157 -0.1939 -0.5450 1467 | vn -0.3225 0.9217 -0.2155 1468 | vn -0.2743 -0.9217 -0.2743 1469 | vn -0.1421 -0.9796 -0.1421 1470 | vn -0.6937 0.1939 -0.6937 1471 | vn -0.7071 0.0000 -0.7071 1472 | vn -0.1421 0.9796 -0.1421 1473 | vn -0.6937 -0.1939 -0.6937 1474 | vn -0.2743 0.9217 -0.2743 1475 | vn -0.6539 -0.3805 -0.6539 1476 | vn -0.3958 0.8286 -0.3958 1477 | vn -0.5893 -0.5528 -0.5893 1478 | vn -0.5021 0.7040 -0.5021 1479 | vn -0.5021 -0.7040 -0.5021 1480 | vn -0.5893 0.5528 -0.5893 1481 | vn -0.3958 -0.8286 -0.3958 1482 | vn -0.6539 0.3805 -0.6539 1483 | vn -0.4630 -0.5528 -0.6929 1484 | vn -0.3945 -0.7040 -0.5904 1485 | vn -0.3945 0.7040 -0.5904 1486 | vn -0.4630 0.5528 -0.6929 1487 | vn -0.3110 -0.8286 -0.4654 1488 | vn -0.5137 0.3805 -0.7689 1489 | vn -0.2155 -0.9217 -0.3225 1490 | vn -0.5450 0.1939 -0.8157 1491 | vn -0.1116 -0.9796 -0.1671 1492 | vn -0.5556 0.0000 -0.8314 1493 | vn -0.1116 0.9796 -0.1671 1494 | vn -0.5450 -0.1939 -0.8157 1495 | vn -0.2155 0.9217 -0.3225 1496 | vn -0.5137 -0.3805 -0.7689 1497 | vn -0.3110 0.8286 -0.4654 1498 | vn -0.0769 0.9796 -0.1856 1499 | vn -0.0769 -0.9796 -0.1856 1500 | vn -0.3827 0.0000 -0.9239 1501 | vn -0.3754 -0.1939 -0.9063 1502 | vn -0.1484 0.9217 -0.3583 1503 | vn -0.3539 -0.3805 -0.8544 1504 | vn -0.2142 0.8286 -0.5171 1505 | vn -0.3189 -0.5528 -0.7699 1506 | vn -0.2717 0.7040 -0.6561 1507 | vn -0.2717 -0.7040 -0.6561 1508 | vn -0.3189 0.5528 -0.7699 1509 | vn -0.2142 -0.8286 -0.5171 1510 | vn -0.3539 0.3805 -0.8544 1511 | vn -0.1484 -0.9217 -0.3583 1512 | vn -0.3754 0.1939 -0.9063 1513 | vn -0.1385 0.7040 -0.6965 1514 | vn -0.1626 0.5528 -0.8173 1515 | vn -0.1385 -0.7040 -0.6965 1516 | vn -0.1092 -0.8286 -0.5490 1517 | vn -0.1804 0.3805 -0.9070 1518 | vn -0.0757 -0.9217 -0.3804 1519 | vn -0.1914 0.1939 -0.9622 1520 | vn -0.0392 -0.9796 -0.1971 1521 | vn -0.1951 0.0000 -0.9808 1522 | vn -0.0392 0.9796 -0.1971 1523 | vn -0.1914 -0.1939 -0.9622 1524 | vn -0.0757 0.9217 -0.3804 1525 | vn -0.1804 -0.3805 -0.9070 1526 | vn -0.1092 0.8286 -0.5490 1527 | vn -0.1626 -0.5528 -0.8173 1528 | usemtl None 1529 | s 1 1530 | f 1/1/1 297/2/2 11/3/3 1531 | f 206/4/4 482/5/5 25/6/6 1532 | f 9/7/7 8/8/8 18/9/9 19/10/10 1533 | f 2/11/11 1/1/1 11/3/3 12/12/12 1534 | f 478/13/13 9/7/7 19/10/10 20/14/14 1535 | f 3/15/15 2/11/11 12/12/12 13/16/16 1536 | f 479/17/17 478/13/13 20/14/14 21/18/18 1537 | f 4/19/19 3/15/15 13/16/16 14/20/20 1538 | f 480/21/21 479/17/17 21/18/18 22/22/22 1539 | f 5/23/23 4/19/19 14/20/20 15/24/24 1540 | f 10/25/25 480/21/21 22/22/22 23/26/26 1541 | f 6/27/27 5/23/23 15/24/24 16/28/28 1542 | f 481/29/29 10/25/25 23/26/26 24/30/30 1543 | f 7/31/31 6/27/27 16/28/28 17/32/32 1544 | f 482/5/5 481/29/29 24/30/30 25/6/6 1545 | f 8/8/8 7/31/31 17/32/32 18/9/9 1546 | f 25/6/6 24/30/30 39/33/33 40/34/34 1547 | f 18/9/9 17/32/32 32/35/35 33/36/36 1548 | f 11/3/3 297/37/2 26/38/37 1549 | f 206/39/4 25/6/6 40/34/34 1550 | f 19/10/10 18/9/9 33/36/36 34/40/38 1551 | f 12/12/12 11/3/3 26/38/37 27/41/39 1552 | f 20/14/14 19/10/10 34/40/38 35/42/40 1553 | f 13/16/16 12/12/12 27/41/39 28/43/41 1554 | f 21/18/18 20/14/14 35/42/40 36/44/42 1555 | f 14/20/20 13/16/16 28/43/41 29/45/43 1556 | f 22/22/22 21/18/18 36/44/42 37/46/44 1557 | f 15/24/24 14/20/20 29/45/43 30/47/45 1558 | f 23/26/26 22/22/22 37/46/44 38/48/46 1559 | f 16/28/28 15/24/24 30/47/45 31/49/47 1560 | f 24/30/30 23/26/26 38/48/46 39/33/33 1561 | f 17/32/32 16/28/28 31/49/47 32/35/35 1562 | f 29/45/43 28/43/41 43/50/48 44/51/49 1563 | f 37/46/44 36/44/42 51/52/50 52/53/51 1564 | f 30/47/45 29/45/43 44/51/49 45/54/52 1565 | f 38/48/46 37/46/44 52/53/51 53/55/53 1566 | f 31/49/47 30/47/45 45/54/52 46/56/54 1567 | f 39/33/33 38/48/46 53/55/53 54/57/55 1568 | f 32/35/35 31/49/47 46/56/54 47/58/56 1569 | f 40/34/34 39/33/33 54/57/55 55/59/57 1570 | f 33/36/36 32/35/35 47/58/56 48/60/58 1571 | f 26/38/37 297/61/2 41/62/59 1572 | f 206/63/4 40/34/34 55/59/57 1573 | f 34/40/38 33/36/36 48/60/58 49/64/60 1574 | f 27/41/39 26/38/37 41/62/59 42/65/61 1575 | f 35/42/40 34/40/38 49/64/60 50/66/62 1576 | f 28/43/41 27/41/39 42/65/61 43/50/48 1577 | f 36/44/42 35/42/40 50/66/62 51/52/50 1578 | f 48/60/58 47/58/56 62/67/63 63/68/64 1579 | f 41/62/59 297/69/2 56/70/65 1580 | f 206/71/4 55/59/57 70/72/66 1581 | f 49/64/60 48/60/58 63/68/64 64/73/67 1582 | f 42/65/61 41/62/59 56/70/65 57/74/68 1583 | f 50/66/62 49/64/60 64/73/67 65/75/69 1584 | f 43/50/48 42/65/61 57/74/68 58/76/70 1585 | f 51/52/50 50/66/62 65/75/69 66/77/71 1586 | f 44/51/49 43/50/48 58/76/70 59/78/72 1587 | f 52/53/51 51/52/50 66/77/71 67/79/73 1588 | f 45/54/52 44/51/49 59/78/72 60/80/74 1589 | f 53/55/53 52/53/51 67/79/73 68/81/75 1590 | f 46/56/54 45/54/52 60/80/74 61/82/76 1591 | f 54/57/55 53/55/53 68/81/75 69/83/77 1592 | f 47/58/56 46/56/54 61/82/76 62/67/63 1593 | f 55/59/57 54/57/55 69/83/77 70/72/66 1594 | f 67/79/73 66/77/71 81/84/78 82/85/79 1595 | f 60/80/74 59/78/72 74/86/80 75/87/81 1596 | f 68/81/75 67/79/73 82/85/79 83/88/82 1597 | f 61/82/76 60/80/74 75/87/81 76/89/83 1598 | f 69/83/77 68/81/75 83/88/82 84/90/84 1599 | f 62/67/63 61/82/76 76/89/83 77/91/85 1600 | f 70/72/66 69/83/77 84/90/84 85/92/86 1601 | f 63/68/64 62/67/63 77/91/85 78/93/87 1602 | f 56/70/65 297/94/2 71/95/88 1603 | f 206/96/4 70/72/66 85/92/86 1604 | f 64/73/67 63/68/64 78/93/87 79/97/89 1605 | f 57/74/68 56/70/65 71/95/88 72/98/90 1606 | f 65/75/69 64/73/67 79/97/89 80/99/91 1607 | f 58/76/70 57/74/68 72/98/90 73/100/92 1608 | f 66/77/71 65/75/69 80/99/91 81/84/78 1609 | f 59/78/72 58/76/70 73/100/92 74/86/80 1610 | f 71/95/88 297/101/2 86/102/93 1611 | f 206/103/4 85/92/86 100/104/94 1612 | f 79/97/89 78/93/87 93/105/95 94/106/96 1613 | f 72/98/90 71/95/88 86/102/93 87/107/97 1614 | f 80/99/91 79/97/89 94/106/96 95/108/98 1615 | f 73/100/92 72/98/90 87/107/97 88/109/99 1616 | f 81/84/78 80/99/91 95/108/98 96/110/100 1617 | f 74/86/80 73/100/92 88/109/99 89/111/101 1618 | f 82/85/79 81/84/78 96/110/100 97/112/102 1619 | f 75/87/81 74/86/80 89/111/101 90/113/103 1620 | f 83/88/82 82/85/79 97/112/102 98/114/104 1621 | f 76/89/83 75/87/81 90/113/103 91/115/105 1622 | f 84/90/84 83/88/82 98/114/104 99/116/106 1623 | f 77/91/85 76/89/83 91/115/105 92/117/107 1624 | f 85/92/86 84/90/84 99/116/106 100/104/94 1625 | f 78/93/87 77/91/85 92/117/107 93/105/95 1626 | f 90/113/103 89/111/101 104/118/108 105/119/109 1627 | f 98/114/104 97/112/102 112/120/110 113/121/111 1628 | f 91/115/105 90/113/103 105/119/109 106/122/112 1629 | f 99/116/106 98/114/104 113/121/111 114/123/113 1630 | f 92/117/107 91/115/105 106/122/112 107/124/114 1631 | f 100/104/94 99/116/106 114/123/113 115/125/115 1632 | f 93/105/95 92/117/107 107/124/114 108/126/116 1633 | f 86/102/93 297/127/2 101/128/117 1634 | f 206/129/4 100/104/94 115/125/115 1635 | f 94/106/96 93/105/95 108/126/116 109/130/118 1636 | f 87/107/97 86/102/93 101/128/117 102/131/119 1637 | f 95/108/98 94/106/96 109/130/118 110/132/120 1638 | f 88/109/99 87/107/97 102/131/119 103/133/121 1639 | f 96/110/100 95/108/98 110/132/120 111/134/122 1640 | f 89/111/101 88/109/99 103/133/121 104/118/108 1641 | f 97/112/102 96/110/100 111/134/122 112/120/110 1642 | f 109/130/118 108/126/116 123/135/123 124/136/124 1643 | f 102/131/119 101/128/117 116/137/125 117/138/126 1644 | f 110/132/120 109/130/118 124/136/124 125/139/127 1645 | f 103/133/121 102/131/119 117/138/126 118/140/128 1646 | f 111/134/122 110/132/120 125/139/127 126/141/129 1647 | f 104/118/108 103/133/121 118/140/128 119/142/130 1648 | f 112/120/110 111/134/122 126/141/129 127/143/131 1649 | f 105/119/109 104/118/108 119/142/130 120/144/132 1650 | f 113/121/111 112/120/110 127/143/131 128/145/133 1651 | f 106/122/112 105/119/109 120/144/132 121/146/134 1652 | f 114/123/113 113/121/111 128/145/133 129/147/135 1653 | f 107/124/114 106/122/112 121/146/134 122/148/136 1654 | f 115/125/115 114/123/113 129/147/135 130/149/137 1655 | f 108/126/116 107/124/114 122/148/136 123/135/123 1656 | f 101/128/117 297/150/2 116/137/125 1657 | f 206/151/4 115/125/115 130/149/137 1658 | f 128/145/133 127/143/131 142/152/138 143/153/139 1659 | f 121/146/134 120/144/132 135/154/140 136/155/141 1660 | f 129/147/135 128/145/133 143/153/139 144/156/142 1661 | f 122/148/136 121/146/134 136/155/141 137/157/143 1662 | f 130/149/137 129/147/135 144/156/142 145/158/144 1663 | f 123/135/123 122/148/136 137/157/143 138/159/145 1664 | f 116/137/125 297/160/2 131/161/146 1665 | f 206/162/4 130/149/137 145/158/144 1666 | f 124/136/124 123/135/123 138/159/145 139/163/147 1667 | f 117/138/126 116/137/125 131/161/146 132/164/148 1668 | f 125/139/127 124/136/124 139/163/147 140/165/149 1669 | f 118/140/128 117/138/126 132/164/148 133/166/150 1670 | f 126/141/129 125/139/127 140/165/149 141/167/151 1671 | f 119/142/130 118/140/128 133/166/150 134/168/152 1672 | f 127/143/131 126/141/129 141/167/151 142/152/138 1673 | f 120/144/132 119/142/130 134/168/152 135/154/140 1674 | f 140/165/149 139/163/147 154/169/153 155/170/154 1675 | f 133/166/150 132/164/148 147/171/155 148/172/156 1676 | f 141/167/151 140/165/149 155/170/154 156/173/157 1677 | f 134/168/152 133/166/150 148/172/156 149/174/158 1678 | f 142/152/138 141/167/151 156/173/157 157/175/159 1679 | f 135/154/140 134/168/152 149/174/158 150/176/160 1680 | f 143/153/139 142/152/138 157/175/159 158/177/161 1681 | f 136/155/141 135/154/140 150/176/160 151/178/162 1682 | f 144/156/142 143/153/139 158/177/161 159/179/163 1683 | f 137/157/143 136/155/141 151/178/162 152/180/164 1684 | f 145/158/144 144/156/142 159/179/163 160/181/165 1685 | f 138/159/145 137/157/143 152/180/164 153/182/166 1686 | f 131/161/146 297/183/2 146/184/167 1687 | f 206/185/4 145/158/144 160/181/165 1688 | f 139/163/147 138/159/145 153/182/166 154/169/153 1689 | f 132/164/148 131/161/146 146/184/167 147/171/155 1690 | f 159/179/163 158/177/161 173/186/168 174/187/169 1691 | f 152/180/164 151/178/162 166/188/170 167/189/171 1692 | f 160/181/165 159/179/163 174/187/169 175/190/172 1693 | f 153/182/166 152/180/164 167/189/171 168/191/173 1694 | f 146/184/167 297/192/2 161/193/174 1695 | f 206/194/4 160/181/165 175/190/172 1696 | f 154/169/153 153/182/166 168/191/173 169/195/175 1697 | f 147/171/155 146/184/167 161/193/174 162/196/176 1698 | f 155/170/154 154/169/153 169/195/175 170/197/177 1699 | f 148/172/156 147/171/155 162/196/176 163/198/178 1700 | f 156/173/157 155/170/154 170/197/177 171/199/179 1701 | f 149/174/158 148/172/156 163/198/178 164/200/180 1702 | f 157/175/159 156/173/157 171/199/179 172/201/181 1703 | f 150/176/160 149/174/158 164/200/180 165/202/182 1704 | f 158/177/161 157/175/159 172/201/181 173/186/168 1705 | f 151/178/162 150/176/160 165/202/182 166/188/170 1706 | f 163/198/178 162/196/176 177/203/183 178/204/184 1707 | f 171/199/179 170/197/177 185/205/185 186/206/186 1708 | f 164/200/180 163/198/178 178/204/184 179/207/187 1709 | f 172/201/181 171/199/179 186/206/186 187/208/188 1710 | f 165/202/182 164/200/180 179/207/187 180/209/189 1711 | f 173/186/168 172/201/181 187/208/188 188/210/190 1712 | f 166/188/170 165/202/182 180/209/189 181/211/191 1713 | f 174/187/169 173/186/168 188/210/190 189/212/192 1714 | f 167/189/171 166/188/170 181/211/191 182/213/193 1715 | f 175/190/172 174/187/169 189/212/192 190/214/194 1716 | f 168/191/173 167/189/171 182/213/193 183/215/195 1717 | f 161/193/174 297/216/2 176/217/196 1718 | f 206/218/4 175/190/172 190/214/194 1719 | f 169/195/175 168/191/173 183/215/195 184/219/197 1720 | f 162/196/176 161/193/174 176/217/196 177/203/183 1721 | f 170/197/177 169/195/175 184/219/197 185/205/185 1722 | f 182/213/193 181/211/191 196/220/198 197/221/199 1723 | f 190/214/194 189/212/192 204/222/200 205/223/201 1724 | f 183/215/195 182/213/193 197/221/199 198/224/202 1725 | f 176/217/196 297/225/2 191/226/203 1726 | f 206/227/4 190/214/194 205/223/201 1727 | f 184/219/197 183/215/195 198/224/202 199/228/204 1728 | f 177/203/183 176/217/196 191/226/203 192/229/205 1729 | f 185/205/185 184/219/197 199/228/204 200/230/206 1730 | f 178/204/184 177/203/183 192/229/205 193/231/207 1731 | f 186/206/186 185/205/185 200/230/206 201/232/208 1732 | f 179/207/187 178/204/184 193/231/207 194/233/209 1733 | f 187/208/188 186/206/186 201/232/208 202/234/210 1734 | f 180/209/189 179/207/187 194/233/209 195/235/211 1735 | f 188/210/190 187/208/188 202/234/210 203/236/212 1736 | f 181/211/191 180/209/189 195/235/211 196/220/198 1737 | f 189/212/192 188/210/190 203/236/212 204/222/200 1738 | f 201/232/208 200/230/206 216/237/213 217/238/214 1739 | f 194/233/209 193/231/207 209/239/215 210/240/216 1740 | f 202/234/210 201/232/208 217/238/214 218/241/217 1741 | f 195/235/211 194/233/209 210/240/216 211/242/218 1742 | f 203/236/212 202/234/210 218/241/217 219/243/219 1743 | f 196/220/198 195/235/211 211/242/218 212/244/220 1744 | f 204/222/200 203/236/212 219/243/219 220/245/221 1745 | f 197/221/199 196/220/198 212/244/220 213/246/222 1746 | f 205/223/201 204/222/200 220/245/221 221/247/223 1747 | f 198/224/202 197/221/199 213/246/222 214/248/224 1748 | f 191/226/203 297/249/2 207/250/225 1749 | f 206/251/4 205/223/201 221/247/223 1750 | f 199/228/204 198/224/202 214/248/224 215/252/226 1751 | f 192/229/205 191/226/203 207/250/225 208/253/227 1752 | f 200/230/206 199/228/204 215/252/226 216/237/213 1753 | f 193/231/207 192/229/205 208/253/227 209/239/215 1754 | f 221/247/223 220/245/221 235/254/228 236/255/229 1755 | f 214/248/224 213/246/222 228/256/230 229/257/231 1756 | f 207/250/225 297/258/2 222/259/232 1757 | f 206/260/4 221/247/223 236/255/229 1758 | f 215/252/226 214/248/224 229/257/231 230/261/233 1759 | f 208/253/227 207/250/225 222/259/232 223/262/234 1760 | f 216/237/213 215/252/226 230/261/233 231/263/235 1761 | f 209/239/215 208/253/227 223/262/234 224/264/236 1762 | f 217/238/214 216/237/213 231/263/235 232/265/237 1763 | f 210/240/216 209/239/215 224/264/236 225/266/238 1764 | f 218/241/217 217/238/214 232/265/237 233/267/239 1765 | f 211/242/218 210/240/216 225/266/238 226/268/240 1766 | f 219/243/219 218/241/217 233/267/239 234/269/241 1767 | f 212/244/220 211/242/218 226/268/240 227/270/242 1768 | f 220/245/221 219/243/219 234/269/241 235/254/228 1769 | f 213/246/222 212/244/220 227/270/242 228/256/230 1770 | f 225/266/238 224/264/236 239/271/243 240/272/244 1771 | f 233/267/239 232/265/237 247/273/245 248/274/246 1772 | f 226/268/240 225/266/238 240/272/244 241/275/247 1773 | f 234/269/241 233/267/239 248/274/246 249/276/248 1774 | f 227/270/242 226/268/240 241/275/247 242/277/249 1775 | f 235/254/228 234/269/241 249/276/248 250/278/250 1776 | f 228/256/230 227/270/242 242/277/249 243/279/251 1777 | f 236/255/229 235/254/228 250/278/250 251/280/252 1778 | f 229/257/231 228/256/230 243/279/251 244/281/253 1779 | f 222/259/232 297/282/2 237/283/254 1780 | f 206/284/4 236/255/229 251/280/252 1781 | f 230/261/233 229/257/231 244/281/253 245/285/255 1782 | f 223/262/234 222/259/232 237/283/254 238/286/256 1783 | f 231/263/235 230/261/233 245/285/255 246/287/257 1784 | f 224/264/236 223/262/234 238/286/256 239/271/243 1785 | f 232/265/237 231/263/235 246/287/257 247/273/245 1786 | f 244/281/253 243/279/251 258/288/258 259/289/259 1787 | f 237/283/254 297/290/2 252/291/260 1788 | f 206/292/4 251/280/252 266/293/261 1789 | f 245/285/255 244/281/253 259/289/259 260/294/262 1790 | f 238/286/256 237/283/254 252/291/260 253/295/263 1791 | f 246/287/257 245/285/255 260/294/262 261/296/264 1792 | f 239/271/243 238/286/256 253/295/263 254/297/265 1793 | f 247/273/245 246/287/257 261/296/264 262/298/266 1794 | f 240/272/244 239/271/243 254/297/265 255/299/267 1795 | f 248/274/246 247/273/245 262/298/266 263/300/268 1796 | f 241/275/247 240/272/244 255/299/267 256/301/269 1797 | f 249/276/248 248/274/246 263/300/268 264/302/270 1798 | f 242/277/249 241/275/247 256/301/269 257/303/271 1799 | f 250/278/250 249/276/248 264/302/270 265/304/272 1800 | f 243/279/251 242/277/249 257/303/271 258/288/258 1801 | f 251/280/252 250/278/250 265/304/272 266/293/261 1802 | f 263/300/268 262/298/266 277/305/273 278/306/274 1803 | f 256/301/269 255/299/267 270/307/275 271/308/276 1804 | f 264/302/270 263/300/268 278/306/274 279/309/277 1805 | f 257/303/271 256/301/269 271/308/276 272/310/278 1806 | f 265/304/272 264/302/270 279/309/277 280/311/279 1807 | f 258/288/258 257/303/271 272/310/278 273/312/280 1808 | f 266/293/261 265/304/272 280/311/279 281/313/281 1809 | f 259/289/259 258/288/258 273/312/280 274/314/282 1810 | f 252/291/260 297/315/2 267/316/283 1811 | f 206/317/4 266/293/261 281/313/281 1812 | f 260/294/262 259/289/259 274/314/282 275/318/284 1813 | f 253/295/263 252/291/260 267/316/283 268/319/285 1814 | f 261/296/264 260/294/262 275/318/284 276/320/286 1815 | f 254/297/265 253/295/263 268/319/285 269/321/287 1816 | f 262/298/266 261/296/264 276/320/286 277/305/273 1817 | f 255/299/267 254/297/265 269/321/287 270/307/275 1818 | f 206/322/4 281/313/281 296/323/288 1819 | f 275/318/284 274/314/282 289/324/289 290/325/290 1820 | f 268/319/285 267/316/283 282/326/291 283/327/292 1821 | f 276/320/286 275/318/284 290/325/290 291/328/293 1822 | f 269/321/287 268/319/285 283/327/292 284/329/294 1823 | f 277/305/273 276/320/286 291/328/293 292/330/295 1824 | f 270/307/275 269/321/287 284/329/294 285/331/296 1825 | f 278/306/274 277/305/273 292/330/295 293/332/297 1826 | f 271/308/276 270/307/275 285/331/296 286/333/298 1827 | f 279/309/277 278/306/274 293/332/297 294/334/299 1828 | f 272/310/278 271/308/276 286/333/298 287/335/300 1829 | f 280/311/279 279/309/277 294/334/299 295/336/301 1830 | f 273/312/280 272/310/278 287/335/300 288/337/302 1831 | f 281/313/281 280/311/279 295/336/301 296/323/288 1832 | f 274/314/282 273/312/280 288/337/302 289/324/289 1833 | f 267/316/283 297/338/2 282/326/291 1834 | f 294/334/299 293/332/297 309/339/303 310/340/304 1835 | f 287/335/300 286/333/298 302/341/305 303/342/306 1836 | f 295/336/301 294/334/299 310/340/304 311/343/307 1837 | f 288/337/302 287/335/300 303/342/306 304/344/308 1838 | f 296/323/288 295/336/301 311/343/307 312/345/309 1839 | f 289/324/289 288/337/302 304/344/308 305/346/310 1840 | f 282/326/291 297/347/2 298/348/311 1841 | f 206/349/4 296/323/288 312/345/309 1842 | f 290/325/290 289/324/289 305/346/310 306/350/312 1843 | f 283/327/292 282/326/291 298/348/311 299/351/313 1844 | f 291/328/293 290/325/290 306/350/312 307/352/314 1845 | f 284/329/294 283/327/292 299/351/313 300/353/315 1846 | f 292/330/295 291/328/293 307/352/314 308/354/316 1847 | f 285/331/296 284/329/294 300/353/315 301/355/317 1848 | f 293/332/297 292/330/295 308/354/316 309/339/303 1849 | f 286/333/298 285/331/296 301/355/317 302/341/305 1850 | f 299/351/313 298/348/311 313/356/318 314/357/319 1851 | f 307/352/314 306/350/312 321/358/320 322/359/321 1852 | f 300/353/315 299/351/313 314/357/319 315/360/322 1853 | f 308/354/316 307/352/314 322/359/321 323/361/323 1854 | f 301/355/317 300/353/315 315/360/322 316/362/324 1855 | f 309/339/303 308/354/316 323/361/323 324/363/325 1856 | f 302/341/305 301/355/317 316/362/324 317/364/326 1857 | f 310/340/304 309/339/303 324/363/325 325/365/327 1858 | f 303/342/306 302/341/305 317/364/326 318/366/328 1859 | f 311/343/307 310/340/304 325/365/327 326/367/329 1860 | f 304/344/308 303/342/306 318/366/328 319/368/330 1861 | f 312/345/309 311/343/307 326/367/329 327/369/331 1862 | f 305/346/310 304/344/308 319/368/330 320/370/332 1863 | f 298/348/311 297/371/2 313/356/318 1864 | f 206/372/4 312/345/309 327/369/331 1865 | f 306/350/312 305/346/310 320/370/332 321/358/320 1866 | f 318/366/328 317/364/326 332/373/333 333/374/334 1867 | f 326/367/329 325/365/327 340/375/335 341/376/336 1868 | f 319/368/330 318/366/328 333/374/334 334/377/337 1869 | f 327/369/331 326/367/329 341/376/336 342/378/338 1870 | f 320/370/332 319/368/330 334/377/337 335/379/339 1871 | f 313/356/318 297/380/2 328/381/340 1872 | f 206/382/4 327/369/331 342/378/338 1873 | f 321/358/320 320/370/332 335/379/339 336/383/341 1874 | f 314/357/319 313/356/318 328/381/340 329/384/342 1875 | f 322/359/321 321/358/320 336/383/341 337/385/343 1876 | f 315/360/322 314/357/319 329/384/342 330/386/344 1877 | f 323/361/323 322/359/321 337/385/343 338/387/345 1878 | f 316/362/324 315/360/322 330/386/344 331/388/346 1879 | f 324/363/325 323/361/323 338/387/345 339/389/347 1880 | f 317/364/326 316/362/324 331/388/346 332/373/333 1881 | f 325/365/327 324/363/325 339/389/347 340/375/335 1882 | f 337/385/343 336/383/341 351/390/348 352/391/349 1883 | f 330/386/344 329/384/342 344/392/350 345/393/351 1884 | f 338/387/345 337/385/343 352/391/349 353/394/352 1885 | f 331/388/346 330/386/344 345/393/351 346/395/353 1886 | f 339/389/347 338/387/345 353/394/352 354/396/354 1887 | f 332/373/333 331/388/346 346/395/353 347/397/355 1888 | f 340/375/335 339/389/347 354/396/354 355/398/356 1889 | f 333/374/334 332/373/333 347/397/355 348/399/357 1890 | f 341/376/336 340/375/335 355/398/356 356/400/358 1891 | f 334/377/337 333/374/334 348/399/357 349/401/359 1892 | f 342/378/338 341/376/336 356/400/358 357/402/360 1893 | f 335/379/339 334/377/337 349/401/359 350/403/361 1894 | f 328/381/340 297/404/2 343/405/362 1895 | f 206/406/4 342/378/338 357/402/360 1896 | f 336/383/341 335/379/339 350/403/361 351/390/348 1897 | f 329/384/342 328/381/340 343/405/362 344/392/350 1898 | f 356/400/358 355/398/356 370/407/363 371/408/364 1899 | f 349/401/359 348/399/357 363/409/365 364/410/366 1900 | f 357/402/360 356/400/358 371/408/364 372/411/367 1901 | f 350/403/361 349/401/359 364/410/366 365/412/368 1902 | f 343/405/362 297/413/2 358/414/369 1903 | f 206/415/4 357/402/360 372/411/367 1904 | f 351/390/348 350/403/361 365/412/368 366/416/370 1905 | f 344/392/350 343/405/362 358/414/369 359/417/371 1906 | f 352/391/349 351/390/348 366/416/370 367/418/372 1907 | f 345/393/351 344/392/350 359/417/371 360/419/373 1908 | f 353/394/352 352/391/349 367/418/372 368/420/374 1909 | f 346/395/353 345/393/351 360/419/373 361/421/375 1910 | f 354/396/354 353/394/352 368/420/374 369/422/376 1911 | f 347/397/355 346/395/353 361/421/375 362/423/377 1912 | f 355/398/356 354/396/354 369/422/376 370/407/363 1913 | f 348/399/357 347/397/355 362/423/377 363/409/365 1914 | f 360/424/373 359/425/371 374/426/378 375/427/379 1915 | f 368/428/374 367/429/372 382/430/380 383/431/381 1916 | f 361/432/375 360/424/373 375/427/379 376/433/382 1917 | f 369/434/376 368/428/374 383/431/381 384/435/383 1918 | f 362/436/377 361/432/375 376/433/382 377/437/384 1919 | f 370/438/363 369/434/376 384/435/383 385/439/385 1920 | f 363/440/365 362/436/377 377/437/384 378/441/386 1921 | f 371/442/364 370/438/363 385/439/385 386/443/387 1922 | f 364/444/366 363/440/365 378/441/386 379/445/388 1923 | f 372/446/367 371/442/364 386/443/387 387/447/389 1924 | f 365/448/368 364/444/366 379/445/388 380/449/390 1925 | f 358/450/369 297/451/2 373/452/391 1926 | f 206/453/4 372/446/367 387/447/389 1927 | f 366/454/370 365/448/368 380/449/390 381/455/392 1928 | f 359/425/371 358/450/369 373/452/391 374/426/378 1929 | f 367/429/372 366/454/370 381/455/392 382/430/380 1930 | f 379/445/388 378/441/386 393/456/393 394/457/394 1931 | f 387/447/389 386/443/387 401/458/395 402/459/396 1932 | f 380/449/390 379/445/388 394/457/394 395/460/397 1933 | f 373/452/391 297/461/2 388/462/398 1934 | f 206/463/4 387/447/389 402/459/396 1935 | f 381/455/392 380/449/390 395/460/397 396/464/399 1936 | f 374/426/378 373/452/391 388/462/398 389/465/400 1937 | f 382/430/380 381/455/392 396/464/399 397/466/401 1938 | f 375/427/379 374/426/378 389/465/400 390/467/402 1939 | f 383/431/381 382/430/380 397/466/401 398/468/403 1940 | f 376/433/382 375/427/379 390/467/402 391/469/404 1941 | f 384/435/383 383/431/381 398/468/403 399/470/405 1942 | f 377/437/384 376/433/382 391/469/404 392/471/406 1943 | f 385/439/385 384/435/383 399/470/405 400/472/407 1944 | f 378/441/386 377/437/384 392/471/406 393/456/393 1945 | f 386/443/387 385/439/385 400/472/407 401/458/395 1946 | f 398/468/403 397/466/401 412/473/408 413/474/409 1947 | f 391/469/404 390/467/402 405/475/410 406/476/411 1948 | f 399/470/405 398/468/403 413/474/409 414/477/412 1949 | f 392/471/406 391/469/404 406/476/411 407/478/413 1950 | f 400/472/407 399/470/405 414/477/412 415/479/414 1951 | f 393/456/393 392/471/406 407/478/413 408/480/415 1952 | f 401/458/395 400/472/407 415/479/414 416/481/416 1953 | f 394/457/394 393/456/393 408/480/415 409/482/417 1954 | f 402/459/396 401/458/395 416/481/416 417/483/418 1955 | f 395/460/397 394/457/394 409/482/417 410/484/419 1956 | f 388/462/398 297/485/2 403/486/420 1957 | f 206/487/4 402/459/396 417/483/418 1958 | f 396/464/399 395/460/397 410/484/419 411/488/421 1959 | f 389/465/400 388/462/398 403/486/420 404/489/422 1960 | f 397/466/401 396/464/399 411/488/421 412/473/408 1961 | f 390/467/402 389/465/400 404/489/422 405/475/410 1962 | f 417/483/418 416/481/416 431/490/423 432/491/424 1963 | f 410/484/419 409/482/417 424/492/425 425/493/426 1964 | f 403/486/420 297/494/2 418/495/427 1965 | f 206/496/4 417/483/418 432/491/424 1966 | f 411/488/421 410/484/419 425/493/426 426/497/428 1967 | f 404/489/422 403/486/420 418/495/427 419/498/429 1968 | f 412/473/408 411/488/421 426/497/428 427/499/430 1969 | f 405/475/410 404/489/422 419/498/429 420/500/431 1970 | f 413/474/409 412/473/408 427/499/430 428/501/432 1971 | f 406/476/411 405/475/410 420/500/431 421/502/433 1972 | f 414/477/412 413/474/409 428/501/432 429/503/434 1973 | f 407/478/413 406/476/411 421/502/433 422/504/435 1974 | f 415/479/414 414/477/412 429/503/434 430/505/436 1975 | f 408/480/415 407/478/413 422/504/435 423/506/437 1976 | f 416/481/416 415/479/414 430/505/436 431/490/423 1977 | f 409/482/417 408/480/415 423/506/437 424/492/425 1978 | f 429/503/434 428/501/432 443/507/438 444/508/439 1979 | f 422/504/435 421/502/433 436/509/440 437/510/441 1980 | f 430/505/436 429/503/434 444/508/439 445/511/442 1981 | f 423/506/437 422/504/435 437/510/441 438/512/443 1982 | f 431/490/423 430/505/436 445/511/442 446/513/444 1983 | f 424/492/425 423/506/437 438/512/443 439/514/445 1984 | f 432/491/424 431/490/423 446/513/444 447/515/446 1985 | f 425/493/426 424/492/425 439/514/445 440/516/447 1986 | f 418/495/427 297/517/2 433/518/448 1987 | f 206/519/4 432/491/424 447/515/446 1988 | f 426/497/428 425/493/426 440/516/447 441/520/449 1989 | f 419/498/429 418/495/427 433/518/448 434/521/450 1990 | f 427/499/430 426/497/428 441/520/449 442/522/451 1991 | f 420/500/431 419/498/429 434/521/450 435/523/452 1992 | f 428/501/432 427/499/430 442/522/451 443/507/438 1993 | f 421/502/433 420/500/431 435/523/452 436/509/440 1994 | f 433/518/448 297/524/2 448/525/453 1995 | f 206/526/4 447/515/446 462/527/454 1996 | f 441/520/449 440/516/447 455/528/455 456/529/456 1997 | f 434/521/450 433/518/448 448/525/453 449/530/457 1998 | f 442/522/451 441/520/449 456/529/456 457/531/458 1999 | f 435/523/452 434/521/450 449/530/457 450/532/459 2000 | f 443/507/438 442/522/451 457/531/458 458/533/460 2001 | f 436/509/440 435/523/452 450/532/459 451/534/461 2002 | f 444/508/439 443/507/438 458/533/460 459/535/462 2003 | f 437/510/441 436/509/440 451/534/461 452/536/463 2004 | f 445/511/442 444/508/439 459/535/462 460/537/464 2005 | f 438/512/443 437/510/441 452/536/463 453/538/465 2006 | f 446/513/444 445/511/442 460/537/464 461/539/466 2007 | f 439/514/445 438/512/443 453/538/465 454/540/467 2008 | f 447/515/446 446/513/444 461/539/466 462/527/454 2009 | f 440/516/447 439/514/445 454/540/467 455/528/455 2010 | f 452/536/463 451/534/461 466/541/468 467/542/469 2011 | f 460/537/464 459/535/462 474/543/470 475/544/471 2012 | f 453/538/465 452/536/463 467/542/469 468/545/472 2013 | f 461/539/466 460/537/464 475/544/471 476/546/473 2014 | f 454/540/467 453/538/465 468/545/472 469/547/474 2015 | f 462/527/454 461/539/466 476/546/473 477/548/475 2016 | f 455/528/455 454/540/467 469/547/474 470/549/476 2017 | f 448/525/453 297/550/2 463/551/477 2018 | f 206/552/4 462/527/454 477/548/475 2019 | f 456/529/456 455/528/455 470/549/476 471/553/478 2020 | f 449/530/457 448/525/453 463/551/477 464/554/479 2021 | f 457/531/458 456/529/456 471/553/478 472/555/480 2022 | f 450/532/459 449/530/457 464/554/479 465/556/481 2023 | f 458/533/460 457/531/458 472/555/480 473/557/482 2024 | f 451/534/461 450/532/459 465/556/481 466/541/468 2025 | f 459/535/462 458/533/460 473/557/482 474/543/470 2026 | f 471/553/478 470/549/476 8/8/8 9/7/7 2027 | f 464/554/479 463/551/477 1/1/1 2/11/11 2028 | f 472/555/480 471/553/478 9/7/7 478/13/13 2029 | f 465/556/481 464/554/479 2/11/11 3/15/15 2030 | f 473/557/482 472/555/480 478/13/13 479/17/17 2031 | f 466/541/468 465/556/481 3/15/15 4/19/19 2032 | f 474/543/470 473/557/482 479/17/17 480/21/21 2033 | f 467/542/469 466/541/468 4/19/19 5/23/23 2034 | f 475/544/471 474/543/470 480/21/21 10/25/25 2035 | f 468/545/472 467/542/469 5/23/23 6/27/27 2036 | f 476/546/473 475/544/471 10/25/25 481/29/29 2037 | f 469/547/474 468/545/472 6/27/27 7/31/31 2038 | f 477/548/475 476/546/473 481/29/29 482/5/5 2039 | f 470/549/476 469/547/474 7/31/31 8/8/8 2040 | f 463/551/477 297/558/2 1/1/1 2041 | f 206/559/4 477/548/475 482/5/5 2042 | -------------------------------------------------------------------------------- /data/screenshot_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diharaw/sdf-baking/1b79f94dbec70a0c74d07b3dd23e327b67aadfdb/data/screenshot_1.jpg -------------------------------------------------------------------------------- /data/screenshot_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/diharaw/sdf-baking/1b79f94dbec70a0c74d07b3dd23e327b67aadfdb/data/screenshot_2.jpg -------------------------------------------------------------------------------- /src/.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: WebKit 3 | AlignAfterOpenBracket: Align 4 | AlignConsecutiveAssignments: 'true' 5 | AlignConsecutiveDeclarations: 'true' 6 | AlignEscapedNewlines: Left 7 | AlignOperands: 'false' 8 | AlignTrailingComments: 'true' 9 | AllowAllParametersOfDeclarationOnNextLine: 'true' 10 | AllowShortBlocksOnASingleLine: 'true' 11 | AllowShortCaseLabelsOnASingleLine: 'true' 12 | AllowShortFunctionsOnASingleLine: All 13 | AllowShortIfStatementsOnASingleLine: 'true' 14 | AllowShortLoopsOnASingleLine: 'true' 15 | AlwaysBreakAfterReturnType: None 16 | AlwaysBreakBeforeMultilineStrings: 'false' 17 | AlwaysBreakTemplateDeclarations: 'true' 18 | BinPackArguments: 'false' 19 | BinPackParameters: 'false' 20 | BreakBeforeBraces: Allman 21 | BreakBeforeInheritanceComma: 'false' 22 | BreakBeforeTernaryOperators: 'false' 23 | BreakConstructorInitializers: AfterColon 24 | BreakStringLiterals: 'true' 25 | CompactNamespaces: 'true' 26 | ConstructorInitializerAllOnOneLineOrOnePerLine: 'false' 27 | Cpp11BracedListStyle: 'false' 28 | FixNamespaceComments: 'true' 29 | IncludeBlocks: Regroup 30 | IndentCaseLabels: 'true' 31 | IndentPPDirectives: AfterHash 32 | IndentWrappedFunctionNames: 'true' 33 | KeepEmptyLinesAtTheStartOfBlocks: 'false' 34 | Language: Cpp 35 | NamespaceIndentation: None 36 | PointerAlignment: Left 37 | ReflowComments: 'true' 38 | SortIncludes: 'false' 39 | SortUsingDeclarations: 'true' 40 | SpaceAfterCStyleCast: 'false' 41 | SpaceBeforeAssignmentOperators: 'true' 42 | SpaceBeforeParens: ControlStatements 43 | SpaceInEmptyParentheses: 'false' 44 | SpacesInAngles: 'false' 45 | SpacesInCStyleCastParentheses: 'false' 46 | SpacesInContainerLiterals: 'true' 47 | SpacesInParentheses: 'false' 48 | SpacesInSquareBrackets: 'false' 49 | 50 | ... 51 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.8 FATAL_ERROR) 2 | 3 | find_program(CLANG_FORMAT_EXE NAMES "clang-format" DOC "Path to clang-format executable") 4 | 5 | set(CMAKE_CXX_STANDARD 14) 6 | set(CMAKE_CXX_STANDARD_REQUIRED TRUE) 7 | 8 | set(SDF_SHADOWS_SOURCES ${PROJECT_SOURCE_DIR}/src/main.cpp) 9 | file(GLOB_RECURSE SHADER_SOURCES ${PROJECT_SOURCE_DIR}/src/*.glsl) 10 | 11 | if (APPLE) 12 | add_executable(SDFBaking MACOSX_BUNDLE ${SDF_SHADOWS_SOURCES} ${SHADER_SOURCES} ${ASSET_SOURCES}) 13 | set(MACOSX_BUNDLE_BUNDLE_NAME "SDFBaking") 14 | set_source_files_properties(${SHADER_SOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/shader) 15 | set_source_files_properties(${ASSET_SOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 16 | else() 17 | add_executable(SDFBaking ${SDF_SHADOWS_SOURCES}) 18 | endif() 19 | 20 | target_link_libraries(SDFBaking dwSampleFramework) 21 | 22 | if (NOT APPLE) 23 | add_custom_command(TARGET SDFBaking POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/src/shader $/shader) 24 | add_custom_command(TARGET SDFBaking POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/data/mesh $/mesh) 25 | endif() 26 | 27 | if(CLANG_FORMAT_EXE) 28 | add_custom_target(SDFBaking-clang-format COMMAND ${CLANG_FORMAT_EXE} -i -style=file ${SDF_SHADOWS_SOURCES} ${SHADER_SOURCES}) 29 | endif() 30 | 31 | set_property(TARGET SDFBaking PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/$(Configuration)") -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #define _USE_MATH_DEFINES 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #define CAMERA_FAR_PLANE 1000.0f 16 | #define NUM_INSTANCES 16 17 | #define NUM_SDFS 16 18 | 19 | struct GlobalUniforms 20 | { 21 | DW_ALIGNED(16) 22 | glm::mat4 view_proj; 23 | DW_ALIGNED(16) 24 | glm::vec4 cam_pos; 25 | DW_ALIGNED(16) 26 | int32_t num_instances; 27 | }; 28 | 29 | struct InstanceUniforms 30 | { 31 | DW_ALIGNED(16) 32 | glm::mat4 inverse_transform; 33 | DW_ALIGNED(16) 34 | glm::vec4 half_extents; 35 | DW_ALIGNED(16) 36 | glm::vec4 os_center; 37 | DW_ALIGNED(16) 38 | glm::vec4 ws_center; 39 | DW_ALIGNED(16) 40 | glm::vec4 ws_axis[3]; 41 | DW_ALIGNED(16) 42 | glm::ivec4 sdf_idx; 43 | }; 44 | 45 | struct Instance 46 | { 47 | // Mesh 48 | dw::Mesh::Ptr mesh; 49 | glm::vec3 color; 50 | 51 | // SDF 52 | dw::gl::Texture3D::Ptr sdf; 53 | glm::ivec3 volume_size; 54 | glm::vec3 grid_origin; 55 | float grid_step_size; 56 | glm::vec3 min_extents; 57 | glm::vec3 max_extents; 58 | 59 | // Transform 60 | bool animate = false; 61 | float rotation = 0.0f; 62 | glm::vec3 position = glm::vec3(0.0f); 63 | glm::mat4 transform = glm::mat4(1.0f); 64 | }; 65 | 66 | class SDFBaking : public dw::Application 67 | { 68 | protected: 69 | // ----------------------------------------------------------------------------------------------------------------------------------- 70 | 71 | bool init(int argc, const char* argv[]) override 72 | { 73 | // Create GPU resources. 74 | if (!create_shaders()) 75 | return false; 76 | 77 | if (!create_uniform_buffer()) 78 | return false; 79 | 80 | // Load scene. 81 | if (!load_scene()) 82 | return false; 83 | 84 | update_textures(); 85 | 86 | // Create camera. 87 | create_camera(); 88 | 89 | return true; 90 | } 91 | 92 | // ----------------------------------------------------------------------------------------------------------------------------------- 93 | 94 | void update(double delta) override 95 | { 96 | if (m_debug_gui) 97 | debug_gui(); 98 | 99 | // Update camera. 100 | update_camera(); 101 | 102 | update_uniforms(); 103 | 104 | render_scene(); 105 | 106 | m_debug_draw.set_depth_test(true); 107 | 108 | if (m_draw_bounding_boxes) 109 | { 110 | for (const auto& instance : m_instances) 111 | m_debug_draw.obb(instance.min_extents, instance.max_extents, instance.transform, glm::vec3(1.0f, 0.0f, 0.0f)); 112 | } 113 | 114 | m_debug_draw.render(nullptr, m_width, m_height, m_main_camera->m_view_projection, m_main_camera->m_position); 115 | } 116 | 117 | // ----------------------------------------------------------------------------------------------------------------------------------- 118 | 119 | void debug_gui() 120 | { 121 | ImGui::Checkbox("Draw Bounding Boxes", &m_draw_bounding_boxes); 122 | ImGui::Checkbox("Soft Shadows", &m_soft_shadows); 123 | ImGui::InputFloat("T-Min", &m_t_min); 124 | ImGui::InputFloat("T-Max", &m_t_max); 125 | ImGui::SliderFloat("Soft Shadows K", &m_soft_shadows_k, 1.0f, 16.0f); 126 | ImGui::SliderFloat("Light Pitch", &m_light_pitch, -1.0f, 1.0f); 127 | ImGui::InputFloat3("Light Position", &m_light_pos.x); 128 | ImGui::SliderFloat("Light Inner Cutoff", &m_light_inner_cutoff, 0.0f, 90.0f); 129 | ImGui::SliderFloat("Light Outer Cutoff", &m_light_outer_cutoff, 0.0f, 90.0f); 130 | ImGui::SliderFloat("Light Range", &m_light_range, 0.0f, 100.0f); 131 | 132 | ImGui::Separator(); 133 | 134 | ImGui::Checkbox("Ambient Occlusion", &m_ao); 135 | ImGui::SliderFloat("AO Strength", &m_ao_strength, 0.0f, 1.0f); 136 | ImGui::SliderFloat("AO Step Size", &m_ao_step_size, 0.01f, 1.0f); 137 | ImGui::SliderInt("AO Num Steps", &m_ao_num_steps, 1, 32); 138 | 139 | ImGui::Separator(); 140 | 141 | for (int i = 0; i < m_instances.size(); i++) 142 | { 143 | auto& instance = m_instances[i]; 144 | 145 | ImGui::PushID(i); 146 | ImGui::Text("Mesh %i", i); 147 | ImGui::InputFloat3("Position", &instance.position.x); 148 | ImGui::SliderFloat("Rotation", &instance.rotation, -180.0f, 180.0f); 149 | ImGui::ColorEdit3("Color", &instance.color.x); 150 | ImGui::Checkbox("Animate", &instance.animate); 151 | ImGui::Separator(); 152 | ImGui::PopID(); 153 | } 154 | } 155 | 156 | // ----------------------------------------------------------------------------------------------------------------------------------- 157 | 158 | void window_resized(int width, int height) override 159 | { 160 | // Override window resized method to update camera projection. 161 | m_main_camera->update_projection(60.0f, 1.0f, CAMERA_FAR_PLANE, float(m_width) / float(m_height)); 162 | } 163 | 164 | // ----------------------------------------------------------------------------------------------------------------------------------- 165 | 166 | void key_pressed(int code) override 167 | { 168 | // Handle forward movement. 169 | if (code == GLFW_KEY_W) 170 | m_heading_speed = m_camera_speed; 171 | else if (code == GLFW_KEY_S) 172 | m_heading_speed = -m_camera_speed; 173 | 174 | // Handle sideways movement. 175 | if (code == GLFW_KEY_A) 176 | m_sideways_speed = -m_camera_speed; 177 | else if (code == GLFW_KEY_D) 178 | m_sideways_speed = m_camera_speed; 179 | 180 | if (code == GLFW_KEY_SPACE) 181 | m_mouse_look = true; 182 | 183 | if (code == GLFW_KEY_G) 184 | m_debug_gui = !m_debug_gui; 185 | } 186 | 187 | // ----------------------------------------------------------------------------------------------------------------------------------- 188 | 189 | void key_released(int code) override 190 | { 191 | // Handle forward movement. 192 | if (code == GLFW_KEY_W || code == GLFW_KEY_S) 193 | m_heading_speed = 0.0f; 194 | 195 | // Handle sideways movement. 196 | if (code == GLFW_KEY_A || code == GLFW_KEY_D) 197 | m_sideways_speed = 0.0f; 198 | 199 | if (code == GLFW_KEY_SPACE) 200 | m_mouse_look = false; 201 | } 202 | 203 | // ----------------------------------------------------------------------------------------------------------------------------------- 204 | 205 | void mouse_pressed(int code) override 206 | { 207 | // Enable mouse look. 208 | if (code == GLFW_MOUSE_BUTTON_RIGHT) 209 | m_mouse_look = true; 210 | } 211 | 212 | // ----------------------------------------------------------------------------------------------------------------------------------- 213 | 214 | void mouse_released(int code) override 215 | { 216 | // Disable mouse look. 217 | if (code == GLFW_MOUSE_BUTTON_RIGHT) 218 | m_mouse_look = false; 219 | } 220 | 221 | // ----------------------------------------------------------------------------------------------------------------------------------- 222 | 223 | protected: 224 | // ----------------------------------------------------------------------------------------------------------------------------------- 225 | 226 | dw::AppSettings intial_app_settings() override 227 | { 228 | dw::AppSettings settings; 229 | 230 | settings.maximized = false; 231 | settings.major_ver = 4; 232 | settings.width = 1920; 233 | settings.height = 1080; 234 | settings.title = "SDF Baking"; 235 | settings.enable_debug_callback = false; 236 | 237 | return settings; 238 | } 239 | 240 | // ----------------------------------------------------------------------------------------------------------------------------------- 241 | 242 | private: 243 | // ----------------------------------------------------------------------------------------------------------------------------------- 244 | 245 | bool create_shaders() 246 | { 247 | // Create general shaders 248 | m_mesh_vs = dw::gl::Shader::create_from_file(GL_VERTEX_SHADER, "shader/mesh_vs.glsl"); 249 | m_mesh_fs = dw::gl::Shader::create_from_file(GL_FRAGMENT_SHADER, "shader/mesh_fs.glsl"); 250 | m_bake_sdf_cs = dw::gl::Shader::create_from_file(GL_COMPUTE_SHADER, "shader/bake_sdf_cs.glsl"); 251 | 252 | if (!m_mesh_vs || !m_mesh_fs || !m_bake_sdf_cs) 253 | { 254 | DW_LOG_FATAL("Failed to create Shaders"); 255 | return false; 256 | } 257 | 258 | // Create general shader program 259 | m_mesh_program = dw::gl::Program::create({ m_mesh_vs, m_mesh_fs }); 260 | 261 | if (!m_mesh_program) 262 | { 263 | DW_LOG_FATAL("Failed to create Shader Program"); 264 | return false; 265 | } 266 | 267 | // Create general shader program 268 | m_bake_sdf_program = dw::gl::Program::create({ m_bake_sdf_cs }); 269 | 270 | if (!m_bake_sdf_program) 271 | { 272 | DW_LOG_FATAL("Failed to create Shader Program"); 273 | return false; 274 | } 275 | 276 | return true; 277 | } 278 | 279 | // ----------------------------------------------------------------------------------------------------------------------------------- 280 | 281 | bool create_uniform_buffer() 282 | { 283 | // Create uniform buffer for global data 284 | m_global_ubo = dw::gl::Buffer::create(GL_UNIFORM_BUFFER, GL_MAP_WRITE_BIT, sizeof(GlobalUniforms)); 285 | m_instance_ubo = dw::gl::Buffer::create(GL_UNIFORM_BUFFER, GL_MAP_WRITE_BIT, sizeof(InstanceUniforms) * NUM_INSTANCES); 286 | m_sdf_ubo = dw::gl::Buffer::create(GL_UNIFORM_BUFFER, GL_MAP_WRITE_BIT, sizeof(uint64_t) * NUM_SDFS * 2); 287 | 288 | return true; 289 | } 290 | 291 | // ----------------------------------------------------------------------------------------------------------------------------------- 292 | 293 | void bake_sdf(Instance& instance, float grid_step_size, int padding) 294 | { 295 | glm::vec3 min_extents = instance.mesh->min_extents() - (glm::vec3(grid_step_size) * float(padding)); 296 | glm::vec3 max_extents = instance.mesh->max_extents() + (glm::vec3(grid_step_size) * float(padding)); 297 | glm::vec3 grid_origin = min_extents + glm::vec3(grid_step_size / 2.0f); 298 | glm::vec3 box_size = max_extents - min_extents; 299 | glm::ivec3 volume_size = glm::ivec3(glm::ceil(box_size / glm::vec3(grid_step_size))); 300 | 301 | instance.volume_size = volume_size; 302 | instance.grid_origin = grid_origin; 303 | instance.grid_step_size = grid_step_size; 304 | instance.min_extents = min_extents; 305 | instance.max_extents = max_extents; 306 | 307 | instance.sdf = dw::gl::Texture3D::create(volume_size.x, volume_size.y, volume_size.z, 1, GL_R32F, GL_RED, GL_FLOAT); 308 | instance.sdf->set_min_filter(GL_LINEAR); 309 | instance.sdf->set_mag_filter(GL_LINEAR); 310 | instance.sdf->set_wrapping(GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE); 311 | 312 | m_bake_sdf_program->use(); 313 | 314 | m_bake_sdf_program->set_uniform("u_GridStepSize", glm::vec3(grid_step_size)); 315 | m_bake_sdf_program->set_uniform("u_GridOrigin", grid_origin); 316 | m_bake_sdf_program->set_uniform("u_NumTriangles", static_cast(instance.mesh->indices().size() / 3)); 317 | m_bake_sdf_program->set_uniform("u_VolumeSize", volume_size); 318 | 319 | instance.sdf->bind_image(0, 0, 0, GL_READ_WRITE, instance.sdf->internal_format()); 320 | 321 | instance.mesh->vertex_buffer()->bind_base(GL_SHADER_STORAGE_BUFFER, 0); 322 | instance.mesh->index_buffer()->bind_base(GL_SHADER_STORAGE_BUFFER, 1); 323 | 324 | const uint32_t NUM_THREADS_X = 8; 325 | const uint32_t NUM_THREADS_Y = 8; 326 | const uint32_t NUM_THREADS_Z = 1; 327 | 328 | uint32_t size_x = static_cast(ceil(float(volume_size.x) / float(NUM_THREADS_X))); 329 | uint32_t size_y = static_cast(ceil(float(volume_size.y) / float(NUM_THREADS_Y))); 330 | uint32_t size_z = static_cast(ceil(float(volume_size.z) / float(NUM_THREADS_Z))); 331 | 332 | glDispatchCompute(size_x, size_y, size_z); 333 | 334 | glFinish(); 335 | } 336 | 337 | // ----------------------------------------------------------------------------------------------------------------------------------- 338 | 339 | bool load_mesh(const std::string& name, glm::vec3 position, float rotation, glm::vec3 color) 340 | { 341 | Instance instance; 342 | 343 | instance.mesh = dw::Mesh::load("mesh/" + name + ".obj"); 344 | instance.color = color; 345 | instance.position = position; 346 | instance.rotation = rotation; 347 | 348 | if (!instance.mesh) 349 | { 350 | DW_LOG_FATAL("Failed to load mesh: " + name); 351 | return false; 352 | } 353 | 354 | bake_sdf(instance, 0.025f, 4); 355 | 356 | m_instances.push_back(instance); 357 | 358 | InstanceUniforms uniform; 359 | 360 | uniform.half_extents = glm::vec4((instance.max_extents - instance.min_extents) / 2.0f, 0.0f); 361 | uniform.os_center = glm::vec4((instance.max_extents + instance.min_extents) / 2.0f, 1.0f); 362 | uniform.sdf_idx = glm::ivec4(m_texture_uniforms.size(), 0, 0, 0); 363 | 364 | m_instance_uniforms.push_back(uniform); 365 | m_texture_uniforms.push_back(instance.sdf->make_texture_handle_resident()); 366 | 367 | return true; 368 | } 369 | 370 | // ----------------------------------------------------------------------------------------------------------------------------------- 371 | 372 | bool load_scene() 373 | { 374 | std::string meshes[] = { 375 | "bunny", 376 | "sphere", 377 | "cylinder" 378 | }; 379 | 380 | glm::vec3 positions[] = { 381 | glm::vec3(0.0f, 0.0f, 1.0f), 382 | glm::vec3(4.0f, 0.0f, 1.0f), 383 | glm::vec3(-4.0f, 0.0f, 1.0f) 384 | }; 385 | 386 | float rotations[] = { 387 | 0.0f, 388 | 0.0f, 389 | 0.0f 390 | }; 391 | 392 | glm::vec3 colors[] = { 393 | glm::vec3(0.569844782f, 0.157939225f, 0.157963991f), 394 | glm::vec3(0.334582895f, 0.503325939f, 0.222088382f), 395 | glm::vec3(0.103627160f, 0.303517729f, 0.482233524f) 396 | }; 397 | 398 | for (int i = 0; i < 3; i++) 399 | { 400 | if (!load_mesh(meshes[i], positions[i], rotations[i], colors[i])) 401 | { 402 | DW_LOG_FATAL("Failed to create mesh instance: " + meshes[i]); 403 | return false; 404 | } 405 | } 406 | 407 | m_ground = dw::Mesh::load("mesh/ground.obj"); 408 | 409 | if (!m_ground) 410 | { 411 | DW_LOG_FATAL("Failed to load mesh: plane"); 412 | return false; 413 | } 414 | 415 | return true; 416 | } 417 | 418 | // ----------------------------------------------------------------------------------------------------------------------------------- 419 | 420 | void create_camera() 421 | { 422 | m_main_camera = std::make_unique(60.0f, 1.0f, CAMERA_FAR_PLANE, float(m_width) / float(m_height), glm::vec3(0.0f, 3.0f, 15.0f), glm::vec3(-1.0f, 0.0, 0.0f)); 423 | m_main_camera->update(); 424 | } 425 | 426 | // ----------------------------------------------------------------------------------------------------------------------------------- 427 | 428 | void render_mesh(dw::Mesh::Ptr mesh, glm::mat4 model, glm::vec3 color) 429 | { 430 | m_mesh_program->set_uniform("u_Color", color); 431 | m_mesh_program->set_uniform("u_Model", model); 432 | 433 | // Bind vertex array. 434 | mesh->mesh_vertex_array()->bind(); 435 | 436 | const auto& submeshes = mesh->sub_meshes(); 437 | 438 | for (uint32_t i = 0; i < submeshes.size(); i++) 439 | { 440 | const dw::SubMesh& submesh = submeshes[i]; 441 | 442 | // Issue draw call. 443 | glDrawElementsBaseVertex(GL_TRIANGLES, submesh.index_count, GL_UNSIGNED_INT, (void*)(sizeof(unsigned int) * submesh.base_index), submesh.base_vertex); 444 | } 445 | } 446 | 447 | // ----------------------------------------------------------------------------------------------------------------------------------- 448 | 449 | void render_scene() 450 | { 451 | glEnable(GL_DEPTH_TEST); 452 | glDisable(GL_BLEND); 453 | glEnable(GL_CULL_FACE); 454 | glCullFace(GL_BACK); 455 | 456 | glBindFramebuffer(GL_FRAMEBUFFER, 0); 457 | glViewport(0, 0, m_width, m_height); 458 | 459 | glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 460 | glClearDepth(1.0); 461 | glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 462 | 463 | // Bind shader program. 464 | m_mesh_program->use(); 465 | 466 | // Bind SDF texture 467 | m_mesh_program->set_uniform("u_SDFSoftShadows", m_soft_shadows); 468 | m_mesh_program->set_uniform("u_SDFTMin", m_t_min); 469 | m_mesh_program->set_uniform("u_SDFTMax", m_t_max); 470 | m_mesh_program->set_uniform("u_SDFSoftShadowsK", m_soft_shadows_k); 471 | m_mesh_program->set_uniform("u_AOStepSize", m_ao_step_size); 472 | m_mesh_program->set_uniform("u_AOStrength", m_ao_strength); 473 | m_mesh_program->set_uniform("u_AONumSteps", m_ao_num_steps); 474 | m_mesh_program->set_uniform("u_AO", m_ao); 475 | m_mesh_program->set_uniform("u_LightPos", m_light_pos); 476 | m_mesh_program->set_uniform("u_LightDirection", glm::normalize(glm::vec3(0.0f, m_light_pitch, -1.0f))); 477 | m_mesh_program->set_uniform("u_LightInnerCutoff", cosf(glm::radians(m_light_inner_cutoff))); 478 | m_mesh_program->set_uniform("u_LightOuterCutoff", cosf(glm::radians(m_light_outer_cutoff))); 479 | m_mesh_program->set_uniform("u_LightRange", m_light_range); 480 | 481 | // Bind uniform buffers. 482 | m_global_ubo->bind_base(0); 483 | m_instance_ubo->bind_base(1); 484 | m_sdf_ubo->bind_base(2); 485 | 486 | // Draw scene. 487 | render_mesh(m_ground, glm::mat4(1.0f), glm::vec3(0.5f)); 488 | 489 | for (const auto& instance : m_instances) 490 | render_mesh(instance.mesh, instance.transform, instance.color); 491 | } 492 | 493 | // ----------------------------------------------------------------------------------------------------------------------------------- 494 | 495 | void update_uniforms() 496 | { 497 | // Global 498 | { 499 | void* ptr = m_global_ubo->map(GL_WRITE_ONLY); 500 | memcpy(ptr, &m_global_uniforms, sizeof(GlobalUniforms)); 501 | m_global_ubo->unmap(); 502 | } 503 | 504 | // Instance 505 | { 506 | void* ptr = m_instance_ubo->map(GL_WRITE_ONLY); 507 | memcpy(ptr, m_instance_uniforms.data(), sizeof(InstanceUniforms) * m_instances.size()); 508 | m_instance_ubo->unmap(); 509 | } 510 | } 511 | 512 | // ----------------------------------------------------------------------------------------------------------------------------------- 513 | 514 | void update_textures() 515 | { 516 | uint64_t* ptr = (uint64_t*)m_sdf_ubo->map(GL_WRITE_ONLY); 517 | 518 | for (int i = 0; i < m_texture_uniforms.size(); i++) 519 | { 520 | memcpy(ptr, &m_texture_uniforms[i], sizeof(uint64_t)); 521 | ptr += 2; 522 | } 523 | 524 | m_sdf_ubo->unmap(); 525 | } 526 | 527 | // ----------------------------------------------------------------------------------------------------------------------------------- 528 | 529 | void update_transforms(dw::Camera* camera) 530 | { 531 | // Update camera matrices. 532 | m_global_uniforms.view_proj = camera->m_projection * camera->m_view; 533 | m_global_uniforms.cam_pos = glm::vec4(camera->m_position, 0.0f); 534 | m_global_uniforms.num_instances = m_instances.size(); 535 | 536 | for (int i = 0; i < m_instances.size(); i++) 537 | { 538 | auto& instance = m_instances[i]; 539 | 540 | instance.transform = glm::translate(glm::mat4(1.0f), instance.position); 541 | 542 | if (instance.animate) 543 | instance.transform = instance.transform * glm::rotate(glm::mat4(1.0f), glm::radians(float(glfwGetTime()) * 10.0f), glm::vec3(0.0f, 1.0f, 0.0f)); 544 | else 545 | instance.transform = instance.transform * glm::rotate(glm::mat4(1.0f), glm::radians(instance.rotation), glm::vec3(0.0f, 1.0f, 0.0f)); 546 | 547 | m_instance_uniforms[i].inverse_transform = glm::inverse(instance.transform); 548 | m_instance_uniforms[i].ws_center = instance.transform * m_instance_uniforms[i].os_center; 549 | 550 | glm::vec3 axis[] = { 551 | glm::vec3(1.0f, 0.0f, 0.0f), 552 | glm::vec3(0.0f, 1.0f, 0.0f), 553 | glm::vec3(0.0f, 0.0f, 1.0f) 554 | }; 555 | 556 | for (int j = 0; j < 3; j++) 557 | m_instance_uniforms[i].ws_axis[j] = glm::vec4(glm::mat3(instance.transform) * axis[j], 0.0f); 558 | } 559 | } 560 | 561 | // ----------------------------------------------------------------------------------------------------------------------------------- 562 | 563 | void update_camera() 564 | { 565 | dw::Camera* current = m_main_camera.get(); 566 | 567 | float forward_delta = m_heading_speed * m_delta; 568 | float right_delta = m_sideways_speed * m_delta; 569 | 570 | current->set_translation_delta(current->m_forward, forward_delta); 571 | current->set_translation_delta(current->m_right, right_delta); 572 | 573 | m_camera_x = m_mouse_delta_x * m_camera_sensitivity; 574 | m_camera_y = m_mouse_delta_y * m_camera_sensitivity; 575 | 576 | if (m_mouse_look) 577 | { 578 | // Activate Mouse Look 579 | current->set_rotatation_delta(glm::vec3((float)(m_camera_y), 580 | (float)(m_camera_x), 581 | (float)(0.0f))); 582 | } 583 | else 584 | { 585 | current->set_rotatation_delta(glm::vec3((float)(0), 586 | (float)(0), 587 | (float)(0))); 588 | } 589 | 590 | current->update(); 591 | update_transforms(current); 592 | } 593 | 594 | // ----------------------------------------------------------------------------------------------------------------------------------- 595 | 596 | private: 597 | // General GPU resources. 598 | dw::gl::Shader::Ptr m_mesh_fs; 599 | dw::gl::Shader::Ptr m_mesh_vs; 600 | dw::gl::Shader::Ptr m_bake_sdf_cs; 601 | dw::gl::Program::Ptr m_mesh_program; 602 | dw::gl::Program::Ptr m_bake_sdf_program; 603 | dw::gl::Buffer::Ptr m_global_ubo; 604 | dw::gl::Buffer::Ptr m_instance_ubo; 605 | dw::gl::Buffer::Ptr m_sdf_ubo; 606 | 607 | std::vector m_instances; 608 | dw::Mesh::Ptr m_ground; 609 | std::unique_ptr m_main_camera; 610 | 611 | GlobalUniforms m_global_uniforms; 612 | std::vector m_instance_uniforms; 613 | std::vector m_texture_uniforms; 614 | 615 | // Camera controls. 616 | bool m_mouse_look = false; 617 | float m_heading_speed = 0.0f; 618 | float m_sideways_speed = 0.0f; 619 | float m_camera_sensitivity = 0.05f; 620 | float m_camera_speed = 0.05f; 621 | bool m_debug_gui = true; 622 | 623 | // Camera orientation. 624 | float m_camera_x; 625 | float m_camera_y; 626 | 627 | // Light 628 | float m_light_pitch = -0.9f; 629 | glm::vec3 m_light_pos = glm::vec3(0.0f, 30.0f, 35.0f); 630 | float m_light_inner_cutoff = 3.4f; 631 | float m_light_outer_cutoff = 8.7f; 632 | float m_light_range = 100.0f; 633 | 634 | // AO 635 | bool m_ao = true; 636 | float m_ao_strength = 0.16f; 637 | float m_ao_step_size = 0.15f; 638 | int m_ao_num_steps = 8; 639 | 640 | // SDF 641 | float m_t_min = 0.2f; 642 | float m_t_max = 100.0f; 643 | bool m_soft_shadows = true; 644 | float m_soft_shadows_k = 5.7f; 645 | bool m_draw_bounding_boxes = false; 646 | }; 647 | 648 | DW_DECLARE_MAIN(SDFBaking) -------------------------------------------------------------------------------- /src/shader/bake_sdf_cs.glsl: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------ 2 | // DEFINES ---------------------------------------------------------- 3 | // ------------------------------------------------------------------ 4 | 5 | #define INFINITY 100000000.0f 6 | 7 | // ------------------------------------------------------------------ 8 | // INPUTS ----------------------------------------------------------- 9 | // ------------------------------------------------------------------ 10 | 11 | layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; 12 | 13 | // ------------------------------------------------------------------ 14 | // INPUT ------------------------------------------------------------ 15 | // ------------------------------------------------------------------ 16 | 17 | layout(binding = 0, r32f) uniform image3D i_SDF; 18 | 19 | // ------------------------------------------------------------------ 20 | // STRUCTURES ------------------------------------------------------- 21 | // ------------------------------------------------------------------ 22 | 23 | struct Vertex 24 | { 25 | vec4 position; 26 | vec4 tex_coord; 27 | vec4 normal; 28 | vec4 tangent; 29 | vec4 bitangent; 30 | }; 31 | 32 | // ------------------------------------------------------------------ 33 | // UNIFORMS --------------------------------------------------------- 34 | // ------------------------------------------------------------------ 35 | 36 | layout(std430, binding = 0) buffer Vertices 37 | { 38 | Vertex vertices[]; 39 | }; 40 | 41 | layout(std430, binding = 1) buffer Indices 42 | { 43 | uint indices[]; 44 | }; 45 | 46 | uniform vec3 u_GridStepSize; 47 | uniform vec3 u_GridOrigin; 48 | uniform uint u_NumTriangles; 49 | uniform ivec3 u_VolumeSize; 50 | 51 | // ------------------------------------------------------------------ 52 | // FUNCTIONS -------------------------------------------------------- 53 | // ------------------------------------------------------------------ 54 | 55 | float dot2(in vec2 v) { return dot(v, v); } 56 | 57 | // ------------------------------------------------------------------ 58 | 59 | float dot2(in vec3 v) { return dot(v, v); } 60 | 61 | // ------------------------------------------------------------------ 62 | 63 | float ndot(in vec2 a, in vec2 b) { return a.x * b.x - a.y * b.y; } 64 | 65 | // ------------------------------------------------------------------ 66 | 67 | float sdf_triangle(vec3 p, vec3 a, vec3 b, vec3 c) 68 | { 69 | vec3 ba = b - a; 70 | vec3 pa = p - a; 71 | vec3 cb = c - b; 72 | vec3 pb = p - b; 73 | vec3 ac = a - c; 74 | vec3 pc = p - c; 75 | vec3 nor = cross(ba, ac); 76 | 77 | return sqrt( 78 | (sign(dot(cross(ba, nor), pa)) + sign(dot(cross(cb, nor), pb)) + sign(dot(cross(ac, nor), pc)) < 2.0) ? 79 | min(min( 80 | dot2(ba * clamp(dot(ba, pa) / dot2(ba), 0.0, 1.0) - pa), 81 | dot2(cb * clamp(dot(cb, pb) / dot2(cb), 0.0, 1.0) - pb)), 82 | dot2(ac * clamp(dot(ac, pc) / dot2(ac), 0.0, 1.0) - pc)) : 83 | dot(nor, pa) * dot(nor, pa) / dot2(nor)); 84 | } 85 | 86 | // ------------------------------------------------------------------ 87 | 88 | bool is_front_facing(vec3 p, Vertex v0, Vertex v1, Vertex v2) 89 | { 90 | return dot(normalize(p - v0.position.xyz), v0.normal.xyz) >= 0.0f || dot(normalize(p - v1.position.xyz), v1.normal.xyz) >= 0.0f || dot(normalize(p - v2.position.xyz), v2.normal.xyz) >= 0.0f; 91 | } 92 | 93 | // ------------------------------------------------------------------ 94 | // MAIN ------------------------------------------------------------- 95 | // ------------------------------------------------------------------ 96 | 97 | void main() 98 | { 99 | ivec3 coord = ivec3(gl_GlobalInvocationID.xyz); 100 | 101 | if (all(lessThan(coord, u_VolumeSize))) 102 | { 103 | vec3 p = u_GridOrigin + u_GridStepSize * vec3(coord); 104 | 105 | float closest_dist = INFINITY; 106 | bool front_facing = true; 107 | 108 | for (int i = 0; i < u_NumTriangles; i++) 109 | { 110 | Vertex v0 = vertices[indices[3 * i]]; 111 | Vertex v1 = vertices[indices[3 * i + 1]]; 112 | Vertex v2 = vertices[indices[3 * i + 2]]; 113 | 114 | float h = sdf_triangle(p, v0.position.xyz, v1.position.xyz, v2.position.xyz); 115 | 116 | if (h < closest_dist) 117 | { 118 | closest_dist = h; 119 | front_facing = is_front_facing(p, v0, v1, v2); 120 | } 121 | } 122 | 123 | imageStore(i_SDF, coord, vec4(front_facing ? closest_dist : -closest_dist)); 124 | } 125 | } 126 | 127 | // ------------------------------------------------------------------ -------------------------------------------------------------------------------- /src/shader/mesh_fs.glsl: -------------------------------------------------------------------------------- 1 | #extension GL_ARB_bindless_texture : require 2 | 3 | // ------------------------------------------------------------------ 4 | // DEFINES ---------------------------------------------------------- 5 | // ------------------------------------------------------------------ 6 | 7 | #define NUM_INSTANCES 16 8 | #define NUM_SDFS 16 9 | #define INFINITY 100000.0f 10 | 11 | // ------------------------------------------------------------------ 12 | // OUTPUT VARIABLES ------------------------------------------------ 13 | // ------------------------------------------------------------------ 14 | 15 | out vec3 FS_OUT_Color; 16 | 17 | // ------------------------------------------------------------------ 18 | // INPUT VARIABLES ------------------------------------------------- 19 | // ------------------------------------------------------------------ 20 | 21 | in vec3 FS_IN_WorldPos; 22 | in vec3 FS_IN_Normal; 23 | in vec2 FS_IN_UV; 24 | in vec4 FS_IN_NDCFragPos; 25 | 26 | // ------------------------------------------------------------------ 27 | // STRUCTURES ------------------------------------------------------- 28 | // ------------------------------------------------------------------ 29 | 30 | struct Instance 31 | { 32 | mat4 inverse_transform; 33 | vec4 half_extents; 34 | vec4 os_center; 35 | vec4 ws_center; 36 | vec4 ws_axis[3]; 37 | ivec4 sdf_idx; 38 | }; 39 | 40 | // ------------------------------------------------------------------ 41 | // UNIFORMS --------------------------------------------------------- 42 | // ------------------------------------------------------------------ 43 | 44 | layout(std140, binding = 0) uniform GlobalUniforms 45 | { 46 | mat4 view_proj; 47 | vec4 cam_pos; 48 | int num_instances; 49 | }; 50 | 51 | layout(std140, binding = 1) uniform Instances 52 | { 53 | Instance instances[NUM_INSTANCES]; 54 | }; 55 | 56 | layout(std140, binding = 2) uniform SDFTextures 57 | { 58 | sampler3D sdf[NUM_SDFS]; 59 | }; 60 | 61 | uniform vec3 u_Color; 62 | uniform bool u_SDFSoftShadows; 63 | uniform float u_SDFTMin; 64 | uniform float u_SDFTMax; 65 | uniform float u_SDFSoftShadowsK; 66 | uniform float u_AOStepSize; 67 | uniform float u_AOStrength; 68 | uniform int u_AONumSteps; 69 | uniform bool u_AO; 70 | uniform vec3 u_LightPos; 71 | uniform vec3 u_LightDirection; 72 | uniform float u_LightInnerCutoff; 73 | uniform float u_LightOuterCutoff; 74 | uniform float u_LightRange; 75 | 76 | // ------------------------------------------------------------------ 77 | // FUNCTIONS -------------------------------------------------------- 78 | // ------------------------------------------------------------------ 79 | 80 | vec3 transform_point(vec3 ws_p, mat4 t) 81 | { 82 | return vec3(t * vec4(ws_p, 1.0f)); 83 | } 84 | 85 | // ------------------------------------------------------------------ 86 | 87 | float sample_sdf(in vec3 os_p, in Instance instance) 88 | { 89 | vec3 remapped_p = os_p - (instance.os_center.xyz - instance.half_extents.xyz); 90 | vec3 box_size = instance.half_extents.xyz * 2.0f; 91 | 92 | vec3 uvw = (remapped_p / box_size); 93 | return textureLod(sdf[instance.sdf_idx.x], uvw, 0.0f).r; 94 | } 95 | 96 | // ------------------------------------------------------------------ 97 | 98 | bool inside_obb(in vec3 os_p, in Instance instance) 99 | { 100 | vec3 min_extents = instance.os_center.xyz - instance.half_extents.xyz; 101 | vec3 max_extents = instance.os_center.xyz + instance.half_extents.xyz; 102 | 103 | return all(greaterThanEqual(os_p, min_extents)) && all(lessThanEqual(os_p, max_extents)); 104 | } 105 | 106 | // ------------------------------------------------------------------ 107 | 108 | vec3 calculate_normal(in vec3 os_p, in Instance instance) 109 | { 110 | const float eps = 0.0001f; 111 | const vec2 h = vec2(eps, 0.0f); 112 | return normalize(vec3(sample_sdf(os_p + h.xyy, instance) - sample_sdf(os_p - h.xyy, instance), 113 | sample_sdf(os_p + h.yxy, instance) - sample_sdf(os_p - h.yxy, instance), 114 | sample_sdf(os_p + h.yyx, instance) - sample_sdf(os_p - h.yyx, instance))); 115 | } 116 | 117 | // ------------------------------------------------------------------ 118 | 119 | vec3 find_closest_point_on_obb(in vec3 ws_p, in Instance instance) 120 | { 121 | vec3 c = instance.ws_center.xyz; 122 | 123 | vec3 d = ws_p - c; 124 | vec3 q = c; 125 | 126 | for (int i = 0; i < 3; i++) 127 | { 128 | float dist = dot(d, instance.ws_axis[i].xyz); 129 | 130 | if (dist > instance.half_extents[i]) dist = instance.half_extents[i]; 131 | if (dist < -instance.half_extents[i]) dist = -instance.half_extents[i]; 132 | 133 | q += dist * instance.ws_axis[i].xyz; 134 | } 135 | 136 | return q; 137 | } 138 | 139 | // ------------------------------------------------------------------ 140 | 141 | vec3 find_closest_point_on_mesh(in vec3 ws_p, in Instance instance) 142 | { 143 | vec3 os_p = transform_point(ws_p, instance.inverse_transform); 144 | 145 | float t = sample_sdf(os_p, instance); 146 | 147 | return ws_p - calculate_normal(os_p, instance) * t; 148 | } 149 | 150 | // ------------------------------------------------------------------ 151 | 152 | float evaluate_mesh_sdf(in vec3 ws_p, in Instance instance) 153 | { 154 | vec3 os_p = transform_point(ws_p, instance.inverse_transform); 155 | 156 | if (inside_obb(os_p, instance)) 157 | return sample_sdf(os_p, instance); 158 | else 159 | { 160 | #if defined(USE_ACCURATE_DISTANCE) 161 | vec3 point_on_volume = find_closest_point_on_obb(ws_p, instance); 162 | vec3 point_on_mesh = find_closest_point_on_mesh(point_on_volume, instance); 163 | 164 | float h = length(point_on_mesh - ws_p); 165 | 166 | return h; 167 | #else 168 | vec3 point_on_volume = find_closest_point_on_obb(ws_p, instance); 169 | return length(point_on_volume - ws_p) + sample_sdf(transform_point(point_on_volume, instance.inverse_transform), instance); 170 | #endif 171 | } 172 | } 173 | 174 | // ------------------------------------------------------------------ 175 | 176 | float evaluate_scene_sdf(vec3 ws_p) 177 | { 178 | float dist_to_box = INFINITY; 179 | 180 | for (int i = 0; i < num_instances; i++) 181 | { 182 | float h = evaluate_mesh_sdf(ws_p, instances[i]); 183 | 184 | if (h < dist_to_box) 185 | dist_to_box = h; 186 | } 187 | 188 | return dist_to_box; 189 | } 190 | 191 | // ------------------------------------------------------------------ 192 | 193 | float shadow_ray_march(vec3 ro, vec3 rd, float k) 194 | { 195 | float res = 1.0; 196 | 197 | for (float t = u_SDFTMin; t < u_SDFTMax;) 198 | { 199 | vec3 p = ro + rd * t; 200 | 201 | float h = evaluate_scene_sdf(p); 202 | 203 | if (h < 0.001f) 204 | return 0.0f; 205 | 206 | if (u_SDFSoftShadows) 207 | res = min(res, k * h / t); 208 | 209 | t += h; 210 | } 211 | 212 | return res; 213 | } 214 | 215 | // ------------------------------------------------------------------ 216 | 217 | // https://www.alanzucconi.com/2016/07/01/ambient-occlusion/ 218 | float ambient_occlusion(vec3 pos, vec3 normal, int num_steps, float step_size) 219 | { 220 | float sum = 0; 221 | float max_sum = 0; 222 | for (int i = 0; i < num_steps; i++) 223 | { 224 | vec3 p = pos + normal * (i + 1) * step_size; 225 | sum += 1. / pow(2., i) * evaluate_scene_sdf(p); 226 | max_sum += 1. / pow(2., i) * (i + 1) * step_size; 227 | } 228 | return min(sum / max_sum, 1.0f); 229 | } 230 | 231 | // ------------------------------------------------------------------ 232 | // MAIN ------------------------------------------------------------- 233 | // ------------------------------------------------------------------ 234 | 235 | void main() 236 | { 237 | vec3 albedo = u_Color; 238 | vec3 N = normalize(FS_IN_Normal); 239 | vec3 L = normalize(u_LightPos - FS_IN_WorldPos); // FragPos -> LightPos vector 240 | 241 | float theta = dot(L, normalize(-u_LightDirection)); 242 | float distance = length(FS_IN_WorldPos - u_LightPos); 243 | float epsilon = u_LightInnerCutoff - u_LightOuterCutoff; 244 | float attenuation = smoothstep(u_LightRange, 0, distance) * clamp((theta - u_LightOuterCutoff) / epsilon, 0.0, 1.0); 245 | 246 | float shadow = shadow_ray_march(FS_IN_WorldPos, L, u_SDFSoftShadowsK) * attenuation; 247 | float ao = u_AO ? ambient_occlusion(FS_IN_WorldPos, FS_IN_Normal, u_AONumSteps, u_AOStepSize) : 1.0f; 248 | 249 | FS_OUT_Color = albedo * clamp(dot(N, L), 0.0, 1.0) * shadow + albedo * u_AOStrength * ao; 250 | } 251 | 252 | // ------------------------------------------------------------------ -------------------------------------------------------------------------------- /src/shader/mesh_vs.glsl: -------------------------------------------------------------------------------- 1 | // ------------------------------------------------------------------ 2 | // INPUT VARIABLES -------------------------------------------------- 3 | // ------------------------------------------------------------------ 4 | 5 | layout(location = 0) in vec3 VS_IN_Position; 6 | layout(location = 1) in vec2 VS_IN_UV; 7 | layout(location = 2) in vec3 VS_IN_Normal; 8 | layout(location = 3) in vec3 VS_IN_Tangent; 9 | layout(location = 4) in vec3 VS_IN_Bitangent; 10 | 11 | // ------------------------------------------------------------------ 12 | // OUTPUT VARIABLES ------------------------------------------------- 13 | // ------------------------------------------------------------------ 14 | 15 | out vec3 FS_IN_WorldPos; 16 | out vec3 FS_IN_Normal; 17 | out vec2 FS_IN_UV; 18 | out vec4 FS_IN_NDCFragPos; 19 | 20 | // ------------------------------------------------------------------ 21 | // UNIFORMS --------------------------------------------------------- 22 | // ------------------------------------------------------------------ 23 | 24 | layout(std140, binding = 0) uniform GlobalUniforms 25 | { 26 | mat4 view_proj; 27 | vec4 cam_pos; 28 | int num_instances; 29 | }; 30 | 31 | uniform mat4 u_Model; 32 | 33 | // ------------------------------------------------------------------ 34 | // MAIN ------------------------------------------------------------- 35 | // ------------------------------------------------------------------ 36 | 37 | void main() 38 | { 39 | vec4 world_pos = u_Model * vec4(VS_IN_Position, 1.0f); 40 | FS_IN_WorldPos = world_pos.xyz; 41 | FS_IN_Normal = normalize(normalize(mat3(u_Model) * VS_IN_Normal)); 42 | FS_IN_UV = VS_IN_UV; 43 | FS_IN_NDCFragPos = view_proj * world_pos; 44 | 45 | gl_Position = FS_IN_NDCFragPos; 46 | } 47 | 48 | // ------------------------------------------------------------------ 49 | --------------------------------------------------------------------------------