冯乐乐之三,SHADERLAB入门

Shader Lab 是shader language的抽象,只能在unity中使用.

语义syntax是其基本结构,{}内的内容。

Shader "ShaderName"//shader的名字以及在材质面板的显示

{
//材质和shader的沟通
Properties
{
    //NameInShader("NameInMaterial",Propertype) = DefaultValue;
    //Properties只有一下几种,声明方式固定
    // Numbers and Sliders
		_Int ("Int", Int) = 2
		_Float ("Float", Float) = 1.5
		_Range("Range", Range(0.0, 5.0)) = 3.0
		// Colors and Vectors
		_Color ("Color", Color) = (1,1,1,1)
		_Vector ("Vector", Vector) = (2, 3, 6, 1)
		// Textures
		_2D ("2D", 2D) = "" {}
		_Cube ("Cube", Cube) = "white" {}
		_3D ("3D", 3D) = "black" {}
}

//最重要的模块,包含至少一个subshader,unity扫描所有subshader找到第一个能在目标平台使用的shader,没有就使用Fallback。
SubShader
{
    //RenderSetup
    //Cull,Ztest,ZWrite,Blend
    //Tags{"TagName1 = "Value1"}
    //SubShade的Tags是一组键值对
    //Queue队列,RenderType渲染类别,DisableBatching关闭批处理
    //ForceNoShadowCasting关闭阴影,IgnoreProjector无视投影(用于透明物体)
    //CanUseSpriteAtlas,PreviewType材质框中预览模型,可以是"Plane""Sphere"
    //一个Pass是一个完整渲染流程,Pass过多影响性能。
    Pass{}
}

SubShader
{
    //真正的Shader代码
    //表面着色器Surface Shader
    //顶点片元着色器
    //固定函数着色器
}
//最后一道防线,如果以上SubShader都不能用就只能用最低级的。不写就是不管了
Fallback "VertexLit"
}

 

表面着色器Surface Shader

这是Unity独创的shader类型,本质上还是顶点片元着色器,在其基础上进行抽象。

代码量少,Unity处理了许多细节。

SubShader
{
    Tags{"RenderType" = "Opaque"}
    CGPROGRAM
    #Pragma surface surf Lambert
    struct Input{float4 color : COLOR;};
    void surf(Input IN, inout SurfaceOutput o){o.Albedo = 1;}
    ENDCG
}

Surface Shader中的语义块在CGPROGRAM和ENDCG之间,而不是Pass。CGPROGRAM和ENDCG之间使用CG/HLSL。

 

顶点片元着色器Vertex/Fragment Shader

SubShader
{
    Pass
    {
        CGPROGRAM
        #pragma vertex vert;
        #pragma fargment frag;
        float4 vert(float4 v : POSITION) : SV_POSITION
        {
            return mul (UNITY_MATRIX_MVP,v);
        }
        fixed4 frag() : SV_Target
        {
            return fixed4(1,0,0,1);
        }
        ENDCG
    }
}

Pass{}中实现。CGPROGRAM和ENDCG之间使用CG/HLSL。灵活性更高。

固定函数Fixed Function Shader

时代眼泪,不写了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值