qnetworkreply 获取状态_谈谈Unity Shader中的采样器状态和(Texture Filtering)纹理滤波方式
參考文章:
使用采樣器狀態(tài) - Unity 手冊?docs.unity3d.comhttps://blog.csdn.net/chenjinxian_3D/article/details/51816918?blog.csdn.net根據(jù)Unity的參考文檔,Unity Shader使用采樣器狀態(tài)有三種方式,分別是:耦合的紋理和采樣器;單獨的紋理和采樣器;內(nèi)聯(lián)紋理采樣器狀態(tài)。
耦合的紋理和采樣器
第一種采樣器狀態(tài)來源于紋理設置,本質上紋理跟采樣器會耦合在一起,使用DX9的語法風格,它的默認行為如下:
sampler2D _MainTex; // ... half4 color = tex2D(_MainTex, uv);使用 HLSL 關鍵字 sampler2D、sampler3D 和 samplerCUBE 可聲明紋理和采樣器。在較舊的圖形 API (OpenGL ES) 中,這是唯一受支持的方式。
單獨的紋理和采樣器
很多圖形 API 和 GPU 都允許使用的采樣器數(shù)量少于紋理,而耦合的紋理+采樣器語法可能不允許編寫更復雜的著色器。例如,Direct3D 11 允許在單個著色器中最多使用 128 個紋理,但最多僅允許使用 16 個采樣器。
Unity 允許使用 DX11 風格的 HLSL 語法來聲明紋理和采樣器,但需要通過一個特殊的命名約定來讓它們匹配:名稱為“sampler”+TextureName 格式的采樣器將從該紋理中獲取采樣狀態(tài)。
以上部分中的著色器代碼片段可以用 DX11 風格的 HLSL 語法重寫,并且也會執(zhí)行相同的操作:
Texture2D _MainTex; SamplerState sampler_MainTex; //"sampler"+"_MainTex" // ... half4 color = _MainTex.Sample(sampler_MainTex, uv);但是請注意,DX11 風格的 HLSL 語法在某些較舊的平臺(例如,OpenGL ES 2.0)上無效,不過可以通過指定#pragma target 3.5以避免較舊的平臺使用著色器。
內(nèi)聯(lián)采樣器狀態(tài)
除了能識別名為“sampler”+TextureName 的 HLSL SamplerState 對象,Unity 還能識別采樣器名稱中的某些其他模式。這對于直接在著色器中聲明簡單硬編碼采樣狀態(tài)很有用。例如:
Texture2D _MainTex; SamplerState my_point_clamp_sampler; // ... half4 color = _MainTex.Sample(my_point_clamp_sampler, uv);名稱 “my_point_clamp_sampler”將被識別為應該使用點(距離最近)紋理過濾和鉗制紋理包裹模式的采樣器。
采樣器名稱被識別為“內(nèi)聯(lián)”采樣器狀態(tài)(全都不區(qū)分大小寫):
*“Point”、“Linear”或“Trilinear”(必需)設置紋理過濾模式。
*“Clamp”、“Repeat”、“Mirror”或“MirrorOnce”(必需)設置紋理包裹模式。
下面羅列參見的內(nèi)聯(lián)采樣器狀態(tài):
sampler_tex1 // 使用unity的texture setting的sampler sampler_linear_clampu // filter:linear, wrap: clamp u sampler_linear_clampv // filter:linear, wrap: clamp v sampler_point_clamp // filter:point, wrap: clamp u & v sampler_linear_clamp // filter:linear, wrap: clamp u & v sampler_trilinear_clamp // filter:trilinear, wrap: clamp u & v sampler_trilinear_mirroru // filter:trilinear, wrap: mirror u sampler_trilinear_mirrorv // filter:trilinear, wrap: mirror v sampler_trilinear_mirror // filter:trilinear, wrap: mirror v & v sampler_trilinear_mirroronceu // filter:trilinear, wrap: mirror once u, 這個親測法線mirror v也生成,不知道是否解析的BUG sampler_trilinear_mirroroncev // filter:trilinear, wrap: mirror once v, 這個親測法線mirror u也生成,不知道是否解析的BUG sampler_trilinear_mirroroncev_mirroru // filter:trilinear, wrap: mirror once v & mirror u, 親測兩個一起設置,就沒有BUG sampler_trilinear_mirroru_repeat // filter:trilinear, wrap: mirror u & repeat v 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的qnetworkreply 获取状态_谈谈Unity Shader中的采样器状态和(Texture Filtering)纹理滤波方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jstack 脚本 自动日志_深入理解j
- 下一篇: android pdf阅读器开发_如何在