"With regard to your previous attempt with the tower+banner using Mocha and you saying you didn't see the same perspective 'pop': are you using it with corner points in 2D and Quad Warp, or as a 3D camera and a static texture in the correct position? "
I personally don't care for Mocha's Quad Warp export so I generally do a camera solve, then add the shape I want, turn off the other layers and export camera data leaving me with five points, four corners plus a center point (the points correspond to the shape, not the plane.. The Quad Warp Mocha export doesn't use points. Instead it applies Quad Warp to the clip you just tracked then applies the position data directly to the effect giving a Quad Warped copy of your clip in a single layer comp.. This is ok as long what you want to warp is the same resolution as the clip but when it isn't it's a lot more work to transfer the position data. So to answer your question I did it as both a 3D camera solution and as 2D with Quad Warp but I did not use Mocha's Quad Warp export.
"Also, if you remember, your video seemed to have Perspective On both times, rather than one being Off, so I wasn't clear about what your render method was."
Looks can be deceiving. When it says Perspective Off, perspective was really off. This cause a slight shift to the left but that's it.
"Even if you are using mocha generated Quad Warp corners points, because they'regenerated from the 4 corners of the tracked plane, they may be slightly more smoothly consistent - with respect to each other - than 4 individually tracked points from inside Hitfilm, which will each have their own sub-pixel noise, which could exacerbate the visible wobbling."
My experience says Mocha is MUCH MUCH better for this than tracking 4 points in HitFilm. I never really had a problem with perspective pop until I tried using 4 manually tracked points throughout the day and the amount of pop is directly tied to the quality of the tracking,
@Aladdin4d OK, well using a 3D camera and a plane is going to give better results - with more fiddling to get it lined up correctly - than Quad Warp, because...not Quad Warp. For Express users, they don't have a choice of either alternative mocha provides, so the 'roll your own' using 4 tracked points is the best they can have. I can imagine the one produced by mocha with the point's pre-embedded in the Quad Warp effect is slightly more accurate, just because to keep the plane the same size: the points probably have the errors averaged out over them, whereas the individually tracked points all add their own noise. So..I could see the Perspective 'pop' being more visible in that situation, as more noise = more scope to draw the lines at different lengths and calculate the perspective on the lines differently. But...I still suspect that part of the issue is the perspective isn't being calculated for every pixel, because there is a pop at certain angles, that then continues for a few more degrees of turn, then it pops again, - rather than it 'fizzing' on every angle change, which the points themselves seem to do - which would be (OK, might be... ) consistent with a Hitfilm using a combination of intermittent accurate perspective calculation combined with linear interpolation.But time to move onto the next issue, which is Motion Blur (when it's not crashing) and how it affects things that aren't actually moving very quickly, producing incorrectly positioned planes - with no actual motion blur applied to them. Turn it off and they snap to the correct position, turn it on and they're just offset, but still look sharp. Bizarre, as I actually want it to apply motion blur to them, not just motion jump...
@Palacono Point of interest - Mocha's Quad Warp export has a comment saying "compatible with Motion Blur" which indicates the Motion Blur issues are already known. Given the way Mocha does the export I'd say Quad Warp + Motion Blur using points = Crash while Quad Warp with the position data applied directly to the effect is ok.
@Aladdin4d Yeah, never understood how that's supposed to work. Does it calculate the amount of motion blur from the movement and predict the shutter angle you've likely to use when you have Motion Blur turned on in Hitfilm and somehow compensate by moving the markers by a certain amount so it looks accurate? It's not like there is any value you can adjust in Quad Warp to deal with that. Anyway, this latest is something different. Tracking something moving - not using mocha anyway - and watching how the markers move, then turning off motion blur and seeing them move differently. Just an internal Motion Blur bug based, I assume, on the frame movement calculations just getting it wrong.
Video coming soonish.
As far as Motion Blur goes, some of this is playing around with shutter phase. Altering shutter phase changes the apparent direction of the blur. The default -90 simulates a rotary shutter, but DSLRs/mirrorles, ENG, or cinema cameras have electronic and/or leaf shutters which behave differently. You might not have a bug happening, but need to adjust shutter phase to match the BG video.
What happens is there is zero blur and the image has just moved by a few pixels. As it's a 3D, but static plane and the camera is moving, it moved within the scene instead of staying locked to the ground. Turn off motion blur and it stays still, as it should, but I'd actually like to blur it a little, not have it stay sharp and float about. It seems it knows there is movement going on, but gets it wrong, because if it actually did blur what it's moving - but is keeping sharp - it would probably look correct.Anyway, you'll see in the video, then I'll use a different type of blur instead, I guess.
New Bug/feature: #21 Motion Blur/Motion Jump Bug -------------------------------------As trailed previously... this is Motion Blur acting weird.See in the video that rather than being a global selector for those things that have Motion Blur turned On in their Layer Properties, it has an effect (well, half an effect) on things when it should be doing nothing at all... nada, zip, zilch.So, make sure it's turned off at all times unless you're specifically using Motion Blur on a layer. Hitfilm might even scrub faster in the viewer if it's doing one less thing - as even half a Motion Blur calculation is probably using a fair few CPU cycles. Problem still remains that when you do turn it on for those layers you want Motion Blur applied to, the others could be affected in unexpected ways.
New Bug/feature: #22 Linked for Life? Bug -------------------------------------So,no comments about the Motion Blur/Jumping bug?OK, onwards and upwards... Not sure if this is a bug, or an intended feature, but if it's a feature it's a very annoying one, so...would be nice if it changed into a bug, then got fixed. . When Transform values are unlinked, such as Scale, you'd assume that means you can adjust them independently. Well, you can't if you're using the Value Graph View. And there is other weirdness if you attempt to relink them between existing points. Not sure what that's all about, but...you'll see.
I agree, I think that's a bug
This one goes under misunderstanding. The Bezier curve is for keyframe interpolation, not the individual values of the property you are keyframing.
Scale has two or three values depending on whether it's a 2D or 3D layer all of which are contained in a single keyframe. If you're using a Bezier curve for keyframe interpolation adjustments to the curve will always affect all of the values equally. Likewise any other type of keyframe interpolation will affect all of the values equally. Even though the Value Graph shows a keyframe marker on each value, it's still just one keyframe and one type of interpolation for all values. To do what I think you were expecting would require separate keyframes for each Scale value so X gets its own keyframe track, Y gets its own as does Z. This would also means setting 3 different keyframes each time you wanted to keyframe Scale instead of just one and implementing it is much easier said than done. .
AFAIK linking or unlinking the scale values when keyframing has always set a new keyframe and while I can't think of a good reason why it shouldn't I can think of several good reasons why it should so I think it's a good thing.
Side note on using the Value Graph - Once you have it showing all of the values of a property like Scale they can be adjusted independently regardless of being linked or unlinked by grabbing the keyframe marker on the line for that value. You actually did this in your video and changed the X value independently of Y. You only affected both when you grabbed a Bezier handle and adjusted the keyframe interpolation curve.
@Aladdin4d pretty much nails it on the head: there is only one property (here "scale") and only one keyframe at any time, containing all the component values (in your example, X and Y). That explains why even if the scale components are unlinked, when you translate the keyframe for one on the time axis (horizontal), it moves the other component's keyframe as well.
Now there is a valid use case for wanting to move them separately, however it requires you to be able to split that scale property components into different properties. You will then be able to move keyframes, change the interpolation type, etc completely independently for each component. This ability has been on the list for a while (at least our internal one, I'm not sure whether it is on the wishlist ot not. If not, definitely add it), however as always, it is not as easy as it may sound and this requires quite a lot of work.
One last thing: don't feel disheartened if we don't reply on here, we do read but don't always have time to write a lengthy post explaining why it works the way it does. This is especially true when you point at features that we know could/should be improved.
@Aladdin4d It turns out Keyframing when you toggle linking on/off is something that appeared in Hitfilm 3. Hitfilm 2 doesn't do it. I guess I didn't notice before because I'd usually change the state then immediately change one of the values, so assumed it was created as a result of the value change - as it does if you change a value anywhere on the timeline when Keyframing is activated.And, yes, I was/am able to change individual values by moving their actual keyframes, although doing so without also moving it along the timeline is well nigh impossible unless you have 'zoomed in' on the timeline to try and stay on the same frame. You can 'lock' the value and only move it along the axis by holding down SHIFT as you do so, but there is no corresponding CTRL or ALT function to allow you to change it without moving it, so that's still awkward to do and you might then just as well adjust the percentages. So, incompletely implemented.I don't think having a second value for each axis's Bezier curve would be that difficult. I think having a single shared value for all is a bit of a half-way house. There already are separate keyframe values for X, Y and Z and they can all be on different lines on the Value Graph display. I'm just suggesting that if you have gone to the trouble of adding handles on each Keyframe: make them all act independently, so three values for Bezier, not one. Not a large amount of data, or work, in the great scheme of things, but much more versatile. I'm not even suggesting that you need to be able to mix types on a single Keyframe - such as Linear on X, Smooth on Y and Bezier on Z - (what icon would it show when not in Value Graph mode, for a start? ) because with independent values on Manual Bezier, you could already emulate all of those by adjusting the handles on each axis to tighten or loosen each side on X,Y or Z. Having something appear linear on one axis (just a straight Bezier) and smooth on another (normal Bezier) could be very useful. Another little interface 'buglet'. Select the Slice tool, and then open up the Value Graph. You cannot select Slice when you are already in Value Graph - and for good reason. Try and select a keyframe and change values and see how that differs to when you use Prev<o>Next Keyframe. It's a little strange, as I suspect you're not supposed to be able to do any of that in Slice mode, so some things work and some don't. You also get slightly weird behaviour elsewhere when in Slice Mode, even if Value Graph isn't open. I think it should probably put a 'No Entry' sign on the mouse, or toggle back to Normal mode when you try some things.
@CedricBonnier Thanks for the reply and it appears we overlapped in posting. Yes, completely independent everything/everywhere would be nice...and very complicated...so I can see why you don't want to do it yet. But my suggestion in the post above is more of a half-way house that is closer to that than your current half-way house. Same position on the timeline for the Keyframe, more versatility when unlinked. With that in place you could emulate the everything/everywhere by manually changing your keyframe values for X, Y and Z as you needed and using the handles to change their behaviour to emulate Linear, Smooth in/out etc. You wouldn't even need to separate X,Y and Z on the timeline (pretty messy to do, I'd imagine) because you can already do that by simply adding extra keyframes and duplicating values on those you want to stay the same. Oh, and implementing CTRL or ALT to stay on the same frame while you do it would be great.
@Palacono well implementing the halfway solution you suggest would mean allowing multiple keyframes for one property at one given time, which is not possible right now. You can't have for example the opacity to be set to both 50 and 100 on the same frame, so at the moment we keep the keyframe that the user is moving and delete the old one. Allowing multiple keyframes at one time, or even having keyframes that affect only one component of a property would end up being as much work as doing the complete separation of components.
Regarding the CTRL or ALT it could be done however CTRL is already used for duplicating keyframes and ALT is used for scaling keyframes. Maybe using Shift and depending on the user's movement do one or the other... we'll think about it but that is definitely something that could be done. Alternatively in the meantime you can modify the property in the tree on the left of the graph, this won't modify the keyframe's time.
@CedricBonnier Umm...maybe I didn't explain it properly, or you're projecting ahead slightly to your everything/everywhere solution? Not sure why you think you'd end up with 50% and 100% Opacity on the same Keyframe. You've only got a single value and that would stay the same.Sticking with something simple, like Scale, or Position:-Same Keyframe, same Frame on Timeline, separate Bezier Values for X, Y and Z instead of the single shared one. That's it. Finis. Now adjust the handles on each individually to emulate Smooth In on X, Smooth Out on Y and Linear on Z when unlinked only. No mess, no fuss. SHIFT and what-direction-did-you-move-first is often prone to error. Other programs use it and it doesn't work well; but it's good that you're thinking about it.ALT and move - when selecting a single keyframe - doesn't appear to be doing anything different to selecting it without ALT, so that would appear to be available. It should be possible to know what to do by context anyway.CTRL and move does create a new keyframe, with slightly strange results of 'phantom' keyframes. See image below.http://i854.photobucket.com/albums/ab106/pickaname2/CTRL and Move.jpgPerhaps to avoid overlapping functions, SHIFT+ALT or SHIFT+CTRL might work?
"Side note on using the Value Graph - Once you have it showing all of the values of a property like Scale they can be adjusted independently regardless of being linked or unlinked by grabbing the keyframe marker on the line for that value."
FYI, this is actually an oversight. The linked state should be respected as it is used to maintain the aspect ratio (w:h) of the scale factor. I was aware of it when I developed the graph and raised the issue in our internal bug tracker but it's a minor problem.
"Select the Slice tool, and then open up the Value Graph. You cannot select Slice when you are already in Value Graph - and for good reason. Try and select a keyframe and change values and see how that differs to when you use Prev<o>Next Keyframe. It's a little strange, as I suspect you're not supposed to be able to do any of that in Slice mode, so some things work and some don't. "
I am aware of this and it was logged internally prior to release but bug fixes are scheduled on a priority basis. That a bug a exists in the shipping product does not imply that we missed it; unfortunately, we can't fix everything
"Same Keyframe, same Frame on Timeline, separate Bezier Values for X, Y and Z instead of the single shared one. That's it. Finis.
Now adjust the handles on each individually to emulate Smooth In on X, Smooth Out on Y and Linear on Z when unlinked only. No mess, no fuss."
I'm afraid that's not how bezier handles work, particularly bezier handles for temporal keyframes with spatial interpolation. And providing UI to individually edit the x/y/z components would likely over complicate the interface.
Certain other products solve this problem by providing a speed graph, in addition to a value graph for editing the rate of change of a value over time. Typically these graphs allow the handles to be completely unlocked from each other.
This can get very, very complicated however.
"CTRL and move does create a new keyframe, with slightly strange results of 'phantom' keyframes. See image below."
This has been logged internally. It only happens for multi component properties and only when trying to duplicate keyframes without selecting them first. Thanks for pointing this one out.
@Danny77uk thanks for the response and after playing with it some more, I can see how it could get complicated if you apply the freedom to control everything, and I guess I'm only specifically suggesting it for the very small subset of Temporal Interpolation in Manual Bezier mode, because that's what I was playing with in the video and then only when you've got Value Graph open to manipulate the handles. Everything else staying the same. If you had separate Bezier modifiers for each axis, instead of the single one they (apparently) share now, but they were linked to move together, nothing would functionally change, would it? Then...change just one of them ... what's the worst that could happen? Anyway, more videos to make. Set Matte's gone a little peculiar, although as usual: I suspect it's been already noted. Not sure any bugs I find are actually new ones.
@Palacono be careful what you wish for. Enjoy this quote from an AE user talking about the Speed and Value Graphs.
"This "feature" makes me absolutely insane... like furious-hot-headed-i-want-to-break-my-f*&%ing computer insane. I realize that position values are edited directly in the comp window, but I can't count the number of times that this is utterly impractical or downright impossible. Anytime I want to move an object purely horizontally or vertically, it is INCREDIBLY difficult to get my bezier curves the way I want them....ADOBE - WHY can't I edit them in the graph editor like everything ELSE????I feel like I'm using some horrible software from 1989. This pisses me off to no end. Could this be fixed with a plug-in?UGH!!"
@Aladdin4d Nah, it shouldn't be that horrible. The interface is already there for the small subset that I was suggesting. But... if we're swapping annoying interface quirks... Why can't I solo a track so that when I've selected it on the timeline, until I deselect it, or select something else, that's the only dratting one I want to move when I click on the screen?I wouldn't even mind having to hold down some weird "stay solo'd until I let go" key combo while I did it, if there isn't room for an icon (there could easily be) but if a layer is invisible why the heck does it think I want to move that one in preference to one that isn't and that I'd previously selected in the layer stack? I know being invisible doesn't mean 'dead', and you could easily want to move one - like a Set Matte layer for example - but more often than not you don't. And if I do... I'll select it. More than two or three overlapping layers and I'm reduced to actually moving things off screen to keep them out of the way of the flippin' mouse. <Sigh>
I'm with Palacono on this one. I've wanted to adjust individual curves independently myself. Currently the value graph does show the overall key bezier, but also shows the individual axes. Temporally, it should be possible to drag each axes handles individually. Mathematically it's similar to how individual channel curves interact with the main RGB curve. That said, if implemented, it would require adding a "scale link" lock/unlock toggle (visible only in the value graph). Such a feature would need to be "opt-in," because you can get lost, fast.
That said, one can currently workaround this by using a multi-point rig, using a seperate point for certain axes. I do this all the time. Works great.
@Palacono and @Triem23
I'm not saying drop the whole idea at all but as @Danny77uk pointed out implementing even a subset is a lot more complicated than it sounds and it's not the math that's the real problem it's the interface.
It could be similar to how channel curves interact with the main RGB curve but when you really think it through that can only work within a relatively small range of values before that kind of representation breaks and it may not even work at all for some things.
Temporal vs spatial inherently leads to radically different curves at some point and you really do need separate representations just to keep your sanity or give up some range of functionality to keep it workable. Doing it all on one graph gives you a really really really complicated interface to deal with which is why "certain other products" resorted to using two completely different graphs.
My main point is many very talented people and companies have already been down this road and hit a road block when trying to figure out a good way to handle it. So far that's meant building a detour road around the road block and hope you meet up with the main road somewhere down the line. There might be a better solution out there (I really hope there is) but even if there is one it probably isn't going to be simple or easy to implement,
@Aladdin4d I'd like this functionality, but understand valid reasons for not implementing it. :-) And, of course, you can get the same (actually more powerful/flexible) results by just using multiple points. I can totally live without individual Bezier handles on parameters. :-)
@Aladdin4d I must really not be being clear. Make it identical to how it is now in every respect other than three values are linked to act like the one they do now for Temporal Interpretation only. All the Bezier value is doing is acting like an acceleration curve, which you can already see is different on the different axes when the values have different scales applied to them. Nothing breaks there, so having the same curve steeper, or more shallow but traveling the same distance in the same time for each axis individually shouldn't be that complicated. It's literally already able to do that right now.Anyway...next misunderstanding coming up.
New Bug/feature: #23 Set Matte Setback? -------------------------------------OK, this comes under Misunderstanding, but that's because I don't understand it. I thought that with Set Matte, if you are using Replace, then where there is 100% Alpha (using alpha in this example) you'll get pixels, and where there is 0% you'll get no pixels and at 50% you'll get a semi-transparent pixel.Replace is the simple one, right? Either do or do not plot a pixel depending on the Mask Value?But, when using something with Transparency in the layer you're applying the Set Matte to...I get a bit lost with the results.TL;DR version, it all works out in the end and you can get the 'expected result' by using other blend modes, I'm just confused as to why they're required.
@Palacono Nope you're being clear but I think there's some confusion concerning how Bézier curves actually work.
In this case the transform, scale, can be manipulated by the curve as long as the transform is applied directly to the control points of the curve. The issue is it has to be a single transform. There can be several values involved in the transform but no matter what you only get the one transform.
Right about now you're probably thinking so what just give me separate curves with separate transforms for X, Y and Z because that's all I'm asking for easy peasy. Ummm no not really. You have to remember what's being manipulated by the curve is the transform not the individual values so even if all you want to manipulate is the Y axis the transform still needs to know X for a 2D transform and X and Z for a 3D transform.
@Triem23 's method of using a multi-point rig, one point per axis, is really the only way around that problem. It could be abbreviated to fit in the value graph so that for the Z curve that's the only axis you can manipulate for example but behind the scenes the math and steps needed would be virtually identical.
Too complicated you say? Well unfortunately if you don't do it that way you can't use Bézier curves. There aren't any shortcuts, To get the subset of functionality you want, you still have to go through all the motions whether you want to or not.
@Aladdin4d Yes you're right. I am going to say "give me separate ones, easy peasy." I just did this. Took a 2D point and created 3 position keyframes on the timeline moving along the X axis only. I then duplicated it and modify the centre keyframe on the second to have a Temporal Interpolation Manual Bezier curve and adjusted it. As the original Keyframes were all linear, I adjusted the left side of the centre keyframe until it was linear between it and the first keyframe, then curved between the centre and the last. Then played through the timeline. They start together and stay together until the centre, where they separate and then arrive at the last keyframe together. Alternatively, by having a curve on both sides of the centre point they start together, separate, arrive together at the centre, separate again and arrive together at the end. That's all I want to be able to do, only instead of X on two separate points; X, Y and Z on a single point. Nothing more complicated than that.
@Palacono You were able to do that because:
"I then duplicated it and modify the centre keyframe on the second to have a Temporal Interpolation Manual Bezier curve and adjusted it."
This gave the transform all the values necessary for it to be applied to and manipulated by the control points of the Bézier curve. You'll never get this....
"That's all I want to be able to do, only instead of X on two separate points; X, Y and Z on a single point. Nothing more complicated than that. "
......without the duplication of points being done somewhere along the line be it manually by the user or completely hidden behind the scenes. All the work still needs to done for each axis and if you restrict it to just a single representation you're removing 95% of the functionality that you gained by doing all the work making it a largely useless endeavor.
Put another way what you're after is absolutely positively impossible under any circumstances until 10 times more work than you think has been done first. There's no shortcuts, there's no middle ground, there's no half-assing it it's an all or nothing proposition. If you're going to do all the work you might as well take advantage of everything it offers instead of crippling it.
@Aladdin4d Of course I duplicated the point. How else was I going to be able to show that the positions of the keyframes are immutable and that whatever the shape, curve, slope or absence of the Bezier curve between them: they'll stay that way? It's duplicating the Bezier modifier for all three axes that I've been saying is needed for Temporal Interpolation only.I occasionally get the feeling that we're not having a conversation based on empirical data. I play with things and see what the results are, but when I present the results of those experiments, you offer the same counter arguments as if I hadn't done so. What makes you think it would be as complicated as you say it would be?I don't see how there is any difference between what I did with X on two separate points with identical keyframes to doing the same with X and Y on the same point with those same keyframes. The keyframes will not move. Have you tried what I did and really think it's 10x more work? Why?There is nothing complicated about the path it takes between those keyframes being controlled separately for X, Y and Z, any more than there is for Opacity having it's own, unique Bezier modifier, because it's a single parameter. You presumably don't think that's impossible, so why do you think it becomes so when you treat X and Y's Bezier curves for the same keyframe separately? It's undeniably simpler to have the modifier shared for parameters with multiple components in the first place. Only one handle is required whether it's a single parameter like Opacity, two for 2D or three for 3D for scale, angle, position etc. but that was simply a design decision, not because it's inherently difficult to have them separate. It's just a smaller subset of the 'everything everywhere at all points on the timeline' than I'm suggesting. The interface is already perfectly capable of allowing you to modify them individually in a non-confusing manner, because what I attempted to do in the first video was perfectly natural and had it worked, I'd have had no problem with understanding how it would behave.And no, I don't believe it's 10 times harder in the slightest. Not even close to that to stop sharing the single Bezier modifier per keyframe with all 3 axes and each have one of their own. It's so trivial, it would be faster to do it than read this post. Copy, paste, paste, rename Bezier to Bezier1,2 and 3. Change links for Y and Z to point to 2 and 3 instead of 1. Done. Anyway, moot point. The developers will do their own thing according to their own internal design agendas and ironically: the more we talk about it the less I suspect it'll get done because then they set a precedent for adding customer requested features and the last time they did that - Quad Warp - they still got criticised. By me. Much easier to introduce a whole new different feature, although if they do find a way to enlarge the subset beyond even what I'm suggesting and still keep it manageable for the users, then that's a huge win for everyone and worth waiting for in Hitfilm5. I'm sure they'll surprise us with lots of goodies either way. Meanwhile I'm more confused as to why Set Matte>Replace chooses to remove the alpha channel for a layer containing alpha information that you apply it too, instead of just using the Mask as a simple window to that layer, as it does with every other layer type. It's not really 'Replace' when it does that, is it?
It absolutely is a "Replace," since a "Replace" mask, by definition, supercedes existing values replacing them with the new values. That's exactly what the word "replace" means. If you wish to keep existing alpha then you should be using an Add or Subtract matte to modify existing values.
Yes, those do Blend modes work, so my misunderstanding was caused by my expectation that Replace was more like "use the Matte as a Mask and retain the alpha properties of what you're applying it to". So... like the cookie cutter it is all the rest of the time when you're applying it to layers with no inherent alpha channel of their own. You say "by definition", but I had only seen this in the documentation, which doesn't explain it enough for me to have formed a different expectation than the one I had based on previous experience with normal 'flat' layers. "Set matte
Enables you to use channels from another layer on the current layer. This can be particularly useful if you want to use the alpha channel from another layer."
Also, an inverted Add is not the same as a Subtract, or vice versa, so it's the way those words are used in relation to layers, etc. is more technical than I'm previously used to.Edit: I had a look here, but that didn't help for Replace.https://en.wikipedia.org/wiki/Blend_modesWell, as with many things: experimentation got the result I wanted.