Unity Shader基础【二】- HLSL基本语法

下面对微软所给的HLSL官方文档进行简单梳理,将其基本语法总结如下。

1 数据类型

1.1 缓存(Buffer)
  • 用法:Buffer Name

  • 示例:Buffer g_Buffer;

  • 说明:Type可以为标量、向量或一些矩阵类型

1.2 标量
  • bool:布尔值,true或false。

  • int: 32位有符号整型。

  • uint: 32位无符号整型。

  • dword: 32位无符号整型。

  • half: 16位浮点型。该类型只是为了保持语言兼容性,Direct3D 10将所有half都映射为float型,该类型不能用作标准全局变量。

  • float:32位浮点型。

  • fixed: 11位低精度浮点数。

  • double: 64位浮点型。
1.3 向量类型
  • 用法:TypeNumber Name 或 vector

1.4 矩阵类型
  • 用法:TypeNumberxNumber Name 或 matrix

1.5 采样器类型(Sampler)
  • 用法:

    Direct3D 9:

    sampler Name = SamplerType{ Texture = ; [state_name = state_value;] … };

    Direct3D 10之后:

    SamplerType Name[Index]{ [state_name = state_value;] … };

  • 示例:

    Direct3D 9:
    
    sampler MeshTextureSampler = 
    sampler_state
    {
        Texture = <g_MeshTexture>;
        MipFilter = LINEAR;
        MinFilter = LINEAR;
        MagFilter = LINEAR;
    };
    
    Direct3D 10之后:
    
    SamplerState MeshTextureSampler
    {
        Filter = MIN_MAG_MIP_LINEAR;
        AddressU = Wrap;
        AddressV = Wrap;
    };
    
  • 说明:
    sampler:只有Direct3D 9需要。

    Name:采样器名称

    [Index]:Direct3D 10后需要,定义数据长度

    SamplerType:采样器类型,可为: sampler, sampler1D, sampler2D, sampler3D, samplerCUBE, sampler_state, SamplerState,SamplerComparisonState(仅Direct3D 10之后支持)。

    Texture = :纹理变量。

    state_name = state_value:可选状态设置,所有状态赋值必须出现在状态块中(大括号中),由分号分隔。

1.6 着色器类型(Shader)
  • 用法:

    Direct3D 10之后: SetXXXShader Compile( ShaderTarget, ShaderFunction );

    Direct3D 9之前: XXXShader = compile ShaderTarget ShaderFunction(…);

  • 示例:

    // Direct3D 10
    technique10 Render
    {
        pass P0
        {
            SetVertexShader( CompileShader( vs_4_0, VS() ) );
            SetGeometryShader( NULL );
            SetPixelShader( CompileShader( ps_4_0, PS() ) );
        }
    }
    
    // Direct3D 9
    technique RenderSceneWithTexture1Light
    {
        pass P0
        {          
            VertexShader = compile vs_2_0 RenderSceneVS( 1, true, true );
            PixelShader  = compile ps_2_0 RenderScenePS( true );
        }
    }
    
  • 说明:
    SetXXXShader: Direct3Dy调用底层API创建Shader对象,可为SetPixelShader、SetGeometryShader 或SetVertexShader。(Direct3D 9中XXXShader可为SetPixelShader或SetVertexShader)

    ShaderTarget: 用于编译的shader模型:vs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值