Corrective Blendshape at Maya

记录一下最近学到的corrective blendshape知识.

问题描述

First, a basic scene is built, pCylinder1 is rigged and skinned,
basic scene for test

Now, suppose we are not satisfied with the elbow shape, want it change it a little bit. 例如一个手臂的骨骼动画已经搞好了, 后面发现在形状上还想改进一下, 那怎么办呢?

If we select vertices and move them (adding vector delta to these vertics) on the skinned ...

more ...

Pointer is copied when passed as function parameter

起源

看到这段代码(肯定是简化更改版啦)

void XList::merge(Item *item)   
{  
    ... // do the merge sth;   
    item->unref();  
}   
void XList::merge(Item &item)   
{  
    ... // do the merge sth;   
}   

上面的unref()是用于reference count的, reference计数减一的意思. 为什么有这东东呢, 为什么下面用引入作为参数的就不需要呢? 我怀疑是指针在作为函数参数的传递过程中被复制了, 也就是指向实际的物体的指针又多了一个, 所以merge之后就unref减少一个. 以下的test case尝试证明指针是否被复制了:

// try to check if a pointer will be copied during passing-by-pointer.         
//              
#include <iostream>             

void func1(int ...
more ...

Fail to surround the mouse with the vertices

Date Tue 02 September 2014 By renc Category misc.

一个鼠标点press/click在模型上, 然后drag/move, 在这个drag的路程中, 鼠标压到的faces/edges都是连续的, 而顶点vertices竟然不是, why ?

Alt text
一个stroke的过程: mouse click/press -> drag/move -> release.
图中红色点假如为click的起点, 然后沿着粉色的路径来drag鼠标....

从face面的角度来看, 深蓝色的面为起点, 然后鼠标一旦离开这个深蓝色的面之后, 肯定会进入这个深蓝色面四周的8个浅蓝色面之一(假如把面的边界也看作面一部分). 于是在stroke的路线中, 鼠标所pick到的面是一个连着一个的, 连续.

从edge边的角度来看, 鼠标从起点移动时候, 虽然鼠标在面内部而不是压在边上面, 但是面的几个边总有一个是距离当前鼠标位置近一点的, 我们选择这个边; 当鼠标移动要离开这个深蓝色的face的时候, 肯定会触碰到这个face是边(假如把角点corner也看作是edge是一部分). 于是在stroke的路线中, 鼠标所pick到的边是一个连着一个的, 也连续.

而从顶点vertices/cornersd的角度来看呢? 如图中的stroke路线就不会压到顶点, 不会触碰到顶点, 也就是顶点, 不像之前的面和边 能保证鼠标移动的时候肯定会pick到连续的face/edge, 很可能在stroke的过程中都没有接触到几个呢, 更何况是连续?

怎么解决, 假如我们要求stroke的路线中出现一串连续的顶点?
因为上面说到面是完备的 ...

more ...

Build myblog using pelican

都不知道这是第几次又想建一个自己blog来host那些笔记了, 相比于之前的blogger, wordpress, 这次用pelican and python来搞...

环境:

  • python 2.7, withn pip, easy_install
  • pelican
    Alt text
    注意上面的起始目录是E:\Temp\myblog> 我试过别的起始目录是E:\Temp\myblog\context> 就发生错误了. 进入output目录, 打开index.html就可以看到blog了。这里我没有用到make html命令哦.

遇到的problems:

  • 设置图片目录的路径.
    我的图片都是文档.md目录下的data目录, 例如folderA/xxx.md, folderA/data/yyy.PNG. 在pelican这里, 我想保持这样的结构, folderA 相当于 context目录, 目的是blog的内容(文档和图片)已经可以放到某个folderA里面, 然后要用pelican来build这个blog的时候, 直接把folderA目录里面的所有东西copy到context目录下就ok了.
    但是pelican默认是把图片放到blogFolder/image目录 ...
more ...

build simple ui using pySide

记录一下做UI prototype时候遇到的新概念

life is short, use python.

早有耳闻, 一试果然不凡. 安装Qt 4.8.X, 安装pySide (how? 具体看其主页), 然后新建file.py, 敲几行pySide代码, 然后command line里面python file.py立刻就出ui效果了. 省却了ide / c++代码 / 链接设置 / 反复修改反复编译的麻烦.
事情的缘由是, 最近要参与用python快速做一个ui的prototype, 本来主程序M里面就有Qt+pySide, 所以连安装都不需要, 直接改py文件就得到ui结果, 真快. 于是就缺学几下python了.

example 1. To define the style sheet 样式 of a button.
Alt text

QPushButton {
    border: 2px ...
more ...

How to debug maya custom plugin

涉及maya plugin开发的时候,怎么debug呢?

Attach to maya process ... 寄生

step 1. maya plugin manager (Window -> Settings/Preferences -> Plug-in Manager)中load your custom plugin. This plugin need to be built by the same compiler version of maya, 也许不需要. step 2. at your visual studio project of that custom plugin, Tools -> Attach to ...

more ...

Tree view at Qt

Qt中的TreeView很复杂, 记录一下自己的理解.

引言

Model/View/item的关系就有点像Container/Algorithm/Iterator的关系。 Tree view属于Model/View Programming的一部分。有些

Index 带上下层级结构的二维索引

QModelIndex()表示model中最上层的root item的index, QModelIndex().isValid() == 0.

item之前有上下层级关系,index.parent()获取index的parent. 当index.parent().isValid() == false,表示这个item的parent就是root item. 这些items被称为top-level itmes.

to retrieve data from a model: for (int row = 0; row < model->rowCount(parentIndex); ++row) { for (int ...

more ...

Blendshape at maya

最近接触了一点maya blendshape programming, 稍微记录一下。

BlendShape deformer basis (基础)

先说明一个特点,当drag一个cube or sphere物体的时候,会生成两个nodes, 具体的细节请看maya scene graph,DAG。

To create a simple blendshape example,
Polygon mode, create a cube, we have ;
Select cube1, Shift+D, we have , move cube2 a little bit away from cube1.
Select cube1, Shift+D, we ...

more ...