技术美术TA之Shader编译相关

本文是视频课程《Unity技术美术TA:Shader篇》,算是对自己学习的总结,也希望分享下所学知识~~


1.目标级别

Shader Model(SM)
微软剔除,要求显卡厂商按级别提供对应的功能与指令支持
不同的 SM 包含不同的指令集与 Shader 规范

Shader如何编译目标级别
两种方式

1.指定特性
#pragma require xxx
表明shader需要的特性功能
eg:interpolators10:至少需要10个插值器(从顶点到片断)

2.指定编译目标
#pragma target 2.0(默认是2.5)
可以通过 #if SHADER_TARGET< 30 做分支判断

可以做一些效果再高中低配之间的不同
代码如下:

Shader "Custom/TA/ShaderTarget"
{
    CGINCLUDE
    #include "UnityCG.cginc"

    struct appdata
    {
        float4 vertex : POSITION;
        float2 uv : TEXCOORD0;
    };

    struct v2f
    {
        float4 vertex : SV_POSITION;
    };

    v2f vert(appdata v)
    {
        v2f o;
        o.vertex = UnityObjectToClipPos(v.vertex);
        return o;
    }

    fixed4 frag(v2f i) : SV_Target
    {
    	//根据目标平台不同,走不同的渲染逻辑
        #if (SHADER_TARGET < 30)
        return 1;
        #elif
        return 0;
        #endif
    }
    ENDCG

    //高配
    SubShader
    {
        Tags
        {
            "RenderType"="Opaque"
        }
        LOD 400

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            //编译目标
            #pragma target 3.0
            ENDCG
        }
    }

    //低配
    SubShader
    {
        Tags
        {
            "RenderType"="Opaque"
        }
        LOD 200

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            //编译目标
            //比如 最大支持贴图uv就是8张
            #pragma target 2.0
            ENDCG
        }
    }
}

2.目标渲染器
Unity做了一件事 Shader 是一份,会编译成各种不同平台的代码
但是我们只需要在手机生成,不需要PC平台生成

好处:少了很多代码,时间和内存都会更优化
缺点:无法正常显示

如何实现?
1.#pragma exclude_renderers
剔除目标渲染器

2.#pragma only_renderers
只进行目标渲染器

代码如下:

//多个中间用空格隔开
#pragma exclude_renderers d3d11 gles gles3
#pragma only_renderers d3d11 gles gles3

注意:
只优化编译时间和一点点内存占用
对运行时效率没有影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值