Python @property

While learning thru advanced tutorials, it’s time to consolidate some basic concepts in Python. The explanation about property at is very clear. I’m writing an example below to remind myself of the private variable _cm being a convention only. Name like temp_cm works too.

Also cm is no longer a normal instance variable when property decorator is used. The design of adding @property allows backward compatible to keep codes unchanged!

class Unit:
    def __init__(self, cm=0): = cm

    def toInch(self):
        return * 0.3937

    # @property
    # def cm(self):
    #     return self.temp_cm
    # @cm.setter
    # def cm(self, v):
    #     self.temp_cm = v

unit = Unit(cm=100)

# {'cm': 100}        Without getter setter. The old way.
# {'temp_cm': 100}   With getter setter. The code still runs. It's backward compatible !

Time to Un-learn

Regaining my time, there are long-awaited things I’m going to learn.

Having built several applications with python, I still don’t think I know python well. At the moment I would recommend the course Python for Maya: Beginner to Advanced Rigging Automation by Nick Hughes to beginners. I’ve just skimmed through about 40% of the course. The demo was done in Maya and explanation is thorough. The early parts are mostly basic but I start to find sth useful for better coding. In the past I would write

def f(nameList):
    for name in nameList:


Now I could skip the for loop with map function

def f(name):

Another one I’d like to share is The Gnomon Workshop – Automating Animation & Game-Ready Rigs by Nick Miller. It’s more advanced and I did fasten my seat belt to learn from him. He is undoubtedly an expert and made things “easy”. The videos are done so next is to study his codes and thought in OOP way.


Catching Covid finally after it’s been prevailing in Hong Kong for that long. Right now I’m quarantined in an interesting government facility and will be released soon hopefully.

At work there are some studies to be done to make use of Metahuman‘s setup somehow. It seems problematic when applying on tiny characters and faces with entirely different proportion. Anyway sharing of similar technologies is truly welcome. More artists could make better work by standing on the shoulder of the giant.


It has been a challenging time. Mask is becoming part of daily clothing. Performing arts & filming industry are greatly affected worldwide. Everyone’s life matters. I hope you are all well, safe and healthy.

These years Blender and UE4 have larger and larger user base. They are FREE but evolving much faster than the white elephants. So the time for lifelong learning again.

Recently I’ve been spending more time in practising English. Hopefully a breakthrough will come along.

Good luck and hang on !

Another Year

Oooops, it’s been a year since the last post.

I’m still working on facial stuff. Just that it’s involving facial scan and capture this time. Actually my Pinterest is updated quite frequently, as my personal reference source.

Time to work again. Happy facial rigging ~

Cloudy Saturday

Oh yes I’m here. It’s been a while not having posts here. Life is like repeating itself when writing various tools for 3ds max. Maxscript has “interesting” design which take me longer to make usable things.

I picked up simple TCL and python for building tools in nuke & nuke studio. TCL is a terrible language to me at the beginning. I wish I was a hard-core programmers then I might get it to work quicker. Inserting and reading custom metadata in DPX is another “old” problem I’m about to tackle finally in the last few weeks.

And it’s embarrassing to tell that I’m learning to use git for my codes recently, before they got messed up too much. seems like a popular choice.

Sound boring. Hopefully got some visual stuff to share later.

Programming again

Picking up python, qt, maxscript, 3dsmax, and shotgun for the new job. The “Tab” for python is quite annoying to me as a beginner. Seeing lot of new stuff but not much to share yet.

Here is a great link about some nice maya rigs available:

Soft IK and more

Packing up some maya stuff I done in the past few months and learning 3dsMax for the coming new job.

The soft IK feature is one of many rig features I wanna to implement many years ago. It’s like all other features, not super hard and you could get it once you’re willing to dedicate to figure out what the hell the logic is. I wonder that my method may not be the best and there must be some simpler one . . .

Recently I would recommend the 8 classes of Cartoony Facial Setup by Puppeteer Lounge. They show the use of wire deformer effectively which works well for general cartoony face. For very stylized or detailed cartoony face I might stick with the general joint based method.

And I found an informative post about some recent rigging techniques !

Maya Update

Finally there is a “flip” blendshape function in Maya 2016 ext2. Before that I have to create a flipped mesh first, and then assign the extracted to the blendshape target. This is the only reason I’m switching to ext2 so far. Their sculpt brushes are weirdly slow so I’m sticking with Shape 3.0‘s Brush tool and looking forward to the support of latest version. The new pose space deformer is confusing to me and the lack of shape extraction means my tools are still valuable !

Responding to the maya camera to AE shake test I did before, I’m sure it works. This is a handy workflow that you could have the shake quick in playblast and still be adjustable in post. Closeup and distant layers may need different amount of shaking to look right.

Corrective Fix Setup

It’s more difficult than expected.

  • Fix shape creation
    I’m using maya 2016 blendshape editor’s new “edit” feature. Suprisingly it doesn’t work for all types of blendshape node, which mean I have to prepare a parallel blendshape for fix shape creation.
  • Delta shape extraction
    I’m using the script extractDeltas by Brave Rabbit with minor modification. It does half of the job. Assigning delta shape manually could be very tedious too. I have to automate it too so that the user wont’t see any delta shape.
  • Pose Space Deformer as shape target driver
    An easier way is to use the method of locator driver with pointConstraint as in the character Ray. It works well with small rotation angle not bigger than 90. But I prefer a general solution with possible angle from 0 to 180, which work from elbow to any other parts. Thus I’m implementing one based on the texture-based PSD method by Harry Houghton. I still can’t avoid the euler rotation problem since PSD has to follow in some areas like wrist twisting. They could be solved in specific ways, either by aimConstraint or direct connection.

By the way, the Shape plugin by Brave Rabbit probably do all the work mentioned above. Anyway it’s very close. Automating the opposite side and implementing reusing features would take the final little extra thought.