【學習筆記】FPS-手部模型處理

  • Post category:筆記
  • Reading time:2 mins read
  • Post author:

製作第一人稱遊戲時,如果使用的是現成的角色及動畫,可能會需要把手部獨立出來顯示,某些情況下不要顯示角色的其他部分,以免遮到鏡頭之類的問題。但是一個模型,要只顯示部分就必須用到材質、繪製貼圖(手部不透明、其他透明),但前提是你要知道這個模型的UV,不然也無從畫起。 今天就來分享我們的處理方法-直接把手部模型拆開。因為手上剛好沒有FPS遊戲用的角色,就先拿其他角色代替了。在Blender中,可以看到模型是骨架的子物件,也就是說,就算拆成多個模型,還是能受骨架影響(權重不會跑掉)。 這是原本的動畫: 現在選取手部,按P分離物件,將手部模型獨立成一個Mesh。 現在播放動畫,手部還是能順利動作~就算隱藏手或身體都不會影響。

Continue Reading【學習筆記】FPS-手部模型處理

Unity Rendering Note5 – Renderer Feature & X-Ray Effect

  • Post category:筆記
  • Reading time:6 mins read
  • Post author:

今天來學習如何在Unity中做出透視效果。 當然透視效果有許多做法,今天用的是最容易理解、步驟也相對較少的方法-Renderer Feature。 簡介 大致流程就是「當目標物件被其他物件遮住時,直接渲染出來並指定新的材質;沒被遮住時也渲染一次,使用原本材質」。 目標是讓這個Sphere能一直被看到,就算被牆擋住還是能渲染出來。 Renderer Feature 先了解一下什麼是Renderer Feature,它的功能在Unity官方網站中是這樣解釋的:在URP的Renderer上加上額外的渲染途徑。 能讓使用者自由設定渲染的對象、順序、材質……等,也就是說,可以指定「在渲染整個畫面之後,再將特定物件渲染一次特定材質」之類的指令。說得白話點,就是用來覆寫渲染的結果。 以下簡單介紹一下Renderer Feature中幾個重要的部分。 Event 這裡可以選擇渲染的順序,選單中的順序就是URP的Render Pass。 Filters 可以選擇目標渲染物件,Queue選擇是否為透明、Layer Mask指定對象Layer。 Overrides 選擇完渲染的時間點跟目標後,再來就是要對其進行的動作了。 Material:用來覆寫的材質。 Depth:決定如何影響深度緩衝區(Z-Write)。 Write Depth:決定是否更新深度緩衝區。 Depth Test:深度測試,畫面從離攝影機最遠處往攝影機移動,用碰到的先後順序來決定物件的前後。 Camera:覆寫攝影機的某些屬性。 實作 製作材質…

Continue ReadingUnity Rendering Note5 – Renderer Feature & X-Ray Effect

Unity Rendering Note4 – Reflection Probe

  • Post category:筆記
  • Reading time:6 mins read
  • Post author:

Reflection Probe是Unity中時常使用、十分重要的工具,但它的功能卻常常被誤會,在剛接觸到Reflection Probe時,我對它的理解是「在其範圍內的物件,可以反射周遭靜態物件」,甚至自作聰明的把它掛在角色下成為子物件,跟著角色移動...這樣的解釋其實並非全錯,只是差在反射的原理不構清楚。Unity中的反射並非物理意義上的反射,簡單的說,是將環境變成貼圖,貼在物件上,一般來說,這個環境貼圖就是Skybox。如果將這個環境貼圖稱作反射球,Reflection Probe的功用是改變反射球。 在Unity,所有物件都會無條件的反射Environment Reflections中的Source,也就是說即使是在室內中的物體依然會反射Skybox,這樣會很不自然。 因此,在室內、或不該被天空照射到的地方,要使用Reflection Probe將反射球改變。 先用Cube搭出簡單的室內場景,可以看到中間的Sphere雖然有變暗,但依然反射Skybox。 加了Reflection Probe後,物件就會反射Reflection Probe範圍內的靜態物件。 至於反射的方法,可以想成是將方形範圍的六個面,變形壓縮成一個球型,並貼在物件表面。(如果對詳細原理有興趣,可以搜尋Cubemap,Skybox本身也有用到差不多的原理。) 當物件一進入Reflection Probe,反射球就會立刻被改變,因此Reflection Probe的範圍十分重要,如果範圍太大,物件還沒完全進到室內就會先碰到,換成室內的反射球。 因此可以多複製幾個,讓反射球從室外到室內是漸變的。 補充一下物件同時碰到多個Reflection Probe時,該如何處理。 物件的Mesh Renderer中有4個選項可以選。 Off:不受Reflection Probe影響。Blend Probes:混合,但不包含Skybox,一般用於室內。Blend Probes And Skybox:混合,包含Skybox,一般用於室外。Simple:只使用權種最高的一個Reflection Probe。 Blend Probes…

Continue ReadingUnity Rendering Note4 – Reflection Probe

Unity Rendering Note3 – Light Probe Group

  • Post category:筆記
  • Reading time:4 mins read
  • Post author:

Light Probe Group 的功能:吸收周圍靜態物件的光線給動態物件。 在Unity中,只有靜態物件會受到材質球的Emission影響(要先Bake過)。 但有時也希望角色等動態物件也能受到影響,Light Probe Group 就能用來達成。 (為了看得更清楚,這裡先關掉Directional Light。) 加了Light Probe Group 後動態物件上也會有光了。 Light Probe Group會吸取八個點所圍成區域的光,並「照射」在動態物件上。 可以看到,每個動態物件都會吸取最近的三個點的光源。 也就是說,不管離得多遠、甚至中間有其他障礙物,都還是會照射得到。 因此,要讓畫面「正常」,必須多複製幾個Light Probe,這樣每個動態物件就只會吸取周遭最近三個點的顏色。 但Light Probe Group並不會判斷物件是否被遮住、是否應該被照射…等,只會無差別的吸取鄰近Light Probe的光,要確實達成合理的光照,必須多複製幾個點,讓Light Probe的採光更精緻,「模擬」出合理的光照。 總結Light Probe Group的重點:…

Continue ReadingUnity Rendering Note3 – Light Probe Group

Unity Rendering Note2 – Basic Lighting Setting

  • Post category:筆記
  • Reading time:6 mins read
  • Post author:

最近看了一些網路文章、影片教學,發現Unity的初始場景其實包含了許多渲染相關設定,把這些設定一一拿掉後,就能看到場景最原始的樣子(只有模型、光影、材質...等基本資訊)。 這是開一個新3D專案、建立一個Plane、一個Sphere,並指定了純色的標準材質球後的場景,並未進行任何渲染設定。 1.Color Space Color Space可以想成是電壓及亮度的曲線,Linear是符合物理原則的線性關係,較接近現實世界;預設的Gamma則是顯示器上的曲線(非正比,亮度為電壓的2.2次方),較接近人眼所看到的顏色。 在Unity中,Linear是經過校正,讓顏色符合物理、接近現實,計算量較大、較吃資源;Gamma則不會做校正處理,由於2.2次方的關係,整體環境會偏暗(黑色為0、白色為1,因此亮度在暗處增加較緩)。 Gamma Linear Reflection Lighting中的Environment Reflections是指物體反光時反射的顏色,也就是周遭的環境,可以想像成把環境「貼」在物件上。 將Source設為Custom並不指定任何Cubemap,就會看到物體還有反光,但會變成純色的明暗漸層。 (這裡有刻意將材質的Smoothness調高,讓反光更明顯。 Before(Skybox) After(Custom) Environment Lighting Environment Lighting顧名思義就是環境光,先前的場景都在Skybox的「照射」下,可以看到影子也有分明暗,就跟現實世界一樣。 將Lighting中的Environment Lighting的Source改成Color,這樣這個場景就不再受Skybox的「照射」了,陰影自然就只有一種顏色。 將Ambient Color改成純黑,陰影就會變成完全沒有漸層的全黑了。 這裡改回預設材質球會看得更清楚(黃黃的是因為預設Directional Light的顏色)。 Skybox 將環境光跟反射的Skybox都改掉後,現在Skybox就只是一個背景了,不會對物件的顏色有任何影響。 直接在Lighting中將Skybox設為none,場景除了背景消失外沒有其他變化。 Other…

Continue ReadingUnity Rendering Note2 – Basic Lighting Setting

Unity Rendering Note1- Basic Rendering Process

  • Post category:筆記
  • Reading time:6 mins read
  • Post author:

最近在學習Unity的渲染,想要更了解整個畫面渲染的流程與機制,並整理成了筆記。主要是關於Frame Debugger這個工具的運用及Unity的畫面渲染的步驟。 Frame Debugger Frame Debugger能一步一步呈現渲染的過程,是用來檢查渲染過程的工具,當畫面結果不如預期時,用Frame Debugger來檢查非常方便。 路徑在Window->Analysis下。 開啟視窗後,要點擊Enable才能作用。 接下來,在Game視窗中就能看到變化了。拖動FrameDebugger視窗上方的拉桿,就能看到渲染的過程了(步驟數量一場景物件&設定而異)。 第一步:清空Buffer GPU中會有兩個跟顯示視窗尺寸相同的空間,稱為Buffer,負責呈現我們螢幕所看到的畫面。 兩個Buffer快速輪流切換,一個負責接收CPU傳入的資料,一個負責呈現畫面,讓畫面實時更新,不會卡頓。而切換一次的過程,就是所謂的一幀。 所以每幀都要把畫面清空,畫上下下幀的畫面(下一幀由另一個Buffer呈現)。 可以看到視窗是全黑的。 第二步:深度圖 再來會由頂點資訊畫出深度圖。 可以看到深度是整個畫面最先渲染出來的部分(Event下方有詳細的項目可以查看,這裡最重要的就是Shadow Depth)。 離攝影機越遠、就會越黑;反之則越白。由此初步構出場景。 第三步:Shadow Map 再來會由攝影機與場景內的光源來畫出Shadow Map。 Shadow Map是一張2D的Texture,用來記錄頂點受光的程度(0~1)。從光源出發,越先碰到的點越白、越晚碰到越黑,由此判斷頂點是否處在陰影中。 (這裡畫面可能會是全黑的,要移動一下攝影機或光源看看。) 補充一下,Project Setting中的Shadow Distance會影響這一步渲染的畫面(調高會渲染得較遠)。…

Continue ReadingUnity Rendering Note1- Basic Rendering Process