记录记录...
(资料图片仅供参考)
漫反射(Diffuse reflection)
高光(Specular highlights)
间接/环境光照(Ambient lighting)
L是光源的向量,N是法线向量,I是光源强度。
漫反射diffuse = I * cosθ
余弦定理 cosθ = L · N / (|L|*|N|)
由于L,N长度都为1, 消去|L|*|N|得
diffuse = L · N * I
排除负数,得到最终公式
diffuse =max(0, L · N) * I
核心代码
效果
逐顶点漫反射 完整代码
参考: https://zhuanlan.zhihu.com/p/110326132
逐像素光照同理, 略
函数解释
UnityObjectToWorldNormal 模型空间法线向量->世界空间向量
UnityObjectToClipPos 顶点坐标 模型空间->齐次裁切空间
添加环境光照
此时, 物体的背面是完全暗的,需要添加环境光照.
在原有基础上加上ambient 则能有基础亮度
I是光源信息,r是反射方向,viewDir是视角方向,gloss是光滑度。
高光反射 specular = I * max(0, r · viewDir)^gloss
反射方向 r=2(n*L)n ― L
或是使用Unity的函数 r = reflect(-L,n)
视角向量 viewDir = UnityWorldSpaceViewDir(i.worldPos)
顶点世界坐标 worldPos = mul(unity_ObjectToWorld,v.vertex).xyz;
核心代码
函数介绍
reflect(-worldLightDir,worldNormal); 反射方向
UnityWorldSpaceViewDir相机方向
saturate相当于max加clamp(0,1)
unity_ObjectToWorld坐标变换矩阵, 用于局部转世界坐标
效果
理解公式specular = I * max(0, r · viewDir)^gloss (默认gloss>1)
r · viewDir是向量的点乘, 向量都是经过归一化处理的
所以得到r· v = |r|*|v|*cosθ = cosθ ,
相当于, 反射角与视角向量夹角越小, cosθ越大, 亮度越大
反之, 夹角>90°, 则结果负数, max后为0 , 就看不到高光
gloss相当于衰减系数, 系数越大, 光圈越小
逐像素高光反射 完整代码
下一篇:最后一页
“谢谢选择我做你的妈妈!” 这封信请18年后查收 扬子晚报讯(通讯员 刘威 记者 朱鼎兆)小时候,母亲常常在家里给我们留字条,
跟新冠病毒“赛跑” 他要让机器人完成核酸检测 经常学生们还不知道我怎么想的时候,我就把自己否定了。工作中需要有自我否定的勇气
助力无接触配送 上海无人车“上岗” 【疫情防控新举措】 科技日报讯 (记者符晓波)眼下,上海疫情蔓延趋势得到有效控制,不少
“态靶辨治” 帮助患者快速转阴 近日,随着患者清零,吉林省长春市北湖奥体中心篮球馆方舱医院等多个方舱陆续“休舱”,各医疗队也
四省市联合医疗队为患者全方位“解忧” 【同心守沪抗疫】 在上海城市足迹馆定点医院的宣传墙上,各类慢性病、基础病的健康宣教手
周美亮: 搜寻野生荞麦的“追种人” ◎本报记者 马爱平 一走进位于国家作物种质库新库内的中国农业科学院作物科学研究所研究员
防晒“神器”竟是珊瑚“杀手” 科技日报北京5月8日电 (实习记者张佳欣)珊瑚礁是地球上生物最丰富、最具经济价值的生态系统之一。
X 关闭
X 关闭