庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili
作业点评

HalfLambert代码

float halfLambert = nDotl * 0.5 + 0.5;

Shader "AP01/L04/HalfLambert"
{
Properties
{
}
SubShader
{
Tags {"RenderType"="Opaque" }
Pass
{
Name "FORWARD"
Tags {"LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#pragma multi_compile_fwdbase_fullshadows
#pragma target 3.0
// 输入结构
struct VertexInput
{
float4 vertex : POSITION; // 将模型顶点信息输入进来
float4 normal : NORMAL; // 将模型法线信息输入进来
};
// 输出结构
struct VertexOutput
{
float4 pos : SV_POSITION; // 由模型顶点信息换算而来的顶点屏幕位置
float3 nDirWS : TEXCOORD0; // 由模型法线信息换算来的世界空间法线信息
};
// 输入结构>>>顶点Shader>>>输出结构
VertexOutput vert (VertexInput v)
{
VertexOutput o = (VertexOutput)0; // 新建一个输出结构
o.pos = UnityObjectToClipPos( v.vertex ); // 变换顶点信息 并将其塞给输出结构
o.nDirWS = UnityObjectToWorldNormal(v.normal); // 变换法线信息 并将其塞给输出结构
return o; // 将输出结构 输出
}
// 输出结构>>>像素
float4 frag(VertexOutput i) : COLOR
{
float3 nDir = i.nDirWS; // 获取nDir
float3 lDir = _WorldSpaceLightPos0.xyz; // 获取lDir
float nDotl = dot(i.nDirWS, lDir); // nDir点积lDir
float halfLambert = nDotl * 0.5 + 0.5; // 映射至0~1
return float4(halfLambert, halfLambert, halfLambert, 1.0); // 输出最终颜色
}
ENDCG
}
}
FallBack "Diffuse"
}
SSSlut连连看
思路:
看起来是SSS效果
它应该是个RampTex
RampTex的内容似乎在变
RampTex上下没有变化
所以:
让RampTex上下有变化
开放采样RampTex的V坐标值

预积分 Pre-Intregrated Skin Shading

练习
ASE_SSSLut
