美文网首页
Shader入门精要笔记9

Shader入门精要笔记9

作者: 水曜日鶏 | 来源:发表于2020-01-12 12:07 被阅读0次

    第9章

    • 渲染路径:前向渲染和延迟渲染。
    • 前向渲染:
      • ForwardBase,计算环境光,最重要的环境光,逐顶点/SH光源(球谐函数)和Lightmaps
      • ForwardAdd,计算逐像素光源
    • 光照衰减
      • 需要引入"AutoLight.cginc"文件才能使用_LightMatrix0和_LightTexture0
      • 需要使用编译指令 pragma multi_compile_fwdadd
      • _LightMatrix0(也可写unity_WorldToLight)将世界空间转换为光源空间
      • _LightTexture0 光源衰减纹理
      • .rr是swizzling操作,将点乘的结果变成一个二维向量
        乘以UNITY_ATTEN_CHANNEL的目的是求取rgba其中一个分量,
        因为tex2D函数的结果是一个fixed4类型颜色
      float 3 lightCoord = 
      mul(_LightMatrix0,float4(i.worldPosition,1)).xyz;
      
      fixed atten =
      tex2D(_LightTexture0,dot(lightCoord,lightCoord).rr)
      .UNITY_ATTEN_CHANNEL
      
      • 向量重组(Swizzling)
        • A = {1,2,3,4},若B = A.wwxy,则B = {4,4,1,2}
    • 阴影
      • 阴影映射原理
      • CastShadows 为On 开启向其它物体投射阴影
      • Receive Shadows 接收其它物体的阴影
      • 让物体投射阴影:使用自带的Fallback如"Specular",因为它们带有 LightMode = ShadowCaster 的Pass
      • 让物体接收阴影:
        • 在顶点着色器输出结构v2f定义 SHADOW_COORDS(index)没有分号,index是可用的插值寄存器的索引值(即下一个可用的TEXCOORD后面的数字)。这一步的目的是定义对阴影纹理采样的坐标
        • 在顶点着色器使用TRANSFER_SHADOW(o)。这一步的目的是计算上一步的阴影纹理坐标
        • 在片元着色器中计算阴影值。
        fixed shadow = SHADOW_ATTENUATION(i);
        
      • 将光照衰减和阴影一起计算
        • 在顶点着色器输出结构v2f定义 SHADOW_COORDS(index)没有分号,index是可用的插值寄存器的索引值(即下一个可用的TEXCOORD后面的数字)。这一步的目的是定义对阴影纹理采样的坐标
        • 在顶点着色器使用TRANSFER_SHADOW(o)。这一步的目的是计算上一步的阴影纹理坐标
        • 在两个Pass的片元着色器中使用UNITY_LIGHT_ATTENUATION(atten,i,i.worldPos) 其中的atten不需要定义
      • 对于透明度测试的物体开启投射阴影需要将Fallback设置为 "Transparent/Cutout/VertexLit"
      • 对于透明度混合的物体阴影比较复杂,UNITY内置的shader不支持

    相关文章

      网友评论

          本文标题:Shader入门精要笔记9

          本文链接:https://www.haomeiwen.com/subject/mbviactx.html