Shader注释

表面着色器Surface Shader 光照多了用它
顶点/片元着色器 Vertex/Fragment Shader
固定函数着色器 Fixed Function Shader(弃用 老设备可以用)

Shader "jm" {//不用跟文件名保持一致
	Properties{
		//属性
		//属性名 面板名 类型   默认值RGBA
		_Color("Color", Color) = (1,1,1,1)
		//向量
		_Vector("Vector",Vector) = (1,2,3,4)
		//整数
		_Int("Int",Int) = 222
		//小数
		_Float("Float",Float) = 4.5
		//范围
		_Range("Range",Range(1,11)) = 6
		//图片               颜色值 没有指定图片 默认白色
		_2D("Texture",2D) = "white"{}
	    //立方体文理
		_Cube("Cube",Cube) = "white"{}
		//3D纹理
		_3D("Texture",3D) = "white"{}

	}
		//子shader 可以有多个 显卡运行效果的时候 从第一个开始,可以就用第一个,不行就用下一个
		SubShader{
		   //Pass可以多个 相当于方法
		   Pass{
		   //在这里编写shader代码
		   CGPROGRAM  //HLSLCGPROGRAM
		   
		   
		   //使用CG语言编写
	       float4 _Color;//最多用fixed定义
	       float4 _Vector;
		   float _Int;
		   float _Float;
		   float _Range;
		   sampler2D _2D;
		   samplerCube _Cube;
		   sampler3D _3D;
		   //float可以用 half fixed代替
	       //float 32位
		   //half 16 -6万~6万
		   //fixed 11  -2万到2万
		   
		   
		ENDCG
	}

	}
		FallBack "Diffuse"
}




Shader "Custom/sssd" {
	
	SubShader{
		Pass{
		   CGPROGRAM
		   //顶点函数 这只是生名 顶点函数名
		  //基本作用是完成顶点坐标从模型空间到剪裁空间的转换(从游戏环境转换到视野相机屏幕上)
  #pragma vertex vert
		  //片元函数 这只是声明 片元函数的函数名
		  //基本做用 返回模型对应的屏幕上的每个像素的颜色值
  #pragma fragment frag
		//通过语义告诉系统,参数干嘛的,比如POSITION是告诉系统我需要顶点坐标
		//SV_POSITION这个语义用来解释返回值,意思是返回值是剪裁空间下的顶点坐标
		                //获得值          返回的值

		//确定坐标
		  float4 vert(float4 v: POSITION):SV_POSITION {
		//                 矩阵4*4
		  float4 pos = mul(UNITY_MATRIX_MVP,v);
		  return pos;
	    }
		//确定颜色
		float4 frag() : SV_Target{
		//float _float;
    	return fixed4(0.8, 0.65, 1, 1);
	
			
		}
		   ENDCG
		}
	}
	FallBack "Diffuse"
}

从应用程序传递到顶点函数的语义有哪些a2v
POSITION 顶点坐标(模型空间下)
NORMAL 法线(模型空间下)
TANGENT 切线(模型空间下)
TEXCOORD0~N 纹理坐标
COLOR 顶点颜色

从顶点函数传递给片元函数的时候可以使用的语义

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标

片元函数传递系统
SV_Target 颜色值,显示到屏幕上的颜色

什么是光照模型
光照模型就是一个公式 使用这个公式来计算光照效果

标准的光照模型
自发光

高光反射
Blinn 光照模型
Specular=直射光pow(max(cos夹角,0),高光参数) 夹角是反射光和视野方向夹角
Blinn-Phong 光照模型(用的多)
Specular=直射光
pow(max(cos夹角,0),高光参数) 夹角是法线和x夹角 x是视角方向和平行光线的平分线的

漫反射 兰伯特光照模型: Diffuse=直射光颜色max(cos夹角(光和法线的夹角))
半兰伯特光照模型:Diffuse=直射光颜色
(cos夹角*0.5+0.5)

环境光

//只有定义正确的LightMode才能得到一些unity内置光照变量
Tags{“LightMode”=“ForwarBase”}

//包含了unity内置的文件 才可以使用unity内置的一些变量
#include “Lighting.cginc”

normalize()用来把一个向量,单位化(原来方向不变,长度变为1)
max()用来取得函数中最大的一个
dot 用来两个向量的点积
_WorldSpaceLightPos0 取得平行光的位置
_LightColor0 取得平行光的颜色
_World2Object 这个矩阵用来把一个方向从世界空间装换到模型空间

图片纹理 Wrap Mode Repeat重复 Clamp剪切

pixel=(normal+1)/2
normal=pixel*2-1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值