shader报错集锦


  1. 在使用 URP 库文件,但是程序仍然是 CGPROGRAM 会报 _Time 重定义的错误

  2. 在 URP 的Linear空间中使用 RT 渲染时,默认格式是 R8G8B8A8_SRGB 格式,如果想得到默认的中灰图,需要如下代码,并引入 Color 库

    #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
    Gamma22ToLinear(half4(0, 0, 0, 0))
        
    Gamma->Linear(RT Shader 写入时)->Gamma(系统写入时)-Linear(其他shader读取时)
    //RT 使用格式为:Gamma->Linear 然后写入时系统会自动转一次Gamma
    //拿到贴图时,需要再次从Gamma转Linear
  3. 使用 Alpha Cutoff 的贴图,最好不要使用 Mip Maps,在不同层级切换时,会导致 Alpha 精度变动,导致白边和物体密度丢失

    1. image-20211020110701185
    2. image-20211020111252815
  4. unity采样unity_SpecCube0得到UnityBlackCube(黑色)的问题,天空盒的贴图需要烘焙之后才有数据,所以要先烘焙才能用。

    image-20211025113724301

    image-20211025113754796

    image-20211025113913172

  5. 模型切线的w记录是构造副法线是是否需要翻转,原因是在建模软件中使用镜像建模时,部分切线需要翻转而部分不需要翻转

    image-20211025194858229 image-20211025194907116
  6. 使用抗锯齿时,屏幕UV不同平台的差异会出现,需要手动处理

  7. Attributes 中的标签,必须使用全大写,不然的话,在Unity 中是正常的,在真机上会拿不到数据,变黑

    1. image-20211102161546422

8.为什么我不能在顶点着色器中采样纹理?

  1. http://www.ufgame.com/9620.html

    image-20211221151835839

9.当在片元着色器上设定了使用顶点色,但是没有在顶点着色器中赋值,unity默认会填充RGB为0,A为1。 真机表现如下

  • 如果出错,直接不渲染,并不会赋默认值等

  • 即使加上了 FallBack “Hidden/Universal Render Pipeline/FallbackError” 真机不会显示粉色

  • 即使直接 return half4(i.vertexCol.aaa,1),也不会变粉色

  • 即使在宏定义中打印对应值,也不会显示,也不会显示打印的内容

    • image-20211221165941146
  • 但是在宏定义中使用常量打印,会生效

    • image-20211221170007200
  1. 不能在顶点数据结构中重复定义,不然在Unity中不会出错,在真机会显示粉色

    image-20211221170050847

文章作者: 血魂S
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 血魂S !
  目录