上篇主要讲的是unity中的光照模型及其原理,还有几种光照类型(自发光、环境光、漫反射、高光反射),后面几篇文章就开始在unity中实现这几种光照类型,本篇在unity实现自发光、环境光。
一、unity中的环境光和自发光
在标准光照模型中,环境光和自发光的计算是最简单的。
环境光可以在Window->Rendering->Lighting Settings->Ambient Source/Ambient Color/Ambient Intensity中控制。在shader中,我们只需要通过unity内置变量UNITY_LIGHTMODEL_AMBIENT就可以得到环境光的颜色和强度信息。
而大多物体是没有自发光特性的,如果要计算自发光非常简单,只需要在片元着色器输出最后的颜色之前,把材质的自发光emission计算好添加到输出颜色即可。
拓展:
这里如果要让物体全部区域都自发光,直接添加自发光颜色即可。如果要在某些特定区域去自发光,比如一个玩家模型,头上有一颗宝石,只让宝石拥有自发光,下图是没有自发光效果的原图:
1. 要添加自发光效果那么首先需要加上一张美术做好的黑白通道图,白色区域是宝石的区域,其他地方全黑(原理是白色各向量分量颜色默认值是1,黑色是0,所以和其他参数进行相乘后,黑色区域最后结果始终是0,加到片元输出颜色中没有变化,白色是1,乘以定义的自发光颜色还是自发光的颜色值),如下图:
2. 然后声明属性(包括通道图、自发光颜色、强度)
_EmissionTex("Emission Texture",2D) = "black"{}
_EmissionColor("Emission Color", Color) = (0,0,0,0)
_EmissionPower("Emission Power",Range(0,2)) = 1
3. 然后定义相应变量:
sampler2D _EmissionTex;
fixed _EmissionPower;
fixed4 _EmissionColor;
4. 对通道图进行采样,并和颜色、强度相乘、算出自发光最终颜色值:
fixed4 em = tex2D(_EmissionTex, i.uv);
fixed3 Emission = _EmissionColor * em * _EmissionPower ;
5. 添加到最后的输出颜色中:
c += Emission;
6. 我们可以自己通过材质面板控制自发光颜色、强度,来调整宝石的自发光,这里自发光如果想扩散出来一点光晕,可以结合全屏后处理的bloom效果,这里不再介绍,有兴趣可以自行研究,最后效果图如下:
版权声明:本文为CSDN博主「小橙子0」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cgy56191948/article/details/102486311