笔记 学习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

 

posted @ 2017-05-15 10:14  快乐bright  阅读(249)  评论(1编辑  收藏  举报