首页 > 其他 > 详细

写shader小细节——这个会不断更新

时间:2017-05-21 18:26:48      阅读:533      评论:0      收藏:0      [点我收藏+]

这个是因为自己被自己蠢哭了动笔的,里面大概记录自己所犯的错,和一些小知识。

1.有一个错误我经常犯:内部定义的字段没对应开放到编辑器的字段。这个是由于我有点依赖ide写代码的习惯导致,而shader的ide只提供了基本的关键字高亮。

  纠正方法:对一个字段,一直使用拷贝粘贴的方式进行书写。

2.法线没归一化正确,导致效果奇奇怪怪,这个我是在写matcap那里犯的错:漏了这句:

o.twoUv.zw = o.twoUv.zw * 0.5 + 0.5;//(-1,1)->(0,1)

3.Tiling和Offset:

  Tiling:缩放模型UV纹理采样坐标,比如Tiling = 2,表示把模型UV坐标的U扩大2倍,U范围变成了0-2

    [此时模型U=[0,1]就采用了整个纹理,即模型的左半使用整个纹理;模型U = (1,2]的采样值使用纹理溢出填充值,看下面]

  Offset:偏移模型UV纹理采用坐标;比如Offset x=0.1表示把UV纹理坐标往左偏移,然后再采样,
  至于超出UV纹理的UV坐标采样的颜色值(纹理溢出填充值),则依赖UV纹理的WrapMode
  具体实现:
  float4 _MainTex_ST;//纹理缩放偏移向量(Unity默认此变量赋值,变量命名规则:纹理名_ST)
  vert()
  {
  ...
  //第一种方式:
  o.uv = v.vertex.xy * _MainTex_ST.xy + _MainTex_ST.zw;
  //第二种方式:使用内建宏,这只是对第一种的封装
  o.uv = TRANSFORM_TEX(v.vertex,_MainTex);
  }

 

写shader小细节——这个会不断更新

原文:http://www.cnblogs.com/Tearix/p/6885473.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!