Jump to content

huin

Members
  • Posts

    66
  • Joined

  • Last visited

Everything posted by huin

  1. Yep, I think that's what I thought you meant. I don't know how easy that is to do with Unity's GUI library components - they're a little bit... Interesting, shall we say? Whilst the design as it stands doesn't rule out camera panning, the initial idea for "pathing" the camera's direction is to have it look at a particular position. The original KerbCam worked by interpolating the camera orientation (via "slerping" - spherical linear interpolation), which had some jarring effects when transitioning from one "segment" (i.e the time between keys) of the sequence to another, and it also didn't track objects terribly well (which I suspect was the primary use case for directing the camera). There was a better mathematical model to interpolate smoothly, but I burnt a lot of time prior to the first KerbCam 1 release trying to work out how to do it, but eventually failed and just released something which felt "good enough", but which I was never happy with. Of the KSP cinematics I've watched that seem to use KerbCam, I think that they often avoided the effect by using only a single path segment. I'm hoping (at least in the early versions) to improve on things by tracking two independent positions in the world: * The camera's position (smooth interpolation of that was pretty much an easily solved problem in KerbCam 1). * The position that the camera is looking at. Both positions would be pathed with the same mechanics. It's quite possible to add new types of operation later on that would orient the camera by angles instead of looking at a position. There are some papers on "smooth quarternion interpolation" when one does a websearch on that topic, which I (if I'm feeling supremely confident) or someone else with more 3D math credentials, could implement.
  2. Zooming and dynamically changing zoom is already on the design doc. Interesting, I hadn't thought of that sort of control system. It's not likely something I'd do in a first version, but maybe something to incrementally add later. The fiddly thing with a touchpad (?) style control is that it's inherently two dimensional, and another axis needs to be available. The particularly interesting point that I think you're suggesting is making it an analogue control rather than digital. Does that interpretation make sense?
  3. Not to worry, tracks wouldn't be connected with saving and restoring paths. Tracks were intended to be a user interface element to group operations together onto the same row in the user interface. The thing that would be saved and restored would be the "story" concept. I haven't put saving and restoring on the design doc, but there aren't major blockers to having it.
  4. So one revision to the design right now is the tracks concept. I think that I'll be removing that concept and make the UI display exactly one operation per row below the timeline. This simplifies a number of things from a development perspective, and I have come to the opinion that it would only force users into a fiddly situation of annoying restrictions as they change things having to manually bin pack operations into tracks - which would suck.
  5. Agreed. It was already in the design as a maybe, although wasn't obviously worded as such without knowing KSP internals. The "camera visible layers" is the thing that would do that. I've clarified that a little.
  6. Ah yes, I've heard that that feature doesn't work. I'll add the "control time speed" feature to the list of example operations.
  7. Timeline I don't think it's going to be feasible for Kerbcam to be able to rewind/replay the universe state. In the limited KSP filming I did I tended to use quicksave/quickload quite a bit to achieve that rewind, so I imagine that's how a video maker would do it. Am I correct in understanding that the following might be a typical workflow? Create a story with time keys, one of the time keys initiates an action 5 seconds after playback starts, and you want that action covered from multiple camera angles. Quicksave shortly before UT 5:10:2:32 (5 days, 10 hours, 2 minutes, 32 seconds into a new game) Set the story timeline to "auto-play" at UT 5:10:2:32. Record the sequence. Copy the story with a different camera setup. Record the sequence. Record as many other camera angles as you want. Use the multiple camera angles of the event in video editing. By quick-saving shortly before the timeline and actions take place, there is hopefully a reduced window during which minor differences happen between playbacks that turn into something noticeable (i.e reducing the "Butterfly Effect"). The auto-play timer takes care of the rest. That said, there might be another feature you're asking for (having looked at your video), which might record control actions given to a vessel and play them back (and have a few of these to multiple vessels). No idea how feasible that is - although the timeline/operation model certainly sounds like it would fit into the overall architecture design. I wonder if there are other mods that might be hookable for this, or if other mod authors have ideas how that might work. Operations An operator is a fairly general concept, and I don't see any reason why it couldn't do things like set flaps, throttles, etc. - it's likely just a matter of taking the time to implement it (assuming the APIs are there, and I imagine at least some of them are). Again - it looks like that fits the architecture. Actuator The "actuators" concept isn't something I'd worry about overly from a user perspective, come to think of it. That's something of an internal design decision that should avoid some problems that plagued the original Kerbcam.
  8. I've created a Kerbcam2 WIP/RFC thread for any input into what might go into a "version 2". (aka a complete rewrite)
  9. First up - no promises. I've made attempts to work on Kerbcam in the past, and have found myself not delivering - at least in part because of a lack of energy/enthusiasm/time and a codebase that got nasty and hard to change. So the intent is for a rewrite, leveraging the lessons learnt from the original Kerbcam, and maybe selected code, but leaving the bulk of it behind. What I'm doing right now is experimenting with ideas for a rewrite. Even if I never execute on this, then maybe it'll be of use to someone else that might want to do this. This post is intended to be an RFC (request for comment), as it seems like a bad idea to continue too far into this without feedback, particularly from potential users. The design so far is living on Github. I'll paste in the raw markdown here, but emphasize that the design in this post is likely to remain as an initial revision and might not get updated even if I update the version on Github. If aspects of the design aren't clear to potential users, then that's a bug, and things should be clarified. I intend for the core features to be relatively simple and achievable, but leaving the overall structure (see the story/timeline/etc. concepts in the design) to be a good starting point for building on for more advanced features. The design: (warning - might be out of date, see the original source) ## Concepts for Kerbcam2 ### Story Top-level container object for a timeline, its tracks, and operations. ### Timeline Contains a set of points in time relative to a "time zero" start point. These points in time *may* be named. ### Time key (Could there be a better name?) A point in time (within a timeline) that may be referenced by operations. It may or may not be named for convenience. ### Track Not a functionally required concept, but potentially useful for the user to organise operations into groups within a timeline purely to serve a user-interface need to present and organise a sequence of operations clearly. A constraint being that operations that overlap in time cannot exist within the same track. An operation exists in exactly one track (maybe zero tracks in a transitional state if there are copy/paste mechanics). A track may or may not be named for convenience. ### Operation Something that manipulates the camera (or potentially part of the scene) as time progresses. This uses points in time referenced from the timeline. An operation may be instantaneous, or cover a range of times. Examples of operations: * Interpolate camera zoom (field-of-view). * Interpolate camera position. * Interpolate camera look-at point. * Control time speed. * Invoke an action on a part (e.g activate an engine). * (Maybe) Force GC cycle for perfectionists - maybe this point in the sequence isn't too (subjectively) sensitive to GC pauses, but a part that *is* sensitive is coming up. * (Maybe) Set camera visible layers. (This should allow for a IVA view) Operations *might* have sub-operations in future, but that's just a speculative feature idea for now. ### Actuator A general set of interfaces for something that acts as a proxy for modifying the camera or scene. This is distinct from modifying the object(s) directly so that the actuator can: * Cleanup after playback. * Reduce the number of places that Kerbcam interfaces with KSP's own API, thus limiting the impact of breaking changes in KSP. * Be used as a stub to create preview visualizations. (E.g a stub object that implements a camera actuator can record camera position etc. over time and then be used to render an object showing how the camera moves) * Potentially be used as a fake for unit testing actuators etc. * (Maybe - future speculation) Further use in layering operations. E.g a camera looking direction operation transitioning to another by a interpolation might delegate to both looking-direction sub-operations and smoothly interpolate between the results on stubbed cameras and apply that to another actuator that applies to the actual camera. Actuators should exist to support for the various types of operation that exist. ## Misc thoughts Time.captureFramerate - potentially useful to set a framerate if we're going to capture at a given rate, might make the framerate more predictable. Create lights to move around a scene as an operation. ## User Interface Mockups made using [ASCIIFlow](http://asciiflow.com/). Open questions: * How should things be grouped into windows? For example, might the "main window" be arranged into 3 sections: * Playback controls. * Story overview. * Item properties (for editing an item selected in the story overview). ### Playback controls * Simple "Play" toggle. * Auto-play setting that causes playback (i.e time "zero" on a timeline) to begin at a given UT (game universe time). This UT time setting maybe should be part of the data for the story. ### Story overview This mockup shows how the timeline UI might look with a reasonably simple story. +-------+-------+-------+---------------+--------+--------+ | 0.00" | 3.15" | 7.50" | 10.23" | 12.73" | 20.28" | | Start | | | Engines start | | | +-----------------+---------------+---------------+--------+--------+ | | | | | Track 1 | Camera pos... | Camera position | | | | | +-------------------------------------------------------------------+ | | | | | Track 2 | Look at po... | Look at position | | | | | +-------------------------+-------+---------------+-----------------+ | | | | | Track 3 | | Invoke | | | | | +---------+ +---------------+ Discussion of each component in this mockup: * The top row is the timeline, containing the time keys. A couple of them are named, but they all exist at specific times, and are kept in order of increasing time from left to right. * Each row below that is a track, in this example they just have default names. * Each track row contains operations. In this example: * "Track 1" contains operations that move the camera, the first operation is a movement of the camera position starting at 0.00", and finishing at 7.50". Immediately following that, the camera starts from a new position at 7.50", and continues moving until 20.28". * "Track 2" is similar to "Track 1" but contains camera "look-at" operations instead of camera positioning. * "Track 3" contains a single operation at 10.23". This operation (like the others) has a default name. It has been configured to invoke the "activate" action on some rocket engines on a vessel. UI decisions made by this mockup (not necessarily set in stone): * Things can optionally be named (specifically "time keys", "tracks" and "operations"). * The column widths are determined by the time key names, but not by the operation names. Not clear if this is a good idea or not, or if it's practical within Unity3d. ### Path editing When editing/viewing paths (particularly camera positions, look-at positions), the path should be visible by the flight camera, so its position can be seen relative to the environment/vessel. The nodes should also be visible (and ideally clickable to select). The position of each node should be adjustable via controls in a window. A node's timing is determined by a referenced time key. Minimal controls would include X,Y,Z adjusters. Ideally the position of each node would be adjustable via something akin to the manuever node interface that KSP players are familiar with. While this seems to be possible, that's regarded as a stretch/later feature (not a high priority). A node's position (or the entire path) should be relative to a reference frame. Examples of reference frames: * Selected vessel/part/object * including rotation * ignoring rotation * reference position relative to object's position, plus some multiple of the object's velocity vector relative to the SOI (rotating/non-rotating SOI). Questions remain open as to when the position and velocity are sampled. The intent is to help with fly-by effects, but some clarity is needed here.
  10. In _theory_ KerbCam shouldn't interfere, provided that you don't try to use both mods to control the flight camera at the same time.
  11. (KerbCam author here) I agree - KerbCam needs quite a bit of love. I've found myself out of time or energy to attack the codebase as it stands for anything but clearly important bugfixes. Camera Tools (mentioned above by falken) looks like a pretty good mod (and I've linked it from my own KerbCam thread). If I find myself with copious time to write code, I would likely just rewrite KerbCam from scratch - but no promises on timescale for that. One thing that would be useful to me (or anyone else writing a KerbCam-like thing) would be to distil down to a few features that are wanted. I've had thoughts on this, but I don't make videos (I've discovered I'm not very artfully creative - despite creating KerbCam as a tool for myself to do this, I never actually made a video with it).
  12. The latter, with fewer files. There was a build of KerbCam which accidentally copied the KSP core DLLs into the distribution, and I didn't notice. Since it was probably (accidentally) violating copyright and also just messy and grr I replaced it with the same build, sans the KSP files. I imagine either downloaded file would work, but rather wish that the first/larger one had never happened (and it's possible that including the extra KSP files might mess things up, particularly in versions of KSP other than that I built against.).
  13. Unfortunately it's simply being ordered lexographically rather than numerically, and I'm not really in favour of putting padding zeros in version numbers. - - - Updated - - - Ugh - well spotted, thanks. Removed. - - - Updated - - - Please do
  14. New release v0.13 posted. Put in some fixes I've wanted to put in, but hadn't done because I hadn't got the development environment set up - which I set up to look at the frame-stalling/juddering problem. Didn't fix that problem, but did the other stuff anyway. Hope this is at least a mild improvement over the last (nearly year-old) release.
  15. Okay, I think I've discovered the problem with a fairly high degree of certainty: garbage collection pauses. (nerdy bit) This has been a little fiddly to find, but some of the juddering effects seem to correlate fairly well with when System.GC.GetTotalMemory(false); reports a lower number than in the previous frame, which would seem to imply that a GC has occurred - GC.CollectionCount(0) seems to back this up. These GC pauses seem to happen every 3-4 seconds from what I can tell, even when Kerbcam isn't doing anything significant. Layman's explanation (in case people don't know about garbage collection): KSP is written to use a runtime that uses garbage-collection based memory management. This means that periodically the game's runtime scans to see if any previously allocated memory can be reclaimed for use. (hmm, not a terribly clear explanation I guess): more information here: http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) - note the section on "Disadvantages": "The moment when the garbage is actually collected can be unpredictable, resulting in stalls scattered throughout a session" There's not a good simple way to deal with this. GC pauses can be reduced, but that requires some profiling of the program to see where memory is being needlessly allocated to excess, and fixing them. That probably requires a debug build that only Squad will have access to (and C#/.NET-related skills I don't have). GC pauses can be made more frequent (i.e worse) if any (or many) of the following are true: There is less memory available to the program The program is using more memory The rate of garbage generation is higher The latter two could be negatively influencing things with having more mods available. Adding more memory isn't strictly a solution either - it might theoretically make GC pauses less frequent, but they might last longer (i.e more noticeable when they *do* happen). Mind you - I'm not an expert on GCing in general, and my usual experience with GCs is on the Java runtime rather than .NET/Mono. My knowledge might therefore be slightly off.
  16. Yes, I've noticed it as well in the same contexts as yourself. I'm not sure if it's Kerbcam or not... I suspect it is, but I never took the time to pin it down.
  17. Can you check in KSP.log for anything that looks odd? Especially towards the end of the file. (failing that, maybe post the whole thing to a paste bin)
  18. I've just checked - yes: v0.12 seems to work just fine from some quick testing.
  19. Curious... I wouldn't expect a blank file to cause a parse error, but I don't know what Squad's parsing code looks like. (that file is loaded and parsed by KSP's part/savegame library) Edit: Also, thanks for pasting the stack trace from the logs. That let me see the problem right away, and I didn't even have to guess. That's always a helpful level of detail from a problem report.
  20. That error looks like it's from KSP's code in trying to parse kerbcam-paths.cfg. Try deleting/renaming that file to see if it works.
  21. Excellent, thanks. I'll bump the KSP version in the thread title.
  22. Excellent, thanks, that's good news! I haven't had time to test it - but it's good to know that the basics still work at the very least.
  23. Weird, that's the second time I've had that report in the last week. Last time it was resolved by deleting the kerbcam.cfg file to reset its settings.
×
×
  • Create New...