最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Unity學(xué)習(xí)筆記 Vol.65 Unity Shader Graph URP 中的三維映射(Triplanar)

2020-08-27 17:08 作者:NXL2  | 我要投稿

摘要

????我們將使用Unity通用渲染管線和ShaderGraph中部分功能制作根據(jù)位置和轉(zhuǎn)向來(lái)調(diào)整外觀的著色器,我們將使用《Boat Attack》demo。demo很好地展示出了通用渲染管線的可能性,及項(xiàng)目在支持多平臺(tái)時(shí)能達(dá)到什么效果。demo項(xiàng)目下載及詳細(xì)教程參考下面視頻。


著色器詳解

我們用ShaderGraph為巖塊和峭壁制作了一個(gè)著色器,讓網(wǎng)格的材質(zhì)能自動(dòng)適應(yīng),讓對(duì)象在場(chǎng)景中不論位置,轉(zhuǎn)向是多少都能使用正確的材質(zhì),著色器會(huì)讓巖石底部一直是潮濕的,讓植被僅在特定高度之上的巖塊頂部出現(xiàn)。

????來(lái)看看如何用ShaderGraph來(lái)制作這類著色器吧。首先,新建著色器,選擇Shader> PBR Graph,讓我們將它命名為RockShader,再創(chuàng)建一個(gè)新材質(zhì)指定到巖塊上,著色器主要通過(guò)計(jì)算獲取對(duì)象在場(chǎng)景中當(dāng)前 的位置和轉(zhuǎn)向,再確定網(wǎng)格外觀,為不同層級(jí)生成遮罩。

????我們先在基礎(chǔ)層級(jí)上添加巖石紋理,新建SampleTexture2D節(jié)點(diǎn),連接上 一個(gè)新Texture節(jié)點(diǎn),節(jié)點(diǎn)應(yīng)轉(zhuǎn)換為屬性,命名為RockAlbedo,接著創(chuàng)建,連接法線貼圖,在《Boat Attack》demo中,我們將法線貼圖和環(huán)境光遮蔽貼圖打包進(jìn)了同一紋理中,將多個(gè)紋理打包進(jìn)圖像不同通道中可以 節(jié)省不少紋理內(nèi)存,但也意味著貼圖要解包后使用,指定通道時(shí)也不能出錯(cuò)。

????新建一個(gè)SampleTexture2D節(jié)點(diǎn),連接到漲到 AO或法線環(huán)境光遮蔽貼圖上,然后抓取紅色通道,把它連接到Preview節(jié)點(diǎn)就能看到,這是 巖塊的環(huán)境光遮蔽貼圖,那將輸出連接到主節(jié)點(diǎn)的Occlusion上,再創(chuàng)建個(gè)Vector3節(jié)點(diǎn),將綠色通道連接到y(tǒng)輸入點(diǎn),藍(lán)色通道到z輸入點(diǎn),alpha通道到x輸入點(diǎn),隨后重新映射輸入紋理0到1數(shù)值范圍到普通矢量的-1到1范圍。為此,我們可將數(shù)值乘2再減1,新建Multiply節(jié)點(diǎn),將數(shù)值都乘上2。

????再連接到一個(gè)Substract節(jié)點(diǎn)將 數(shù)值都減去1 。在Preview中 ,能看到紋理重映射后已經(jīng)能實(shí)際使用了,將輸入連接到主節(jié)點(diǎn)作為法線貼圖,同時(shí)連接上Albedo貼圖。

????巖塊看起來(lái)挺好的,接下來(lái)看看如何在圖表中添加些運(yùn)算,在特定高度上添加植被。

????回到ShaderGraph先整理下圖表,我們能隱藏部分?jǐn)?shù)值,在節(jié)點(diǎn)上右擊,選擇View>Collapse Ports。

????菜單上還能選擇隱藏節(jié)點(diǎn)的預(yù)覽。

????首先創(chuàng)建植被的紋理節(jié)點(diǎn)。接著,為 Normal和Albedo紋理添加Lerp節(jié)點(diǎn),Lerp節(jié)點(diǎn)的Time輸入決定了兩種輸入紋理之間著色器的過(guò)渡方式,輸入應(yīng)在0和1之間。但我們能使用灰階紋理來(lái)設(shè)定,遮擋兩個(gè)紋理的混合位置,給Time屬性指定個(gè)SampleGradient節(jié)點(diǎn)就能顯示出效果。

????隨著uv變化,顏色會(huì) 從黑變白,因?yàn)楹谏?等0,白色等于1,Lerp節(jié)點(diǎn)2會(huì)根據(jù)輸入從一個(gè)紋理逐漸過(guò)渡另一個(gè)紋理。不過(guò)巖塊上看起來(lái)不對(duì)勁,這是因?yàn)榫W(wǎng)格uv展開(kāi)方式不對(duì)。

????我們需要用巖塊紋理的數(shù)據(jù)來(lái)生成、修改植被的遮罩,讓其只在頂部出現(xiàn),將巖塊紋理連接到 Lerp節(jié)點(diǎn)的A端口,植被紋理連接到B端口。

????接著創(chuàng)建Position節(jié)點(diǎn),取得對(duì)象的AbsoluteWorld世界絕對(duì)位置,

????從中取得y軸位置,拆分輸出,將綠色通道傳入Smoothstep節(jié)點(diǎn)。

????這時(shí)將輸出連接到Lerp節(jié)點(diǎn)的Time端口,遮罩就會(huì)出現(xiàn)在巖塊上了。

不過(guò)遮罩似乎只遮到了巖塊的底層,這是因?yàn)槲覀兪褂昧藋軸位置來(lái)設(shè)定遮罩,任何大于1的 紋理都為白色植被紋理才會(huì)出現(xiàn)。

????來(lái)看看如何將草地的分布向上挪一挪。在黑板中新建Vector1屬性,稱為GrassHeightBlend,將屬性連接到Smoothstep節(jié)點(diǎn)的Edge2端點(diǎn)2,來(lái)控制植被出現(xiàn)的高度閾值。

????可以注意到,當(dāng)更改材質(zhì)上的數(shù)值時(shí),修改的是漸變效果,而不是遮罩間的交點(diǎn),我們來(lái)添加個(gè)與Blend值相關(guān)的Smoothstep節(jié)點(diǎn)值,讓邊緣濃密度能保持一致。

????新建Subtract節(jié)點(diǎn),將數(shù)值減去1,讓漸變效果從GrassHeightBlend減1單位的位置上開(kāi)始。類似的,新建Add節(jié)點(diǎn),將Smoothstep節(jié)點(diǎn)的第二個(gè)值,高為GrassHeightBlend加1單位的值。

????這下邊緣濃密度會(huì)保持一致,混合點(diǎn)則能在巖塊上下移動(dòng)??雌饋?lái)很不錯(cuò)了。遮罩現(xiàn)在能正確混合了。最后一步是 讓植被僅出在指向特定方向的網(wǎng)格上。我們能通過(guò)將法線貼圖轉(zhuǎn)換成方向矢量實(shí)現(xiàn),抓取巖塊法線貼圖,用Transform節(jié)點(diǎn)將其從正切空間轉(zhuǎn)換到場(chǎng)景空間,將Type類型設(shè)為Direction。

????該紋理貼圖就能顯示出網(wǎng)格每部分的世界方向了。我們要讓植被僅出現(xiàn)在向上的網(wǎng)格上,即紋理的綠色通道,那將輸出拆分,將綠色通道接Multiply節(jié)點(diǎn),將輸出與此前的Smoothstep輸出相乘,節(jié)點(diǎn)現(xiàn)在會(huì)根據(jù)網(wǎng)格法線向上的程度 來(lái)輸出個(gè)0到1的值。

????如果將輸出用作Lerp節(jié)點(diǎn)的 遮罩,植被便只會(huì)出現(xiàn)在網(wǎng)格上最向上的部分出現(xiàn)。

????在最后潤(rùn)色上,我們來(lái)為運(yùn)算添加些控制,控制在巖塊上并排的植被數(shù)量,在Multiply節(jié)點(diǎn)后新添Smoothstep節(jié)點(diǎn)。

????在黑板上新建Vector1屬性,稱作Grass Threshold,設(shè)定為0到1的滑動(dòng)條,將閾值連接到一 個(gè)One Minus節(jié)點(diǎn),將輸出輸入到Smoothstep節(jié)點(diǎn)的 Edge2端點(diǎn),將輸出連接到Lerp節(jié)點(diǎn)的Time端點(diǎn)?,F(xiàn)在,我們可以控制材質(zhì)設(shè)定植被在巖塊上的伸展程度了,經(jīng)過(guò)短短幾次更迭。我們就使用ShaderGraph為游戲制作了非常靈活的著色器 ,可以看到ShaderGraph是一個(gè)實(shí)用、強(qiáng)大的工具,可用來(lái)快速為游戲創(chuàng)建 、更迭著色器。

Unity學(xué)習(xí)筆記 Vol.65 Unity Shader Graph URP 中的三維映射(Triplanar)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
若尔盖县| 新泰市| 定边县| 博湖县| 右玉县| 大足县| 阿坝县| 荔波县| 望城县| 霍城县| 镇沅| 会宁县| 贡山| 凤翔县| 石屏县| 通海县| 永福县| 罗平县| 年辖:市辖区| 千阳县| 镇赉县| 股票| 丹棱县| 临颍县| 郴州市| 石首市| 尉氏县| 合肥市| 南澳县| 抚州市| 大石桥市| 平陆县| 龙州县| 上思县| 湘潭市| 安福县| 湟中县| 兰溪市| 腾冲县| 乾安县| 滨州市|