【游戲開發】Unity·沙漠場景
本文包含內容——
-
網格生成
-
柏林噪音生成地形
-
沙礫閃爍效果
網格生成
首先用c#生成指定尺寸的網格(Mesh)。參照Catlike Coding的Procedural Grid教程完成。
每個3D模型都有Mesh Filter和Mesh Renderer這兩個組件。其中Mesh Filter指向希望顯示的網格,用代碼生成網格即要賦予Mesh Filter一個Mesh類型的物體。
我需要的網格簡簡單單,需要告訴新建Mesh的數據有vertices,traingles和uv。
定義頂點信息的數組,填充各個頂點的坐標信息,將頂點數組賦予給Mesh.vertices。
接下來定義這些頂點如何構成三角形(通常Mesh的最小單位是三角形)。每個正方形Mesh由2個三角形構成,簡單粗暴直接按6個頂點計算,將頂點的順序索引存儲到Mesh.triangles中。

uv坐標的位置直接與頂點坐標關聯,因為只是一張平面啦所以很簡單——
uv[i] = new Vector2((float) x / xSize, (float) y / ySize);
最后得到的平面網格生成器效果如下:
*Unity中Scene窗口的左上角有Shading選項卡,切換Shading Mode到Wireframe即可看見場景中各個物體的的網格。
柏林噪音決定地形高度
因為還沒想好場景是什么樣的,所以先用柏林噪音決定高度看效果。
Unity有自帶的Mathf.PerlinNoise函數,直接用啦~

加上貼圖就還蠻有沙漠的感覺...

沙礫閃耀效果
沙礫閃耀這里,是受Minionart的Interactive Snow的啟發(真是個寶藏po主QwQ)。雪地表面有閃爍發光的效果,跟沙礫的閃爍差不多吧...
沙礫的閃爍用到一張噪音貼圖——

通過控制一個灰度閾值決定像素是否顯示(Cut off)。
//...
// 沙粒閃耀效果
float4 sparklesStatic = tex2D(_SparkleNoise, IN.uv_MainTex * _SparkleScale * 5);
float4 sparklesResult = tex2D(_SparkleNoise, (IN.uv_MainTex) * _SparkleScale) * sparklesStatic;
//...
o.Albedo = step(_SparkCutoff, sparklesResult) * _SparkleColor;
o.Emission = step(_SparkCutoff, sparklesResult) * _RimColor * pow(rim, _RimPower);
用這張圖可以達成類似星空的效果——

Sample工程文件


好啦,本節課就上到這里啦,下課!
轉載聲明:本文來源于網絡,不作任何商業用途。

全部評論


暫無留言,趕緊搶占沙發
熱門資訊

分享成長記錄還能賺錢?!這么給力的活動趕快來參加吧!...

20個CG大佬必備的行業網站

全國春茶地圖出爐 春茶有哪些?

學員故事 | 為CG夢想放棄華工保研,學習6個月斬獲王座杯銀獎!...

數字媒體藝術專業要學什么軟件?

游戲原畫人體線稿怎么畫?快來get!

《白夜極光》在海外二次元游戲圈中占有一席之地...

只有兩人的團隊研發了一款像素游戲《The Slormancer》Steam好...

一組風格獨特的插畫,來自巴西藝術家Raysa Fontana!...
