Shader_初识

来源:互联网 发布:mac系统顿号怎么打 编辑:程序博客网 时间:2024/06/14 00:24

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 _Colorsampler2D _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 fragstruct 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"}
实际效果展示



原创粉丝点击