Shader semantics 着色器语义 - Unity Shader Reference 系列8

本文介绍了Unity中的Shader Semantics,包括顶点着色器输入和输出、片断着色器的语义,如SV_Position、TEXCOORD、SV_Target等。同时,讲解了如何在HLSL中使用语义,以及不同平台的插值器数量限制,并提及特殊语义如VPOS、VFACE和SV_VertexID的应用。
摘要由CSDN通过智能技术生成

Shader semantics 着色器语义

本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>)
仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处。
文章中涉及到的操作都是基于Unity2018.2版本
参考链接:https://docs.unity3d.com/Manual/SL-ShaderSemantics.html

When writing HLSL shader programs, input and output variables need to have their “intent” indicated via semantics. This is a standard concept in HLSL shader language; see the Semantics documentation on MSDN for more details.
在编写HLSL着色程序时,输入和输出变量需要通过语义显示它们的“意图”。这是HLSL着色语言中的一个标准概念;有关更多细节,请参阅MSDN上的语义文档。
You can download the examples shown below as a zipped Unity project, here.

Vertex shader input semantics 顶点着色器输入语义

The main vertex shader function (indicated by the #pragma vertex directive) needs to have semantics on all of the input parameters. These correspond to individual Mesh data elements, like vertex position, normal mesh, and texture coordinates. See vertex program inputs for more details.
主顶点着色(vs)函数(由#pragma vertex 指令指示)要对所有输入参数标注语义。它们对应于独立的网格数据元素,比如顶点位置、网格的法线和纹理坐标。有关更多细节,请参阅顶点程序输入。

Here’s an example of a simple vertex shader that takes vertex position and a texture coordinate as an input. The pixel shader visualizes the texture coordinate as a color.
这里有一个简单的顶点着色器的例子,它将顶点位置和纹理坐标作为输入。像素着色器将纹理坐标可视化为颜色。

Shader "Unlit/Show UVs"
{
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            struct v2f {
                float2 uv : TEXCOORD0;
                float4 pos : SV_POSITION;
            };

            v2f vert (
                float4 vertex : POSITION, // vertex position input
                float2 uv : TEXCOORD0 // first texture coordinate input
                )
            {
                v2f o;
                o.pos = UnityObjectToClipPos(vertex);
                o.uv = uv;
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                return fixed4(i.uv, 0, 0);
            }
            ENDCG
        }
    }
}

在这里插入图片描述

Instead of spelling out all individual inputs one by one, it is also possible to declare a structure of them, and indicate semantics on each individual member variable of the struct. See shader program examples to learn how to do this.
除了逐个拼写所有每个输入,还可以声明它们的结构体,并在结构体的每个成员变量上指定语义。请参阅着色器程序示例以了解如何做到这一点。

Fragment shader output semantics 片断着色器输出语义

Most often a fragment (pixel) shader outputs a color, and has an SV_Target semantic. The fragment shader in the example above does exactly that:
通常,片段(像素)着色器会输出颜色,并具有SV_Target语义。上面例子中的片段着色器就是这样做的:

fixed4 frag (v2f i) : SV_Target
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值