天天看點

《Unity開發實戰》——3.2節建立反射材質

本節書摘來自華章社群《unity開發實戰》一書中的第3章,第3.2節建立反射材質,作者 (愛爾蘭)matt smith (巴西)chico queiroz,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

3.2 建立反射材質

金屬、車漆,以及光滑的塑膠表面都是一些很常見的需要反射的材質的例子。幸運的是,unity内置了反射着色器(reflective shader),配置好以後就可以幫我們實作想要的效果了。

3.2.1 準備工作

本節需要準備兩個紋理貼圖:base map(底圖)和reflection cubemap(反射立方圖)。底圖得是一張rgba的圖檔,alpha通道可以把反射級别指定成從完全不透明(黑色)到完全反射(白色)。反射立方體貼圖可能是由六塊紋理組成,或者像本節教程這樣,隻有一個單獨的紋理。

為了讓讀者把精力放在本節的主題:建立一個反射材質,0423_03_01檔案夾中準備了一個包,包括一個之前建立的場景,以及一個可以作為反射貼圖的.jpg檔案。

3.2.2 操作步驟

請按照下面的步驟建立反射材質:

1)把reflectivematerial包導入到unity中。

2)打開reflectivemateriallevel 場景,播放時有一個3d物體(一個電池)繞着自己的中軸自轉。我們也可以讓錄影機繞着電池。

3)停止播放場景,在hierarchy視圖中選中電池,inspector視圖中會顯示其材質,使用下拉菜單設定着色器:把值從diffuse(漫反射)改成 reflective | specular(反射|鏡面反射)。

《Unity開發實戰》——3.2節建立反射材質

5)在project視圖中選擇reflectionmap資源,它已經從2d紋理變成了立方圖(圖示也變了)。

6)選擇battery材質并把reflectionmap資源應用到reflection cubemap的選項中:

《Unity開發實戰》——3.2節建立反射材質

11)儲存檔案,讓unity重新加載此圖檔,反射效果在文字标簽區域應該更加謹慎。

3.2.3 實作原理

基礎紋理的alpha通道設定了反射度,本例中,材質的鏡面反射的級别是根據每個像素的亮度而定的。意思是說alpha通道是白色的時候反射立方圖(reflection cubemap)的可見度更高。

反射立方圖(reflection cubemap)實際上是由6張不同的圖檔組成的,這些圖檔是通過在紋理導入器(texture importer)把texture type(紋理類型)設定成reflection(反射)後,由原始的圖檔檔案生成的。這6張圖檔被映射到立方體的6個面上。

3.2.4 更多内容

反射立方圖(reflection cubemap)可以用很多種方式生成,并且有很多種不同的映射屬性。

使用6個不同的紋理貼圖

不用1張單獨的紋理貼圖。也可以在project視圖中建立一個空的反射立方圖(reflection cubemap)并指定6張不同的圖檔檔案繪制到6個表面上。

用mapping(映射)和shader(着色器)選項練習

對于電池模型,使用圓柱體映射是最好的選擇。對于不同的形狀可以試試其他選項。除了base 貼圖和 reflection紋理貼圖,還可以練習使用其他的shader設定,比如main color、specular color、reflection color(可以用于給材質着色),以及shininess(反光度,用于控制鏡面發散)。

反射目前的場景圖形

繼續閱讀