Unity 光照

在这里插入图片描述
向前渲染路径的原理
每进行一次完整的向前渲染,我们需要渲染该对象的渲染图元,并计算两个缓冲区的信息:一个是颜色 缓冲区,一个是深度缓冲区。我们利用深度缓冲区来决定一个片元是否可见,如果可见就更新颜色缓冲区中的颜色值。

Pass {
	for (each primitive in this model) {
		for(each fragment covered by this primitive) {
			if(failed in depth test) {
				//如果没有通过深度测试,说明该片元是不可见的
				discard;
			}else {
				//如果该片元可见就进行光照计算
				float4 color = Shading(materialInfo, pos,normal,lightDir,viewDir);
				//更新帧缓存
				writeFrameBuffer(fragment,color);
			}
		}
	}
}

在Unity中,向前渲染路径有3种光照处理(即照亮物体)的方式:逐顶点处理逐像素处理球谐函数(Spherical Harmonics,SH)处理。
在向前渲染中,Unity使用的判断规则如下:
1.场景中最亮的平行光总是按逐像素处理的。
2.渲染模式被设置成Not Important的光源,会按逐顶点或者SH处理。
3.渲染模式被设置成Important的光源,会按逐像素处理。
4.如果根据以上规则得到的逐像素光源数量小于Quality Setting中的逐像素光源数量(Pixel Light Count),会有更多的光源一逐像素的方式进行渲染。
在这里插入图片描述
内置的光照变量和函数
在这里插入图片描述
在这里插入图片描述
顶点照明渲染路径
在这里插入图片描述
在这里插入图片描述
延迟渲染的原理
延迟渲染主要包含2个Pass。在第一个Pass中,我们不进行任何光照计算,而是仅仅计算哪些片元是可见的,这主要是通过深度缓冲技术来实现,当发现一个片元是可见的,我们就把它的相关信息存储到G缓冲区中。然后在第二个Pass中,我们利用G缓冲区的各个片元信息,例如表面法线、视觉方向、漫反射系数等,进行真正的光照计算。

Pass 1 {
	//第一个Pass不进行真正的光照计算,仅仅把光照计算需要的信息存储到G缓冲中
	for(each primitive in this model) {
		for(each fragment covered by this primitive)
		{
			if(failed in depth test) {
				//如果没有通过深度测试,说明该片元是不可见的
				discard;
			}else{
				//如果该片元可见就把需要的信息存储到G缓冲中
				writeGBuffer(materialInfo,pos,normal,lightDir,viewDir);
			}
		}
	}
}

Pass 2 {
	//利用G缓冲中的信息进行真正的光照计算
	for(each pixel in the screen) {
		if(the pixel is valid) {
			//如果该像素是有效的就读取它对应的G缓冲中的信息
			readGBuffer(pixel,materialInfo,pos,normal,lightDir,viewDir);
			//根据读取到的信息进行光照计算
			float4 color = Shading(materialInfo,pos,normal,lightDir,viewDir);
			//更新帧缓冲
			writeFrameBuffer(pixel,color);
		}
	}
}

在这里插入图片描述

Unity的光源类型

Unity一共支持4种光源类型:平行光、点光源、聚光灯和面光源(area light)。
最常使用的光源属性有光源的位置、方向、颜色、强度以及衰减
这5个属性。

Unity的阴影

在实时渲染中,我们最常使用的是一种名为Shadow Map的技术。这种技术首先它会把摄像机的位置放在与光源重合的位置上,那么场景中该光源的阴影区域就是那些摄像机看不到的地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值