您的位置:首页 > 其它

Shader_初识

2017-10-09 20:09 127 查看
Shader_初识<9/10/2017>

在Unity中创建Shader类型文件



给对应的M1,M2,M3选取对应的Shader:



01 first的Shader脚本:

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

Shader "Myshader/01 first"{
Properties{//在面板上可以改变属性的值,从而改变shader的效果
_Color("Color",Color) = (1,1,1,1)// _Color给下面程序用的 ""引号是显示在面板上的 Color是类型 =后面为默认值 Shader里面没有;做结束
_Int("Int",Int) = 1
_Range("Range",Range(0,10)) = 3
_Texture("Texture",2D) = "white"{}
_Float("Float",Float) = 3.4
}
SubShader{
pass {
CGPROGRAM
#pragma vertex vert//定义顶点函数
#pragma fragment frag//定义片元函数
float4 _Color;//同fixed4 _Color
sampler2D _Texture;
float _Int;//fixed->占内存比较小

float4 vert(float4 v:POSITION) :SV_POSITION {//把物体坐标系转换为物体的剪裁空间
return UnityObjectToClipPos(v);
}
//语义:用来表示参数的意义
//POSITION:模型空间下的坐标
//SV_POSITION:表示剪裁空间下的坐标
//SV_TARGET0:每个像素点的颜色值
float4 frag() :SV_TARGET0 {
return float4(_Color.rgb,1);
}

ENDCG
}

}
}

02 struct的Shader脚本:

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

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

Shader "Myshader/02 struct"{

Properties{

}

SubShader{
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct a2v{
fixed4 pos1:POSITION;//模型空间顶点坐标
fixed4 normal:NORMAL;//该语义表示法线
};//结构体定义完了要加分号
struct v2f{
fixed4 sv_position:SV_POSITION;
fixed4 color:COLOR;
};

v2f vert(a2v v){//把顶点的模型空间坐标转换为剪裁空间坐标
v2f f;
f.color=v.normal;
f.sv_position=UnityObjectToClipPos(v.pos1);
return f;
}
fixed4 frag(v2f f):SV_TARGET0{
return fixed4(abs(f.color.xyz),1);
}
ENDCG
}
}
FallBack "Standard"
}03 diffuse vertex中的Shader脚本:
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

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

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

Shader "Myshader/03 diffuse vertex"{

Properties{

}

SubShader{
Tags {"RenderType"="Opaque"}
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
struct a2v{
fixed4 pos1:POSITION;//模型空间顶点坐标
fixed3 normal:NORMAL;//该语义表示法线
};//结构体定义完了要加分号
struct v2f{
fixed4 sv_position:SV_POSITION;
fixed3 color:COLOR;
};

v2f vert(a2v v){//把顶点的模型空间坐标转换为剪裁空间坐标
v2f f;
f.sv_position=UnityObjectToClipPos(v.pos1);
//直射光颜色 * max(0,cos夹角(光和法线的夹角))
//1.变换发现的坐标系2.光的方向?
float3 lightDir=normalize(_WorldSpaceLightPos0.xyz);
float3 normalDir=normalize( mul(v.normal,(float3x3)unity_WorldToObject));
float3 diffuse=_LightColor0.rgb*max(0,dot(normalDir,-lightDir));
f.color=diffuse;
return f;
}
fixed4 frag(v2f f):SV_TARGET0{
return fixed4(abs(f.color.xyz),1);
}
ENDCG
}
}
FallBack "Standard"
}实际效果展示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: