For those have been interested in using my seUVBlendShape plugin and tools, now there is one more reason to jump aboard! Coming soon a GPU accelerated version will be available in Maya 2016. This adds a good amount of performance and playback speed. For a little demonstration on this new addition, take a look at the video below:
I have been doing some development in Maya’s new GPU deformer override and I found it very handy and straight forward to implement. There is a simple feature to build the OpenCL kernel from an external file. This is fine if you want to provide the kernel source for others to improve or fix without recompiling. But for those that for one reason or another do not want to provide the kernel source code, you have to do it another way. Which is what I will show in this tutorial.
Though in the future we will have more options on using tools like Spir-V to generate an intermediate form which has many advantages and look forward to exploring those projects soon. But now, I hope this information is useful to bundle up your software by embedding the kernel code into your plugin source code.
Take a look at the “Adding OpenCL Kernel To GPU Deformer Without Kernel Source File” page.
If you have used dock widgets in Qt, you may have docked with with tabs for easy stacking of other dock widgets. One handy feature of the tabs is when you click on the active tab, it will collapse the dock area and clicking a tab will expand it again. One thing however that is missing in Qt is a way to trigger this behavior yourself. If you simply hide the dock widget, the tab will disappear so that is no use. There is no slot or function to control the action. After lots of investigating I came to the conclusion that there is some custom Qt event handling specifically for mouse button clicks on a dock widget tab. Triggering this event causes some way to hide the dock but keep the tabs using some other special method. The Qt source code doesn’t expose this either so there is no way to find what is happening and recreate it yourself.
But I didn’t give up, I wanted my tabbed dock widgets to be collapsed upon opening the UI to keep tools that are not needing to be seen from distracting the user. So how can I trigger this behavior programmatically? Well, I simulate a mouse button click event on the tab so I trick Qt on thinking the user did click on the tab! By creating my own QMouseEvent, I send the event to the tab bar with the position of where the “click” happened and let the tab bar handle what it does, which is collapse/expand the dock widget. Simple!
Below is the code snippet I created to reproduce a mouse button press event over the tab that has the same text. Simply pass it a QMainWindow instance and the text on the tab you want to “click” on. The return will be True if the tab was found and event was sent otherwise False. Now you can too programmatically trigger this feature which should have been included in the first place. By the way, this is for Qt 4.8, maybe future versions will support this.
def simulateDockTabClick(window, tabText):
Simulates a left mouse click event on a dock widget tab with the given
text. A possible use for this function is to recreate the effect of
collapsing a tabbed dock area as Qt doesn't expose a method to get this
:param window: The QMainWindow widget to use
:type window: QtGui.QMainWindow
:param tabText: the text in the tab to "click" on
:type tabText: str
:returns: True if dock tab was found and event was sent, else False if
no tab was found with the text.
assert isinstance(window, QtGui.QMainWindow), \
'Widget is not a QMainWindow instance'
for child in window.children():
if isinstance(child, QtGui.QTabBar):
for i in range(child.count()):
if child.tabText(i) == tabText:
tabPosition = child.tabRect(i).center()
event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
Not too long ago I finally released my UV BlendShape deformer and received lots of positive feedback. One thing that I didn’t think about initially was other than watching my videos for demostration, how are they going to know how it will benefit them? I decided to come up with a plan for a trial version and began tossing a few different ideas around on how I would deploy such a thing. At first I was going to do a time trial, but that was too difficult to get working perfectly without someone easily getting around it or making it a big pain for the user and myself. I can now understand why there are license servers that manage these things now.
To make it easier for myself and everyone, I decided to just add a couple limitations to the deformer. So there is no time restriction or how many times you can use it. The only limits are that it will only work on geometry with 3,000 vertices or less and only up to 3 targets. I hope that will allow for some everyone to evaluate the tools before committing on making a purchase. All the tools and examples that are included in the full version are in the trial.
So if you were curious about the seUVBlendShape set of tools but didn’t want to put the money down yet. Please give it a try and see if that will help your decision. I appreciate your support and hope you enjoy taking it for a test drive.
It’s finally here! After a lots of time spent on putting everything in place to make this a solid and complete tool, it’s ready to go. Since I posted my first version almost 3 years ago, I have received several emails asking if this would be made pubic at some time. At the time it had limited features and I wanted to make some major improvements before I would release it into the wild. So in my spare time, I started with a clean slate and added new features while making sure performance was improved as well.
In addition to a completely new code for the deformer, additional tools were developed to make it a complete package and ready for anyone’s projects and pipeline. A lot of hours were spent writing and testing these tools and I hope they will be a big help to others. I appreciate everyone’s support.
So I am pleased to finally say yes, you can download this plugin and tools for a small price which I feel will pay for itself with the time saved. I have made a special page with all the details here:
Thank you again and I hope you enjoy!