《unity shader入门精要》自学笔记(二)
来源:互联网 发布:mac开机出现问号文件夹 编辑:程序博客网 时间:2024/05/17 22:06
逐顶点高光反射的shader:
Shader "Custom/zhudingdiangaoguang" {
Properties {_Diffuse("Diffuse",color) = (1,1,1,1)
_Specular("Specular",color) = (1,1,1,1)
_Gloss("Gloss",range(8,256)) = 20
}
SubShader {
pass{
tags{"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
fixed4 _Specular;
float _Gloss;
struct a2v{
float4 vertex:POSITION;
fixed3 normal:NORMAL;
};
struct v2f{
float4 pos:SV_POSITION;
float3 color:COLOR;
};
v2f vert(a2v i){
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,i.vertex);
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
fixed3 worldNormal = normalize(mul(i.normal,(float3x3)unity_WorldToObject));
fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal,worldLightDir));
fixed3 reflectDir = normalize(reflect(-worldLightDir,worldNormal));
计算反射
fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld,i.vertex).xyz);
计算空间视角方向
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir,viewDir)),_Gloss);
高光反射公式:光照信息 * 反射信息 * (视角方向点积反射方向)的_Gloss方
o.color = ambient + diffuse + specular;
return o;
}
fixed4 frag(v2f i):SV_Target{
return fixed4(i.color,1.0);
}
ENDCG
}
}
}
逐像素高光如下:
Shader "Custom/zhuxiangsugaoguang" {
Properties {
_Diffuse("Diffuse",color) = (1,1,1,1)
_Specular("Specular",color) = (1,1,1,1)
_Gloss("Gloss",range(8,256)) = 16
}
SubShader {
pass{
tags{"RanderMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuse;
fixed4 _Specular;
float _Gloss;
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct v2f{
float4 position:SV_POSITION;
float3 worldNormal:TEXCOORD0;
float3 worldPos:TEXCOORD1;
};
v2f vert(a2v i){
v2f o;
o.position = mul(UNITY_MATRIX_MVP,i.vertex);
//float3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;
o.worldNormal = normalize(mul(i.normal,(float3x3)unity_WorldToObject));
o.worldPos = mul(unity_ObjectToWorld,i.vertex).xyz;
return o;
}
float4 frag(v2f i):SV_Target{
float3 ambient = UNITY_LIGHTMODEL_AMBIENT.rgb;
float3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
float3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(i.worldNormal,worldLightDir));
float3 reflectDir = normalize(reflect(-worldLightDir,i.worldNormal));
float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
float3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir,viewDir)),_Gloss);
float3 color = diffuse + ambient + specular;
return float4(color,1.0);
}
ENDCG
}
}
FallBack "Diffuse"
}
- 《unity shader入门精要》自学笔记(二)
- Unity Shader入门精要笔记(二):Unity Shader基础
- 《Unity Shader入门精要》自学笔记(一)
- Unity Shader入门精要 阅读笔记二
- Unity Shader入门精要笔记(一):渲染流水线
- Unity Shader入门精要笔记(十一):基础单张纹理
- Unity Shader入门精要笔记(十二):纹理属性
- Unity Shader入门精要笔记(十三):法线纹理
- Unity Shader入门精要笔记(十四):渐变纹理
- Unity Shader入门精要笔记(十五):遮罩纹理
- Unity Shader入门精要学习笔记
- Unity Shader入门精要学习笔记
- Unity Shader入门精要学习笔记
- Unity Shader入门精要学习笔记
- Unity Shader入门精要学习笔记
- Unity Shader入门精要 学习笔记一
- Unity Shader入门精要学习笔记
- Unity Shader入门精要学习笔记
- linux学习笔记之lvm管理
- IOS-各种数据类型的转换
- linux 服务器搭建(一)
- XML解析
- java基础知识
- 《unity shader入门精要》自学笔记(二)
- Android中的ImageLoader实现思路
- MD5算法实现
- 如何检查 Android 应用的内存使用情况
- 我的liunx学习笔记之访问网络共享文件系统
- 资深数据库SQL工程师整理的常用MySQL语句
- C++学习2:main()函数深入学习
- DeepFashion: Powering Robust Clothes Recognition and Retrieval with Rich Annotations – CVPR 2016
- Java基础--IO-文件的切割和合并