从零开始实现Unity光照模型_02_为Shader添加简单的多光源支持_技术美术基础学习记录

为什么需要多光源支持

在标准光照模型中,每次只针对一个光照进行计算,得出漫反射和高光反射,这样在一个光源下就能有一定程度上真实的渲染效果。
但是一旦出现多个光源,which is the case of reallife, 我们第一篇中的代码就无法支持了(当然第一篇中的代码其实啥也没有很多东西都无法支持)。而只有在多光源的照明下,渲染效果才会更真实。

上一篇的代码存在的问题

上一篇代码的渲染效果如下:
在这里插入图片描述
如果增加一个点光源:
在这里插入图片描述
是没有任何变化的。因此需要添加多光源支持。

Unity中的前向渲染路径

这里主要使用Unity中的前向渲染ForwardRendering
前向渲染分为两种Pass
第一种Pass是BasePass,用来渲染主要光源的光照效果,也就是第一节中的效果。这里要包含所有主要的设置,包括环境光,自发光,最重要光源的漫反射和高光等。
一般来说最主要光源是场景中的平行光。
第二种Pass是AddPass,用来渲染一些额外的光源,一般不需要包括环境光。
下面记录如何用上一节的代码实现多光源效果。

  1. 将subshader中的Pass复制一次,粘到下面。这是因为我们需要针对最主要光源和次要光源绘制两次(当然了,可能有许多个非主要光源,这时候addPass会被执行多次,以把所有光源都绘制出来)
  2. 当然只粘贴是不行的,还要在两个Pass的Tags里分别加上“LightMode”=“ForwardBase”和“LightMode”=“ForwardAdd”
  3. 预编译指令也需要进行处理 各增加一条#pragma multi_compile_fwdbase和#pragma multi_compile_fwdadd
    下面我们试着跑一下:
Shader "Custom/Diffuse"//声明一个shader的名称,格式为 文件夹/文件夹/.../文件夹/shader名称
{
   
    Properties//声明材质中可选的属性
    {
   
        _Diffuse ("Diffuse", Color) = (1,1,1,1)//格式为 _PropertyName("Displayed Name",Type)=DefaultValue
	}
		SubShader
		{
   
			Tags {
    "RenderType" = "Opaque" }//表明这个着色器的渲染属性,意思是使用不透明渲染模式
			LOD 200
			//这是一个主要Pass
			Pass{
   
				Tags{
   "LightMode"="ForwardBase"}//表明这个Pass的渲染属性,这里指定了光照模式,是前向渲染中的Base模式,
												
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值