2019年2月24日 星期日

程式不想收到的美術圖(下)

 其實現在手上的專案以2D為主,3D的部分接觸較少
 雖然也有收到幾個有問題的3D圖檔,但更大部分會講「美術和企劃們不要把Unity想得太萬能」這件事——沒裝插件的Unity可是很多事情都做不到的
 但在探討這個之前,show一下手上不太想面對的FBX www

 首先,不要把四個攝影機包在物件裡(親身經歷)
 每次收到一些個別要更換的model時,裡面總會出現4個攝影機和4個攝影機Target,然後就要選取全部再刪掉
 幾秒鐘的動作,但很煩
 #超級煩

 void PleaseGiveMeACorrectModel(){
  print("在這地方消磨掉程式的耐性,就別怪他功能寫不好了")
 }

 接著要說的是:希望能把model歸位
 甚麼意思?

 這個意思
 (上面只是模擬一下當時情況ww)
 明明外層的空物件座標在(0, 0, 0),但裡面的model位置就各種神奇各種怪
 基本上我收到model的全部都是這樣子(遠目
 如果model只有一個的話就算了,假如包住的是結構較複雜的多重物件,那我還要再調正確位置……
 PleaseGiveMeACorrectModel();

—————
 手上能說的問題圖檔就這些,接下來就是「別把Unity當繪圖軟體!」的部分
 在開始之前先說一下,我是以原本Unity的功能,意則沒有使用插件為基準來說的
 畢竟有時請款買插件也可能不會過(咦#

 先來第一點:Unity沒法調model的頂點
 (插件ProBuilder好像可以,但現在主力做2D,所以還沒有空研究)
 事源是某天,美術丟了個FBX給我,那是一個平行四邊體
 然後想說讓我在Unity裡自行縮放做些效果
 但想當然,一拉長的話,最左右兩側的頂點也會拉寬,導致整個變形
Like This

 把這情況告訴美術之後,他問我:
 「不能調點的嗎?」
 「對,不能調點。」
 我誠懇地點頭。

 所以,最後他拆了個三角形和長方形給我,讓長方形在伸縮的同時,三角形跟著移動
 這種做法不是問題,問題是他長方形的軸心沒調好#
 要解釋這個,先來個gif一下

 這是Unity生成的四方體,軸心在正中間,縮放的話會上下一起拉長(美術給我的就是這種)
 然後,假如把軸心放在模型底部的話,縮放起來像這樣:


 要動態伸縮做效果,軸心在底部時程式們才好處理
 但如果美術不想改時,除了暴走和離職之外有甚麼辦法呢?
 那就土法煉鋼:改Scale時,同時改Position
 又或者,自行生成一個空物件,強制改變模型的軸心

 把空物件放在模型底部,再把模型拖進去,成為空物件的子物件
 至於空物件的位置要怎樣調好——嗯,考你眼力w ((喂#
 所以,美術呀……PleaseGiveMeACorrectModel();


 第二點:Unity不能拆UV (同樣地ProBuilder好像可以#)
 事源,企劃問:「你能不能把貼圖只貼在四方體的其中一面?」
 我:「那要美術拆UV,又或者給我一星期來研究Shader。」
 企:「Oh……所以是不行哦……」
 然後走掉了。
 所以就真的不能給我一星期來研究Shader嗎qwq

 總之,沒有任何外力幫助的情況下,Unity裡生成的3D物件,材質貼起來時都是一個整體


 第三點:沒辦法調個別材質的對比度啦!
 某天在試貼圖,因為對比不太明顯,企劃試著問:
 「有沒有辦法調一下對比,讓陰影更明顯……」
 「NO!」
 除非你給時間我來研究Shader
 ……嗯,第三點就這樣XD
 真的不要把Unity當繪圖軟體啦((吶喊


 第四點:
 「有沒有辦法在Unity內,直接做出物件彎曲的動畫?」
 「有,Shader。不然就美術出圖。」
  所以企劃就跑去騷擾美術了。所以我說Shader呢?
 (其實也可以用C#來讀取模型的Mesh,獲得頂點後再自行調整……但這操作太高端我不會#)
 然後,美術出了一個動畫,但丟到Unity時卻沒有彎曲……那是因為,Unity不支援調整頂點的動畫,只會吃物件本身的Transform以及骨架動畫
 (當然,這世界上沒有插件解決不了的事情。有不少插件就是讓你能夠調頂點w)
 Unity不吃頂點動畫……稍為算是個注意事項吧?
 如果辛苦調出來的頂點動畫不能用,要不重做,要不研究插件,那真的會崩潰www

 理論上,較簡單的物件扭曲(比如在架上飄的衣服),我是推薦用插件,或是寫Shader
 但如果趕時間,那就直接上骨架吧w
 畢竟畢製時,優化這種事是在有充足時間,又或是等你效能爆炸時才會做的#


 最後,再來一點點心得(?)
 假如程式拿到不好的美術圖時,不要立即爆氣,儘量和美術講解一下「圖不能用」的理由。知道原理的話,說不定下次出圖會好一點
 (但美術能不能理解程式們的解說,那就另一個故事w)
 然後美術聽到圖不能用時,也不要覺得「一定是程式的問題」
 很多時候,圖不是真的「絕對不能用」,而是要用的話,會消耗更多效能和時間和耐心
 為了整個專案著想,圖片修正後才能加快開發進度

 總而言之……就算美術和程式互看不順眼,但表面上還是得來個良好溝通。出圖的規範儘量統一好
 不然遊戲進度一直卡死,最後爆炸的話就真的GG了
 如果你有心專案爆掉那例外

 就這樣,以上owo/

2019年2月23日 星期六

程式不想收到的美術圖(上)

 在畢製時期,因為身兼美術和程式,自己出圖自己用,一些基本的注意事項也都清楚,所以美術上沒出現甚麼大問題
 (真正有問題的是我程式能力太弱功能寫不出來XD)

 然後現在出社會,當個超菜鳥工程師,才發現原來美術不熟Unity的話,很多時會出了一些工程師們不太想收到的圖(´・ω・`)
 所以就著步入社會半週年,想來講一下至今收到的「不太好的」美術圖
 但……因為我還太菜,無法講得太深入,而且專業人士應該都知道這些東西,所以整篇文就會以「畢製注意事項」的形式來編寫

 ——————

 首先是不論2D還是3D,兩者皆通用的一點,就是:
 不要用中文命名
 我真的不想看到圖檔是用中文命名 

 雖然理論上,就算用中文Unity也能找到圖檔,但——
 先不說會不會有Bug,單是看到檔案裡有中文就會不爽啊(゚皿゚メ)
 收到中文圖檔時第一件做的事情就是要煩惱把它改回英文名
 如果一件兩件就算了,一堆東西要改名字的話不單花時間,更會耗掉耐心呀(苦笑

 雖然美術也可能會說「我又不知道工程師要怎樣命名,交給他們自己處理不是更好嗎?」之類的,顯然美術人也不想煩命名((X
 那這時候,這種比較偏向文字類型的工作,就落在企劃身上了
 企劃開出「美術需求」的同時,就要開出圖檔應有的命名
 統一命名之後不單方便溝通和作業,在圖檔出問題時也較容易追縱——只要說出名字就能立即搜尋到,不用再每個檔案慢慢找
 而更重要的一點是:
 #可以避免工程師收到中文圖檔
 #會生氣

 ——————

 接下來先說2D的部分
 不過因為現時在開發博奕遊戲,沒收到2D動作圖或場景之類的,所以能說的只有UI:

 首先,同一系列的圖請用上同樣的尺寸大小
 那甚麼是「同一系列」呢?
 比方說「數字圖」和「按鈕圖」等等

 這類圖通常都會經常切換圖示,或通用性甚高
 所以,能夠做到「換圖示」後就不用再設定些有的沒的,才是最順心的做法
 「設定些有的沒的」指的是RectTransform裡的大小
 如果同系列圖的大小都不一,那切換圖示後圖片會被壓縮或位長
「1」的圖示尺寸比「0」小,被強行拉寬

按鈕按下去後,因兩張圖尺寸不一導致位移

 雖然,程式其實也能在換數字時在行碼中更改圖片大小,也可以在按下按鈕時命令按鈕移高
 但……這樣寫意味著只要每切換一次圖示就要更改一次,這樣真的不優w
 #請先讓美術切好圖
 #把效能用在更有意義的地方上
切圖正確的按鈕

 通常建議同系列圖,取最大那張圖的尺寸為標準,這樣切下去後程式就能直接換圖,方便快捷(灑花

 不過也有稍為不通常(?)的情況,就是圖的尺寸中心並不是視覺上的中心(公三小
 像上面左圖,花紋佔了不少比例,導致「0」字偏右
 儘管這種情況也可以成為美術特式(吧
 但如果要追求「工整」,就要在右邊也加開一點空白像素,這樣丟Unity後就相對較為置中

 由此延伸,其實「空白像素」有時也可以玩些花樣,至於要怎樣玩就要看創意了~
 

 接下來第二點,UI 圖請不要過大
 曾經收到過一系列圖(大概26張),每張都用A4 Size (300 dpi)來出圖
 等於我收到26張(3508 * 2480)的UI 圖,而遊戲的解析度是(1280 * 800),我要把圖片都縮小200倍才能用……
 更別說匯入Unity就花掉三、四分鐘,然後為了調好比例,一直在那邊調數值弄了好一陣子……
 #真的會生氣
 基本上,在不違反「同系列同尺寸」這點上,圖都是能小則小(應該……XD
 過多的調整往往會消磨掉耐心和時間,而且日後要修改圖片亦變得困難
 所以,美術出圖時請考慮一下程式,不要太自由奔放,每次都開A4 Size www

 3D的部分下篇待續>