Shader中颜色相乘的理解

RGB应该是两层含义:

A 光的强度,例如光源的颜色。

B 光的反射率,越靠近1反射率越高

非光源的物体之所以显示指定的颜色R是因为光源投射到物体后,物体吸收了部分光GB而反射了另外一部分光R,从而显示了反射光的颜色。例如树叶,树叶吸收了阳光中的非绿色部分,而反射了绿色,所以才显示绿。Unity中给非光源物体设置颜色指的是设定反射率。

在仅仅考虑光源的情况下,光源的RGB为(0.5,0,0),而物体的RGB(1,0,0),那么物体实际上显示的颜色为(0.5,0,0),如果物体的RGB为(0,1,0),那么物体的颜色为(0,0,0)。所以非光源物体显示什么颜色是由光源和自身的反射率共同作用的结果。

两个光相加往往代表光的合并,

例如绿光(0,1,0)经过某点A【RGB(0.3,0.5,0.2)】反射后变成了(0,0.5,0),

红光(1,0,0)经过某点A的反射后变成了(0.3,0,0),那么着两个光投射到眼睛的时候实际上是两个光的合并。

例如Shader中物体的最终颜色=环境光+自发光+漫反射+高光。

两个光的相乘往往代表的是 光强x光反射或者光反射x光强 或者光反射x光反射。结果光发生了衰减或者反射能力发生了变化。

例如求漫反射的时候是有用到光源的RGB*自身的RGB。光源的RBG代表的是光的强度。自身的RGB代表的是物体自身的反射率。

验证:

新建场景,去掉天空盒

将环境光设为全红。

将灯光设为全红。

 三个Cube

Cube1材质:

 Cube2

 Cube3:

 结果是:可见Cube1 变红了,Cube2,Cube3 变黑了。

 继续将环境光和光源变成绿色,Cube1,Cube2绿色,Cube3 黑色。

Cube1.Color = RGB(1,1,1,1)

Cube2.Color = RGB(0,1,0)

Cube3.Color =RGB(0,0,1)

Cube1由于是全颜色反射,所以光源是什么颜色,Cube1就显示什么颜色,而Cube2 值反射绿色光,所以当光源不含绿色的时候,Cube2黑色。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值