国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種針對(duì)移動(dòng)端的頭發(fā)建模和渲染方案

2018-12-15 07:05:36孫正忠
電子設(shè)計(jì)工程 2018年23期
關(guān)鍵詞:光線光照頭發(fā)

孫正忠

(1.中國(guó)科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所上海200050;2.上海科技大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海201210;3.中國(guó)科學(xué)院大學(xué)北京100049)

在計(jì)算機(jī)圖形學(xué)和三維人體重建領(lǐng)域,頭發(fā)的建模和渲染一直以來都是最具有挑戰(zhàn)性的部分。近年來,隨著虛擬現(xiàn)實(shí)(Virtual Reality,VR)和增強(qiáng)現(xiàn)實(shí)(Augmented Reality,AR)的崛起,虛擬人物越來越多的出現(xiàn)在我們的移動(dòng)設(shè)備中。利用數(shù)十臺(tái)相機(jī)搭建的360度光場(chǎng)環(huán)拍系統(tǒng)可以對(duì)真人進(jìn)行動(dòng)態(tài)的采集和重建,使人體的三維模型可以栩栩如生的呈現(xiàn)在人們面前[1]。但是頭發(fā)由于其數(shù)量眾多,纖細(xì)以及半透明等特點(diǎn),在人體的三維重建中一直都是最難重建的部分之一,往往最終也只能以面片和貼圖的形式來進(jìn)行渲染呈現(xiàn)。這就大大影響了人物模型在移動(dòng)端中的顯示效果。

而在電影和動(dòng)畫片的制作中,為了得到高質(zhì)量的頭發(fā)渲染效果,通常需要對(duì)發(fā)絲來進(jìn)行高精度的人工建模,并結(jié)合基于物理的頭發(fā)渲染算法,通過多重反射和折射,歷時(shí)幾個(gè)小時(shí)最終才能渲染出一張高質(zhì)量的圖像[2]。這在對(duì)實(shí)時(shí)性要求很高的VR和AR應(yīng)用中是難以接受的,尤其要放到移動(dòng)端的話,這更是不可能的事情。

文中將提出一種適用于移動(dòng)端的頭發(fā)建模和基于發(fā)絲的實(shí)時(shí)渲染的解決方案。開發(fā)者可以利用瑪雅(Maya)等常見的三維建模軟件,快速建模發(fā)絲,并直接導(dǎo)入移動(dòng)端進(jìn)行高質(zhì)量的實(shí)時(shí)渲染。

1 頭發(fā)建模

如今最常用的三維建模軟件主要有3dsMax和Maya。在3ds Max中主要以Cem Yuksel博士的Hair Farm毛發(fā)制作插件最具代表性[3]。而Maya匯集了當(dāng)今最先進(jìn)的頭發(fā)建模方法[4],并提供了多種多樣的頭發(fā)建模插件和工具。例如 nHair,Shave,Yeti,XGen,XGen交互式修飾等。這些插件建模頭發(fā)的主要思路總結(jié)起來有兩種方式[5-9]:

1)選定一塊頭皮,在該頭皮上建模主頭發(fā)線條,以此來確定發(fā)型的基本形狀,軟件會(huì)根據(jù)主頭發(fā)線條自動(dòng)插值出更多的發(fā)絲,進(jìn)而形成較為濃密的頭發(fā)。例如nHair,XGen等工具。這種方法比較適用于長(zhǎng)發(fā)的建模。

2)軟件根據(jù)所選定頭皮自動(dòng)生成頭發(fā),用戶可以改變頭發(fā)的長(zhǎng)度和濃密,并利用提供的筆刷像理發(fā)一樣對(duì)生成的頭發(fā)進(jìn)行修剪和造型,將其塑造成自己想要的樣子。例如XGen交互式修飾。這種方法對(duì)于短發(fā)的建模非常好用。

2 頭發(fā)渲染

2.1 移動(dòng)端頭發(fā)渲染方法

目前移動(dòng)端用到的頭發(fā)往往是面片加貼圖的形式[10],如圖1所示。雖然比較生硬,效果不夠真實(shí),但是由于其建模簡(jiǎn)單,渲染速度快等優(yōu)點(diǎn),目前仍是移動(dòng)端頭發(fā)渲染的首選。而通過發(fā)絲渲染出來的頭發(fā),能夠看到一根根發(fā)絲飄逸的效果,具有極佳的視覺效果[11-12],如圖2所示。但由于其巨大的計(jì)算量,在移動(dòng)端往往無(wú)法支撐如此高質(zhì)量的渲染。因此,如何在移動(dòng)端實(shí)現(xiàn)快速的發(fā)絲渲染就成了眾多圖形學(xué)開發(fā)者研究的方向。

2.2 光照模型

目前基于發(fā)絲的頭發(fā)渲染使用最廣泛的光照模型是Kajiya-Kay[13]和Marschner[14]兩種模型。

圖1 游戲天劍中的頭發(fā)

圖2 通過發(fā)絲渲染出來的頭發(fā)效果

2.2.1 Kajiya-Kay光照模型

Kajiya-Kay光照模型是最早提出的針對(duì)頭發(fā)的光照模型,由于其良好的渲染效果而被廣泛應(yīng)用。該光照模型把頭發(fā)的光照看成由漫反射和鏡面反射兩部分共同作用的結(jié)果,并用一個(gè)光滑的、半徑很小的圓柱體來近似表征一根發(fā)絲。

圖3 Kajiya-Kay光照模型

Kajiya-Kay光照模型中重要的向量和角度,如圖3所示。其中,單位切線向量(t)表示頭發(fā)的切線方向,光線向量(l)指向光源的方向,反射向量(r)指向反射光的方向,即最大鏡面反射的方向。眼睛向量(e)指向觀察者眼睛的方向。角度θ和φ分別是切線向量和光線向量的夾角,切線向量和眼睛向量的夾角。

根據(jù)Lambert光照模型,漫反射部分的光強(qiáng)可以通過以下公式來計(jì)算:

其中,Kd表示漫反射的系數(shù)。

由于頭發(fā)表面具有光滑的特質(zhì),光線在頭發(fā)表面會(huì)形成高光。Kajiya-Kay光照模型給出的鏡面反射強(qiáng)度計(jì)算公式如下:

其中,Ks表示鏡面反射的系數(shù)。

將漫反射和鏡面反射部分結(jié)合起來,再加入環(huán)境光的部分就是頭發(fā)完整的光照計(jì)算公式:

其中,Li表示光照的強(qiáng)度,Ka表示環(huán)境光的反射系數(shù),La表示環(huán)境光的強(qiáng)度。

2.2.2 Marschner光照模型

Marschner光照模型是在對(duì)頭發(fā)物理結(jié)構(gòu)進(jìn)行研究的基礎(chǔ)上,測(cè)量出3維空間中光線在頭發(fā)上發(fā)生散射后不同方向上的輻射強(qiáng)度,根據(jù)光線在頭發(fā)上的散射規(guī)律,推導(dǎo)出的一種可行的光照模型。

Marschner光照模型把入射光線分成3部分:第一部分是反射光線(R),這一部分光線并沒有進(jìn)入頭發(fā),而是在頭發(fā)表面直接反射。第二部分是折射-折射光線(TT),這一部分光線進(jìn)入頭發(fā)中,在頭發(fā)表面發(fā)生了兩次折射。第三部分光線是折射-反射-折射光線(TRT),這一部分光線在頭發(fā)表面發(fā)生了兩次折射,在頭發(fā)內(nèi)部表面發(fā)生了一次反射。光強(qiáng)的計(jì)算公式如下:

其中,PathR,PathTT和PathTRT分別對(duì)應(yīng)上述入射光線的3種情況。這雖然近似模擬了真實(shí)光線照射到頭發(fā)上可能發(fā)生的3種情況,但也大大增加了光照渲染的計(jì)算量,令人遺憾的是,渲染效果提升并不明顯。

因而,由于Kajiya-Kay光照模型計(jì)算相對(duì)簡(jiǎn)單,在效果和速度上能取得很好的平衡,所以本文將采取Kajiya-Kay光照模型在移動(dòng)端進(jìn)行渲染。

2.3 TressFX頭發(fā)渲染技術(shù)

早在2013年,顯卡廠家AMD就在游戲《古墓麗影》中推出了基于發(fā)絲的頭發(fā)實(shí)時(shí)渲染技術(shù)。

TressFX技術(shù)通過DirectCompute接口進(jìn)行編程,能夠充分發(fā)揮出真正全新下一代圖形架構(gòu)(Graphics Core Next,GCN)的大規(guī)模并行計(jì)算能力,從而獲得以往需要預(yù)先渲染才能實(shí)現(xiàn)的圖像品質(zhì)[15]。同時(shí)TressFX基于當(dāng)前的次序無(wú)關(guān)透明技術(shù)(Order Independent Transparency,OIT)工作,這種方法使用了單像素鏈接列表(Per-Pixel Linked-List,PPLL)數(shù)據(jù)結(jié)構(gòu)來管理復(fù)雜的渲染過程及內(nèi)存使用[16]。是否開啟TressFX的渲染效果對(duì)比,如圖4所示。

圖4 游戲《古墓麗影》中未使用(左)和使用(右)TressFX的渲染效果圖

雖然TressFX具有極佳的頭發(fā)渲染效果,能夠渲染出很好的自陰影和半透明效果。但是復(fù)雜的運(yùn)算也對(duì)GPU的性能提出來很高的要求,目前只能在高性能獨(dú)立顯卡上運(yùn)行,不能在移動(dòng)端使用。

3 工作流程

3.1 基于Maya的頭發(fā)建模

本文將以XGen交互式修飾為例,這種方法是Maya近兩年推出的一種建模頭發(fā)的方法,因其使用簡(jiǎn)單快捷,受到廣大開發(fā)者的青睞。

XGen交互式修飾提供了一系列專用于創(chuàng)建所有頭發(fā)和毛發(fā)樣式的完整工具,其中包括雕刻筆刷、修改器和雕刻層。

交互式修飾描述和修改器是基于Maya的節(jié)點(diǎn),因此它們可以在節(jié)點(diǎn)編輯器中進(jìn)行操縱。這些節(jié)點(diǎn)在系統(tǒng)的圖形處理單元(GPU)上進(jìn)行計(jì)算,使筆刷筆劃可以實(shí)時(shí)顯示,從而提供無(wú)需預(yù)覽生成的交互式工作流。雖然交互式修飾頭發(fā)的所有數(shù)據(jù)都將保存到Maya場(chǎng)景文件中,但用戶還可以將修飾保存到基于Alembic的緩存文件。

使用XGen交互式修飾建模頭發(fā)的流程可總結(jié)如下,其中每一步對(duì)應(yīng)的結(jié)果如圖5所示。

1)確定虛擬角色模型的待生成頭發(fā)區(qū)域,即表示頭皮的部分網(wǎng)格模型,本文稱作頭皮網(wǎng)格(可以是三角形網(wǎng)格或四邊形網(wǎng)格);

2)為選取的頭皮網(wǎng)格創(chuàng)建交互式修飾樣條線;

3)使用XGen自帶的修改器和修飾筆刷,對(duì)頭發(fā)進(jìn)行造型。同時(shí),可以利用Maya自帶的Arnold渲染器實(shí)時(shí)預(yù)覽頭發(fā)。

4)為頭發(fā)添加噪聲,設(shè)置卷曲程度,使其更加逼真。

3.2 利用Python腳本導(dǎo)出發(fā)絲曲線

圖5 XGen交互式修飾工具建模頭發(fā)過程

利用XGen交互式修飾建模出來的頭發(fā),由于所有數(shù)據(jù)都保存在Maya場(chǎng)景文件之中,因而只能在Maya中進(jìn)行渲染和使用。但Maya本身是支持腳本語(yǔ)言的,這為我們導(dǎo)出頭發(fā)數(shù)據(jù)創(chuàng)造了可能。Maya主要支持的腳本有兩種[17],分別是MEL和Python。前者是Maya自己的腳本語(yǔ)言,有著自己的語(yǔ)法規(guī)則,而對(duì)Python語(yǔ)言的支持則使更多的開發(fā)者可以通過使用腳本來處理Maya中的數(shù)據(jù)。

為了可以在移動(dòng)端的渲染程序中使用建模的發(fā)絲模型,首先需要利用Maya自帶的工具將其保存到基于Alembic的緩存文件。然后,使用Maya打開剛剛存下來的緩存文件(abc格式),我們可以看到里面的發(fā)絲是非均勻有理B樣條(Non-Uniform Rational BSplines,NURBS)曲線的形式。現(xiàn)在,我們就可以在Maya中運(yùn)行編寫好的提取發(fā)絲的Python腳本,將一根根NURBS曲線以自定義的頂點(diǎn)數(shù)和格式存下來,以供渲染程序使用。

3.3 頭發(fā)渲染的OpenGL ES實(shí)現(xiàn)

為了實(shí)現(xiàn)在移動(dòng)平臺(tái)上進(jìn)行實(shí)時(shí)渲染的目的,我們使用OpenGL ES來進(jìn)行渲染。OpenGL ES是OpenGL三維圖形API的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。與只可以在iOS中使用的Metal不同,OpenGL ES在Android和iOS等移動(dòng)設(shè)備中均可以使用,這將大大方便我們將代碼移植到其他移動(dòng)平臺(tái)[18-19]。

使用OpenGL ES進(jìn)行對(duì)發(fā)絲進(jìn)行渲染的總體流程如表1所示。

4 實(shí)驗(yàn)結(jié)果與分析

4.1 移動(dòng)端不同發(fā)型的渲染效果

如圖6所示,分別是在移動(dòng)端對(duì)基于發(fā)絲的長(zhǎng)直發(fā),長(zhǎng)卷發(fā)和短發(fā)的渲染效果。我們可以清楚的看到頭發(fā)反光的高光部分以及發(fā)尾一絲絲的頭發(fā),當(dāng)轉(zhuǎn)動(dòng)頭發(fā)模型的時(shí)候,高光也會(huì)隨之產(chǎn)生相應(yīng)的改變,十分真實(shí)。尤其是在短發(fā)模型中,同時(shí)載入利用光場(chǎng)重建出來的人體頭部模型和Maya中建模的頭發(fā)模型,分別對(duì)二者進(jìn)行渲染,在實(shí)現(xiàn)了極佳的頭發(fā)渲染效果的同時(shí),也增強(qiáng)了頭部模型的真實(shí)性。上述3個(gè)頭發(fā)模型的發(fā)絲數(shù)和頂點(diǎn)數(shù)如下:

表1 使用OpenGL ES進(jìn)行渲染的總體流程

圖6 不同發(fā)型的移動(dòng)端實(shí)時(shí)渲染效果

1)長(zhǎng)直發(fā):10 000根發(fā)絲,160 000個(gè)頂點(diǎn)。

2)長(zhǎng)卷發(fā):10 000根發(fā)絲,687 532個(gè)頂點(diǎn)。

3)短發(fā):33 636根發(fā)絲,538 176個(gè)頂點(diǎn)。

4.2 不同性能手機(jī)上頭發(fā)渲染速度

我們?cè)谧詉Phone 5s以來的多款蘋果手機(jī)上對(duì)于圖6所示的3種頭發(fā)模型進(jìn)行了渲染速度的測(cè)試。

由于垂直同步的原因,在iPhone上渲染幀率最高為60幀每秒(Frame Per Second,F(xiàn)PS)。從表2可以看出,在iPhone 5s以后的這幾款機(jī)型,即便是對(duì)于具有上萬(wàn)根發(fā)絲、數(shù)十萬(wàn)個(gè)頂點(diǎn)的頭發(fā)模型,本文的渲染速度均可保持在25FPS以上,基本可以達(dá)到普通應(yīng)用的渲染要求。尤其是在iPhone 6s以后的機(jī)型,渲染速度可以達(dá)到60FPS滿幀,這足以滿足移動(dòng)端VR和AR應(yīng)用的需求。這就為在移動(dòng)端VR和AR應(yīng)用中實(shí)時(shí)渲染高質(zhì)量頭發(fā)奠定了堅(jiān)實(shí)的基礎(chǔ)。

表2 不同手機(jī)渲染幀率對(duì)比表

5 結(jié)束語(yǔ)

本文提出了一種針對(duì)移動(dòng)端的頭發(fā)建模和渲染的方案,使得開發(fā)者可以快速在Maya中建模發(fā)絲模型并導(dǎo)出到移動(dòng)端進(jìn)行高質(zhì)量的實(shí)時(shí)渲染。該方案流程相對(duì)簡(jiǎn)單,同時(shí)取得很好的頭發(fā)渲染效果,非常具有實(shí)用價(jià)值。

不過目前的頭發(fā)渲染效果與TressFx還有一定差距,主要是沒能處理好頭發(fā)的半透明和自陰影的問題。隨著VR和AR技術(shù)的發(fā)展,Unity3d逐漸成為移動(dòng)端VR和AR應(yīng)用最主流的開發(fā)工具。后續(xù)的工作將針對(duì)渲染效果和渲染速度進(jìn)行優(yōu)化,并制作頭發(fā)建模和渲染的Unity3d插件,便于VR和AR開發(fā)者的使用和集成本文的方案。

猜你喜歡
光線光照頭發(fā)
春日暖陽(yáng)
節(jié)能環(huán)保 光照萬(wàn)家(公益宣傳)
我的頭發(fā)『斷了』
節(jié)能環(huán)保光照萬(wàn)家(公益宣傳)
春光照瑤鄉(xiāng)
“你看不見我”
中外文摘(2019年8期)2019-04-30 06:47:36
頭發(fā)飄起來了
頭發(fā)剪壞的你可以這么辦
Coco薇(2017年2期)2017-04-25 02:50:26
頭發(fā)
淘氣的光線
庆城县| 开平市| 梁平县| 南阳市| 克山县| 两当县| 唐河县| 屏东市| 天全县| 克东县| 蓬莱市| 潼关县| 抚远县| 惠东县| 岳池县| 元阳县| 永济市| 黎城县| 报价| 灵丘县| 郯城县| 临沂市| 睢宁县| 翁牛特旗| 大洼县| 镇坪县| 措美县| 瑞丽市| 顺昌县| 汶上县| 莱阳市| 台东县| 鄢陵县| 大城县| 当阳市| 清原| 微山县| 枣阳市| 沾化县| 齐河县| 寿宁县|