总结

  • 如果要在Fragment中处理光照,不需要将Index,LightDir,传入,因为这些数据不会被插值计算,而Normal会被插值计算,所以只需要将Normal传入计算即可,插值后的数据未被规一化。

  • Fragment中的Normal被GPU插值计算后,没有规一化,所以用Normal前需要规一化。
    Specular_PP中使用的Normal没有被规一化,结果光照不光滑,跟Specular效果没差别.

  • 漫反射与纹理颜色混合
    漫反射的面积比较大,如果直接与纹理颜色相加,则很容易曝光。需要将其与纹理颜色相乘后,再与其相加,得到的结果才不会过曝。

  • 高光与纹理颜色混合
    高光颜色与纹理颜色,可以直接相加,或者与纹理颜色相乘后再相加,但得到的效果同不同的。
    color.rgb = color.rgb + specColor.rgb // 陶瓷,玻璃的光滑效果
    color.rgb = color.rgb + color.rgb * specColor.rgb // 没有了光滑效果,比较写实

  • Vertex Render Path
    a. 只能取 unity_LightPosition[8] unity_LightColor[8] unity_LightAtten[8]中的数据
    b. unity_LightPosition存储了平行光,点光源,坐标系为相机空

  • Forward Render Path
    a. _WorldSpaceLightPos0只会含有Pixel光源,在ForwardBase中只有场景中存在RenderMode为Important的Pixel平行光时,才可以用_WorldSpaceLightPos0和_LightColor0,坐标为世界坐标
    b. ForwardBase中,unity_LightPos[x,y,z]0 unity_LightColor[4]只含有点光源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Why Bothers? 为什么已经有ShaderForge这种可视化Shader编辑器、为什么Asset Sto...
    DonaldW阅读 76,260评论 16 183
  • 作者学习shader已经有很长一段时间了,这篇文章是对shader的整理和总结。shader的世界缤纷多彩,浩瀚无...
    叶小健阅读 12,955评论 5 79
  • 93f17584ffbc阅读 123评论 0 0
  • 采桑子 通幽曲径身何处?丝发轻微,随絮纷飞,一抹微云画月眉。 悄悄心事翘翘目,寻觅君陪,独剩蔷薇,谁数繁星点点没。
    纳兰筱D阅读 257评论 0 3
  • 客户就是生来磨练你的,今天我才真正读懂这句话 这个年,自问过的真是跌宕起伏,不是遇到了什么奇遇缘分,全部都是因...
    瓶子一只阅读 439评论 0 0