Monday, August 1, 2011

Maya Viewport 2.0 - HwPhongShader

HwPhongShader 這個範例新增了 Viewport 2.0 的支援,最主要的功能都是來於 MHWRender::MPxShaderOverride 的實作,MPxShaderOverride 可以讓使用者針對某一個 node 來自訂 render 的方式,輸入的資料有 geometry, textures 和 lights,我們可以將 MPxShaderOverride想像為一個 CgFx 或是 HLSL effect 檔的專用 renderer 根據 Maya 場景中所提供的資料來繪出物件。

Tuesday, July 26, 2011

Maya Viewport 2.0 - ApiMeshShape 範例

ApiMeshShape 這個範例新增了對 Viewport 2.0 的支援,示範了如何使用MPxGeometryOverride,基本上 MPxGeometryOverride 只是用來定義 geometry 和 render items 的一個介面

Sunday, July 17, 2011

Maya Viewport 2.0 API

Maya 2012 的重點項目之一就是強化過 viewport 2.0 和 Hardware Renderer 2.0  (http://area.autodesk.com/gdc2011/viewport?KeepThis=true&TB_iframe=true&height=520&width=840),viewport 2.0 是 Maya 開發團隊重新打造,架構在 programmable shader system 之上,想要用來取代舊有 rendering system 的新武器,理由其實不難理解...

Saturday, June 25, 2011

Vim 學習筆記 (五)

使用 vim 的時間不知不覺又偷偷的往上升了一些,三不五時的也會去隨便搜尋看看有沒有什麼新的好東西可以用,有時還真的會找到寶,像我最近用最多的就是這一個 - EasyMotion (http://www.vim.org/scripts/script.php?script_id=3526),有多好用呢?

Friday, May 6, 2011

How to reload python modules?

在寫 Wing IDE -Maya Python scripting 的好幫手 時有提到要如何修改 Python 的 script 後而不需重啟 Maya 的方法,主要是使用 reload 這個 function,但很快的就會發現當你的 script 也有 import 到別的 module 時,這個方法就行不通了,因為 module 之間有先後順序的依存關係,先 reload module A 和先 reload module B 會導至不同的結果,這個問題困擾了我許多,最後在 Reloading Python Modules 這篇文章找到一個不錯的解法 (不確定是不是最好的解法,但已足夠我目前的使用)

Thursday, May 5, 2011

Vim 學習筆記 (四)

真是驗了某人說的,vim 用的愈多,愈有不滿足的感覺,東找找西看看又發現了一些不錯的東西,順便做一個小筆記免得幾天不用就忘了 :)

  • searchComplete ( http://vim.sourceforge.net/scripts/script.php?script_id=474 ): 在使用 "/" 搜尋時,輸入部份字串再按下 TAB 可以自動補完,就像在 shell 裡輸入命令時的 TAB 一樣,懶人 (我) 的好幫手。
  • SuperTab ( http://www.vim.org/scripts/script.php?script_id=1643 ) : 非常方便的在輸入模式下使用 TAB ,按下 TAB 會將 match 的字串列出來,並可以使用 Ctrl+ N/P 去選到想要的字串。
  • xptemplate ( http://www.vim.org/scripts/script.php?script_id=2611  ) : 類似 textMate 的 snippets,支援非常多種的語言,也很方便的定義新的 snippets,個人覺得非常好用,舉例來說,開一個 cpp 的檔,在輸入模式下,打 class 然後 Ctrl + \ ,xptemplate 就幫你輸入好一個完整的 class ,還有什麼比這個更方便的呢 :D
  • surround ( http://www.vim.org/scripts/script.php?script_id=1697 ) : 原本已為這個是可有可無的 plug-in,沒想到試用之後,出乎意料的好用,可以很快速的在某個字或某行前後加入或刪除像 " 或是 ' 如果是編輯 html 或是 xml 還可以插入 tag 。
vim 真是愈用愈好用 ^^

Sunday, May 1, 2011

Maya Python API 2.0!

Maya 2012 的 hotfix 1主打的一個項目就是 Python API 2.0! 根據宮方說法,新的 Python API 執行的更快,看起來也更 Pythonic,讓熟悉 Python 的開發者可以更容易的上手,從文件的說明有幾個重點,第一個就是新舊 API 可以共存,但不能共用,文件中提供了一個例子如下,

Saturday, April 30, 2011

我的 Maya Python scripted API 學習之旅 (二)

  • CircleNode : 一個 DG node,input 可以是一個數值(例如時間),然後 output 是根據 input算出的 sine 或 cosine,在 plug-ins 的目錄底下還有一個 circleNode.mel 示範要如何使用這個 circleNode,我覺得這個範例雖然說沒有很複雜,但卻清楚說明了 Maya 設計上的理念,整個 Maya 無數個 node 所組合成,每個 node 的功能都明確的定義,資料進,經過加工處理,輸出新的資料,node 與 node 間乾乾淨淨沒有相依關係,這也是我相當為 Maya 著迷一個原因。  
import pymel.core as pm  
# 建一個 circleNode
pm.createNode("spCircle", name="circleNode1")
# 建一個球
newSphere = pm.sphere(r=1)
# 將時間的 outTime 串到 circleNode 的 input
pm.connectAttr("time1.outTime", "circleNode1.input")
# 將 circleNode 的 sineOutput 串到球的 translate Y
pm.connectAttr("circleNode1.sineOutput", '%s.ty' % newSphere[0])
# 將 circleNode 的 cosineOutput 串到球的 translate Z
pm.connectAttr("circleNode1.cosineOutput", '%s.tz' % newSphere[0])

  • customImagePlane : 如何使用 MPxImagePlane 的範例,可以讓使用者定義新的 image plane 使用特定的 image 格式或是改變現有 image plane 的行為。
  • customNodeFileTranslator : 非常陽春的 exporter/importer,輸出場景中 node 的名字,讀進來的時候,就將輸出檔中的名字列印出來。
  • filmMoveManip : 一個自訂的 manipulator 用來控制 camera 的 filmTranslateH 和 fileTranslateV ,這個範例有一個 bug ,在 updateManipulators 這一個 function 中    selectionIter = OpenMaya.MItSelectionList(selectionList, OpenMaya.MFn.kInvalid)用 OpenMaya.MFn.kInvalid 是沒辦法選到 Camera 的,需要改成 OpenMaya.MFn.kCamera 才行,執行以下的 script 可以在 Custom 的 shelf 做出一個按鈕,選一個 camera 後,按下按鈕,按鈕會被 highlight 然後就可以在 viewport 裡秀出這個 manipulator 來拖拉改變 camera 的設定。
     
import maya  
maya.cmds.spFilmMoveManipCtxCmd( 'spFilmMoveManipContext1' )
maya.cmds.setParent( 'Custom' )
maya.cmds.toolButton( 'spFilmMoveManip1', cl='toolCluster', t='spFilmMoveManipContext1', i1="filmMoveManip.xpm" )

我的 Maya Python scripted API 學習之旅 (一)

對我來說,最好的學習資料來源就是 Maya DevKit 裡的範例,每一次新版 Maya 更新,我都會先去瞧一瞧裡面有沒有什麼新東西,也常常會有意料之外的驚喜,但最近也突然發現自已對這些最好的研究資料掌握度並沒有很高,很多東西都只有一知半解(可能連半解都不到),想趁著自已有空閒的時間,好好的走過這些開發團隊的心血,

Sunday, April 24, 2011

Tetrix in Maya with PyQt

在瀏覽 PyQt 的範例時,意外發現有一個 tetrix 的範例,不知為什麼就很想看看在 Maya 裡玩 tetrix 是怎樣的感覺,雖然很久以前好像就知道有人做過類似的東西(用 mel 做的? 我是只有聽過啦),總之,帶著興奮的心情就開始了,

Friday, April 8, 2011

第一個 Maya PyQt 的小程式

Maya 2011 的介面使用 Qt ,那到底帶給開發者什麼樣的好處呢?我第一直覺就是 ya! 可以使用 QtDesigner 來設定介面,不用在一行一行去設定 UI 的大小位置,但第二直覺就在想那 Maya 厡生的 UI control 如 gradientControl 或是 attrNavigationControlGrp 等要如何去整合到 QtDesigner 裡呢,雖然我是覺得可以用Qt所供的元件再去實作出一樣的 Maya UI 元件,但感覺卻是一件大工程 ^^? 有點偏題了,這次的練習想由 QtDesigner 做出介面,並使用 PyMel 來實作功能,想做怎樣的東西卻有點苦腦,最後決定做一個可以用 regular expression 來搜尋場景中物件的小工具,

Vim 學習筆記 (三)

什麼是人的隋性,看看自己的 blog 就可以有深刻的體會!! 離上一次寫寫東西居然已經過了三個月了 (迷之聲:明明就是自己懶隋,還要拖別人下水)也再一次的體驗到時光飛逝的速度,使用 vim 的時間又增加了一些些,但一直覺得 taglist 不能用在 Maya mel 實在有些不方便,厡因是Exuberant Ctags 沒有支援 Mel,想說會不會已經有解,但很可惜的找了許久還是沒有找到,但我需要的功能又不用太複雜,只要可以找到 function 的定義就夠了,想著想著,乾脆自己來

Thursday, January 6, 2011

Vim 學習筆記 (二)

使用 vim 近二個月了,雖然不全然是重度使者,不過還是用出了一些興趣,最好玩的莫過於 vim 的外掛們了,全世界的高手們分享了各式各樣適用於不同情況的外掛,想得到的功能幾乎都有人做過,http://www.vim.org 上可以找到許多非常好用的外掛,可以省去不少的時間,雖然有很多工具我還只是聞其名還沒有真正的去使用,但也有用了一些覺得真是非常好用,在這裡分享一些我現在常用的幾個外掛