UnityShader学习(二)像素颜色和颜色向量相加相乘的理解

首先计算机图形学的一条原则是,如果它看上去是对的,那它就是对的。所以,对于一些计算模型来说,最重要的是最后拟合的效果。它不一定符合物理,但通常计算都以物理上的考虑为基础。

像素颜色和相关运算的理解

我们常说某件物体是某种颜色的,仿佛颜色是物体的自有属性。其实这样的理解并不正确。颜色是物体反射的光进入眼睛以后给我们的一种感觉。也就是说,除了物体本身的属性,光照条件也是最终看到颜色的决定因素之一。我们说一张纸是白色的,其实是在说这张纸能反射所有的可见光。如果我们以单色光,比如红光照射它,我们看到这样纸就呈现出红色。因为输入的光只有红色,因此纸张也就只能反射红光。所以,如果单论颜色这一概念,应该是光的自有属性(取决于波长),而不是物体的属性。物体所谓的颜色,其实是它在反射过程中所表现出的特点。

由于人眼感光的特点,我们把红绿蓝作为颜色空间的三个分量,不同比例的红绿蓝光混合可以得到人眼对其它颜色的感觉。同时,在约定范围的前提下,分量的数值大小可以表示光的强度。基于这种颜色模型,如果有不同的几束光进入眼睛,我们可以认为等于三个分量叠加以后的光进入眼睛。实际上这也符合这样的直觉:越多的可见光照射物体,物体也就显得越亮。

所以,上面的讨论解释了颜色向量相加的含义。在许多光照模型中,某个点反射的光由好几部分组成:例如自发光,漫反射光,镜面高光,环境光。那么最后反射光给我们的颜色感觉,就是各组成部分光颜色相加以后的结果。总结起来,这样模拟的出发点是:

1.认为有三种基本颜色的光。人眼形成的颜色感觉来自于三种基本光不同比例不同强度的混合。

2.不同颜色的光互不干扰,各自线性叠加。

其实这样考虑很显然有很多与物理现实不符的地方。例如光的波长应当是连续取值的。一些混合光进入眼睛,在计算它们叠加以后的视觉效果上的贡献时,对波长积分,不同波长的光本身的贡献是不同的,应该有个经验系数。显然简化成三种波长的单色光然后线性叠加是简单的处理。

在光照模型中计算反射部分的时候,有所谓反射颜色的属性。比如计算漫反射部分,我们会定义一个材质的漫反射颜色属性。计算反射光颜色的时候,将漫反射颜色属性的分量和入射光对应分量相乘得到最后的结果。这个运算应当怎么理解?

首先我们注意到,反射部分是体现材质自有属性的环节。假设我们都用标准的白光照射,那么材质反射出来的光的颜色就可以作为它自身属性的表示。光经过材质反射,强度必然不会增加,因为部分光将被材质吸收。例如一个白光下呈现红色的材质,就吸收了红色以外的光。所以,材质的漫反射颜色不应该理解为与光的颜色等同的概念,它其实是各个分量的反射百分比。因此它的分量被规定在[0,1]范围内。例如我们定义一个材质的漫反射颜色是(0.8,0,0)意味着它反射80%的红色光,吸收了全部的绿光和蓝光。

  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值