Unity Shader 前向渲染

在Unity前向渲染路径中有3种处理光照的方式:逐顶点,逐像素处理,球谐函数。

前向渲染

前向渲染也叫正向渲染,它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。它非常容易理解,也很容易实现.
当光源设置为Important时,是逐像素光源,最重要的平行光是逐像素光源,一个场景中逐像素光源的数一般可以设置。在Project Settings里面可以进行设置
在这里插入图片描述
当光源为auto的时候,如果没有逐像素光源的数量没有达到Pixel Light Count的限制,此时光源类型就是逐像素光源. 个数超过pixel light count ,那么按光源对物体影响重要程度排序后,前pixel light count个数的光源为逐像素光源。一般情况下,unity默认要求逐顶点光源不超过4个,超过的按SH光源处理.

前向渲染有两种: Base PassAdditional Pass
Base Pass可实现的光照效果有:平行光,逐顶点光源,SH光源处理,阴影,光照纹理,环境光,自发光
Additional Pass可实现的光照有:非平行光的逐像素光源。
此外我们通常要在Additional Pass中开启混合模式,如果不开启就会替换之前的渲染。通常使用Blend One One.

前向渲染一般会定义一个Base Pass以及一个Additional Pass一个Base Pass仅会执行一次,而一个Additional Pass会根据影响该物体的其他逐像素光源数目被多次调用,即每个逐像素光源会执行一次Additional Pass.

同时注意:ForwardAdd这个Pass需要和ForwardBase一起使用,在新版本里面,如果没有ForwardBase,渲染会有问题。
下面是一个实现前向渲染的Shader:

Shader "Forward"
{
   
    Properties
    {
   
		_Diffuse("Diffuse",Color) = (1,1,1,1)
		_Specular("Specular",Color) = (1,1,1,1)
		_Gloss("Gloss",Range(8.0,256)) = 8.0
    }
    SubShader
    {
   
        Tags {
    "RenderType"="Opaque" }
        LOD 100

        Pass
        {
   
			Tags{
   "LightMode" = "ForwardBase"}
            CGPROGRAM
			#pragma multi_compile_fwdbase 
            #pragma vertex vert
            #pragma fragment frag

            #include "U
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值