Shader 學習筆記 20151102

2021-07-06 08:29:36 字數 945 閱讀 5192

//計算光源法線點乘,也就是它們之間的夾角余弦

float diflight = dot (s.normal, lightdir);

//計算視點法線點乘,也就是它們之間的夾角余弦

float rimlight = dot(s.normal, viewdir);

//給光源法線點乘搞了乙個hlambert效果(就是讓非光照面也有明暗變化細節,

//但是在這裡其實是給diflight搞乙個歸一化,因為diflight範圍是負1到正1)

float hlambert = diflight * 0.5 + 0.5;

//關鍵的來了,用這兩個余弦值去找2dtexure上面的畫素顏色。

float3 ramp = tex2d(_ramptex, float2(hlambert,rimlight)).rgb;

好吧,這玩意從演算法上看是很通俗,那麼直觀上的理解到底是啥?這種方法用能幹些啥呢?

先回答這個直觀上理解是什麼東西,直觀上看可以理解為我們渲染的這個物體,越靠近光源的部分其顏色就越顯藍色,越遠離光源的部分其顏色就越紅。同時,請注意同時,眼睛看這個物體時,這個物體中心亮,輪廓暗(中心亮、輪廓暗這個其實是特別針對這個球來說的,由rimlight的演算法可以看出來,物體上法線和視線平行的點就亮,垂直的就暗),為啥會有紅、藍、明、暗這區別呢?就是brdf這個材質圖決定的,現在把材質圖放大放在下面。(圖中的兩個軸我還未體悟清楚)

//此處出了個大問題,ramp 被我宣告成float 而 不是float3,得到非常難查的結果 

float3 ramp =tex2d(_ramptex, float2(hlambert,rimlight)).rgb;

Shader學習筆記

direct和opengl兩種程式設計標準,前者是微軟提供的,一般用於windows平台,而後者是linux android ios等都共同支援的標準。由這兩種標準就衍生出來了集中gpu程式語言,諸如hlsl cg glsl等,在unity裡面,並不直接使用者三種語言去編寫,而是用自己自定義的sha...

Shader 學習筆記 20151031

閱讀了unity shaders and effects cookboot的 custom light model一節。page 17 閱讀了unity online manual關於 custom light model兩段文章 閱讀了博文 unity shaders 初探su ce shader...

Shader 學習筆記 20151113

根本原因是uv只能通過input這個struct裡面抓得到,而input只在surf 裡面才能輸入進去。那麼有乙個問題出現了,很多texture是在lighting 裡面取,例如 float roughness tex2d roughnesstex,float2 ndoth raw 0.5 0.5,...