Unity Shader
2021-04-11 14:02:35 2 举报
AI智能生成
unity shader
作者其他创作
大纲/内容
分类
Unity shader
语言ShaderLab编写
1,表面着色器 Surface Shader
2,顶点/片元着色器 Vertex/Fragment Shader
3,固定函数着色器 Fixed Function Shader
Properties
属性类型
_Color("Color",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,2,3,4)
_Int("Int",Int)= 34234
_Float("Float",Float) = 4.5
_Range("Range",Range(1,11))=6
_2D("Texture",2D) = "red"{}
_Cube("Cube",Cube) = "white"{}
_3D("Texure",3D) = "black"{}
SubShader
属性类型
float
定义
32位单精度浮点数
分类
float
float2
float3
float4
half
定义
16位(-6万~+6万)
分类
half
half2
half3
half4
fixed
定义
11位(-2~+2)
分类
fiexd
fixed2
fixed3
fixed4
unitycg.cginc中常用函数
摄像机方向(视角)
float3 WorldSpaceViewDir(float4 v)
根据模型空间中的顶点坐标得到(世界空间坐标)从这个点到摄像机的观察方向
floar3 UnityWorldSpaceViewDir(float4 v)
世界空间中顶点坐标==》世界空间从这个点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v)
模型空间中的顶点坐标==》模型空间从这个点到摄像机的观察方向
光源方向
float3 WorldSpaceLightDir(float4 v)
模型空间中的顶点坐标==》世界空间中从这个点到光源的方向
float3 UnityWorldSpaceLightDir(float4 v)
世界空间中的顶点坐标==》世界空间中从这个点到光源的方向
float3 ObjSpaceLightDir(float4 v)
模型空间中的顶点坐标==》模型空间中从这个点到光源的方向
方向转换
float3 UnityObjectToWorldNormal(float3 norm)
把法线方向模型空间==》世界空间
float3 UnityObjectToWorldDir(float3 norm)
把方向 模型空间==》世界空间
float3 UnityObjectToObjectDir(float3 norm)
把方向 世界空间==》模型空间
常用
normalize();
将一个向量单位化,保持方向不变
max();
取得其中的一个最大值
dot();
取得两个向量的点积
mul();
两个矩阵相乘
语义
从应用程序传递到顶点函数的语义有哪些a2v
POSITION 顶点坐标(模型空间下的)
NORMAL 法线( 模型空间下)
TANGENT 切线(模型空间)
TEXCOORD0 ~n 纹理坐标
COLOR 顶点颜色
从顶点函数传递给片元函数的时候可以使用的语义
SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标
片元函数传递给系统
SV_Target 颜色值,显示到屏幕上的颜色
光照模型
定义
就是一个公式来计算关照效果
分类
半兰伯特光照模型
兰伯特光照模型(标准光照模型)
光分类
自发光
高光反射-Specular
直射光 * pow( max(cosθ,0),10) θ:是反射光方向和视野方向的夹角
漫反射-Diffuse
直射光颜色*max(0,cos夹角(光合法线的夹角))
环境光-ambient
半兰伯特光照模型
光分类
自发光
高光反射-Specular
漫反射-Diffuse
直射光颜色*(cos夹角(光合法线的夹角)*0.5+0.5)
环境光-ambient
Blinn光照模型
光分类
自发光
高光反射-Specular
直射光 * pow( max(cosθ,0),10) θ:是反射光方向和视野方向的夹角
漫反射-Diffuse
环境光-ambient
Blinn-Phong光照模型
光分类
自发光
高光反射-Specular
Specular=直射光 * pow( max(cosθ,0),10) θ:是法线和x的夹角 x 是平行光和视野方向的平分线
漫反射-Diffuse
环境光-ambient
准则
两个颜色融合就是相乘,两个颜色叠加就是相加
组件
Mesh Filter
存储一个Mesh(网格,模型的网格,就是模型的由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息)
Mesh Renderer
用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色,通过Material(材质)控制模型渲染的样子
Material
贴图(可以没有,是一个单纯的颜色)
shader
书籍
unity shader 入门精要(乐乐程序猿)
unity 3d shaderlab开发实战详解(第二版)
unity 5.x shaders and effects cookbook(中文版 unity着色器和屏幕特效开发秘籍)
网站
CG语言教程官网
数学函数在线演示
其他
shadertoy
csdn
图形应用编程接口
OpenGL
DirectX
语言
SLSL Shader(只适用于OpenGL)
HLSL Shader(只适用于DirectX)
英伟达CG(OpenGl和DirectX两者都适用)
0 条评论
下一页