笔记 学习u3d shader开发视频
十集的shader视频时长9个小时左右,有需要的可以联系我。
笔记 学习u3d shader开发视频
1 《导论》
学习要求:
扎实的数学基础
一定的程序语言基础
教学内容:
3D引擎的渲染流程
解析顶点和像素处理器用途
ShaderLab语言的特点
Shader的开发工具对比
U3d 开发的基本框架
如何用Shader来定义材质球接口
SubShader格式的解析
详解SubShader的标签和通用状态的使用
片段shader的编译指令解析
结合实例CG片段的语法格式
UnityCG.cginc的引用
内置函数及全局变量的使用
手把手实现旋转动画Shader
讲解UV映射,寻指模式,及过滤模式
实战Color和Detail重复混合Shader
结合BillBoard技术开发序列帧动画特效
学习完本套视频可以达到什么水平?
对材质,材质球,贴图,Shader等有比较深刻理解。
能够独立开发顶点片段Shader
能应对常用顶点片段Shader的编程
对 U3D ShaderLab语言的语法基本熟悉
能开发序列帧动画Shader
能够开发重复贴图与位移Shader
能够开发旋转动画Shader
对LightMap的使用有初步的了解
对UV映射,贴图寻址,过滤模式都有一定了解
对硬件状态知道如何使用,如何Alpha混合,Alpha测试,剔除模式等等
2 《渲染管线》
渲染绘图管线流程
顶点处理
本地坐标系->世界坐标系->观察坐标系->投影坐标系
面处理
面的组装 面截取 面剔除 通常都是引擎处理的
光栅化
像素处理
3 《U3D Shader 框架》
Shader开发的语言是什么?
HLSL(DX XNA)
Cg语言(C for Graphics)由NVIDIA
GLSL
ShadeLab
Shader开发工具有哪些?
FX Composer
Render Mondkey
MonoDevelop
第三方IDE
认识ShaderLab框架
Shader “MyShader/RenderPipeline”{
Properties
{
_MyTexture("My Texture")
}
SubShader
{
Pass{
}
}
}
编写材质接口
4 SubShader详解
SubShader{[Tags][CommonState]Passdef[Passdef...]}
Tags{"TagName1" = "Value1"
"TagsName2" = "Value2"}
Queue:
Background 通常用作于SkyBox
Geometry 最常用作不透明物体
Transparent 用作透明物体
Overlay 用作叠加效果物体
RenderType tag:
Opaque
Transparent
TransparentCutout
Background
Overlay
TreeOpaque
TreeTransparentCutout
TreeBillboard
Grass
GrassBillboard
RenderState:
Cullback
ZTest
ZWrite
AlphaTest
Blend
Fog
5 《SubShader之Pass》
Pass{[Name and Tags][RenderSetup][TextureSetup]}
6 《开发第一个Shader》
Shader "Custom/Simple"
{
Properties
{
_Color("Base Color",Color) = (1,1,1,1)
_MainTex("Base(RGB)",2D) = "white" {}
}
SubShader
{
tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
Name "Simple"
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _Color;
struct v2f
{
float4 pos:POSITION;
float4 uv:TEXCOORD0;
float4 col:COLOR;
};
v2f vert(appdata_base v)
{
v2f o;
// o.pos = v.vertex;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
o.col.xyz = v.normal *0.5 +0.5; //0-1
o.col.w = 1.0;
return o;
}
half4 frag(v2f i):COLOR
{
// half4 = tex2D(_MainTex,i.uv)
half4 c= tex2D(_MainTex,i.uv.xy) * _Color;
// half4 c = i.col;
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
7 《UV旋转动画》
Shader "Custom/Simple"
{
Properties
{
_Color("Base Color",Color) = (1,1,1,1)
_MainTex("Base(RGB)",2D) = "white" {}
_RSpeed("RotateSpeed",Range(1,100)) = 30
}
SubShader
{
tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
Name "Simple"
Cull off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _Color;
float _RSpeed;
struct v2f
{
float4 pos:POSITION;
float4 uv:TEXCOORD0;
float4 col:COLOR;
};
v2f vert(appdata_base v)
{
v2f o;
// o.pos = v.vertex;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
o.col.xyz = v.normal *0.5 +0.5; //0-1
o.col.w = 1.0;
//o.color = v.tangent*0.5+0.5;
return o;
}
half4 frag(v2f i):COLOR
{
// half4 = tex2D(_MainTex,i.uv)
float2 uv = i.uv.xy - float2( 0.5,0.5);
float2 rotate = float2(cos(_RSpeed *_Time.x),sin(_RSpeed* _Time.x));
uv = float2 (uv.x*rotate.x - uv.y*rotate.y,uv.x*rotate.y + uv.y*rotate.x);
uv += float2(0.5, 0.5);
half4 c= tex2D(_MainTex,uv) * _Color;
// half4 c = i.col;
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}
8 《_NameTex_ST》
f
9 《序列帧动画》
f
10 《LightMap》
f