• подарки оптом, подарки опт
  • сувениры оптом, сувениры опт
  • бизнес сувениры
  • бизнес подарки
  • сувенирная продукция
  • купить футболки
  • бейсболки
  • ежедневники, ежедневник
  • подарки для женщин
  • подарки для мужчин
  • стеклянные двери
  • стеклянные перегородки
  • cтеклянные лестницы
  • изделия из нержавейки
  • Mallet Pinball

    This pinball-air hockey mashup was the very first prototype I created using Gavit. I worked on it every now and then, pimped the effects, tested Gavit’s new features and so on, until it was worth of a video:

     

    The technical details are discussed in this “behind the scenes” article.

    Written on August 1st, 2012
    Categories: Gavit, My projects, UDK
    Tags:


    Guided rigid bodies

    I previously discussed replaying user input and in this article I’ll cover a related feature: recording and replaying rigid body motion.

    The basics are quite simple: dump transformations of a physics driven actor to a file and then convert that data into a matinee, like before. However simply replaying the motion track with a mover has an inherent problem: impact and slide effects, defined in physical materials, won’t happen because no actual collisions occur. All the special effects (impact dust puff, damage decals, sparks, etc) would need to be placed and timed manually. That would be a bad workflow.

    Fortunately the solution is rather straightforward: let’s constrain a KActor to a mover: the mover replays the given motion data while tries to keep the physics driven actor on the same path. The guidance is gentle since it doesn’t work against the physics engine, only corrects small inconsistencies so the result is the same every time.

    In the following video I actually used an invisible mover to replay matinee data and placed a constraint on the map to link it to the KActor but later on that won’t be necessary: our own physics driven actor (GVKActor) will spawn its own constraint and in there will adjust the LinearPositionDrive and AngularPositionDrive settings.

    Anyway here is the proof of concept map:

    However there is something wrong: on hitting the wall the balls sometimes don’t produce the dust puff impact effect. The source of the problem is the fixed rate motion data was sampled: although transformations were recorded 60 times a second, roughly half of the collisions still happened between measurements.

     http://www.zspline.net/blog/wp-content/gallery/gavit/PhysicsRecordingProblem01.png

    The dashed line indicates the original path of an object while the orange curve is the matinee data reconstructed from the samples. The collision happened while we were not looking so we’re left with a flat part keeping the object away from the surface it originally hit.

    I came up with two ideas I yet to implement. The first one is pretty obvious: let the physics actor report its status every time its RigidBodyCollision event occurs. However past experiences show that it’s not a 100% reliable, I’ll have to see if it’s good enough.

    The second potential solution is trying to guess the time and place of the collision based on the data we have.

    http://www.zspline.net/blog/wp-content/gallery/gavit/PhysicsRecordingProblem02.png

    First we generate velocity vectors from the samples then we scan for a potential collision: we know that physics driven actors generally move in a smooth, gradual fashion so the difference between two samples will be small unless a collision happened. For example A and B vectors are kinda different but not much. After comparing B to C/D we can be pretty sure that a collision happened there.

    The next step is extrapolating two new velocity vectors, and extension of B and D in the example, and finding their intersection (or mid-point where they are closest to each other). That point is our guess which might not be exactly precise but a lot better than what we had before.

    I’ll implement these solutions after I’m done with one of the earliest, yet still unfinished prototypes I have in the pipeline. Stay tuned.

    Written on July 26th, 2012
    Categories: Gavit, My projects, UDK
    Tags:


    Multi-pass performance recording and replay

    I’ve just finished the first iteration of the performance recording and replay mechanics in Gavit: now user actions can be captured and turned into a matinee using an external application.

    Let’s say there is a fire truck which is a “machine” in Gavit. The truck has two main, controllable features: the body which can be driven around and the water cannon which can be aimed and fired. These translate to “machine components” inside the machines: each component monitors one particular input (like x360 left stick or the mouse). In this case the vehicle itself could react to the left stick while the water cannon to the right one.

    And now let’s assume that I’m not very good at driving and aiming at the same time as I can only really pay attention to one thing at a time. Also, as will be the case in the short video bellow, I might have lot more entities to control than input devices and/or fingers. To work around these limitations multi-pass performance recording and replaying is used:

    In each machine component one can define where the component should get the raw input data from: live input devices or matinee. Regardless of the source, the input can be recorded into a JSON file. (Recording can be disabled per component or in the parent machine.)

    So the workflow for our fire truck would look like this:

    - Enable live input for truck body, disable input for water cannon.
    - Start the game and drive around.
    - Convert the produced recording into matinee data which can be pasted back to the map.
    - Link the fire truck machine to the matinee.
    - Enable matinee input for the truck body, enable live control for the water cannon.
    - Start the game, aim and put out fires while the truck is driving around on autopilot following the recorded route.
    - Convert the recorded clip into matinee data and replace the old one.
    - Enable matinee input for the cannon too.
    - Move on to other things knowing that the fire truck will replay your performance from then on.

    To stress test the system I set up a machine with 16 components (colored balls), each of them controlled by the left x360 stick. I started the game several times, each time controlling only one ball. When I was happy with the result then I converted the recorded performance into matinee data, put the ball on autopilot and focused on the next one.

    Finding a way for the last two balls through the crowd was rather difficult. I had to restart the map a dozen times, it felt like an action puzzle game.

    The recording rate is a machine property and was set to 60 Hz in this case which produced 500K/s clip files. For interpactors and kactors transformation data is also saved and converted into movement tracks in matinee.

    Written on July 15th, 2012
    Categories: Gavit, My projects, UDK
    Tags:


    ExportLayer v1.35

    Download: ExportLayer v1.35

    Changes in v1.35:

    • Proper argument handling which makes it compatible with modo 601.
    • The export path will be asked if SILENTSAVE is on but the scene has not yet been saved.
    Written on July 8th, 2012
    Categories: My projects
    Tags: ,


    Fire showcase: Behind the scenes

    In this article I’ll discuss the key features of the Fire material showcase video.

    When I started working on the material I had the following goals in mind:

    1. Support for fires of different scales, from a single flame to massive fires.
      On the long run it’s more efficient to maintain and learn to use one material instead of several single purpose ones.
    2. High texture resolution with smooth animation.
      My target is usually 720p@60Hz and that ruled out flipbooks which don’t scale up well resolution and framerate wise.
    3. Adjustable complexity, visual quality vs performance tweaking.

    Fulfilling these core requirements was simple enough after some experimentation and I ended up spending most of the time on optimizing and making the controlling parameters easy to handle.

    Continue Reading »

    Written on June 21st, 2012
    Categories: Gavit, My projects, UDK
    Tags: ,


    Neck deep in C#

    A few weeks ago I started learning C# and WPF by starting  to work on a pet project of mine, UniPie. It’s a rather challenging but ultimately satisfying experience so far. My history with LUA, Python and UnrealScript proved to be a blessing most of the time, although it did lead me into a few dead ends. However backing up from those allowed me to discover more of this strange new world so I have no regrets.

    I’m working toward the first public release of UniPie after which I’ll be back on the Unreal/special fx track yet again.

    Written on May 24th, 2012
    Categories: My projects
    Tags:


    Fire material showcase

    This latest video shows a fire material I made:

    (Watch it in HD on Vimeo)

    The base mechanic works for both meshes and particles, can be used for fires of different scales (from candle flame to forest fire) and the material’s complexity can be adjusted. More details are in the “behind the scenes” article.

    Written on May 6th, 2012
    Categories: Gavit, My projects, UDK


    A house

    Here is one of the assets I made for the latest Gavit sub-project:

    It will be used to showcase my fire material.

    Written on April 29th, 2012
    Categories: Gavit, My projects, UDK


    UniPie documentation update

    I’ve updated the documentation for the UniPie fundraiser campaign so now it includes a special pie for numeric input fields:

    I also added a few example pies for different tasks: UniPie_Examples.pdf

    Written on April 2nd, 2012
    Categories: My projects


    Thoughts on pie menus

    I started an IndieGoGo campaign for funding the development of UniPie, a universal pie menu system and on that occasion I decided to collect my thoughts on pie menus.

    Convenience is the main reason why I find pie menus useful when it comes to accessing frequently used functions: the pie appears under the cursor so a slight movement of the mouse selects an action. That beats targeting toolbar icons, digging through linear menus or reaching for a key combos.

    The use of a pie menu can be greatly enhanced by arranging functions in an intuitive manner, where the movement and the invoked action have some sort of a relation. For example here is a pie menu I hacked together for Adobe Illustrator using AutoHotkey:

    http://www.zspline.net/blog/wp-content/gallery/misc/illustweaks.png

    The brown slices perform arrangement actions: a small move up or down sends the selected shape forward or backward in the stack while a longer push sends it to either end. The movement of my mouse wielding hand resembles the motion of the selected shape in the stack which makes the learning curve quite shallow.

    Or take the blue slice containing file operations: The slice points toward the top left corner where the file menu is located. Executing the “save” action requires less effort since I’ll need that quite often. Export is somewhat related but less often used so it occupies the outside slot. By the way, the blue color comes from the 3.5″ floppy disk which is often used as an icon for saving. The other place where slice color is related to action is Remove Anchor where the red indicates a “dangerous”, destructive function.

    Another example for the movement-functionality link could be one of the pie menus I use in modo:

    http://www.zspline.net/blog/wp-content/gallery/misc/ModoPieMenu.png

    The down motion hides the selection (“I hide it under my desk”) while the up movement unhides everything (“I put things back up onto my desk”).

    So with some thought intuitive arrangements can be produced and when muscle memory develops the whole workflow becomes transparent.

    Written on March 27th, 2012
    Categories: My projects