Shader 學習筆記 20151113

2021-07-07 04:45:47 字數 815 閱讀 4797

根本原因是uv只能通過input這個struct裡面抓得到,而input只在surf()裡面才能輸入進去。

那麼有乙個問題出現了,很多texture是在lighting()裡面取,例如:

float roughness = tex2d(_roughnesstex, float2(ndoth_raw * 0.5 + 0.5, _roughness)).r

這種取法同surf()裡面 float4 specmask = tex2d(_specularmask, in.uv_specularmask) * _specularcolor

又有什麼不同呢?

思索了一下,在lighting()裡面tex2d()取的時候,它的座標都是依據光源/法線/視點算出來的,也就是說他計算的是動態的,是根據光源、obj的運動(帶動了法線動)、視點的運動隨時改變的。而從surf()裡面用uv抽取出來的值,雖然在世界視角看來是動的,但是對obj本身來說,其並未產生變化,是靜態的,這也就是一定要用uv來描述的原因所在吧。

通俗的說,uv取出來的一定會聯絡到obj上,obj動它就動,不管取出來的是實際color值還是控制值。lighting()裡面取的texture的值絕大多數都需要視點、光源、畫素normal一起作用,實際看到的效果讓人感覺和obj沒什麼聯絡。

於是就有乙個很有趣的疑問,平底鍋的反光,應該是brdf和specular texture一起搞麼?(如果真的是的話,能搞出來麼? 看了本章最後一張那個各項異性貼圖,貌似又有點不一樣)

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 學習筆記 20151102

計算光源法線點乘,也就是它們之間的夾角余弦 float diflight dot s.normal,lightdir 計算視點法線點乘,也就是它們之間的夾角余弦 float rimlight dot s.normal,viewdir 給光源法線點乘搞了乙個hlambert效果 就是讓非光照面也有明暗...