纳金网

标题: Unity shader再次学习 记录 二 [打印本页]

作者: may    时间: 2019-2-27 21:08
标题: Unity shader再次学习 记录 二

來自: zzzsss 分享

一、纹理寻址一张纹理对应到显示区域上,不可能完全吻合
纹理100*100             显示区域200*200
纹理200*200             显示区域100*100

FilterMode  设置图片纹理寻址方式
Point :如果纹理大于显示区域,按比例对应,纹理上多的点直接舍弃               //出现锯齿效果
            如果显示区域大于纹理,按比例对应,显示区域上多的像素点遵循就近原则       //出现马塞克效果
Bilinear : 每个像素点的颜色根据其上、下、左、右颜色的平均值计算         
Bilinear : 每个像素点的颜色根据其上、下、左、右、左上、左下、右上、右下颜色的平均值计算   

二、语义
在InputStruct(顶点着色器传入参数的结构体)中,名字是可以更改的,MeshRender传参的时候,为了能对应上这些数据,因为每个字段后面都必须加上语义,告诉MeshRender这个
字段储存什么数据。
POSITION   模型顶点信息,模型坐标
NORMAL   法线信息
TANGENT   切线信息
TEXCOOD(n)   从顶点传递到片段  高精度
COLOR  float4  从顶点传递到片段  低精度
SV_POSITION  经过mvp矩阵 把顶点坐标转换到屏幕坐标的位置信息
SV_TARGET  输出到那个renderer target(相机)上面,默认0

三、矩阵变换
Unity里面变换矩阵都是左乘,矩阵乘法不满足交换律
M 模型空间转换到世界空间
V 世界空间转换到相机空间
P 3D坐标系转换成2维屏幕坐标系
例子:假设有A,B两个物体,和C相机  ,A物体是B物体的子物体,将A的坐标转换到相机空间下
将A物体坐标从B空间转到世界空间:Vector3 worldpos = B.tranform.localToWorldMatrix.MultiplyPoint(A.transform.localPosition);
将A物体坐标从世界坐标转到相机空间:C.tranform.worldToLocalMatrix.MultiplyPoint(worldpos);

四、波动Shader
y=Asin(ωx+φ) 波动Shader主要应用这个正弦型函数
A:波动幅度
w:波动周期
φ:x轴偏移






欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5