2019/08/18

【Unity】呼叫WinAPI的GetCursorPos例子

雖然Unity的語法是以C#為基礎編程,但沒有提供完整的C#功能,要實現某些功能的時候還是要繞過Unity本身的C#,通過呼叫WinAPI的方式。
這裡我們紀錄一下如何使用GetCursorPos以及SetCursorPos這兩個函式。

//首先要使用這個命名空間才能辨識DllImport
using System.Runtime.InteropServices;

[DllImport("User32.Dll")]
public static extern long SetCursorPos(int x, int y);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT lpPoint);

//由於Unity中處理座標都是以3維方式儲存,我們要重新定義一個struct才能儲存GetCursorPos回傳的2D座標
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;

public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}

//使用例子
POINT cursorPos;
GetCursorPos(out cursorPos);

Read More...

2019/06/29

【Cubism】.cfg 設定檔詳細說明

如果你不知道.cfg設定檔是什麼、要放在哪裡,請先看這篇

如有需要,將對應的指令以及數值直接個別貼在.cfg文件中存檔即可。

cc_[角色名稱] .cfg設定檔

設定重力(3.0以上限定):
cubism30_set_gravity [角色名稱] [水平重力] [垂直重力]
預設重力為 ( 0 , -1 ) 例子如下:
cubism30_set_gravity AAAA 0 -1

啟用風模擬(3.0以上限定):

cubism30_enable_wind [角色名稱] true
加入這行才會啟動風吹效果。

指定風向(3.0以上限定):
cubism30_set_wind_optons [角色名稱] [水平風向] [垂直風向] [風力]
風力設定建議介於0.0~6.0之間。

攝影機位置
set_cam_pos [角色名稱] [X座標] [Y座標] [Z座標]
這個設定可以調整角色載入時出現在畫面中的位置跟大小,
不過其實你可以直接在Facerig中調整好想要的位置之後,
(Alt+滑鼠右鍵拖曳上下調整縮放;Alt+滑鼠中鍵移動位置)
按下Ctrl+Shift+F便可將指令直接存入.cfg中。

待機動畫:
set_idle_anim [角色名稱] '[動畫檔名].mtn'
使用這個指令可以更變呼吸的動畫,3.0以上的版本須將.mtn省略。


指定動作(動畫)
set_special_acton_anim [角色名稱] '[動畫檔名].mtn' [序號]
指定動畫檔名時3.0以上的版本須將.mtn省略。
序號為1~6的數字,預設分別對應Facerig中的快速鍵QWERTY。
即按下Q會啟動序號1的動畫。
Facerig的快速鍵設定可以在Facerig中更變。

指定姿勢(表情)
set_special_pose_param [角色名稱] '[參數名稱]' [最小值] [最大值] [序號]
序號為1~8的數字,預設分別對應Facerig中的快速鍵ZXCV以及Shift+ZXCV。
其中1~4的序號可以直接使用預設參數而不用另外設定(請參考這篇的預設參數),
5~8的序號則需要自己另外設定參數名稱。

cc_names_[角色名稱] .cfg設定檔

角色暱稱
set_friendly_name [角色名稱] '[角色暱稱]'
設定一個比較易懂的顯示名稱,沒有設定的話,顯示就是角色名稱。

角色說明
set_avatar_skin_description [角色名稱] default '[角色說明]'
選擇角色的時候會出現的說明,你可以在這裡輸入製作者、版本等資訊,
也可以列舉每個動畫跟表情的按鍵說明。
在兩個單引號之間可以使用
換行,可以使用中文。
要注意的是如果沒有設定角色暱稱,則這個設定不會生效。

Read More...

【Cubism】製作適用於Facerig的完整角色安裝包(3.2新版)

基礎安裝包

使用Cubism 3以上版本輸出了基本的三個檔案之後(詳細流程請參考這裡),其實便可以放在同一個資料夾中進行安裝了。
以下假設角色的名字為『AAAA』,請將看到的AAAA都更換為您角色的名字(英文限定)。
將檔案放到同一個資料夾之後重新命名,看起來會像是下圖:


依照圖片所示安排檔案之後,只要將整個資料夾放到Steam資料夾下
Steam\steamapps\common\FaceRig\Mod\VP\PC_CustomData\Objects\
中,便可以在下次開啟Facerig時看到新的人物了
(這裡的.1024資料夾會根據你輸出的圖片尺寸而有名稱上的不同,請不用特地更改。)

完整安裝包

除了上述檔案之外,您還可以追加一些額外的設定檔案進行說明、物理、按鍵、動畫等設定,這些額外的檔案都是不必要的,如果有特別的需求再個別增加就好,完整的安裝包資料夾結構如下圖:




[角色名稱] 
│  cc_[角色名稱] .cfg
│  cc_names_[角色名稱] .cfg
│  ico_[角色名稱] .png
│  [角色名稱] .moc3
│  [角色名稱] .model3.json

│  [角色名稱] .physics3.json

├─[角色名稱] .1024
│   texture_00.png

└─motions
     anim01.mtn
     anim02.mtn...


接下來針對完整安裝包增加的檔案分別進行簡易說明。

ico_[角色名稱] .png
追加這個檔案,可以更變顯示在Facerig裡面的角色縮圖。
如果沒有這個檔案,第一次開啟時會看到問號圖示代替縮圖,
並且在第一次開啟角色的時候,Facerig會自動擷取畫面做為簡易的縮圖補足。
這個檔案的尺寸必須是256*256像素,PNG格式,不支援透明度。

[角色名稱] .physics3.json
物理效果的設定檔,如果模型有製作物理效果便會自動輸出這個檔案。

motions資料夾
將動畫的.mtn檔放在這個資料夾底下,指定動畫的設定請繼續往下看。

cc_[角色名稱] .cfg
這個檔案可以直接使用筆記本創建編輯,將副檔名.txt改為.cfg即可。
此檔案可以進行以下設定:
物理重力設定
模擬風設定
攝影機位置
待機動畫
動作(動畫)指定
姿勢指定

cc_names_[角色名稱] .cfg
這個檔案可以直接使用筆記本創建編輯,將副檔名.txt改為.cfg即可。
此檔案可以進行以下設定:
角色暱稱
角色說明

由於最後兩個.cfg檔案的設定比較複雜,有興趣的人請繼續參考這邊看詳細說明。

Read More...

【Cubism】Facerig支援模型版本差異

此文章更新於 2019/06/29 ,關於最新版本的支援可能在未來異動。
這裡列舉三個輸出模型的時候可用的版本以及他們於Facerig中可產生的效果,不是Cubism本身製作模型時可使用的功能差異。

簡單來說,目前可支援的最新版本為3.2而非3.3。

2.1
較舊的版本,目前還是最常見的類型
可由主要模型檔案副檔名 .moc 分辨
主要使用DirectX 9渲染,效能較差

3.0~3.2
目前可支援的最新版本
可由主要模型檔案副檔名 .moc3 分辨
使用OpenGL渲染,可以達到更好的效能
開始支援膠水、顯示群組等重要功能
可為每個模型添加獨立的物理設定(重力、風)

3.3
Cubism可輸出的最新版本
在變形器上做了優化使變形更漂亮
但是Facerig目前尚未支援這個格式
由於這個格式目前是預設的輸出格式,請記得切換回3.2版才能在Facerig中使用
否則目前只會看到一片空白

Read More...

2019/05/10

【繪圖筆記】初心-在你埋頭下筆之前


試著回答自己這三個問題
目標-為什麼畫?
方法-畫什麼?
成果-畫到什麼程度?

覺得累的時候如何持續畫下去?
確定自己的目標以及達成的方式,往往能幫助你找回動力、排除不必要、多餘的行為,進而幫你更快地成長
就像是幫你的畫布先畫好一個外框,並告訴自己,沿著這個畫就好、畫出去的東西都是不重要的,避免太常在外圍的空白遊走浪費時間。
這樣的觀念不只可以用在畫圖上,各種生命中的計劃都是,也可以在一個計畫裡面的細項應用喔!0w0
(Q:做多餘的事情,學到更多不好嗎?
 A:好,但是沒有直接的幫助,並且讓你離目標的路程更遙遠。)

請注意這三個問題,最主要是在幫你縮小範圍,而不是增加『我好像也可以同時做什麼』的選項。
另外,對於每個問題的答案都有可能在進行的過程中產生變化,進而影響最後的答案,發現的時候請立刻從頭開始,轉換你的做法。
請記住一切都是為了達成目標,而不是不捨地在錯誤的地方躊躇摸索祈禱哪一天可以突然達成目標。
(點開看更多說明)

為什麼畫
將腦海中的畫面畫出來不是一件不花力氣的事情,是什麼讓你願意動筆花時間呢?
只給自己看還是也給別人看的?
想跟別人分享什麼嗎?
只是想要紀錄什麼嗎?
想要表達什麼從沒看過的畫面?
希望直接作為商業用途嗎?
希望幫人解決什麼問題嗎?
希望應用來襯托、描述什麼作品嗎?
『為什麼畫圖』的答案可能比較複雜且包含多個細節,至少通過思考也可以先將否定的答案給剔除。
但是也要注意你的答案裡面可能實際包含了多個差距很大的目標,請盡量不要視為同一個目標處理。例如『我只是想畫自己想看的東西、並作為商業用途讓人購買、也可以用在各種不同媒體上。』實際上可以看做是很多不同的目標,想要透過一種方法同時達成比較不切實際。

畫什麼
為了實現上一個問題的答案,什麼類型的風格適合達成這個目標?
你可以先從自己最喜歡的幾種畫風或是媒體開始挑選,但是要注意這些選擇不一定真的適合,請盡量客觀、實際地選擇,最後選擇的雖然不一定是你最喜歡的方式,但是一定會是你想做的事。
這個問題可能早就與上一個問題互相結合,變成目標的一部分,例如『我希望利用某個畫風表現XXX』,這樣很好,你眼前的岔路變得更少了。

畫到什麼程度
最後,在綜合以上兩個答案的前提之下,你最少需要做到什麼程度?
現在,你已經知道你該做什麼了,由於追求『更好』是沒有盡頭的,請先大概標出達成目標的最低限度,雖然最低限度聽起來有點LOW,但你確實是達成目標了!這可以幫助你釐清應該在什麼時候收手,也可以說『你已經達成目標,目前不需要再做更多了』,這比起無窮盡的追求完美看起來更容易達成一些,不是嗎?

到了達成目標的時候,你可以決定再次精進,立訂新的目標。不要待在舒適圈中,持續加油努力吧!

Read More...