3.开始编写

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "GameNose"  // 第一行定义了shader的名字  Shader "GameNose
{
    SubShader{            //渲染层     
        Pass{                //渲染管道
            CGPROGRAM     //开始写表面着色器  
            #pragma vertex vert    // 告诉U3D, vert这个函数包含了顶点着色器的代码
            #pragma fragment frag // frag 包含了片元着色器的代码
            {通用的编译指令:#progam(指令) }

            float4 vert (float4 v :POSITION) : SV_POSITION{   // vert函数 v是顶点坐标参数 POSITION告诉u3d把模型的顶点坐标填充到v中,SV_POSITION 告诉的是顶点着色器的输出使裁剪空间中的顶点坐标
                return UnityObjectToClipPos(v) ;  //顶点函数返回
            }

            fixed4 frag(): SV_Target {
                return fixed4(1.0,1.0,1.0,1.0);
            }
            ENDCG  //表面着色器结束
        }
    }
}

注意: Properties 的语义不是必须的,也可以选择不声明

由CGPROGRAM 和 ENDCG 所包围的CG 代码片段:#pragma /p’ræɡmə/注释 vertex vert
#pragma fragment frag 告诉U3D哪个函数包含了顶点着色器的代码,哪个包含的是片元着色器的代码,其标准格式是: #pragma vertex/fragment 函数名

关于float4数据类型
GPU是以四维向量为基本单位来计算的。4个浮点数所组成的float4向量是GPU内置的最基本类型。使用GPU对两个float4向量进行计算,与CPU对两个整数或两个浮点数进行计算一样简单,都是只需要一个指令就可以完成。

HLSH的基本数据类型定义了float、int和bool等非向量类型,但是它们实际上都会被Complier转换成float4的向量,只要把float4向量的其中3个数值忽略,就可以把float4类型作为标量使用。
使用贴图坐标时,只需要二维向量,HLSL定义了float2类型作为二维向量使用。
Shader经常会用到矩阵,HLSL有一个内置类型float4x4,它可以用来表示一个44矩阵。float4x4并不是GPU的内置类型,float4x4实际上是由4个float4所组成的数组。其他的还有float3x3、float2x2,分表代表33矩阵、22矩阵。
Shader也可以声明数组,4
4矩阵实际上就是一个float4 m[4]的数组。注意,Shader中的所有的变量都使用寄存器,没有其他内存空间可以使用,所以越大的数组会占用越多的寄存器,甚至会超出寄存器的数量限制。
在使用float4向量中的个别数值时,可以用xyzw或rgba,都可以用来表示四维向量中的数值。但不能把它们混用,例如不能用xyba,把它视为颜色时就用rgba,否则就是用xyzw,不能把这二者混合使用。

1、Float Fixed
float : 常见的写法有 float4 和 float3
float3 : 一般情况下我们指的是向量,例如 :float3 normal :NORMAL
float4 : 对那些需要操作的顶点用 float4 来表示 ,例如 : float4 vertex : POSITION
那么我们为什么用 float4 来表示我们想要的顶点呢?
在unity内部,通过矩阵的方式来描述这些点,一般情况下我们觉得 3*3的矩阵就能够描述一个点了,但是这样的点是没有办法进行变换的 : 旋转、缩放还有平移。
因此我们需要扩散到一个齐次坐标空间
因此对于点的变化我们用 float4 来表示
还有一种理解方式:链接内容

1、点,用Vector4表示就是(x,y,z,1)。*

2、向量,用Vector4表示就是(x,y,z,0)。

那么,向量是两个点相减组成,得到:
(x1,y1,z1,1)- (x2,y2,z2,1) = (x1 - x2, y1 - y2,z1 - z2,0)
就可以表示两个点相减是一个向量。

如果用Vector3表示一个点的话,就不知道两个点相减是什么了。

然后我们再来看看 ShaderLab属性类型和Cg变量类型的匹配关系

在这里插入图片描述

这样就能理解为什么使用 float4 类型了。

在这里插入图片描述

return UnityObjectToClipPos(v); 把顶点坐标从模型空间转换到剪裁空间;
在这里插入图片描述

5.22
5.23
5.24使用属性

5.3内置文件和变量

@[TOC](5.4 CG/HLSL) 语义:
语义是 一个赋给shader输入和输出的字符串,就是告诉shader从哪里读数据,把数据输出到哪里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值