strength * color + (1 - strength) * last time color = Final Vertex color
其實就是alpha blending的公式。(上面的數值應該都保持0~1之間)
最後跟我們一般的Diffuse做相乘(應該很少會讓地表的vertex color直接覆蓋掉Diffuse)。
那因為做這種乘色的動作,通常都會降低整個顏色的亮度,所以應該還要有個亮度筆刷,其實這種亮度應該要說是最後顏色的強度,也就是在跟Diffuse做相乘時,還會再乘個數值,讓最後的顏色結果整個再提亮。公式如下:
strength * Brightness + (1 - strength) * last time Brightness = Final Brightness
FinalVertex color * Diffuse * Final Brightness = Final Diffuse
這邊從公式就看的出來,如果要提亮的話,Brightness一定要是要大於1的,當然小於1的話還是可以把它刷的更暗。
(如果改成FinalVertex color * Diffuse + Final Brightness這樣的話,看起來會有點像是粉筆筆刷的感覺,兩者就差在粉筆筆刷亮度提高後會容易看不到最後Diffuse的顏色)
這邊要注意的是資料儲存的問題,可以看到Color data in shader這篇。因為通常我們使用地表筆刷刷地表的話,一定會有內外圈,內圈和外圈中間通常是做smooth的動作,所以如果我們使用Unsigned integer來儲存資料的話,那經過smooth(如何做Smooth的動作可看到
Circle shape radial blur這篇)的話,一定會卡掉一些資料,那整個刷出來的感覺就會變成一圈一圈的,不會是一個模糊的放射狀。所以最後儲存的結果就要看到底是要存成一個image還是一個自訂binary格式。如果是image,因為最後一定是存成unsigned integer,一定還是有數值誤差的問題。那如果存成自訂binary格式的缺點就是不能編輯,彈性不夠高。
Circle shape radial blur這篇)的話,一定會卡掉一些資料,那整個刷出來的感覺就會變成一圈一圈的,不會是一個模糊的放射狀。所以最後儲存的結果就要看到底是要存成一個image還是一個自訂binary格式。如果是image,因為最後一定是存成unsigned integer,一定還是有數值誤差的問題。那如果存成自訂binary格式的缺點就是不能編輯,彈性不夠高。
沒有留言:
張貼留言