从节点到代码分析光照模型“半兰伯特+Ramp”
Shader代码渲染技术Thepoly 15474 1
实名

通过了实名认证的内容创造者

发布于 2022-3-26 13:51:18

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Thepoly 于 2022-3-26 13:53 编辑

             src=http___img-blog.csdnimg.cn_img_convert_bb16c68e8b798b1ea8771e1b08482ac3.pngrefer=http___img-blog.csdnimg.webp.jpg
174551k9r66ex7z719e99h.jpg
Hello . 大家好
今天给大家带来从节点到代码分析光照模型
“Half Lambert+Ramp”
我是 麦田  海王


“水多了就变成了海”


1
公式详解


这个是比较基础的光照模型,通过它,我们可以理解漫反射是怎么形成的,从而引入其他类型的光照模型和Rmap映射

我们先来回忆一下兰伯特公式:





上图公式可以得出,我们想要求出Cdiffuse,需要知道四个值
分别为:


Clight= 光源颜色
Mdiffuse= 材质的漫反射颜色
N= 表面法线
L= 光源方向的单位矢量
MAX为钳制值不可以超过1

由此我们引入我们再来看一下兰伯特光照模型的变种半兰伯特



由上图曲线得知,半兰伯特模型是在兰伯特的基础上乘0.5+0.5后得出的,就会得出一个背面不会一片死黑的光照模型



公式如上,可以回忆一下数学老师讲的图像

以下为节点实现方式:



基本思路就是套公式为主,通过World Light Dir获取到世界空间光的方向,获取到世界法线后点积,然后乘0.5+0.5


然后我这里拓展了一下,讲点积后的结果和灯光信息相乘,获得灯光颜色和强度后我们转到片源内计算,以便获得锯齿不是很明显的过渡(逐像素光照)


然后将光照模型传值给Ramp的UV,如下图,RampSkin是一个固定贴图,常用于配合半兰伯特渲染手游的角色。他是一个对比渐变类型的贴图,可以模拟出皮肤的透感。最后,我们加上环境光(ambient),输出即可。


这里要强调一点,一定要将Ramp的参数改为Clamp,否则会出现黑点。


节点图


代码部分,建议大家手撸一遍


最终效果:


由此,下期会为大家带来手游中3S皮肤的渲染与制作

今天写的比较急,最近比较忙,如果大家需要源文件或者遇到了问题,可以加我讨论一下,感谢大家支持。


- End -
原文链接:https://mp.weixin.qq.com/s?__biz=Mzg5NzQzNDU1Mw==&mid=22 ... 1b51f44&scene=21#wechat_redirect

喜欢Thepoly的可以通过三种方式与我们建立联系。分别是公众号、微信群以及QQ群。公众号是我们最为官方的窗口,更多内容都必须关注公众号后才能获取。另外现已开通微博:手机版http://weibo.cn/thepoly网页版http://weibo.com/thepoly
         

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表