unity|specular年終結

2021-01-10 Thepoly

上一次的分享有說到,specular的算法主要有三步:首先得到平面上點的法向量N;然後根據光源的方向求得反射光R;最後根據R求得反射光與人眼的夾角θ,θ越小說明人眼與反射光越接近,等到θ等於0的時候,就可以最大化的看到反射光。

所以現在我們開始在shadergraph裡面來完成我們的算法。

打開上次diffuse的那個shader,我們直接在這個shader的基礎上疊加specular效果,就可以最終得到phong shader的效果。

首先新建節點NormalVector來獲取物體表面的法向量(記得space一定要和之前的diffuse一樣選world)

然後光源方向,直接用上次輸入的light direction變量,將這兩個參數輸入到一個叫做reflection的節點裡面,就可以得到我們光源的反射光線

得到反射光線以後,還需要獲取人觀察的方向,然後反射光線和觀察方向進行點乘,就可以求得θ值了。

人觀察的方向可以直接用shader graph自帶的view direction來獲取,所以結果如下;

因為黑色顏色值為0,但是如果是負數的話,得到的顏色也是0,所以為保證顏色值在0-1之間,我們給結果加上一個Maximum節點,去除掉小於0的值。

如此便得到specular的效果,最後將其與之前做的diffuse相加,輸入到最後的輸出節點中。

觀察最後的輸出,可以看到高光的地方特別亮,以至於擋掉了diffuse的顏色值。

所以我們需要想辦法讓這個高光值不那麼大,0-1之間的值怎麼才能夠越變越小,就是乘以自己,所以我們給高光加上一個power函數,來控制高光範圍。

保存後在場景中觀察得到的結果。

此時的小球已經有了我們夢寐以求的高光效果!

為方便外部可調性,將power的冪值暴露出去,新添加一個類型為float的input,命名為shininess,並將默認值改為10。值越大表示高光範圍越小。

同樣,我們再給高光的輸出乘上一個參數來控制specular高光的亮度。

這樣我們就可以在外部隨意調節高光的亮度和範圍了。

- End -

相關焦點

  • Unity PBR Standard Shader 實現詳解 (三)
    ,unity_SpecCube0), data.probeHDR[1], glossIn); specular = lerp(env1, env0, blendLerp); } else { specular = env0; } #else
  • Unity Standard Shader 技術分析
    Metallic和unity_ColorSpaceDielectricSpec.a被用來構造reflectivity,之後reflectivity和Albedo共同構造diffColor.而Metallic,Albedo,unity_ColorSpaceDielectricSpec被共同用來構造
  • Unity PBR Standard Shader 實現詳解(一)
    如上圖,一束光照射在材質表面後,會變成三個分身:反射光(specular),散射光(diffuse),和一部分被吸收的光線。2.2 PBR次世代製作,金屬度粗糙度流程和高光度光滑度流程(metalness-roughness workflow和specular-smoothness workflow)約麼2014-15年的時候,國內開始慢慢有公司開始做PBR次世代,這個時候我們的貼圖變成了4張:
  • Unity3D 實用技巧 - Unity Shader 匯總式學習·初探篇
    由於Unity內置了一些光照函數——Lambert(diffuse)和Blinn-Phong(specular),因此這裡在默認情況下會使用內置的Lambert模型。當然我們也可以自定義。D  optionalparams包含了很多可用的指令類型,包括開啟、關閉一些狀態,設置生成的Pass類型,指定可選函數等。
  • 新手如何從零開始學習unity
    自從 unity5發布免費過後,有很多獨立遊戲開發者轉向unity遊戲開發,unity的優勢就是多終端跨平臺打包,入門也快,很多人感覺自己的英文不好,就覺得學不會,其實這是一個誤區,unity的界面雖然是英文的,但是它的窗口就只有那麼幾個,用的次數多了,也就自然的熟練了,那麼新手該如何從零開始學習unity呢?
  • Unity腳本生命周期
    作為一個unity從業人員,相信許多人有時候都會記不住unity的生命周期,記不住沒關係,有了這張圖,一切都是浮雲。
  • unity什麼意思
    unity什麼意思unity,聯合、統一、團結、和睦。學單詞,只記住意思可不行,會用才行,小夥伴們可以在評論區造句,我們一起學習哦!我先來:造句:Unity is strength.
  • 使用Unity ECS開發《我的世界》
    直播課程:Facial AR Remote面部捕捉解決方案課程(第一期)直播地址:https://connect.unity.com/events/unitychina-facialarUnity官方教師培訓報名火熱進行中Unity將在10月22-26日,舉辦為期5天的專業的Unity官方教師培訓課程,誠邀廣大教師與Unity一同學習分享最新技術
  • unity的自學之旅
    對比之後選擇了unity。主要用c#語言來寫腳本。創建物體,燈光,粒子等等。unity書籍慢慢的可以跟著做遊戲了。做了以前的坦克大戰,憤怒的小鳥等等。夢想能做出有趣的遊戲。
  • Unity 重Built-in到URP函數對應整理
    本文提供重 Built-in 到 URP 的示例總結,希望可以幫助到大家1.開始之前這裡有一些連結可以幫助你深入了解URPUnity URP 官方文檔 https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal%408.1/manual/index.html
  • Unity編碼篇 Transform類
    unity場景裡每個遊戲物體都含有 Transform 組件 , 用來控制物體的位置、旋轉、縮放.// 控制坦克左右旋轉 transform.Rotate(Vector3.up * Time.deltaTime * angle * hor); } }}在unity
  • 歲末年終說「不夠」
    筆者認為,年終總結必須「燉煮」方能出「新味」,只有在「結」上使勁,才能「結好尾」「結果子」「有結晶」。年終總結寫「不夠」的大致有兩種。一種是「本領恐慌」者,平日裡學習很認真、工作很敬業,越學越覺得不足、越幹越覺得差距很大,說自己「不夠」,既是謙虛謹慎,也是對自己的真實認識。
  • Guangxi’s ethnic unity and progress work makes marked effects
    Recently, it was learned from the news conference of ethnic unity and progress work in Guangxi that much progress has been made in the work.
  • 年終總結嚴防「注水總結」
    年終總結嚴防「注水總結」 中廣網    2004-11-09作者:伍振 趙凱     又到年終總結時。「手寫酸了,眼寫脹了,屁股坐麻了,可還得寫」。
  • 隨風擺動的草叢 — Unity Shader Graph 2D 初探
    參考連結https://forum.unity.com/threads/shader-graph-and-multiple-sprite-mode.706733/ 簡單的抖動效果https://blogs.unity3d.com/2018/10/05/art-that-moves-creating-animated-materials-with-shader-graph/
  • 2014社會哲理類考研英語作文必背模板: Unity/solidarity
    課程推薦:新東方無憂考研封閉集訓營       Topic 2: Unity/solidarity團結的意義   The cartoon aims at informing us of the significance of unity
  • Unity3D 推薦的7個項目和案例練習
    target=http%3A//forum.china.unity3d.com/thread-23645-1-1.html今天我們繼續為大家分享一篇教程:教大家在Unity中製作一款文字冒險遊戲。遊戲靈感來自於「火柴人亨利(Henry Stickmin)」系列遊戲,以及一些上世紀80年代的《驚險岔路口》冒險叢書。遊戲根據玩家的不同選擇來展開故事情節,通常會擁有多重結局。
  • Unity編碼篇 Rigidbody類
    {// 實例化一個子彈Instantiate(m_bullet);}}}然後我們運行unity下期為大家介紹一下 Time 類 , 讓你可以在 unity 中掌控時間 .
  • 使用unity製作RPG遊戲3——2D精靈
    context=%7B%22nid%22%3A%22news_9564882242542237691%22%2C%22sourceFrom%22%3A%22bjh%22%2C%22url_data%22%3A%22bjhauthor%22%7D下面需要利用Tiled2Unity把01地圖導入unity下載Tiled2Unity