91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenGL?Shader如何實現陰影遮罩效果

發布時間:2022-02-14 09:48:30 來源:億速云 閱讀:227 作者:小新 欄目:開發技術

小編給大家分享一下OpenGL Shader如何實現陰影遮罩效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

smoothstep另一種用法

在之前OpenGL Shader-抗鋸齒實現文章中所介紹的那樣:為了抗鋸齒效果可以用smoothstep函數對繪制形狀進行平滑過渡來實現。其中也提到了當smoothstep函數中入參ab范圍過大時就會出現漸變效果。如OpenGL Shader-抗鋸齒實現中所展示的效果:

OpenGL?Shader如何實現陰影遮罩效果

遮罩效果實現

看到這個效果后似乎可以利用smoothstep函數中ab入參取大范圍來實現不一樣的特效能力。例如可以使用該特點來實現類似于老電影中遮罩效果,在視圖邊緣出現一層朦朧遮罩中間最亮四周有一層淡淡的陰影效果。

OpenGL?Shader如何實現陰影遮罩效果

實現原理其實就是利用smoothstep函數入參使用大范圍值,在繪制圓基礎上改造處理。底色使用白色vec3(1.),陰影遮蓋使用黑色vec3(1.)就能達到陰影遮罩效果了。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;

    vec4 texture = texture(iChannel2,uv);
    uv -= 0.5;
    uv.x *= iResolution.x/iResolution.y;
    float m = 0.4;
    m = smoothstep(m-0.2,m+0.2,length(uv) - 0.2);
    vec3 pixel = mix(vec3(1.),vec3(0.),m);
    gl_FragColor = vec4(pixel,1.0);
    
}

OpenGL?Shader如何實現陰影遮罩效果

除了采用smoothstep函數實現外,下面還有一種方法也能實現陰影遮罩效果。如下glsl所示 對顏色向量vec4 texturevignette相乘,相當于改變色值通道亮度達到明暗對比;同時對于取值uv.y-0.5可以理解越接近中心取值越接近為0,那么計算得出的vignette就越大約接近為1。

void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec4 texture = vec4(1.);
    float vigAmt = 4.0;
    float vignette = (1.0-vigAmt*(uv.y-0.5)*(uv.y-0.5))*(1.0-vigAmt*(uv.x-0.5)*(uv.x-0.5));
    texture *= vignette;
    gl_FragColor = texture;
}

OpenGL?Shader如何實現陰影遮罩效果

通過對照也能發現采用圓形公式實現遮罩是有一定圓弧趨勢,而另一種遮罩是偏向矩形,在特效效果上略有差異。以此類推肯定還可以根據這種方式來實現星型,愛心等形狀遮罩。

smoothstep

OpenGL?Shader如何實現陰影遮罩效果

OpenGL?Shader如何實現陰影遮罩效果

vignette

OpenGL?Shader如何實現陰影遮罩效果

OpenGL?Shader如何實現陰影遮罩效果

效果擴展

最后可以增加一個time時間入參,通過vigAmt值不斷變化vignette強弱來實現忽明忽暗的效果,會有一種在看老電影的感受。

#define time iTime
void main() {
    vec2 uv = gl_FragCoord.xy / iResolution.xy;
    vec4 texture = texture(iChannel2,uv);
    float vigAmt = 4.0 + 0.3 * sin(time + 5.0 * cos(time*5.0));
    float vignette = (1.0-vigAmt*(uv.y-0.5)*(uv.y-0.5))*(1.0-vigAmt*(uv.x-0.5)*(uv.x-0.5));
    texture *= vignette;
    gl_FragColor = texture;
}

OpenGL?Shader如何實現陰影遮罩效果

以上是“OpenGL Shader如何實現陰影遮罩效果”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景东| 措美县| 广宁县| 阜城县| 西峡县| 丹阳市| 上杭县| 通州市| 肇庆市| 韶关市| 潼南县| 吉木萨尔县| 启东市| 哈巴河县| 鄂州市| 沙湾县| 杨浦区| 阜南县| 德化县| 崇明县| 红原县| 新乡市| 香河县| 兰西县| 大理市| 拉萨市| 盱眙县| 吴川市| 宁南县| 鄯善县| 景宁| 禄劝| 沧州市| 皋兰县| 彭水| 潞城市| 全南县| 泉州市| 东山县| 兰州市| 百色市|