赞
踩
本节是 Filament 材质框架阅读的部分。之前的小节由于有官方文档,因此,笔记不会存在明显的错误。但在本节之后,都是自己对Filament的理解,可能在理解和总结上有严重的错误。因此,需要经常回来调整内容。
从 GitHub 克隆下来的工程包含很多官方的示例。看起来比较臃肿。个人认为学习某个开源项目第一步是把该项目的核心内容分离出来。
1. build
2. filament
3. libs
4. shaders
5. third_party
6. tools
7. CMakeLists.txt
1. windows
2. licenses.inc.in
1. backend
2. include
3. src
4. CMakeLists.txt
1. bluegl/bluevk
2. filamat
3. filameshio
4. filabridge
5. filaflat
6. geometry
7. ibl
8. imageio
9. image
10. math
11. utils
1. astcenc
2. etc2comp
3. getopt
4. glslang
5. libpng
6. libz
7. libassimp
8. meshoptimizer
9. robin-map
10. spirv-cross
11. spirv-tools
12. smol-v
13. stb
14. tinyexr
15. vkmemalloc
1. cmgen
2. filamesh
3. glslminifier
4. matc
5. mipgen
6. resgen
删除(可搜索关键字 “IS_HOST_PLATFORM” )
add_subdirectory(${FILAMENT}/java/filamat)
add_subdirectory(${FILAMENT}/java/filament)
add_subdirectory(${FILAMENT}/java/gltfio)
IS_HOST_PLATFORM 保留以下内容,其余都删除
1. add_subdirectory(${LIBRARIES}/bluegl)
2. add_subdirectory(${LIBRARIES}/imageio)
3. add_subdirectory(${EXTERNAL}/astcenc/tnt)
4. add_subdirectory(${EXTERNAL}/etc2comp)
5. add_subdirectory(${EXTERNAL}/libassimp/tnt)
6. add_subdirectory(${EXTERNAL}/libpng/tnt)
7. add_subdirectory(${EXTERNAL}/libz/tnt)
8. add_subdirectory(${EXTERNAL}/tinyexr/tnt)
9. add_subdirectory(${TOOLS}/cmgen)
10. add_subdirectory(${TOOLS}/filamesh)
11. add_subdirectory(${TOOLS}/glslminifier)
12. add_subdirectory(${TOOLS}/matc)
13. add_subdirectory(${TOOLS}/mipgen)
14. add_subdirectory(${TOOLS}/resgen)
Common to all platforms 以下内容,其余都删除
1. add_subdirectory(${LIBRARIES}/filabridge)
2. add_subdirectory(${LIBRARIES}/filaflat)
3. add_subdirectory(${LIBRARIES}/filameshio)
4. add_subdirectory(${LIBRARIES}/geometry)
5. add_subdirectory(${LIBRARIES}/ibl)
6. add_subdirectory(${LIBRARIES}/image)
7. add_subdirectory(${LIBRARIES}/math)
8. add_subdirectory(${LIBRARIES}/utils)
9. add_subdirectory(${FILAMENT}/filament)
10. add_subdirectory(${FILAMENT}/shaders)
11. add_subdirectory(${EXTERNAL}/robin-map/tnt)
12. add_subdirectory(${EXTERNAL}/smol-v/tnt)
13. add_subdirectory(${EXTERNAL}/meshoptimizer)
14. add_subdirectory(${EXTERNAL}/stb/tnt)
15. add_subdirectory(${EXTERNAL}/getopt)
FILAMENT_BUILD_FILAMAT 删除 the material debugger
经过上述处理之后,保留下来的代码中还是有很多测试用到的代码,需要删除。内容有
1. CmakeList中标识test的代码
2. filament CmakeList 中 add_subdirectory(test) 和 add_subdirectory(benchmark) 保留backend
3. libs/math 中 benchmarks 包括CmakeList中信息
4. libs/utils中 benchmarks 包括CmakeList中信息
5. third_party 暂时不清理
经过上述处理,再重新编译工程即可。如果编译过程中遇到错误,根据提示修改即可。(反正我自己已经验证过N次了,应该没问题#109)
可能是跟自己的性格相关。拿到一个不熟悉的项目代码,第一件事就是拆!
首先要了解材质编译的方式(先学会用再拆分)
$ matc -o ./materials/bin/car_paint.filamat ./materials/src/car_paint.mat
//MATERIAL_SRCS为mat的相对路径 (src/materials/fsr/fsr_easu.mat) //MATERIAL_DIR为输出的路径 //MATC_BASE_FLAGS为ROOT/CMakeLists.txt中的内容, 搜索Material compilation flags //命令实例(windows opengl) -a opengl -p desktop -gd foreach (mat_src ${MATERIAL_SRCS}) //获取文件名 get_filename_component(localname "${mat_src}" NAME_WE) //获取文件的绝对路径 get_filename_component(fullname "${mat_src}" ABSOLUTE) set(output_path "${MATERIAL_DIR}/${localname}.filamat") //执行mat->filamat打包 add_custom_command( OUTPUT ${output_path} COMMAND matc ${MATC_BASE_FLAGS} -o ${output_path} ${fullname} MAIN_DEPENDENCY ${fullname} DEPENDS matc COMMENT "Compiling material ${mat_src} to ${output_path}" ) list(APPEND MATERIAL_BINS ${output_path}) endforeach() mmhard
matc.exe -a opengl -p desktop -gd -o test.filamat F:\vsmMipmap.mat
resgen.exe -qcx -p test F:\test.filamat
filamat
utils
filabridge
shaders
filament
math
sca
licenses
lib
filamat.lib getopt.lib utils.lib filabridge.lib smol-v.lib SPIRV.lib glslang.lib shaders.lib OSDependent.lib Shlwapi.lib spirv-cross-core.lib spirv-cross-glsl.lib spirv-cross-msl.lib SPIRV-Tools-opt.lib SPVRemapper.lib OGLCompiler.lib SPIRV-Tools.lib
附加包含目录
VS C++语言标准:预览 - 最新 C++ 工作草案中的功能 (/std:c++latest)
SDL检查:否
宏:WIN32
运行库:多线程 (/MT)
getopt.lib
utils.lib
shlwapi.lib
Material System 这部分先总结到这里。应该说已经把 Filament 如何使用材质和管理 shader 代码片元部分都做了总结。如何使用由材质包生成的shader代码在之后总结Filament框架时再研究。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。