国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity Shader - if 和 keyword 的指令比較

這篇具有很好參考價(jià)值的文章主要介紹了Unity Shader - if 和 keyword 的指令比較。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


環(huán)境

Unity : 2020.3.37f1
Pipeline : BRP


TestingIf4Sample

下面是 shaderlab 和 arm mobile studio 中的 graphics analyzer 的 glsl 代碼


unity shaderlab 中的 TestingIf4Sample.shader

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

Shader "TestingIf4Sample"
{
    Properties
    {
        _A_Tex ("A Texture", 2D) = "white" {}
        _B_Tex ("B Texture", 2D) = "white" {}
        _USE_TEX_A ("Using Tex A", Float) = 1.0
    }
    SubShader
    {
        Tags
        {
            "Queue"="Geometry"
            "RenderType"="Opaque"
        }
        Pass
        {
            Name "Default"
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #include "UnityCG.cginc"
            struct appdata_t
            {
                float4 vertex   : POSITION;
                float2 texcoord : TEXCOORD0;
            };
            struct v2f
            {
                float4 vertex   : SV_POSITION;
                float2 texcoord  : TEXCOORD0;
            };
            sampler2D _A_Tex;
            sampler2D _B_Tex;
            fixed _USE_TEX_A;
            v2f vert(appdata_t v)
            {
                v2f OUT;
                float4 vPosition = UnityObjectToClipPos(v.vertex);
                OUT.vertex = vPosition;
                OUT.texcoord = v.texcoord.xy;
                return OUT;
            }
            fixed4 frag(v2f IN) : SV_Target
            {
                return _USE_TEX_A == 1.0 ? tex2D(_A_Tex, IN.texcoord) : tex2D(_B_Tex, IN.texcoord);
            }
        ENDCG
        }
    }
}


graphics analyzer 中的 TestingIf4Sample.glsl

VS

#version 320 es

precision highp float;
precision highp int;
#define HLSLCC_ENABLE_UNIFORM_BUFFERS 1
#if HLSLCC_ENABLE_UNIFORM_BUFFERS
#define UNITY_UNIFORM
#else
#define UNITY_UNIFORM uniform
#endif
#define UNITY_SUPPORTS_UNIFORM_LOCATION 1
#if UNITY_SUPPORTS_UNIFORM_LOCATION
#define UNITY_LOCATION(x) layout(location = x)
#define UNITY_BINDING(x) layout(binding = x, std140)
#else
#define UNITY_LOCATION(x)
#define UNITY_BINDING(x) layout(std140)
#endif
uniform 	mediump float _USE_TEX_A;
UNITY_LOCATION(0) uniform mediump sampler2D _A_Tex;
UNITY_LOCATION(1) uniform mediump sampler2D _B_Tex;
in highp vec2 vs_TEXCOORD0;
layout(location = 0) out mediump vec4 SV_Target0;
vec4 u_xlat0;
bool u_xlatb0;
vec4 u_xlat1;
vec4 u_xlat2;
void main()
{
#ifdef UNITY_ADRENO_ES3
    u_xlatb0 = !!(_USE_TEX_A==1.0);
#else
    u_xlatb0 = _USE_TEX_A==1.0;
#endif
    u_xlat1 = texture(_A_Tex, vs_TEXCOORD0.xy);
    u_xlat2 = texture(_B_Tex, vs_TEXCOORD0.xy);
    u_xlat0 = (bool(u_xlatb0)) ? u_xlat1 : u_xlat2;
    SV_Target0 = u_xlat0;
    return;
}

FS

#version 320 es

precision highp float;
precision highp int;
#define HLSLCC_ENABLE_UNIFORM_BUFFERS 1
#if HLSLCC_ENABLE_UNIFORM_BUFFERS
#define UNITY_UNIFORM
#else
#define UNITY_UNIFORM uniform
#endif
#define UNITY_SUPPORTS_UNIFORM_LOCATION 1
#if UNITY_SUPPORTS_UNIFORM_LOCATION
#define UNITY_LOCATION(x) layout(location = x)
#define UNITY_BINDING(x) layout(binding = x, std140)
#else
#define UNITY_LOCATION(x)
#define UNITY_BINDING(x) layout(std140)
#endif
uniform 	mediump float _USE_TEX_A;
UNITY_LOCATION(0) uniform mediump sampler2D _A_Tex;
UNITY_LOCATION(1) uniform mediump sampler2D _B_Tex;
in highp vec2 vs_TEXCOORD0;
layout(location = 0) out mediump vec4 SV_Target0;
vec4 u_xlat0;
bool u_xlatb0;
vec4 u_xlat1;
vec4 u_xlat2;
void main()
{
#ifdef UNITY_ADRENO_ES3
    u_xlatb0 = !!(_USE_TEX_A==1.0);
#else
    u_xlatb0 = _USE_TEX_A==1.0;
#endif
    u_xlat1 = texture(_A_Tex, vs_TEXCOORD0.xy);
    u_xlat2 = texture(_B_Tex, vs_TEXCOORD0.xy);
    u_xlat0 = (bool(u_xlatb0)) ? u_xlat1 : u_xlat2;
    SV_Target0 = u_xlat0;
    return;
}

TestingKW4Sample


下面是 shaderlab 和 glsl


unity shaderlab 中的 TestingKW4Sample.shader

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

Shader "TestingKW4Sample"
{
    Properties
    {
        _A_Tex ("A Texture", 2D) = "white" {}
        _B_Tex ("B Texture", 2D) = "white" {}
        [Toggle(_USE_TEX_A)]_USE_TEX_A ("Using Tex A", Float) = 1.0
    }
    SubShader
    {
        Tags
        {
            "Queue"="Geometry"
            "RenderType"="Opaque"
        }
        Pass
        {
            Name "Default"
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #pragma multi_compile _ _USE_TEX_A
            #include "UnityCG.cginc"
            struct appdata_t
            {
                float4 vertex   : POSITION;
                float2 texcoord : TEXCOORD0;
            };
            struct v2f
            {
                float4 vertex   : SV_POSITION;
                float2 texcoord  : TEXCOORD0;
            };
            sampler2D _A_Tex;
            sampler2D _B_Tex;
            v2f vert(appdata_t v)
            {
                v2f OUT;
                float4 vPosition = UnityObjectToClipPos(v.vertex);
                OUT.vertex = vPosition;
                OUT.texcoord = v.texcoord.xy;
                return OUT;
            }
            fixed4 frag(v2f IN) : SV_Target
            {
                #ifdef _USE_TEX_A
                    return tex2D(_A_Tex, IN.texcoord);
                #else
                    return tex2D(_B_Tex, IN.texcoord);
                #endif
            }
        ENDCG
        }
    }
}


graphics analyzer 中的 TestingKW4Sample.glsl

VS: 和上面的一樣,就不復(fù)制上來(lái)的
主要看 FS:

#version 320 es

precision highp float;
precision highp int;
#define UNITY_SUPPORTS_UNIFORM_LOCATION 1
#if UNITY_SUPPORTS_UNIFORM_LOCATION
#define UNITY_LOCATION(x) layout(location = x)
#define UNITY_BINDING(x) layout(binding = x, std140)
#else
#define UNITY_LOCATION(x)
#define UNITY_BINDING(x) layout(std140)
#endif
UNITY_LOCATION(0) uniform mediump sampler2D _A_Tex;
in highp vec2 vs_TEXCOORD0;
layout(location = 0) out mediump vec4 SV_Target0;
mediump vec4 u_xlat16_0;
void main()
{
    u_xlat16_0 = texture(_A_Tex, vs_TEXCOORD0.xy);
    SV_Target0 = u_xlat16_0;
    return;
}

比較

if 是指令實(shí)打?qū)嵈嬖诘?br> kw 原理是 macro 的 define,是在預(yù)編輯級(jí)別的分支,因此指令少一些也很正常

if 的推薦使用 記得是 if … else … 中 cycles 在 < 4 cycles 的,可以使用 if
否則還是使用 kw 的寫(xiě)法
下面的示例是 texture 的 sample,也就是 T unit 的采樣

我印象中記得: (到時(shí)我再補(bǔ)回來(lái),或是看到的大佬可以指導(dǎo)一下、分享一下資料)

  • register op: 1 cycles
  • sfu : 4~6 (忘記了)
  • texture sample : 300+ cyles

因此 T unit 優(yōu)化是非常有必要的

Unity Shader - if 和 keyword 的指令比較,unity,TA - 加油站,unity-shader,unity,shader if 語(yǔ)句,shader keyword,if 和 keyword 比較文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-617725.html

到了這里,關(guān)于Unity Shader - if 和 keyword 的指令比較的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity Shader】Unity前向渲染

    ForwardBase Pass(優(yōu)先渲染),渲染一個(gè)逐像素平行光和所有的頂點(diǎn)/球面調(diào)和光,陰影只和平行光有關(guān)系,那陰影應(yīng)該是這個(gè)Pass中實(shí)現(xiàn)的 ForwardAdd Pass(需要和Base配合使用,否則不生效),渲染剩余全部逐像素?zé)艄?Unity會(huì)根據(jù)場(chǎng)景中各個(gè)光源的設(shè)置以及這些光源對(duì)物體的影響程

    2024年02月08日
    瀏覽(27)
  • 【Unity Shader】Shader Graph

    【Unity Shader】Shader Graph

    shader graph 入門(mén): (對(duì)基礎(chǔ)內(nèi)容進(jìn)行詳細(xì)介紹) Shader Graph入門(mén)-CSDN博客 unity-shader(入門(mén))_unity3d shader-CSDN博客 各種效果的節(jié)點(diǎn)配置: 【unity造輪子】Unity ShaderGraph使用教程與各種特效案例(2023/12/1更新)_unity特效-CSDN博客 大佬文章里所用的PBR Master更新后已經(jīng)沒(méi)有了,所以參考

    2024年02月01日
    瀏覽(24)
  • Unity Shader variants (shader 變體)

    Unity Shader variants (shader 變體)

    官方地址 https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html 教程可以看這里 https://www.jianshu.com/p/48ad75f0b4b9 https://www.jianshu.com/p/3e6b84317097 變種用我自己的理解就是 能用程序控制的shader 舉個(gè)例子 這里聲明了 a b c d 四個(gè)變量(其實(shí)是開(kāi)關(guān) 下面會(huì)說(shuō)) 記住 #pragma multi_compil

    2024年02月12日
    瀏覽(43)
  • 【Unity Shader】Unity中陰影映射標(biāo)準(zhǔn)制作流程

    【Unity Shader】Unity中陰影映射標(biāo)準(zhǔn)制作流程

    前半部分的基于圖片的實(shí)時(shí)陰影技術(shù)是百人計(jì)劃的前半部分總結(jié),后面的Unity中的實(shí)現(xiàn)過(guò)程是《入門(mén)精要》中的實(shí)現(xiàn)。 這里的“基于圖片”指陰影生成一張圖片。 他并不是一個(gè)基于圖片的解決方案,但思路值得借鑒。 缺點(diǎn):只能投影到平面;投影物體必須在光線和平面之間

    2023年04月17日
    瀏覽(20)
  • Unity | Shader基礎(chǔ)知識(shí)(什么是shader)

    Unity | Shader基礎(chǔ)知識(shí)(什么是shader)

    Shader的中文名叫著色器。 著色器的作用: 這個(gè)世界是3D的,包括在Unity的場(chǎng)景中,我們建的球球,方塊塊之類(lèi)的,都是3D的,但是,屏幕是2D的,把3D的東西,通過(guò)顏色的匯總,顯示在2D的屏幕上。 想知道顏色是怎么合到一起的,我們就找個(gè)圖片,把它拆開(kāi)看。 因?yàn)槭澜缟纤?/p>

    2024年02月15日
    瀏覽(32)
  • 【Unity Shader】Unity中利用GrabPass實(shí)現(xiàn)玻璃效果

    【Unity Shader】Unity中利用GrabPass實(shí)現(xiàn)玻璃效果

    《入門(mén)精要》中模擬玻璃是用了Unity里的一個(gè)特殊的Pass來(lái)實(shí)現(xiàn)的,這個(gè)Pass就是 GrabPass ,比起上一篇博客實(shí)現(xiàn)鏡子的方法,這個(gè)方法我認(rèn)為相對(duì)復(fù)雜,因此在實(shí)現(xiàn)之前需要對(duì)GrabPass及實(shí)現(xiàn)原理做一個(gè)更加詳細(xì)的介紹。 場(chǎng)景物體拜訪和貼圖完全參考《入門(mén)精要》: 以及當(dāng)前場(chǎng)景

    2024年02月09日
    瀏覽(36)
  • Unity Shader - UI/Default shader 優(yōu)化示例

    Unity Shader - UI/Default shader 優(yōu)化示例

    Unity : 2020.3.37f1 Pipeline : BRP 做性能優(yōu)化都是慢慢都扣出來(lái)的 當(dāng)然,優(yōu)先處理 top 熱點(diǎn)的 但是一些就算不是 top,但是像素面積有多,overdraw 也多不可小覷 當(dāng)然,如果你能找到性能熱點(diǎn),那還是優(yōu)先分析一下哪些 shader 占的 cycles 最高,和 A, L/S, T, 最高 還有 register 的數(shù)量盡可能

    2024年02月07日
    瀏覽(21)
  • Unity shader - 紋理采樣

    Unity shader - 紋理采樣

    目錄 1.什么是UV?? 2.凹凸紋理 3.漸變紋理映射 4.遮罩紋理 對(duì)于三維模型,有兩個(gè)最重要的坐標(biāo)系統(tǒng),一是頂點(diǎn)的位置(X,Y,Z)坐標(biāo),另一個(gè)就是UV坐標(biāo)。什么是UV?簡(jiǎn)單的說(shuō),就是貼圖影射到模型表面的依據(jù)。 完整的說(shuō),其實(shí)應(yīng)該是UVW(因?yàn)閄YZ已經(jīng)用過(guò)了,所以另選三個(gè)字

    2024年02月07日
    瀏覽(23)
  • Unity Shader

    Unity Shader

    練習(xí)項(xiàng)目鏈接 Shader其實(shí)就是專(zhuān)門(mén)用來(lái)渲染圖形的一段代碼,通過(guò)shader,可以自定義顯卡渲染畫(huà)面的算法,使畫(huà)面達(dá)到我們想要的效果。小到每一個(gè)像素點(diǎn),大到整個(gè)屏幕,比如下面這個(gè)比較常見(jiàn)的效果。 Shader Graph 能夠幫助直觀地構(gòu)建著色器,可以在圖形框架中創(chuàng)建并連接節(jié)

    2024年04月11日
    瀏覽(13)
  • Unity Shader:閃爍

    Unity Shader:閃爍

    還是一樣的分為UI閃爍和物體閃爍,其中具體可分為:UI閃爍、物體閃爍與半透明閃爍 對(duì)于UI 還是一樣的,改寫(xiě)UI本身的shader: ? 實(shí)現(xiàn)原理我們可以理解為,在原有的圖片上,疊加了一層會(huì)隨著時(shí)間變化而變化透明度的純色。 ? 和原image的shader相比,基本沒(méi)做太大改動(dòng)。只是

    2024年02月06日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包