* Fix the Android filamesh file loader
The loader was not updated to support the SNORM16 format now sometimes
used to encode UV sets in filamesh files.
Fixes#708
* Update android/samples/image-based-lighting/app/src/main/java/com/google/android/filament/ibl/MeshLoader.kt
* Add specular anti-aliasing properties to materials
curvatureToRoughness
limitOverInterpolation
These techiques were supposed to be enabled by default on
desktop but it turns out they were broken. They must now
be enabled manually on each material instead (and work on
mobile).
* Update docs/Materials.md.html
filamesh requires UV's but some glTF test models, like CesiumMilkTruck,
do not provide UV's on nonlit parts (e.g. the truck windows). This makes
it so that these assets can be converted to filamesh somewhat more
gracefully.
* Turn on shaders optimization by default
Release builds of Filament only work well with optimize shaders,
turning optimizations on by default will help avoid mismatches.
This change also adds -g to disable all optimizations, for debug
builds.
* Use -g on debug builds
* Use -g on debug builds
* Update tutorial_redball.md to remove matc's -O
* Update tutorial_suzanne.md to remove matc's -O
* Use -g in debug builds
* Enable optimization passes on materials with external samplers
Because external samplers are not properly supported by SPIRV and
associated library (spirv-cross and spirv-tools) we currently disable
all optimizations when we encounter a material with external samplers.
This however causes issues on some misbehaved drivers (not running
the optimizations has a side effect which causes a crash). To enable
the optimization pass we simply rely on the Vulkan codegen target to
substitute samplerExternal with sampler2D. We then analyze the output
GLSL (post-optimization) and revert the relevants sampler2D declarations
to samplerExternal declarations.
This fixup only occurs after optimization and for mobile targets and
if external samplers were declared.
* Address review comments
* grouped MeshAssimp arguments into struct
* added snormuv optimization to MeshAssimp and changed snormuv optimization range from [0, 1] to [-1, 1] in filamesh
Note that the WebGL build uses filameshio, but Android does not. Our
Android samples therefore do not yet understand the compressed format.
For web, I measured the before / after:
```
BEFORE: filament.wasm = 505796, suzanne.filamesh = 521476
AFTER: filament.wasm = 510915, suzanne.filamesh = 333489
```
Issue #558
This also adds it as a dependency to filameshio. This does not seem to
increase the size of the WebGL build even though filameshio is a
dependency, perhaps because we are not using it yet.
(1)
Generating the C file (only used for WebAssembly) causes slowness in the
build so this makes it into an option. Also, we were flushing too often,
which made it even slower.
(2)
Using "static" in a header was causing symbol duplication.
This adds a couple optional features:
1) Preserve file extensions when generating symbols.
This is useful to distinguish foo.vs from foo.fs
2) Append null characters to data blobs.
Useful when treating FOO_DATA as a C string.
This tool can be used to replace inc files for built-in materials. The
inc files are unfriendly to IDE's and do not extend to non-material
resource types such as baked texture data.
The tool aggregates a sequence of binary blobs, each of which becomes a
"resource" whose id is the basename of the input file. It produces the
following set of files:
resources.h ......... declares sizes and offsets for each resource
resources.S ......... small assembly file with incbin directive
resources.apple.S ... ditto but with different rodata name
resources.bin ....... the aggregated binary blob
resources.c ......... large xxd-style array (only for WASM)
We did an experiment to test the incbin directive on a variety of
platforms in PR #510.
This removes a lot of heap allocations/deallocations, and reduces
code size. Most improvements come from using CString and
StaticString instead of std::string and better using move
semantics.
Since we use this for decoding, this adds a dependency to the core
filament renderer which in practice is only used for Vulkan. However
this is a tiny library, so it's simplest just to always include it.
The next PR will add the actual compression / decompression code to
filaflat and filamat. Here are the preliminary results.
102K => 29K aiDefaultMat.filamat
102K => 29K aiDefaultTrans.filamat
21K => 5.0K bakedColor.filamat
22K => 5.2K bakedTexture.filamat
21K => 5.0K depthVisualizer.filamat
40K => 10K groundShadow.filamat
102K => 29K sandboxCloth.filamat
125K => 36K sandboxLit.filamat
126K => 36K sandboxLitFade.filamat
126K => 36K sandboxLitTransparent.filamat
109K => 31K sandboxSubsurface.filamat
21K => 4.9K sandboxUnlit.filamat
21K => 4.9K transparentColor.filamat
Both the "before" and "after" numbers are excluding non-Vulkan targets,
and I also changed our CMakeLists to build filamat instead of inc.
* Minor clean-ups
- fix a couple usage of std::function
- fix a couple usage of std::string
- remove ALIGN_LOOP, which didn't work
- fix a couple explicit/noexcept
- virtual -> override
* Fix spelling typos and other minor clang-tidy
- move UBO declarations in UibGenerator, i.e. next
to their Uniform Interface Block definition.
This should help forgetting to update one but
not the other.
- move UniformInterfaceBlock.h and SamplerInferfaceBlock.h under
private/filament/.
- do the same things for samplers
This change will allow the skybox use a compressed texture format.
For now, the old internal format "RGBM" is still honored, but in a
forthcoming change we will replace the enum with UNUSED.