UnityShader学习记录(一)

Unityshader概览

在not supported(暂时)中可以找到自己写的shader
材质

shader

作业7 顶点属性可视化
图表1

1.模型的本地坐标

步骤1:获取模型坐标,不用把模型空间转换到裁剪空间的坐标。

在v2f中定义VertexPos作为模型坐标,v2f中定义的变量一定要有语义,TEXCOORD也不只能用于纹理,所以这里借TEXCOORD0来定义。

                float3 VertexPos:TEXCOORD0;

步骤2:把三维的模型坐标做成四维从片段着色器输出。

            return float4(i.VertexPos.xyz,1.0)

as7-1

Shader "aj7/Framework"  // 定义shader名字
{
Properties
{
_Color("Color",Color)=(1,1,1,1)
_Value("Intensity",float)=1
}
SubShader //一个shader中有多个subshader,系统会一个个往下遍历找,不支持的会跳过
{
pass //一个pass就是一次渲染,每个shader都要有一个pass块
{
CGPROGRAM

#pragma vertex vert //编译指令,连接顶点和片段着色器
#pragma fragment frag
#include "UnityCG.cginc"

float4 _Color; //声明必须和属性名一样,不然对应不上
float _Value;

struct appdata //约定叫appdata结构体
{
float4 vertex:POSITION;
float4 color:COLOR0; //direct3D中用0
};

struct v2f
{
float4 pos:SV_POSITION;
float3 VertexPos:TEXCOORD0;
};

v2f vert(appdata v)//顶点着色器
{
v2f o=(v2f)0; //定义需要初始化,不然容易报错 ;注意是定义部分加括号
o.pos=UnityObjectToClipPos(v.vertex); //顶点着色器中必做这步,把模型空间转换到裁剪空间
o.VertexPos=v.vertex.xyz;
return o;
}
float4 frag(v2f i):SV_Target //sv_t是输入到屏幕的颜色
{
float4 tmp=float4(1,1,1,1);
tmp=float4(i.VertexPos,1.0);
return tmp;
}
ENDCG
}
}
//CustomEditor ""//自定义修改器
//Fallback ""//备胎,适用于subshader都不支持的情况
}

2.模型的UV信息

Properties

[HDR]_Color(“颜色”,color)=(1,1,0,1)

[PowerSlider(3)]_Float(“浮点数”,range(0,10))=0 让0-3的部分占比更大更好滑动

[IntRange]只能滑动成整数,只是用于滑动条

[Toggle]开关,只有0和1

​ _Vector(“四维向量”,vector)=(1,-0.2,0,1)

​ _2DTex(“二D纹理”,2D)=”black”{}

[NoScaleOffset]不可调整纹理和偏移

[HideInInspector]隐藏