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

    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

    Nine-slice material function in UDK

    I needed a flexible way to create borders around things so I implemented nine-slice scaling as a material function:

    It takes decal projection width and height as parameters so the texture doesn’t stretch at the corners. Another parameter defines border thickness which is the absolute size of the border slices:

     

    And of course the user can also define the location of the 4 cuts which create the 9 slices.

    Generating the proper texture coordinates costs 24 instructions but it could be simplified by sacrificing some of the flexibility (like forcing symmetric cut positions).

    Written on March 18th, 2012
    Categories: Gavit, My projects, UDK
    Tags: ,

    Effects and UI design side project

    I spent the majority of my time working on and with our effect container, the GVEffect class.

    GVEffects are abstract entities containing any number of basic building blocks called EffectTypes. We have particle system and decal effect types working, light and sound will be implemented later. A typical setup would look something like this:

    [GVEffect: FlashyExplosion]

    [0][Particle system: Base explosion]
    [1][Particle system: Black smoke]
    [2][Particle system: Burning ground]
    [3][Decal: Scorch mark]
    [4][Light: Explosion flash]
    [5][Sound: Explosion sound]

    By combining different bits and pieces a wide range of different visuals can be created without the need for authoring new assets. (Of course having a decent library is recommended.) In the example above the black billowing smoke could be replaced quickly with a gray smoke puff sort to experiment with the visuals.

    There are many additional parameters for defining the behavior of effect types like start delay or life time. Position, rotation and scale can also be set and randomized for each item.

    GVEffects are always embedded in other entities which will create them at runtime when it’s appropriate. For example a pawn might have a GVEffect set up for spawning to make it look like the character was teleported onto the map.

    Another example is physics material based interactions (which I implemented last week). What this means is that when two objects are in contact, the right effects are created depending on the interacting materials. For instance if a stone ball hits a reinforced glass surface the following effects will be created:

    • Puff of stone dust (particle effect)
    • Crack on the stone ball (decal)
    • Splinters of chipped off glass (particle effect)
    • Cobweb like cracks on the glass (decal)

    Each material has its own set of effects for the different types of interactions: impacts, sliding, foot steps for light/medium/heavy characters, bullet/pellet/energy weapon hits, etc. The effects can be dynamically adjusted based on properties of the interaction. For example the force of an impact sets a certain parameter (called “Amount”) in the related particle systems and decal materials. What those assets actually do with that information is up to the author: a decal could change size or opacity, particle systems could vary particle number, size, speed, even turn off emitters entirely for smaller impacts.

    While I had no trouble with impact effects, slide detection turned out to be a huge problem. Apparently I have no direct access to contact points in the physics scene which makes it rather difficult to find out which actors are in contact. I did manage to get the necessary data but the workaround is hacky, slow and not very reliable. I might revisit it in the future but it seems that I can not do better without access to lower level functions.

    To distract myself from Gavit, I took on a side project: MCEditor. It will be a proper configuration utility for the Razer Hydra controller which to this day lacks that kind of a software. (Razer has a lot to learn from Logitech in this regard…) The programming is handled by a fellow Hydra owner while I’m responsible for the UI. We’re using C# and WPF and this is how it looks at the moment:

    This is the second major iteration of the layout. I really enjoy that the challenges are so different from the ones I usually deal with, it’s somehow refreshing. So much so that I intend to start another side project when this one is done.

    Next week I’ll work on motion replay for rigid bodies and try to finish my earlier pinball prototype.

    Written on March 11th, 2012
    Categories: Gavit, My projects, UDK
    Tags: