打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【风宇冲】Unity3D教程宝典之Shader篇:第三讲Vertex&Fragment Shader

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院


 
                     Shader第三讲Vertex and FragmentShader

Vertex and FragmentShader:最强大的Shader类型,也是本系列的重点,下文中简称V&FShader,属于可编程渲染管线.使用的是CG/HLSL语法。分为2个部分vertex顶点部分和Fragment像素部分。下面依然通过写几个简单的Shader来学习。

例一:显示一张贴图
新建Unity工程,新建一个Cube立方体,新建一个名为Exam1的Shader(Project视图->Create->Shader),输入如下代码。

 

  1. Shader "Custom/Exam1" {
  2. Properties {
  3. _MainTex ("Texture", 2D) ="white" { }
  4. }
  5. SubShader
  6. {
  7. pass
  8. {
  9. CGPROGRAM
  10. #pragma vertex vert
  11. #pragma fragment frag
  12. #include"UnityCG.cginc"
  13. sampler2D _MainTex;
  14. float4 _MainTex_ST;
  15. struct v2f {
  16.    float4  pos : SV_POSITION;
  17.    float2  uv : TEXCOORD0;
  18. } ;
  19. v2f vert (appdata_basev)
  20. {
  21.    v2f o;
  22.   o.pos =mul(UNITY_MATRIX_MVP,v.vertex);
  23. o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
  24.    return o;
  25. }
  26. float4 frag (v2f i) :COLOR
  27. {
  28. float4 texCol =tex2D(_MainTex,i.uv);
  29.    float4 outp = texCol;
  30.    return outp;
  31. }
  32. ENDCG
  33. }
  34. }
  35. }

详细讲解如下图



之后我们把之前创建的立方体的shader设置为Exam1,Inspector里有对应的Texture。然后把第三行代码中"Texture"改为 “Exam 1texture”,这时回到Inspector面板,你会发现什么?没错贴图的名字提示也相应的改变了。就这么简单,到这你已经学会,将任意贴图赋给任意模型的方法了。


PS:

裁剪空间的范围是[-1,1],也就是在经过MVP矩阵后,o.pos.x/ o.pos.w 以及o.pos.y/ o.pos.w的范围都是[-1,1] 故可以将裁剪空间坐标转换为 相对屏幕位置的uv坐标,如下

o.uv = float2((o.pos.x/o.pos.w+1)*0.5,(o.pos.y/o.pos.w+1)*0.5);

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Unity3D Shader 使指定颜色过滤成透明
Unity3d游戏角色描边
Shader: 获取深度贴图数据
RenderDoc[03] 还原粒子特效shader
Unity Shader 基础教程
猫都能学会的Unity3D Shader入门指南(一)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服