Unity Shader学习:简易PBS实现
简单根据公式实现了一下基于物理的着色,坑的地方还是有不少,单纯的公式搬过来效果会不正确,这里根据网上资料以及自己调整稍微修改了一下部分计算。高光项:Cook-Torrance,漫反射项:Disney
左边为实现的效果,右边为Unity2017自带Standard
shader部分:
Shader "Unlit/BRDF2"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {
}
_Roughness("Roughness",Range(0.0,1.0)) = 0.5
_F0("F0",range(0.0,10.0)) = 0.5
}
SubShader
{
Tags {
"RenderType"="Opaque" "LightMode" = "ForwardBase" }
LOD 100
Pass
{
CGPROGRAM
#pragma multi_compile_fwdbase
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc"
#define pi 3.1415926
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float3 worldNormal:TEXCOORD1;
float3 worldPos:TEXCOORD2;
};
sampler2D _MainT