Shader "MyFirstShader"
{
Properties
{
_Color("color1",Color)=(1,1,0,1)
_BaseMap("Base Map",2D)="white" {}
}
SubShader
{
Pass //pass可以用多个pass
{
HLSLPROGRAM //HLSL可以进行替换替换成GLSL
#pragma vertex Vertex //声明函数 //顶点着色器
#pragma fragment Pixel //片段着色器 像素着色器
half4 _Color;//声明变量
sampler2D _BaseMap;
//model将物体的局部空间变换到世界空间
//view 通过摄像机的变化矩阵从世界空间变换到摄像机的空间中
//projection 投影变换变换到屏幕空间
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 vertex:POSITION;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float4 positionCS:SV_POSITION;
float2 uv : TEXCOORD0;
};
#if 0
float4 Vertex(float4 vertex:POSITION) :SV_POSITION //顶点着色器 float4输入的变量类型 vertex变量名字
//:后面说的是顶点着色器关联的裁切空间位置 SV含义为system value系统中的值
{
float positionMS= mul(UNITY_MATRIX_M, float4(vertex.xyz,1.0));
float positionCS= mul(UNITY_MATRIX_M, float4(positionMS.xyz,1.0));
return positionCS;
// TransformObjectToHClip(vertex); //也可以通过TransformObjectToHClip直接返回到裁切空间
// return TransformObjectToHClip(vertex);
}
#endif
Varyings Vertex(Attributes IN) //顶点着色器 float4输入的变量类型 vertex变量名字
//:后面说的是顶点着色器关联的裁切空间位置 SV含义为system value系统中的值
{
Varyings OUT;
OUT.uv=IN.uv;//如果你不需要UV进行改变就用输入进来的uv
OUT.positionCS=TransformObjectToHClip(IN.vertex.xyz);
return OUT;
}
half4 Pixel(Varyings IN) : SV_TARGET //SV含义为system value
//SV_TARGET表示最后输出一个像素颜色
{
half4 color;
color.rgb=tex2D(_BaseMap,IN.uv).rgb*_Color;
color.a=1;
return color;
}
ENDHLSL
}
}
}
Unity简单shader
于 2022-06-27 04:52:22 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)