Rendering Path:渲染路径
  设置:1、Player Setting,2、Camera(会覆盖PlayerSetting中的设置)
  选择:根据渲染内容和目标平台来选择合适的Rendering Path,当一个GPU不能处理Deferred Lighting时,会自动切换到Forward Lighting,当Forward Lighting不支持时,会自动切换到Vertexx Lig。

(1)Vertex Lit:
  最低真实度但也是最快的的渲染路径,不支持realtime shadows,建议用在旧机器或一些移动平台上。
  所有lighting都基于顶点计算光照在一个pass里完成,不支持所有的基于pixel计算的效果,比如:shadows、normal mapping、light cookies、highly detailed specular highlights。

(2)Forward Rendering:
  支持一盏方向光的实时阴影。
  最亮的几盏(QualitySetting)光源按像素计算,然后,最多4盏点光源按照逐顶点计算,剩下的都按照SH计算,具体的影响因素:
  (1)Light.RenderMode = Not Important的光源:按照per-vertex或者SH计算;
  (2)最亮(Light.intensity和距离)的directional light:总是per-pixel;
  (3)Light.RenderMode = Important的光源:总是per-pixel计算;
  (4)QualitySetting.PixelLightCount指定了pixel光照的数量,如果基于上述3个规则所产生的pixel light小于此数量,则会有更多的light按照per-pixel计算,以此来降低亮度。
  SH光照:基于vertex计算,但比vertex light要快,它只是一个近似的计算;
      有一点CPU开销,几乎没有GPU开销,很多个SH light和一个SH light的开销完全一样;
      SH lighting非常低频率,所以不要对SH light做太快的transform,SH light只影响diffuse lighting,由于太慢而不支持specular light。

  渲染每个物体的过程:

    1、Base Pass:应用一个逐像素的方向光、所有的逐顶点或SH的灯光;

      2、Additional Pass:逐个渲染每个逐像素光照,每盏光一个pass。

  同一个场景中每个物体的这4个点光源不一样,并且这4个point光是按照pixel优先的顺序选择的,如下图所示,场景中有很多点光源,但影响每个物体的四盏点光源会根据位置来自动选择:

(3)Deferred Lighting:
  提供最好的光影效果,建议在有很多realtime lights的时候使用,它对硬件有一些要求。
  light数量没有限制,且所有light都per-pixel计算。
  原理:第一步准备N个与屏幕同大小的纹理作为渲染缓冲区,接下来向这个纹理渲染东西,一般用FBO,渲染的时候,把每个象素最终的法线值、位置、纹理信息分别渲染到这N个纹理中。
       第二步进行光照/渲染计算,将把之前得到的纹理中的值作为光照计算的输入值来计算光照。
  不支持Deffered Lighting的shader会自动使用Forward Rendering Path。
  优点:计算光照的计算量与场景复杂程度完全无关(三角形再多也不要紧),只与第一次渲染的像素数量和第二次渲染的光源数量成正比。这样,就可以在有限的硬件资源里使用大量的光源。避免多次(超过1次)渲染同一个像素。
       因为和场景复杂度无关,所以小的point light和spot light的开销都是很小的。
  缺点:1、无法使用基于硬件的抗锯齿,因为每个象素都独立计算;
     2、同时渲染多个纹理,显存压力很大;
      3、没法处理半透明,半透明物体只能提出来单独渲染一次(使用Forward Rendering);
      4、不支持MeshRender的Receive Shadows选项(只支持选中值),culling mask选项只有有限的支持(最多4个culling mask,那么意味着layer mask必须至少包含all layers - 4个layer)。

  实现细节:
    1、base pass:几个屏幕大小的buffer,分别包含depth、normals、specular power信息;
    2、lighting pass:在屏幕空间计算光照(所以开销和场景复杂度无关)并存在一张lighting buffer里,只能使用Blinn-Phong的光照模式。
    3、final pass:生成最终的渲染画面,物体再次被渲染,根据lighting信息、结合color textures和任何ambient/emissive lighting。

  至少需要Shader Model3.0,2004年之后出的显卡基本上都支持延迟渲染。

 (4)渲染路径和Pass的Tag

  Pass的LightMode Tag定义了其在渲染管线中的作用。

    Pass{Tags { "LightMode " = "ForwardBase"}...}

  Deferred Lighting,使用PrepassBase和PrepassFinal的Pass;  

  Forward Lighting,使用ForwardBase和ForwardAdd的Pass;

    只有ForwardAdd没有ForwardBase时,ForwardAdd不会执行,被忽略。没有平行像素光,ForwardBase输出黑色,ForwardAdd会执行。

  Vertex Lit,使用Vertex、VertexLMRGB和VertexLM的Pass;

    Vertex:无lightmap,应用所有的vertex lights;

    VertexLMRGB:物体应用lightmap,lightmap为RGBM编码的PC和console平台;

    VertexLM:物体应用lightmap,lightmap为double-LDR编码的mobile平台。

    以上3种LightMode同时只会执行一种。

  在任何渲染路径中,渲染阴影是都会使用ShadowCaster和ShadowCollector的Pass。

  Always表示总是渲染,并且不应用关照。

  默认的LightMode为Always,非法的LightMode值,也当做Asways处理。

测试渲染路径的shader:

Shader "James/Other/TestRenderMode_All"
{Properties {_MainTex ("Base (RGB)", 2D) = "white" {}}SubShader {Tags { "RenderType"="Opaque" }LOD 200Blend One One/// 延迟渲染部分.begin
        CGPROGRAM#pragma surface surf MyDeferredsampler2D _MainTex;struct Input {float2 uv_MainTex;};inline fixed4 LightingMyDeferred_PrePass (SurfaceOutput s, half4 light){fixed4 c;c.rgb = s.Albedo * light.rgb;c.a = s.Alpha;return c;}void surf (Input IN, inout SurfaceOutput o) {o.Albedo = float3(1, 0, 0);}ENDCG/// 延迟渲染部分.end/// 前向渲染部分.begin
        pass{Tags{"LightMode" = "ForwardBase"}Blend one oneCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f{float4 pos : SV_POSITION;float4 color : COLOR;};v2f vert(appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.color = float4(0, 1, 0, 1);return o;}float4 frag(v2f i) : COLOR{return i.color;}ENDCG}/// 前向渲染部分.end/// 顶点渲染部分.begin
        pass{Tags{"LightMode" = "Vertex"}Blend one oneCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f{float4 pos : SV_POSITION;float4 color : COLOR;};v2f vert(appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP, v.vertex);o.color = float4(0, 0, 1, 1);return o;}float4 frag(v2f i) : COLOR{return i.color;}ENDCG}/// 顶点渲染部分.end
        } FallBack "Diffuse"
}

  上面的代码中,不同的渲染路径会输出不同的颜色,而具体哪个pass生效会根据unity的render path的设置来判断。

Rendering Path相关推荐

  1. shader 3 rendering path

    渲染通道, rendering path, vertexlit, forward 和 Deferred lighting 旧有的非统一架构下: 分为顶点着色引擎和像素渲染通道 渲染通道是GPU负责给图 ...

  2. 前向渲染路径细节 Forward Rendering Path Details

    正向渲染路径细节 Forward Rendering Path Details Forward Rendering path renders each object in one or more pa ...

  3. 各Rendering Path技术以及其在Unity中的实现

    Rendering Path其实指的就是渲染场景中光照的方式.由于场景中的光源可能很多,甚至是动态的光源.所以怎么在速度和效果上达到一个最好的结果确实很困难.以当今的显卡发展为契机,人们才衍生出了这么 ...

  4. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 -- polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  5. 渲染路径-实时渲染中常用的几种Rendering Path

    http://www.cnblogs.com/polobymulberry/p/5126892.html?utm_source=tuicool&utm_medium=referral 回到顶部 ...

  6. js修改背景图片路径_前端面试题————关键渲染路径(Critical Rendering Path)...

    前端面试,总是会被问到这样一类问题: 为什么最好把 CSS 的<link>标签放在<head></head>之间?为什么最好把 JS 的<script> ...

  7. Unity URP Rendering Path对比

    The per-Camera limits for different platforms are: 1.Desktop and console platforms: 256 Lights 2.Mob ...

  8. chrome 硬件渲染(GPU Accelerated Compositing in Chrome)

    原文链接 http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome chrom ...

  9. 移动H5前端性能优化指南[转]

    移动H5前端性能优化指南 米随随2015.01.23 移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点 ...

最新文章

  1. eclipse+adt下开发android微信红包自动抢(AccessibilityService类)
  2. SQL_MODE设置
  3. fd_set struct
  4. javascript中子类如何继承父类
  5. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)
  6. 在 Ubuntu 14.04 中配置 PXE 服务器
  7. 制作自己的特色PE----Mr.Zhang
  8. 改善C#程序的建议9:使用Task代替ThreadPool和Thread
  9. C语言--------学生管理系统(源代码)
  10. LU分解 LDL分解 Cholesky分解
  11. 七年级画图计算机教案,信息技术画图软件学习教案
  12. Android 11适配指南之系统相机拍照、打开相册
  13. html网页制作的图片打不开,网页中的图片打不开怎么办?原因与解决办法
  14. protocol buffer生成C语言的实现
  15. 火山引擎发布云操作系统 veLinux
  16. 笔记本电脑已连接WIFI密码查看方法
  17. Scikit-learn的六大功能
  18. 用Python制作一个文件加密器(支持中文)
  19. 注册表与盘符(转victor888文章 )
  20. 宝塔面板搭建个人图床Chevereto完整教程

热门文章

  1. 工作五年的UI设计师,现在混的怎么样?不看是你的损失
  2. 超简单将Centos的yum源更换为国内的阿里云源
  3. svn服务器安装与配置
  4. 自制时间比对函数处理 比对过去时间与当前时间相差多少年多少月多少周多少分 多少秒...
  5. 百度分享自定义内容和图片
  6. [转]Error: SQL BPA command line has encountered a problem and needs to close
  7. 网络编程C#篇(二):Socket无连接简单实例
  8. ReactJs 第二章 JSX
  9. 小程序开发工具不显示tobar图标
  10. 深入理解PHP之源码目录结构