Unity Shader学习:PBS和BRDF(基于物理着色和双向反射分布函数)
PBS和BRDF涉及到关于数学光学和物理方面的知识比较多,公式也有好几套,这里先初步的了解了一下,查阅网上的资料实现了个和Unity自带Standard差不多效果的,还没有添加环境映射。其中的公式和原理还是比较复杂的不太看得懂,先拿来用着吧。
shader部分:
Shader "Custom/PBSTest" {
Properties{
_MainTex("MainTex",2D)="white"{
}
_Smoothness("Smoothness",Range(0.0,0.9999))=0.5
_Metallic("Metallic", Range(0,1)) = 0.0
_SpecularFactor("SpecularFactor",Range(0.0,5.0)) = 1.0
_DiffuseFactor("DiffuseFactor",Range(0.0,5.0))=0.3
}
SubShader{
Pass{
CGPROGRAM
#include "Lighting.cginc"
#include "UnityCG.cginc"
#pragma vertex vert
#pragma fragment frag
#define Pie 3.1415926535
float _Smoothness;
sampler2D _MainTex;
samplerCUBE _Cubemap;
float _Metallic;
float _DiffuseFactor;
float _SpecularFactor;
struct v2f {
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
float3 normal:TEXCOORD1;
float3 worldPos:TEXCOORD2;
};
struct OutPut {
float3 Albedo;
float3 normalDir;
float3 halfDir;
float Metallic;
float Smoothness;
float3 viewDir;
float3 lightDir;
};
//平方
float sqr(float value)