zoukankan      html  css  js  c++  java
  • Unity ShaderLab 光照随笔

    unity camera默认3种渲染路径,unity5.50里面有4种


    camera Rendering Path  

    1 vertexLit(逐顶点,一般在vert中处理) 
    2 forward (前向渲染,简单说就是只渲染影响力比较大的几个光源)
    3 Deferred(延迟渲染,逐像素,一般在frag中处理,目前已知就是surface里默认的光照处理)


    shader LightMode

    1 Vertex(渲染vertex光源)
    2 ForwardBase(用来渲染场景中最重要光源,pixel平行光)
    3 ForwardAdd(用来渲染场景中其他pixel光源)
    4 PrePassBase(以后补充)
    5 PrePassFinl(以后补充)
    6 Always(默认LightMode就是Always)




    内置存取光源变量

    (所有这些变量都可能存在无效数据,出于效率考虑,当RenderPath切换时,无用的变量不会立刻清除)



    位置相关
    前三位是光源位置如 _WorldSpaceLightPos0.xyz
    最后一位比如_WorldSpaceLightPos0.w如果是0代表平行光(向量),1代表点光源(点)
    具体可以看下齐次坐标


    1 float4 _WorldSpaceLightPos0
    2 float4 unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0
    3 float4 unity_LightPositon[4]


    颜色相关
    1 floar4 _LightColor0
    2 float4 unity_4LightAtten
    3 float4 unity_LightColor[4]




    渲染路径与LightMode组合时shader的执行情况

    RenderPath  LightMode
    VertexLit        只有Vertex的shader生效,Always生效,同时有Vertex和Always时都生效,顺序与代码顺序一致
    Forward        Deferred不生效,forward不生效,vertex在没有forward的时候生效,单独Always生效, 
                           针对forward的Always生效(顺序同代码顺序),针对DeferredAlways不生效
    Deferred       Deferred生效,Forward没有Deferred时生效,vertex在没有deferred和forward时生效,Always不会执行




    渲染路径与LightMode组合时光源变量的情况

    VertextLit时 

    unity_LightPositon[4]和unity_LightColor[4]有vertex光源数据 其中position是CameraSpace



    Forward时

    1 unity_LightPositon[4],unity_LightColor[4]在forward中不包含有效数据


    2 如果只有ForwardBase(没有ForwardAdd)
    _WorldSpaceLightPos0,_LightColor0中存储最重要平行pixel光源位置颜色(如果没有pixel平行光_WorldSpaceLightPos0存储pixel点光源位置,_LightColor0中无数据)
    unity_4LightPos[X,Y,Z]0和unity_LightColor[4]中包含pixel点光源数据(不含平行光)


    3 如果同时有ForwardBase和ForwardAdd
    对于ForwardBase 
    _WorldSpaceLightPos0,_LightColor0作用不变
    unity_4LightPos[X,Y,Z]0和unity_LightColor[4]只包含Vertex光源数据


    对于ForwardAdd
    ForwardAdd执行次数取决于除主要pixel光源外pixel光源的个数
    每多一个pixel光源就多执行一次ForwardAdd
    这些多出的pixel光源数据都存在_WorldSpaceLightPos0,_LightColor0中
    在ForwardAdd中unity_4LightPos[X,Y,Z]0不存在有效数据
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/nafio/p/9137217.html
Copyright © 2011-2022 走看看