= fx
:author: 
:revnumber: 
:revdate: 2016/03/17 20:48
:relfileprefix: ../../../
:imagesdir: ../../..
ifdef::env-github,env-browser[:outfilesuffix: .adoc]



== FX

Stand for Effects.

Also stand for dynamic value functions f(x). 

Inspired by 

link:http://nodebox.net/node/[http://nodebox.net/node/]

link:http://udk.com[http://udk.com]


=== What's about the f(x) ?

For various effects the game may require. Need customable, extensible way to declare input-process-ouput:

.  dynamic generic Data, which can be procedure by various sources, signals, services
.  dynamic generic declaration of operations
.  dynamic generic declaration of output order

Last but not least, it should be resuable, generative and composable.


==== In Java?

About the implementation, such as language should be under considered!

These all requirements fit to an DSL, functional and lazy like groovy scenario, but what about java - a traditional grown as imperative language? It's like we going to implement all its core language elements for god-sake… Umh, not like that. With the help of Guava, we do it properly acceptable and scalable! But read it carefully first or mislead later!!!

link:http://code.google.com/p/guava-libraries/wiki/FunctionalExplained[http://code.google.com/p/guava-libraries/wiki/FunctionalExplained]

[IMPORTANT]
====
This framework's feature goes in two branches: in Java 1.5+ with Guava and in Groovy2+ , the difference will be distinguish later!
====



==== Focus in effects


[IMPORTANT]
====
The abstract concept and even implementation of the Fx framework make it look similar or even exactly like Codegen - the Atom's code generation framework. Because they both lend them selfs from same underlying concepts. But remember Fx is for effects and not focus in the code side. It was born to help people like artist to survive their career without reading more programmin books!!
====


Of course we not going to do a whole language enhancement here but use a functional ultilities to get start up quick and go straight to the “real-time effects part later. But remember the base concepts of it, which really to be extend and custom for your own needs. 

Now Let's see how does it work?


=== Interface & Abstract

We need dynamic Data, which can be procedure through various sources, signals, services… let call the abstract which provide the data IValueProvider:

interface IValueProvider &lt;x,y&gt;{
y   value(x) return new y
}

Function &lt;x,y&gt; is the default implementation

Function &lt;x,y&gt;{
}


=== Input

So what can be the input?

Single&lt;Value&gt; or any primitive

List&lt;Value&gt; . String

more


=== Time factor & Real time application

An important factor of a real time system is … time, indeed. Imagine a physic world functioning with f(t) is the primitive law. Our effects system also. Almost every effects envolve time and almost modify or procedure several positions values. It's a very common case in this scenario.

In fact almost of the F(x) features are actually f(t) which t is the time provided by the system via update cycle. 

Now consider this very simple physic xample :

S = V.t 

pos = startPos + S 

→ pos = startPos + V.t

We have:

.  startPos is a Vector3f (can be localTranslation of a jme3's Spatial!). 
.  a parameter vector V, basicly stand for the Speed
.  t is time provided by system
.  plus and multiply is numberical operations

→ We can compute the new pos which we can use as a slide of a ball!

In this simplest example, we should reads a mathematic equations as a “procedural process in our fx system with time as an essential key. Which later will help us build up extraordary complex effect!


==== Animations concepts

Here we will revised some animation concept. Kinematic and functionals.


===== Timeline


===== Keyframe


===== Sequence


===== Track


=== Operations


==== Single operation


===== Math


===== Add remove


==== List operation


===== Add remove


===== Transfrom


===== Indexing


==== 3D Geometric operation


===== Curve . Interpolator

IValueProvider


===== Layout


===== Shape and formation


===== Steering


== Effects


[NOTE]
====
Ideas from Adobe After effect ,3DSMax, Cinema4D, Processing, Blender…!
====



=== Text Effects

One of the most under rated part in almost every 3d game engine I come across is the *Text effect*. We *DO* need Text effect but it didn't have any native support. I've started by doing a lot of After effect's text effects and plugin, then trying in 3DSMax, Cinema4D, later in Processing… but I can not find one that make me feel easy to use and powerful. From some ideas borrow from those applications, I try to implement some in this framework.


=== Particle Effects


=== Cinematic Effects


=== Color & Texture Effects


=== Mesh & Spatials Effects


=== Animation Effects


=== Scripted Effects
