@ENSONIQ5:
Thanks! I'm quite happy with current frequencies. I still see some faults: the worst one is that fronds are crossing in some places, or (for me) visually changing length, but I hope it won't be that noticeable when view from distance/in the scene/with having multiple instances viewed from different angles. Matte painting and lighting are the next elements
@cello95:
I don't want to redistribute modified palm model which is not mine, but I hope my answer will satisfy your curiosity.
Idea:
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch16.htmlhttp://http.developer.nvidia.com/GPUGems3/gpugems3_ch06.htmlHierarchy:
+- root
| +- trunk1
| | +- trunk2
| | | +- trunk3
| | | | +- trunk4
| | | | | +- frond01
| | | | | +- frond02
| | | | | +- frond03
.
.
.
| | | | | +- frond20
Trunk1-4 are sliced parts of the trunk with pivot points at (0,0,0), if available I'd rather use bones here. There are two requirements:
1. bones parameters visible for scripting
2. bones linkable into hierarchy in the scene mode
Trunk parts have xz rotation driven by equation, fronds have xyz rotation + noise morph + xyz bend morph all driven by equation.
Equation:
F(T) = A1 * sin ( P1 * T - O1) + A2 * sin ( P2 * T - O2) + ...
T - time
A - amplitude
P - prime number frequency modifier
O - offset ( if you want looping animation put (T - O) into parentheses )
General rule in this example:
Each following level in the hierarchy has higher frequency, bigger offset. Leaves are bending so they need morphs. I deformed each of them separately with custom script in x, y and z, but possibly single morph would be enough.
Sample:
controller { "orientation"
script {
"float $x;"
"float $y;"
"float $z;"
""
"$x = (1.25 * sin(3 * (time+0.
)) + (0.75 * cos(5 * (time+0.9)));"
"$z = (1.25 * cos(3 * (time+1.0))) + (0.75 * sin(5 * (time+1.1)));"
"$y = 0.5 * cos(15 * (time+0.0));"
""
"$orientation = RPYtoQuaternion($x, 0.0, $z);"
}
track {
qkey { 0 (0 0 0 1) "S" }
}
}
controller { "morph.morph01"
script {
"$morph.morph01 = 0.4 * cos(5 * (time+0.
);"
}
}
controller { "morph.morphy"
script {
"$morph.morphy = 0.15 * cos(1 * (time+0.
);"
}
}
controller { "morph.morphx"
script {
"$morph.morphx = (0.15 * sin(3 * (time+0.75))) + (0.1 * cos(5 * (time+0.85)));"
}
}
controller { "morph.morphz"
script {
"$morph.morphz = (0.15 * cos(3 * (time+0.95))) + (0.1 * sin(5 * (time+0.05)));"
}
}