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"
}实际效果展示
在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"
}实际效果展示
相关文章推荐
- 解读Unity中的CG编写Shader系列1——初识CG
- Cocos2d-lua 初识shader之一:置灰
- 【猫猫的Unity Shader之旅】之初识屏幕特效
- Cocos2d-lua 初识shader之三:模糊
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- Unity之Shader初识 - 一
- 解读Unity中的CG编写Shader系列1——初识CG
- unity初识之shader 工具
- 解读Unity中的CG编写Shader系列1——初识CG
- 解读Unity中的CG编写Shader系列1——初识CG
- Cocos2d-lua 初识shader之四:描边
- Shader 入门笔记(三) ShaderLab 初识
- unity 初识之shaderLab Syntax
- Cocos2d-lua 初识shader之五:定时器
- gcov+lcov C代码覆盖率 初识
- 初识 AutoLayout
- 微信小程序一.初识微信小程序
- 前端基础 & 初识JS(JavaScript)
- Java多线程技术初识——2. 线程的创建