【延迟渲染小计】

延迟渲染的提出为了解决前向渲染中存在的问题,

在前向渲染中,当场景中包含大量的实时光源时,渲染的性能会急速下降,例如当我们在场景中某个区域放置了多个光源,这些光源互相叠加,为了得到最终的光照效果,就需要为该区域内的每个物体执行多个Pass来计算不同光源对该物体的光照效果,然后再颜色缓冲中对这些结果进行混合得到最终的光照。然而,每执行一个Pass我们都需要重新渲染一遍物体,存在大量计算的重复。

延迟渲染额外的利用了一些缓冲区称作G-Buffer 存储了表面法线、位置、光照计算的材质属性等。渲染时分两个Pass,第一个Pass不进行任何光照计算,仅计算哪些片元可见,如果片元可见就把对应的信息存入G-buffer,在第二个Pass时利用之前存各片元信息对屏幕进行逐像素的光照计算。

Pass 1{
	for(each primitive in this model) {
		for(each fragment covered by this primitive){
			if(falied in depth test){
				discard; //没通过深度测试的丢弃
			} else{
				// 可见的存储对应信息
				writeGBuffer(materialInfo,pos,normal);
			}
		}
	}
}
Pass 2{
	for(each pixel in the screen){
		if(the pixel  is valid){
			// 读取对应GBuffer信息
			readGBuffer(pixel,materialInfo,pos,normal);
			float4 color = Shading(materialInfo,pos,normal,lightDir,viewDir);
			// 更新缓冲
			writeFrameBuffer(pixel, color);
		}
	}
}

当然由于直接剔除了一些看不到的面片也会存在一些问题,包括不能处理半透明的物体,不支持真正抗锯齿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值