• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Juliean

Particle parameter interpolation strategies

6 posts in this topic

Hello,

 

I want to implement interpolation for some of my particle parameters, for example color. Say I have these two values:

 

Color start(1.0f, 0.4, 0.0f);
Color end(0.2f, 0.2, 0.2f);

I want to interpolate between those two. For the effect I'm trying to achieve a linear interpolation isn't good enough. I want to play around with different interpolation.

 

What are common practices of doing so? I don't want to hardcode this, basically I want to have something like in some of those edtiors - a field where you have a function line from (0, 0) to (1,1). You can then deform this line by dragging. The x value would be the time between spawn and death), the y value would be the interpolation value (0 = start, 0.5 = halfway through start and end, 1.0 = end).

 

Not talking about the editor thingy itself, how would one implement such a thing, without hardcoding it? Do you have some pseudo-code or papers describing such a technique?

 

0

Share this post


Link to post
Share on other sites

You could use a 1D lookup-texture. Just create a linear gradient in gimp/photoshop and use the curve tool to modify it the way you want it to look like.

float4 finalColor = lerp(startColor.rgba, targetColor.rgba, tex1D(GradientLUTSampler, lerpFactor));
1

Share this post


Link to post
Share on other sites

Usually a third degree polynomial is sufficient. You can edit it by changing the tangents of the start and end point. Then there's (B-)splines obviously, but that requires a fair amount of calculation time. You can also take a look at Lagrange interpolation.

 

The best thing you can do is to write an editor that allows different interpolation types for pieces of your timeline.

1

Share this post


Link to post
Share on other sites

You could use a 1D lookup-texture. Just create a linear gradient in gimp/photoshop and use the curve tool to modify it the way you want it to look like.

float4 finalColor = lerp(startColor.rgba, targetColor.rgba, tex1D(GradientLUTSampler, lerpFactor));

 

While I'm looking more for a solution that works inside the engine, this at least gave me a good hint on how to save CPU calculation time - storing the interpolation curve in an 1D texture and doing the lookup in the shader seems reasonable, thanks!

 

Usually a third degree polynomial is sufficient. You can edit it by changing the tangents of the start and end point. Then there's (B-)splines obviously, but that requires a fair amount of calculation time. You can also take a look at Lagrange interpolation.

 

Ah, polynomials, of course, how can I be so stupid :S One question though, how do I calculate a polynomial from a set of points and tangets? I slightly remember how it could go by points, but tangents? Not a clue...

The best thing you can do is to write an editor that allows different interpolation types for pieces of your timeline.

 

Yeah, particle editing integration in my editor is one of the first things I'm going to do as soon as everything is working. For testing purposes I'm fine with editing my XML-files per hand, but I'll agree, having an editor to change parameters conveniently ingame is really a charm.

0

Share this post


Link to post
Share on other sites

What I think you are looking for is referred to as 'tweening' or 'easing' in animation lingo.  The functions that you use are basically to calculate an interpolation factor to go between the start and end parameters.  There are lots of different ways to do this, but usually some polynomial of nth degree is the easiest way to go for CPU based tweening.  Take a look here for some examples.

2

Share this post


Link to post
Share on other sites

Ah, now I know how this is called, makes further research much easier. The page looks very interesting, and since it has code examples its perfect for me to learn. Plus, since I'm using the texture lookup method, I can even have more complex tweening functions, as those are being calculated and stored in the texture only once at emitter creation. 

 

Thanks again to all of you.

0

Share this post


Link to post
Share on other sites

Ah, polynomials, of course, how can I be so stupid :S One question though, how do I calculate a polynomial from a set of points and tangets? I slightly remember how it could go by points, but tangents? Not a clue...

Well, given you have f(x) = ax3+bx2+cx+d you can start with your starting point and end point. Say you interpolate from 0 to 1 in a timespan from 0 to 1 (time is x) then for your starting point you know that a*0+b*0+c*0+d = 0. It follows that d = 0.

Same for the end point. For time x = 1 you know that a + b + c + d = 1

Now you can start using the tangents of your start and end point. For that you have to derive the polynomal, which results in g(x) = 3ax2+2bx+c

If you enter values for the start and end point you get two further equations. Now we have four equations and four unknown variables. All you need to do is add and subtract the equations from each other until you finally get all variables (if you're unfamiliar with it, take a look here).

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0