Mikko Rasa [Tue, 11 Jun 2019 16:49:01 +0000 (19:49 +0300)]
Adjust exported animation keyframes to start from zero time
Mikko Rasa [Tue, 11 Jun 2019 08:31:44 +0000 (11:31 +0300)]
Add exporter for animations
Mikko Rasa [Tue, 11 Jun 2019 08:15:09 +0000 (11:15 +0300)]
Animate only those components which are present in Transforms
This allows different components to have different keyframes, matching
the functionality of various animation software packages.
Mikko Rasa [Tue, 11 Jun 2019 08:03:24 +0000 (11:03 +0300)]
Keep track of which components have been set in Transform
Also allow individual vector elements to be specified in datafiles.
Mikko Rasa [Sat, 8 Jun 2019 18:08:00 +0000 (21:08 +0300)]
Fix a copypaste error in AnimationPlayer uniform setting code
Mikko Rasa [Sat, 8 Jun 2019 11:26:52 +0000 (14:26 +0300)]
Fix the keyword of the uniform scaling statement in Transform loader
Mikko Rasa [Sat, 8 Jun 2019 07:16:27 +0000 (10:16 +0300)]
Add getter for Animation::looping
Mikko Rasa [Sat, 8 Jun 2019 06:50:02 +0000 (09:50 +0300)]
Merge branch 'animation-rework'
Mikko Rasa [Sat, 8 Jun 2019 06:47:24 +0000 (09:47 +0300)]
Add compatibility support for slope-based animation interpolation
Mikko Rasa [Sat, 8 Jun 2019 06:47:00 +0000 (09:47 +0300)]
Add a setter for KeyFrame uniforms
Mikko Rasa [Sat, 8 Jun 2019 06:17:51 +0000 (09:17 +0300)]
Refactor KeyFrame ownership management in Animation
The public add_keyframe functions no longer provide a convenient single
place to set the RefPtr keep flag, so move it into the private function.
Mikko Rasa [Fri, 7 Jun 2019 23:17:43 +0000 (02:17 +0300)]
Use bezier splines in Animation
Control keyframes can now be added to affect the shape of curves. Zero,
one or two control keyframes can be present between any two regular
keyframes, resulting in a linear, quadratic or cubic segment.
Mikko Rasa [Fri, 7 Jun 2019 22:30:11 +0000 (01:30 +0300)]
Make animation curve creation more generic
Mikko Rasa [Fri, 7 Jun 2019 19:18:05 +0000 (22:18 +0300)]
Do not clear previous assignments on assignment to array subscript
It makes manual array impossible if the previous elements are thrown
away.
Mikko Rasa [Fri, 7 Jun 2019 17:27:57 +0000 (20:27 +0300)]
Visit the rest of an iteration statement in NodeRemover
Mikko Rasa [Thu, 6 Jun 2019 12:57:11 +0000 (15:57 +0300)]
Avoid some brain damage from Windows headers
Mikko Rasa [Wed, 5 Jun 2019 22:02:41 +0000 (01:02 +0300)]
Reimplement Animation using splines
Transform interpolation is now performed on individual components rather
than entire matrices. This produces more accurate rotations and later
will allow animations to only affect some components of the transform.
Currently linear splines are used and the slope parameters are ignored.
Pose matrices are also disabled for now because I don't have any suitable
data for testing them. The old implementation was broken in various ways
anyway.
Mikko Rasa [Tue, 4 Jun 2019 22:42:49 +0000 (01:42 +0300)]
Check for armature mismatches in Animation
Also set the armature if a keyframe with a pose is added and there is no
armature yet.
Mikko Rasa [Tue, 4 Jun 2019 14:13:59 +0000 (17:13 +0300)]
Store a Transform in keyframes instead of a Matrix
This is the first step towards curve-based animations and finer control
over which values are animated.
Mikko Rasa [Tue, 4 Jun 2019 11:11:45 +0000 (14:11 +0300)]
Add more public methods to Transform
Mikko Rasa [Tue, 4 Jun 2019 10:39:27 +0000 (13:39 +0300)]
Export world transforms for scene objects
The location, rotation and scale properties contain transform components
relative to the somewhat arbitrary basis matrix. Obtain the values from
the world matrix instead. A drawback is that nonuniform or negative
scaling can produce inconsistent results.
Mikko Rasa [Tue, 4 Jun 2019 10:00:07 +0000 (13:00 +0300)]
Use transform blocks to specify object transforms in exported scenes
Mikko Rasa [Tue, 4 Jun 2019 09:26:54 +0000 (12:26 +0300)]
Move transform loading to ObjectInstance
Mikko Rasa [Tue, 4 Jun 2019 07:39:17 +0000 (10:39 +0300)]
Add a class to unify loading coordinate transforms
It will also be useful for animations. Euler angles are not the ideal
way of storing rotations but they are relatively easy to understand and
work with. Other rotation types will be added in the future.
Mikko Rasa [Tue, 4 Jun 2019 07:23:39 +0000 (10:23 +0300)]
Do not use the srgb flag for textures that explicitly define storage
Presumably the texture author knows which colorspace the texture uses.
In particular this made it impossible to load non-color textures such
as normal maps which require a linear colorspace if the srgb flag was
set in the containing resource collection.
Mikko Rasa [Mon, 3 Jun 2019 16:43:41 +0000 (19:43 +0300)]
Update deprecated things
Mikko Rasa [Sat, 1 Jun 2019 12:55:28 +0000 (15:55 +0300)]
Better naming algorithm for objects in scene export
Arbitrary prefixes can cut words or numbers in silly places. Only allow
truncating at common separator characters.
Mikko Rasa [Fri, 31 May 2019 19:30:20 +0000 (22:30 +0300)]
Add getters for RenderTarget width and height
Mikko Rasa [Thu, 30 May 2019 10:54:42 +0000 (13:54 +0300)]
Fix a texture data indexing bug in AmbientOcclusion
Mikko Rasa [Wed, 29 May 2019 17:19:41 +0000 (20:19 +0300)]
Recognize displacement map textures when exporting
Mikko Rasa [Wed, 29 May 2019 17:17:56 +0000 (20:17 +0300)]
Always export texture data inline if there's no image file
This allows exporting packed or baked textures.
Mikko Rasa [Tue, 28 May 2019 08:59:45 +0000 (11:59 +0300)]
Inline functions in variable initialization expressions
If the entire expression was a function call, it didn't get inlined
because VariableDeclaration wasn't being handled separately.
Mikko Rasa [Sun, 26 May 2019 18:18:01 +0000 (21:18 +0300)]
Add an exporter for Blender cameras
Mikko Rasa [Sun, 26 May 2019 18:17:42 +0000 (21:17 +0300)]
Mark datafile tokens as such
Mikko Rasa [Sat, 25 May 2019 21:58:17 +0000 (00:58 +0300)]
Support while loops in GLSL
Loops with only a condition expression present are now emitted as while
loops, even if they were originally for loops.
Mikko Rasa [Sat, 25 May 2019 21:55:10 +0000 (00:55 +0300)]
Improve formatting of an empty loop body
Mikko Rasa [Sat, 25 May 2019 21:53:05 +0000 (00:53 +0300)]
Allow removing the initialization statement of a for loop
Previously the compiler would recognize it as unused but couldn't remove
it, leading it to repeat the optimizer endlessly.
Mikko Rasa [Sat, 25 May 2019 21:52:33 +0000 (00:52 +0300)]
Make all components of a for loop optional
Mikko Rasa [Sat, 25 May 2019 21:25:34 +0000 (00:25 +0300)]
Remove an XXX because I no longer remember how to reproduce the issue
Next time I should include a test case.
Mikko Rasa [Sat, 25 May 2019 21:00:54 +0000 (00:00 +0300)]
Fix various issues with constant condition elimination
It used to optimize based on the initial values of variables, ignoring
the fact that they may change between loop iterations. A stop-gap fix
was implemented in
8e14c29, but it prevented optimizations of some
conditionals that could safely have been removed. It also caused the
optimizer to ignore any assignments made to any variables after
declaration when evaluating the loop condition, potentially causing
entire loops to be erroneously removed. Finally, unary expressions were
not being handled so ++ and -- operators did not mark the variable as
modified.
Mikko Rasa [Fri, 24 May 2019 22:32:17 +0000 (01:32 +0300)]
Process MemberAccess nodes in FunctionInliner
Mikko Rasa [Fri, 24 May 2019 22:07:03 +0000 (01:07 +0300)]
Correctly parse consecutive *s in a comment
Parsing state must not be reset at ** because there may be a / after.
Mikko Rasa [Fri, 24 May 2019 22:04:44 +0000 (01:04 +0300)]
Don't try to access a nonexistent return expression
Mikko Rasa [Fri, 24 May 2019 19:26:34 +0000 (22:26 +0300)]
Remove useless using declarations
Scene no longer has any other overloads of render().
Mikko Rasa [Fri, 24 May 2019 19:26:10 +0000 (22:26 +0300)]
Don't attempt to create a copy of null ProgramData
Mikko Rasa [Fri, 24 May 2019 19:25:57 +0000 (22:25 +0300)]
Copy the material slot of RenderPass
Mikko Rasa [Fri, 24 May 2019 19:24:43 +0000 (22:24 +0300)]
Remember the camera given to Renderer constructor
And reapply it in end(). It may be necessary to call end() during
setup_frame in order to render nested content, but the camera must
remain.
Mikko Rasa [Fri, 24 May 2019 17:49:41 +0000 (20:49 +0300)]
Add OffscreenView class
This is a fairly thin wrapper around RenderTarget, mostly useful as an
abstraction.
Mikko Rasa [Fri, 24 May 2019 17:49:07 +0000 (20:49 +0300)]
Some cleanup for View and WindowView
Mikko Rasa [Fri, 24 May 2019 16:39:03 +0000 (19:39 +0300)]
Add numberless versions of vertex array statements
This should have accompanied
6ee541f, which changed the exporter to use
those keywords.
Mikko Rasa [Fri, 24 May 2019 15:43:19 +0000 (18:43 +0300)]
Allow tagging objects in a scene file for retrieval after loading
Mikko Rasa [Fri, 24 May 2019 15:27:50 +0000 (18:27 +0300)]
Try to simplify object names when exporting a scene
The exporter now tries to find the longest common prefix for objects
sharing the same prototype and exports the prototype using that name.
This avoids having randomly numbered object names.
Mikko Rasa [Thu, 23 May 2019 21:20:26 +0000 (00:20 +0300)]
Fixes and improvements to exporting materials
Mikko Rasa [Thu, 23 May 2019 21:06:05 +0000 (00:06 +0300)]
Add a missing file
It was supposed to be in
bde3ec8.
Mikko Rasa [Sun, 19 May 2019 23:20:06 +0000 (02:20 +0300)]
Set texture format according to sRGB colorspace setting
Mikko Rasa [Sun, 19 May 2019 23:03:41 +0000 (02:03 +0300)]
Implement material maps for exporting objects with multiple materials
This replaces the material texture feature which was removed earlier. The
principle is similar (store material color values in a texture) but the
maps are global, making it possible for multiple objects to use the same
map.
Mikko Rasa [Sat, 18 May 2019 14:55:16 +0000 (17:55 +0300)]
Improve texture unit assignment when exporting meshes
Mikko Rasa [Sat, 18 May 2019 07:54:44 +0000 (10:54 +0300)]
Some bugfixes to texture exporting
Mikko Rasa [Sat, 18 May 2019 07:45:23 +0000 (10:45 +0300)]
Simplify the resource separation options
Having different options for each resource type was getting unmanageable.
I don't see much value in such fine-grained control either.
Mikko Rasa [Thu, 16 May 2019 21:46:21 +0000 (00:46 +0300)]
Use filtering options from Blender texture
A new property has been added on textures to reference the original image
only and use default options at load time.
Mikko Rasa [Thu, 16 May 2019 19:56:37 +0000 (22:56 +0300)]
Refactor texture handling in the material exporter
Mikko Rasa [Thu, 16 May 2019 15:58:55 +0000 (18:58 +0300)]
Move material and texture export to their own classes
Also move technique properties from Object to Material.
Mikko Rasa [Thu, 16 May 2019 11:38:27 +0000 (14:38 +0300)]
Make resource handling in the Blender exporter more flexible
All resources are now collected into a dict and referenced or inlined as
necessary. This makes it possible for SceneExporter to see the resources
used by objects and export them to the resource collection as separate
items.
Mikko Rasa [Wed, 15 May 2019 21:42:03 +0000 (00:42 +0300)]
Redesign file writing in the Blender exporter
Instead of writing statements directly to the file as string fragments,
construct an in-memory representation of the exported data first. This
allows it to be manipulated and combined easier.
Mikko Rasa [Wed, 15 May 2019 21:38:02 +0000 (00:38 +0300)]
Combine shared_mesh and shared_tech into a single option
Mikko Rasa [Wed, 15 May 2019 21:33:00 +0000 (00:33 +0300)]
Temporarily remove the material texture feature from Blender exporter
It gets in the way of other improvements and will be replaced by a
similar yet different feature later.
Mikko Rasa [Sun, 12 May 2019 06:59:53 +0000 (09:59 +0300)]
Only use texunit zero in exporter-generated techniques
It does not make much sense to use anything else without shaders, and
accessing the mesh to find out unit numbers is getting in the way of
some other changes.
Mikko Rasa [Sun, 12 May 2019 05:36:17 +0000 (08:36 +0300)]
Some cleanups to exporter code
Mikko Rasa [Mon, 6 May 2019 06:08:19 +0000 (09:08 +0300)]
Fix some errors in the triangulation algorithm
Normals were reversed and edge links were not being updated properly.
Mikko Rasa [Sun, 5 May 2019 13:54:37 +0000 (16:54 +0300)]
Rewrite triangle strip generation in the Blender exporter
The old algorithm had many of the right ideas but was too clever by half
and consequently very complex. Use a simpler score-based algorithm
developed by Tom Forsyth. Also reorder vertices to make memory accesses
to them occur in a more linear fashion.
Options related to cache optimization were removed since there's
no good reason not to optimize.
Mikko Rasa [Sat, 4 May 2019 23:16:22 +0000 (02:16 +0300)]
Explicitly triangulate faces in the Blender exporter
Previously they were implicitly triangulated during strip generation,
with the idea that it would be more flexible. However I have some
doubts of its benefits and existing strip generation algorithms tend
to deal exclusively in triangles.
Mikko Rasa [Sat, 4 May 2019 20:34:15 +0000 (23:34 +0300)]
Add a bunch of comments to the Mesh class in the Blender exporter
Mikko Rasa [Sat, 4 May 2019 20:29:11 +0000 (23:29 +0300)]
Rename some variable to be a bit clearer
Mikko Rasa [Sat, 4 May 2019 20:16:58 +0000 (23:16 +0300)]
Simplify the vertex splitting algorithm
It now uses single-pass loops instead of temporary lists where feasible.
Mikko Rasa [Sat, 4 May 2019 20:11:47 +0000 (23:11 +0300)]
Make the edge map transient
It's only actually used to associate edges with faces so it's simpler if
it doesn't need to be maintained in other functions.
Mikko Rasa [Sat, 4 May 2019 18:50:06 +0000 (21:50 +0300)]
More post-refactoring bugfixes
Mikko Rasa [Sat, 4 May 2019 13:42:34 +0000 (16:42 +0300)]
Improve progress reporting in the Blender exporter
Pushing and popping tasks now makes more sense. The Progress object
always exists but it's possible to suppress reporting (see
9b57666) by
giving it a falsy context. Progress reporting has been added to a few
places that previously lacked it.
Mikko Rasa [Sat, 4 May 2019 13:40:59 +0000 (16:40 +0300)]
Remove extraneous semicolons from Python code
Sometimes I instinctively put one in because I'm used to writing C++.
Mikko Rasa [Sat, 4 May 2019 13:39:26 +0000 (16:39 +0300)]
Fix some errors introduced in the refactoring
Mikko Rasa [Fri, 3 May 2019 17:13:45 +0000 (20:13 +0300)]
Major rework of mesh handling in Blender exporter
All of the preprocessing has been moved out of the MeshExporter class and
into a utility function. This should make it easier for other exporter
classes to use meshes.
Mikko Rasa [Wed, 1 May 2019 09:29:11 +0000 (12:29 +0300)]
Remove the external tech exporter property
Always use an external technique if one is specified through the object
property.
Mikko Rasa [Wed, 1 May 2019 09:07:52 +0000 (12:07 +0300)]
Remove the compound property from exporter
It hasn't been very useful since objects got the compound with parent
property. Removing it simplifies passing around the object to be
exported.
Mikko Rasa [Tue, 30 Apr 2019 22:00:22 +0000 (01:00 +0300)]
Move most properties from exporters to the relevant types
These properties pertain to the things being exported and should retain
their values between exports. It's getting especially difficult to
specify object-specific properties when exporting an entire scene.
Mikko Rasa [Sat, 7 Jul 2018 07:26:03 +0000 (10:26 +0300)]
Allow multiple character ranges in the makefont script
Mikko Rasa [Sat, 7 Jul 2018 07:25:08 +0000 (10:25 +0300)]
Be less eager to optimize constant conditions in loops
It still requires more work to actually detect the scope in which
variables are set, but this at least solves the immediate problem I had.
Mikko Rasa [Thu, 5 Jul 2018 21:03:35 +0000 (00:03 +0300)]
Support the sample sampling qualifier
Also add a version check for the centroid qualifier.
Mikko Rasa [Thu, 5 Jul 2018 18:29:29 +0000 (21:29 +0300)]
Add a utility class for switching renderables
Mikko Rasa [Wed, 4 Jul 2018 20:49:06 +0000 (23:49 +0300)]
Allow RED and RG pixel formats in RenderTargetFormat
Mikko Rasa [Tue, 3 Jul 2018 23:26:02 +0000 (02:26 +0300)]
Add support for GLSL interpolation qualifiers
Mikko Rasa [Tue, 3 Jul 2018 23:22:56 +0000 (02:22 +0300)]
Rearrange GLSL qualifier parsing
GLSL 4.20 allows qualifiers to be in any order so there's no sense to
enforce a particular order here. Always output them in a compatible
order though.
Mikko Rasa [Mon, 2 Jul 2018 21:00:28 +0000 (00:00 +0300)]
Have Object provide an identity matrix from get_matrix
It's often useful to have static geometry in a scene directly as an Object
without creating an instance. Many features such as Z-sorting and culling
require a matrix to be available.
Mikko Rasa [Mon, 2 Jul 2018 15:00:30 +0000 (18:00 +0300)]
Disable mipmaps from various render target textures
Mikko Rasa [Mon, 2 Jul 2018 12:49:48 +0000 (15:49 +0300)]
Allow the maximum mipmap level of a texture to be specified
This doubles as a way to specify the number of mipmap levels to allocate
when the tetxure image is loaded from a Graphics::Image.
Mikko Rasa [Mon, 2 Jul 2018 12:46:13 +0000 (15:46 +0300)]
Explicitly define the number of mipmap levels in textures
Storage() no longer uses the minification filter to decide whether to
allocate mipmaps or not. That functionality has been moved to image(),
specifically the version taking a Graphics::Image.
Mikko Rasa [Mon, 2 Jul 2018 12:39:45 +0000 (15:39 +0300)]
Throw an exception if Texture*::allocate is called before storage
Mikko Rasa [Mon, 2 Jul 2018 11:44:23 +0000 (14:44 +0300)]
Don't link keyframes with zero interval
Fixes an issue where a lone instant keyframe at the end of the animation
would produce bad values as the iterator tries to divide by zero.
Mikko Rasa [Mon, 2 Jul 2018 11:43:49 +0000 (14:43 +0300)]
Don't allow iterators on empty animations
Mikko Rasa [Mon, 2 Jul 2018 11:43:02 +0000 (14:43 +0300)]
Require the first keyframe of an animation to be at zero offset
Having empty space at the start of an animation produces unexpected
results.
Mikko Rasa [Sun, 1 Jul 2018 22:10:58 +0000 (01:10 +0300)]
Add getter for animation duration
Mikko Rasa [Sun, 1 Jul 2018 22:10:41 +0000 (01:10 +0300)]
Add a speed parameter for animation playback