Fragment shader 片段級光照1

2021-08-14 09:42:19 字數 1246 閱讀 2753

1、將法向量和光向量從頂點函式vert移動到片段函式frag

shader "custom/f_diffuse" 

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

#include "lighting.cginc"

struct v2f ;

v2f o;

o.pos = mul(unity_matrix_mvp,v.vertex);

= normalize(v.normal);

o.normal = unityobjecttoworldnormal(v.normal);

o.lightdir = normalize(worldspacelightdir(v.vertex));

return o;

} fixed4 frag(v2f in) :color

endcg

} }}

著色後的效果:右邊的小球是自定義著色器

2、頂點程式是基於頂點的,模型當中有乙個頂點,就會啟動乙個頂點程式,有兩個頂點,就會對兩個頂點都同時並行地進行處理。當頂點程式計算出結果,傳遞給片斷程式frag,片斷程式會進行光柵化處理。這個特性利用了顯示卡底層的特性。能夠把三角形麵片分割為每乙個畫素點。乙個片斷程式對應於乙個畫素的處理,乙個三角形會分割為很多的小畫素,而我們總是對同乙個三角形的那一片資料使用了相同的法向量和光向量,對於三角形分割較少,在頂點中使用了相同的資料,由這些資料分割出來的畫素使用的是同樣的資料在frag中,在frag中起不到差值分割的目的。所以獲取法向量和光向量放在頂點程式中是錯誤的,應該放在片段程式當中。

o.normal = unityobjecttoworldnormal(v.normal);

o.lightdir = normalize(worldspacelightdir(v.vertex));

光滑度基本上和左側預設的shader一致

放大也沒有出現斑塊問題:

flash 白片 黑片 SLC MLC

flash快閃儲存器分類介紹 slc mlc 黑片 1 flash快閃儲存器是非易失性儲存器,這是相對於sdram等儲存器所說的。即儲存器斷電後,內部的資料仍然可以儲存。flash根據技術方式分為nand nor flash和ag and flash,而u盤和 中最常用的記憶體就是nand flas...

時間片輪詢

2002年初,筆者著手寫乙個 ic卡預付費電表的工作程式,該電表使用 philips 公司的8位51 擴充套件型微控制器 87lpc764 要求實現很多功能,包括熄顯示 負荷計算與控制 指示閃爍以及電表各種引數的查詢等,總之,要使用時間的單元很多。筆者當時使用 asm51 完成了這個程式的編寫,完成...

時間片輪轉

時間片輪轉排程演算法,這種演算法是將程序控制塊按照進入就緒佇列的先後次序排成佇列。關於就緒佇列的操作就是從隊頭摘下乙個程序控制塊和從隊尾掛入乙個程序控制塊。單處理器系統中程序控制塊分成乙個正在執行程序的程序控制塊 就緒程序的程序控制塊組織成的就緒佇列和等待程序的程序控制塊組成的等待佇列。由於實驗模擬...