顶点着色器和片元着色器之间的通信

作者:追风剑情 发布于:2016-8-29 23:06 分类:Shader

  1. Shader "Custom/VertFragShader" {
  2. SubShader {
  3. Pass {
  4. CGPROGRAM
  5.  
  6. #pragma vertex vert
  7. #pragma fragment frag
  8. struct a2v {
  9. float4 vertex : POSITION;
  10. float3 normal : NORMAL;
  11. float4 texcoord : TEXCOORD0;
  12. };
  13. struct v2f {
  14. //SV_POSITION语义告诉Unity,pos里包含了顶点在裁剪空间中的位置信息
  15. float4 pos : SV_POSITION;
  16. //COLOR0语义可以用于存储颜色信息
  17. fixed3 color : COLOR0;
  18. };
  19. //注意,顶点着色器是逐顶点调用的。
  20. v2f vert(a2v v) : SV_POSITION {
  21. //声明输出结构
  22. v2f o;
  23. o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
  24. //v.normal包含了顶点的法线方向,其分量范围在[-1.0, 1.0]
  25. //下面的代码把分量范围映射到了[0.0, 1.0]
  26. //存储到o.color中传递给片元着色器
  27. o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);
  28. return o;
  29. }
  30. //注意:
  31. //片元着色器是逐片元调用的,
  32. //片元着色器中的输入实际上是把顶点着色器的输出进行插值后得到的结果。
  33. fixed4 frag(v2f i) : COLOR {
  34. //将插值后的i.color显示到屏幕上
  35. return fixed4(i.color, 1.0);
  36. }
  37. ENDCG
  38. }
  39. }
  40.  
  41. FallBack "Diffuse"
  42. }

效果

11111.jpg

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号