2008/07/29

【3D製作日記】簡單外框線概念

雖然如何把曲面接起來的答案還沒找到…
另一方面也開始研究卡通材質的實現
說到卡通材質,常常會用到的就是輪廓線了
目的是讓原本缺少立體感的材質感覺更像平面
也可以避免因為太過平面而難以與其他物體區分的情況
但外框線也不是必要,有時即使不用也可以有不錯的效果
利用空氣遠近法還有一些配色之類的(?)
今天要介紹的是最近學到的三種外框線製作方法
各有優劣,不過也都算是很不錯的作法
基本上都與法向量(Normals)脫不了關係
對於法向量不太了解的人請看這篇

其之壹-Outline
這種作法最為簡單,而且可調整的細部很完整

使用這種功能要先切換到Rendering模式

選擇物件之後點擊Toon->Assign Outline->Add New Toon outline
便可以在點選的物件周圍看到一圈很粗的外框線

此時原本的Add New Toon outline指令下面會多一個指令
只要先點選物件,在選擇這個指令的話就可以轉而選取框線
(想要調整屬性的話按Ctrl+A)
另外要移除的話,則要選擇第二個Remove Current Toon outline

這種Myay7.0之後的版本內建的Toon outline將框線分為四種
上圖把其中三種調成鮮豔的顏色以便識別
(這兩個方塊是同一個物件)

紅色的是外輪廓線(Profile lines)
如果兩個面分別為正面向以及背面向
(法向量與攝影機的夾角超過90度則為背面向)
這裡就會產生輪廓線

綠色的是內輪廓線(Crease Lines)
夾角過大的兩個面之間就會產生內輪廓線
因此外輪廓線也可能與內輪廓線同時出現

白色的是連接線(Intersection Lines)
一個物件中的兩個面夾角過大
而且這兩個面接觸在一起卻沒有黏合時
就會出現內輪廓線

另外還有一種邊界線(Border Lines)
當一個邊只和一個面有關係時
(就是非封閉物件邊緣)
會在該處產生邊界線

這種作法據說在算圖時會比較慢
無法用在一般遊戲上
而且雖然有很多屬性可以調整,但是線的形狀固定
只能調整粗細以及尖邊等等
另外在面數少的情況下會有閃爍等問題
不過真的很適合用來靜態輸出

其之貳-法向量算法
這個做法是利用攝影機與法向量之間的角度做運算
而這個數據就在Sample info這個節點的facing Ratio中
是一個介於0到1之間的數(代表0到90度)
透過Condition的比大小判斷就可以依照角度決定材質
總之接出來的圖是這個樣子

等改天有時間再介紹一下節點的詳細內容
這種作法因為只有一個模型,運算是最快的
現在看起來比較陽春,但是其實可以改成自訂圖案
只是需要花點時間理解節點,較為複雜
缺點就是這種框線向內長的方式無法控制每個地方的形狀
而且遇到面數少的情況也會變得很破碎

其之参-暴力反轉法
這種方法是目前看來最好的方法,而且概念非常簡單
不但可以自製顏色、線條粗細
有些部份覺得粗細不滿意也可以調整寬度!!
算圖的速度是第二快,不過成果很令人滿意
因為不會有低模破碎的問題,也可以用在遊戲上
(不過遊戲模型就要比較低模一點了)
是不論動畫用、遊戲用都很適合的輪廓線
雖然只有外輪廓線(Profile lines)…
好了不賣關子,就來看看要怎麼做這種輪廓線呢

首先將準備加輪廓的模型給與材質之後

在原地複製貼上,並且稍微放大一點
然後再作一個全黑的材質給這個較大的模型

接著直接開啟屬性設定(Ctrl+A)
把Shape的標籤中Render Stats的Double sided取消選取
這麼做的意思是只讓法向量為正的面顯示
也就是只顯示一邊(Not Double sided)
此時若是直接勾選下面的Opposite就可以看到成果了

Opposite指的是反面,也就是說反過來只顯示反向的面
你也可以不勾選此項,而是反轉整個模型的法向量
也可以達到相同的效果
但是如果用反轉法向量的方式做出來的話
不需要加上任何設定就可以應用在Virtools上
因為Virtools只會顯示正向的面
這樣一來就不用看Virtools那斷掉的外框線了(笑)

當然,你很快就會注意到實際上我們使用了兩個模型
在本來只有一個的模型上用了兩個模型!!
這樣子當然會造成無謂的浪費
因此在邊框的選擇上就要很慎重了
應該最好是使用與燈光無關的Surface Shader
根據蜥蜴學長的說法,不動任何數值的材質是跑最快的

沒有留言: