天天看點

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

本節書摘來自華章出版社《unity虛拟現實開發實戰》一書中的第2章,第2.2節建立簡單的透視圖,作者[美] 喬納森·林諾維斯,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

2.2建立簡單的透視圖

現在我們添加幾個物體到場景中來搭建這個環境,其中包括一個機關立方體、一個平面、一個紅色球體和一個照片背景。

2.2.1添加立方體

我們添加第一個對象到場景中—一個機關大小的立方體。

在hierarchy面闆中,用create菜單選擇3d object | cube,主菜單欄中gameobject的下拉菜單中也有同樣的選項。

一個預設的白色立方體就被添加到了場景中,放在了地平面的中心點(0, 0, 0)位置,沒有旋轉值和縮放值,你可以在inspector面闆中看到這些值。這是reset設定值,可以在這個物體在inspector面闆中的transform元件中找到。

transform的reset值是position (0,0,0),rotation (0,0,0),scale(1,1,1)。

如果某些情況下你新添加的立方體不是這個值,可以手動設定成這些值,或者通過點選inspector面闆中transform元件右上角的齒輪圖示選擇reset來設定。

這個立方體在各次元上都是一個機關,我們後面會發現,在unity中一個機關對應世界坐标系中的1m,其局部中心點位于立方體的中心。

2.2.2添加平面

現在我們來添加一個平面對象到場景中。

在hierarchy面闆中,點選create菜單(或gameobject菜單),然後選擇3d object | plane。

一個預設的白色平面會被添加到場景中,放置于地平面的中心點 (0, 0, 0) 位置,(如果有必要的話可以通過點選inspector面闆中transform元件右上角的齒輪圖示選擇reset來設定成這個值),把它重命名為groundplane。

注意當縮放比例為 (1, 1, 1) 時,unity中的平面對象實際上相當于在x軸和z軸上10×10個機關的長度,也就是說,groundplane的長寬是10×10個機關大小,其transform元件的scale值是1。

立方體的中心點在 position (0, 0, 0),與地平面相同。但是看起來似乎不像是這樣,scene面闆可能會顯示成一個把3d場景渲染到2d圖檔上的perspective投影,perspective變形使立方體看起來不在地平面的中心點,但實際上它在中心點,數一下到各邊的網格線數就能看出來。另外,當在虛拟現實中檢視它的時候,你實際上是站在場景中的,這個時候根本看不出變形,如下圖所示:

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

立方體陷入了地平面之下是因為其局部原點在其幾何中心—也就是相當于1×1×1的中心點 (0.5, 0.5, 0.5) ,這聽起來可能很顯然,但有些模型的原點并不在其幾何中心上(比如在其一個角上)。一個對象的transform元件的位置值是其局部原點在世界坐标系中的位置值。我們移動一下這個立方體:

1.通過inspector面闆中把position的y值設定成0.5:position (0, 0.5, 0),把立方體移動到地平面的表面以上。

2.通過在y旋轉值中輸入20:rotation(0, 20, 0),讓立方體繞着y軸稍微旋轉一點。

注意,其旋轉的方向是順時針20°。拿出左手,比劃一個豎起大拇指的手勢,看看其餘四個手指指向什麼方向?unity使用左手坐标系統(對于左手還是右手系統并沒有标準,有些軟體是左手坐标系統,有些是右手坐标系統)。

unity使用左手坐标系統,y軸向上。

2.2.3添加球體和材質

接下來,我們添加一個球體。

從菜單中選擇 gameobject | 3d object | sphere。

像那個立方體一樣,球體的半徑是1.0,原點也在幾何中心。(如果有必要的話可以通過點選inspector面闆中transform元件右上角的齒輪圖示選擇reset來設定預設值)。很難看到這個球體,因為它被嵌入在立方體中,我們需要移動球體的位置。

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

在scene面闆中,選中球體,确認translate工具處于激活狀态(左上方工具欄的圖示欄中的第二個圖示),使用x軸、y軸、z軸箭頭來移動它,我把位置變成了(1.6,0.75,-1.75)。

gizmo是一個圖形化控件,用于操作某個對象或視圖的參數。gizmos中有拖拽點或操作點,可以用滑鼠點選和拖動。

在繼續下一步之前,先按如下操作儲存之前的操作:

1.在主菜單中,選擇file | save scene然後将其命名為diorama。

2.然後,選擇file | save project,注意在project面闆中,新的場景對象已經被儲存在assets檔案夾的根目錄中。

我們再制作一些有顔色的紋理,把紋理應用到物體上,來給場景上點顔色,步驟如下:

在project面闆中,選擇assets檔案夾的根目錄,再選擇create | folder,重命名檔案夾為materials。

2.選中materials檔案夾,再選擇create | material,重命名為red。

3.在inspector面闆中,點選albedo右邊的白色矩形會打開一個color面闆,選擇一種好看的紅色。

4.再用同樣的操作制作一個藍色的材質。

5.在hierarchy(或scene)面闆中選中sphere。

6.将紅色材質從project面闆拖進inspector面闆作為球體的材質。球體将會變紅。

7.在hierarchy(或scene)面闆中選中cube。

8.這次,将藍色材質從project面闆拖進場景中作為立方體的材質,球體将會變藍。

儲存場景,并且儲存項目。下面是場景現在的樣子(和你制作的可能不太一樣,不過無所謂):

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

注意,我們使用的檔案夾在project/assets/目錄下,用來存放我們的材料。

2.2.4改變場景視圖

一般來說,滑鼠左或右鍵與shift、ctrl、alt鍵的組合可以執行以下操作:

拖動錄影機。

讓錄影機繞着目前中心點旋轉。

放大和縮小。

alt + 滑鼠右鍵可以上、下、左、右旋轉目前的視角。

當選中hand工具(在圖示欄的左上方)時,滑鼠右鍵移動視野,滑鼠中鍵也一樣。

在scene面闆的右上方是scene view 小部件,把場景視圖的朝向描繪成下圖這樣,表示的是:比如在perspective視圖中,x軸延伸至左邊,z軸延伸至右邊。

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

可以通過點選相應的色錐來改變視圖的方向,使我們可以直接正面觀察任意一個軸。點選中間的小立方體可以将perspective視圖變成orthographic(無變形)視圖,如下圖所示:

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

在繼續下一步之前,我們先把場景視圖與main camera的方向對齊。你可能會想起我說過的預設錄影機朝向:(0, 0, 0),是向下看z軸的正方向(從後向前)。步驟如下:

1.點選scene視圖小部件中的紅色x錐,把視圖從back(後向)調整為前向。

2.再使用手形工具(或者滑鼠中鍵)慢慢滑動視圖。

現在,當選擇main camera元件(在hierarchy面闆中)時,可以看到scene視圖大緻上與camera preview朝向相同。(參考下一節的螢幕截圖,在我們添加照片之後可以看到場景與預覽看起來差不多)。

2.2.5添加照片

現在,我們添加一張照片作為我們透視圖的背景。

在計算機圖形學中,映射到物體上的圖檔叫作紋理。當物體在世界坐标系中以x,y,z表示時,紋理以u,v坐标表示(與像素一樣)。我們會發現紋理和uv貼圖存在縮放的問題,步驟如下:

1.通過菜單gameobject | 3d object | plane建立一個平面,命名為photoplane。

2.重置這個平面的變換值。在inspector面闆中,找到transform面闆右上方的齒輪,點選圖示選擇reset。

3.繞着z軸旋轉90°(把transform元件的rotation的z值設定成-90)。這是負90,是以它是豎直的,垂直于地平面。

4.順着y軸方向旋轉90°,這樣它就面向我們了。

5.将其移動到地平面的最後面,使其position的z=5,y=5(想想地平面的10×10個機關)。

6.使用windows資料總管或mac的finder選擇任意一張計算機中的圖檔,粘貼到這個photoplane上。(也可以用本書中的grand canyon.png圖檔。)

7.在project面闆中,選擇assets檔案夾的根目錄,選擇菜單中的create | folder,重命名為textures。

8.拖動圖檔檔案到assets/materials檔案夾中,它應該會自動以紋理對象導入。或者,也可以在assets檔案夾上點選滑鼠右鍵,選擇 import new asset...導入圖檔。

選擇project面闆中的圖檔textures,在inspector面闆中檢查其設定,如果原圖為矩形,紋理會變成正方形的(比如2 048×2 048),看起來像壓扁了。當把它映射到正方形的面上時也會變扁,步驟如下:

1.從project面闆中拖動圖檔到photo plane(scene面闆中)上。

哎呀!我這張圖檔向側面旋轉了。(你的呢?)

2.選中photoplane,把transform元件的rotation的x值設定成90°。

好了,它現在豎直了,但還是扁的。我們來修複它。檢查圖檔的原始分辨率,看它的寬高比,我的grand canyon圖檔是2 576×1 932,當你用高除寬時,為0.75。

在unity中,設定photoplane的transform元件scale的z值為0.75。

把position的y值設定為3.75。

為什麼是3.75?高是從10開始的。是以,我們縮放到7.5。物體的縮放比與其原始大小有關。是以,高的一半是3.75。我們想讓photo plane的中心點在地平面以上3.75個機關。

我們已經設定了大小和位置,但是圖檔看起來褪色了,這是因為場景中模糊的光影響了它。你可能想保持這種效果,尤其是當你建構複雜的光照模型和材質時,但是現在,我們要把光去掉。

選中photoplane,注意照片的texture元件在inspector面闆中有預設的shader元件的standard,将它改成unlit | texture。

現在我的看起來是這樣了,你的應該也差不多:

《Unity虛拟現實開發實戰》——第2章,第2.2節建立簡單的透視圖

看起來還不錯吧,記得儲存場景和項目。

2.2.6給地平面着色

如果想改變地平面的顔色,可以建立一個新的材質(在project面闆中),命名為ground并拖到地平面上。然後,改變其albedo色。建議使用滴管(圖示)從photo plane中拾取一種土色。

繼續閱讀