US3S2L9——渐变纹理基础实现
US3S2L9——渐变纹理基础实现
渐变纹理基础Shader实现
Shader 属性相关
- 漫反射颜色
- 渐变纹理
- 高光反射颜色
- 光泽度
1 | Properties |
结构体相关
-
顶点着色器中传入:
可以使用 UnityCG.cginc 中的 appdata_base,其中包含了我们需要的顶点、法线相关数据
1
2
3
4
5
6
7// UnityCG.cginc内定义,无需自己再定义
struct appdata_base {
float4 vertex : POSITION; //模型空间中的顶点位置
float3 normal : NORMAL; //顶点法线
float4 texcoord : TEXCOORD0; //第一组纹理坐标
UNITY_VERTEX_INPUT_INSTANCE_ID
}; -
片元着色器中传入:
自定义一个结构体,其中包含 裁剪空间下坐标、世界空间下顶点坐标、世界空间下法线方向
1
2
3
4
5
6struct v2f
{
float4 pos: SV_POSITION; //裁剪空间下坐标
float3 worldPos: TEXCOORD0; //世界空间下顶点坐标
float3 worldNormal: TEXCOORD1; //世界空间下法线方向
};
顶点着色器回调函数内容
- 顶点坐标模型转裁剪
- 顶点坐标模型转世界
- 法线从模型转世界
1 | // appdata_base 是 UnityCG.cginc 内定义,无需自己再定义 |
这里并不需要去计算 uv 坐标,因为渐变纹理的 uv 坐标是通过半兰伯特光照模型的后半部分得到的
片元着色器回调函数内容
-
计算光的方向
-
计算半兰伯特光照后半部分公式值
-
利用该值从渐变纹理中取出对应颜色,参与漫反射光照计算 得出漫反射颜色
-
计算Blinn Phong光照模型,其中的漫反射光照颜色使用上一步计算出来的颜色
显示效果:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!