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不存在有效数据
  • 相关阅读:
    Python学习第61天(html之form标签)
    Python学习第60天(html之body标签)
    Python学习第59天(web前端html /1))
    Python学习第58天(selector版本的ftp习题实现)
    Python学习第57天(异步IO)
    Python学习第56天(configpraser模块复习)
    Python学习第55天(IO多路复用)
    Python学习第54天(阻塞(blocking) IO和非阻塞(non-blocking)IO)
    如何通过Git Bash的命令行将电脑本地项目上传到自己的GitHub上
    第10周周博客
  • 原文地址:https://www.cnblogs.com/nafio/p/9137217.html
Copyright © 2011-2022 走看看