渲染路径--Forward渲染路径

一渲染细节:

  1. 根据影响物体的光源不同,正向渲染用单个或者多个通道来渲染物体;
  2. 在正向渲染中光源本身也会根据他们的设置和强度受到不同的对待。
  3. 实现细节: 渲染通道:ForwardBase和ForwardAdd是专门为在Forward渲染路径下渲染物体而设计的两种Pass。其中ForwardBase会优先于ForwardAdd渲染。
    • 在正向渲染中,影响物体最亮的几个光源使用逐像素光照模式(per-pixel lit mode)。
    • 接下来,最多有4个点光源会以逐顶点渲染方式被计算。
    • 其他光源将以球面跳河的方式进行计算。
    • 判断一个光源是否为逐像素光源的依据:
      • 渲染模式被设置为不重要的光源不用逐像素光照模式计算。
      • 最亮的方向光源为per-pixel。Brightestdirectional light is always per-pixel.
      • 如果根据以上规则的到的像素光源数量小于Quality Setting中的Pixel Light Count,为了减少亮度,将会有更多的光源以逐像素的方式进行渲染。If the above results in less lights than current Pixel Light Count Quality Setting, then more lights are rendered per-pixel, in order of decreasing brightness.
  4. 通道细节:       
    下面是官方给出的对光源不同处理
    • ForwardBase:Base Pass applies one per-pixel directional light and all per-vertex/SH lights。ForwardBase通道渲染一个逐像素方向光和所有的顶点/球面调和光。此通道还负责渲染着色器中的光照贴图,环境光和自发光。在此通道中渲染的方向光可以产生阴影。
    • ForwardAdd:Other per-pixel lights are rendered in additional passes, one pass for each light。其他的像素广在附加通道中进行渲染,每个光源都需要一个通道。在这些通道中渲染的光源无法产生阴影。
    • 以上可知:前向渲染支持一个能产生阴影的方向光。so in result, Forward Rendering supports one directional light with shadows

假设光源A到H都有相同的颜色和强度,且它们的渲染模式都为自动的(Auto),那么它们严格的按照其名字排序。最亮的光源以逐像素光照模式的方式进行渲染(A到D),然后最多有4个光源以逐顶点光照模式进行渲染(D到G),其他光源以球面调和的方式进行渲染(G到H)

可知:由第四点通道细节,在ForwardBase中只渲染一个逐像素方向光A和所有球面调和光。即 A E F G H;其他光源在ForwardAdd中渲染。

官方强调球面调和光很快很高效。

二、注意点

*ForwardBase、ForwardAdd的LightMode只能运行在Came为Forward、DeferredLighting的渲染模式下
*ForwardAdd这个Pass需要和ForwardBase一起使用,否则会被Unity忽视掉
* ForwardBase只对1个有效灯光执行一次
* ForwardAdd对除了ForwardBase用的那个灯光外的所有有效灯光都执行1次,所以会被执行多次

LightMode=Forward中的_WorldSpaceLightPos0,_LightColor0
*灯光在ForcePixel模式下才有效
*如果只有一个平行灯光,ForwardAdd中使用不到灯光数据
*ForwardBase的Pass中,灯光需要是方向光
*ForwardAdd优先点光源,
* ForwardAdd优先灯光比较暗的,ForwardBase优先比较亮的 。他们正好相反

LightMode=ForwardBase(只有这一个的情况下)中的unity_4LightPosZ0[3], unity_4LightAtten0[3], unity_LightColor[3], unity_LightColor3
*只对点光源有效
*灯光在ForcePixel,ForceVertex模式下都有效,ForcePixel的优先
*灯光范围必须覆盖目标
*灯光亮度必须大于0
*对灯光强度排序,亮的优先。

LightMode=ForwardBase(包含ForwardAdd,Blend Zero One)中的unity_LightColor[3], unity_LightColor3
*只对点灯光有效
*当只有一个点灯光时ForcePixel,ForceVertex都有效
*当有多个点灯光时,如果其中有是ForceVertex的。则只有ForceVertex有效,ForcePixel无效
*当有多个点灯光时,如果都是ForceVertex。则有效
*灯光数据是在世界坐标内

LightMode=ForwardAdd(Blend One Zero)中的unity_LightColor[3], unity_LightColor3
*首先需要有两个ForcePixel的方向光或者一个ForcePixel的点光为前提条件
*需要是ForceVertex的点等光才有效
*当开始有几个满足效果,把他们一个一个设置为不满足时unity_LightColor[3]会残留一个未被清理的数据,所以建议使用unity_LightColor3

LightMode=ForwardBase(只有这一个的情况下)中的unity_LightPosition[3], unity_LightAtten[3]
*没有数据

LightMode=ForwardAdd(Blend One Zero)中的unity_LightPosition[3], unity_LightAtten[3]
*没有数据
*有其他材质球时unity_LightPosition[3]会看到那些残留数据

时间: 2024-10-12 13:57:56

渲染路径--Forward渲染路径的相关文章

[Unity Shader笔记]渲染路径--Forward渲染路径

[Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游戏 分类: UnityShader *ForwardBase.ForwardAdd的LightMode只能运行在Came为Forward.DeferredLighting的渲染模式下 *ForwardAdd这个Pass需要和ForwardBase一起使用,否则会被Unity忽视掉 * Forward

untiy 3d ShaderLab_第7章_ Forward渲染路径_1_ForwardBase和ForwardAdd

第7章 Forward渲染路径 本章的主要目的是让大家在不使用Unity的Surface Shader时,也能够正确地存取Unity的光源数据,从而定制自己的Forward渲染路径的Shader.如果读者没有这个需求,或者己经了解了Unity是如何为Forward渲染路径存放光源数据的,那么就可以跳过本章. 7.1ForwardBase和ForwardAdd ForwardBase和ForwardAdd是专门为在Forward渲染路径下渲染物体而设计的两种Pass,其中ForwardBase会先

untiy 3d ShaderLab_第7章_ Forward渲染路径_2_Forward渲染路径下的重要光源

第7章 Forward渲染路径 本章的主要目的是让大家在不使用Unity的Surface Shader时,也能够正确地存取Unity的光源数据,从而定制自己的Forward渲染路径的Shader.如果读者没有这个需求,或者己经了解了Unity是如何为Forward渲染路径存放光源数据的,那么就可以跳过本章. 7.2Forward渲染路径下的重要光源 7.2.1 设计检测用的材质 其编辑器截图如图所示, _WorldSpaceLightPosO.x.shader文件,其主要代码如下: Shader

untiy 3d ShaderLab_第8章_3_ 单光贴图和Forward 渲染路径

8.3 单光贴图和Forward 渲染路径 8.3.1单光照贴图在VertexLit和Forward下面的不同表现 在单光照贴图的情况下,Camera的RenderingPath为VertexLit时,有一个不理想的地方就是被烘焙过的静态物体,默认的材质不会受到实时光照的影响.当然,可以通过提供自定义的材质改变这一行为,但是很麻烦.在RenderingPath为Forward时,这种麻烦就不会存在了,经过烘焙物体,Unity的默认材质会继续受到实时Pixel光源的影响. 8.3.2 准备可应用于

untiy 3d ShaderLab_第7章_ Forward渲染路径_4_Forward渲染路径总结

Forward渲染路径总结 现在可以总结一卜适应于Forward渲染路径的ForwardBase和ForwardAdd的情况. 7.4.1   Forward渲染路径下材质的适应性 这两类Pass不能在Camera为VertexLit时被演染,但可以被渲染路径为Forward和Deferred的Camera渲染. 7.4.2  Unity如何为Forward渲染路径设置光源 在ForwardBase的Pass内,_WorldSpaceLightPos0和_LightColor0只会含有第一个Pi

【大前端之前后分离】JS前端渲染VS服务器端渲染

前言 之前看了一篇文章:@Charlie.Zheng Web系统开发构架再思考-前后端的完全分离,文中论述了为何要前后分离,站在前端的角度来看,是很有必要的:但是如何说服团队使用前端渲染方案却是一个现实问题,因为如果我是一个服务器端,我便会觉得不是很有必要,为什么要前后分离,前后分离后遗留了什么问题,如何解决,都得说清楚,这样才能说服团队使用前端渲染的方案,而最近我刚好遇到了框架选型的抉择. 来到新公司开始新项目了,需要做前端框架选型,因为之前内部同事采用的fis框架,而这边又是使用的php,这

细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)

细说后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr) 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染.客户端渲染.node 中间层.服务器端渲染(ssr). 1. 后端模板渲染 前端与后端最初的渲染方式是后端模板渲染,就是由后端使用模板引擎渲染好 html 后,返回给前端,前端再用 js 去操作 dom 或者渲染其他动态的部分. 这个过程大致分成以下几个步骤: 前端请求一个地址 url 后端接收到这个请求,然后根据请求信息,从数据库或者其他地方获取相应的数据 使用

[原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

java(web)相对路径,绝对路径

1.定义 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:/xyz/test.txt 代表了test.txt文件的绝对路径.http://www.baidu.com/index.htm也代表了一个URL绝对路径. 相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表Web应用的根目录.和物理路径的相对表示.例如:"./" 代表当前目录,"../&