Vertex Modifier of Surface Shader

  Surface shader compilation directive vertex:functionName  可以用于指定顶点着色器。A function that takes inout appdata_full parameter.

  Surface shader中顶点函数传出的坐标必须是Local坐标。在Vert执行完毕后,Surface shader会自动将此Local坐标乘以MVP矩阵。

  1. Shader "Example/Normal Extrusion" {
  2. Properties {
  3. _MainTex ("Texture", 2D) = "white" {}
  4. _Amount ("Extrusion Amount", Range(-,)) = 0.5
  5. }
  6. SubShader {
  7. Tags { "RenderType" = "Opaque" }
  8. CGPROGRAM
  9. #pragma surface surf Lambert vertex:vert
  10. struct Input {
  11. float2 uv_MainTex;
  12. };
  13. float _Amount;
  14. void vert (inout appdata_full v) {
  15. v.vertex.xyz += v.normal * _Amount;
  16. }
  17. sampler2D _MainTex;
  18. void surf (Input IN, inout SurfaceOutput o) {
  19. o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
  20. }
  21. ENDCG
  22. }
  23. Fallback "Diffuse"
  24. }

  

  如果想传递给surface自定义数据(per-pixel),顶点函数需要添加out Input 参数如下:

  1. Shader "Example/Custom Vertex Data" {
  2. Properties {
  3. _MainTex ("Texture", 2D) = "white" {}
  4. }
  5. SubShader {
  6. Tags { "RenderType" = "Opaque" }
  7. CGPROGRAM
  8. #pragma surface surf Lambert vertex:vert
  9. struct Input {
  10. float2 uv_MainTex;
  11. float3 customColor;
  12. };
  13. void vert (inout appdata_full v, out Input o) {
  14. UNITY_INITIALIZE_OUTPUT(Input,o);
  15. o.customColor = abs(v.normal);
  16. }
  17. sampler2D _MainTex;
  18. void surf (Input IN, inout SurfaceOutput o) {
  19. o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
  20. o.Albedo *= IN.customColor;
  21. }
  22. ENDCG
  23. }
  24. Fallback "Diffuse"
  25. }

  

参考:file:///C:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/html/en/Manual/SL-SurfaceShaderExamples.html

Vertex Modifier of Surface Shader的更多相关文章

  1. Surface Shader

    Surface Shader: (1)必须放在SubShdader块,不能放在Pass内部: (2)#pragma sufrace surfaceFunction lightModel [option ...

  2. surface shader相关参数,命令

    https://docs.unity3d.com/Manual/SL-SurfaceShaders.html 说明: 注意下surfaceshader相关开关选项,input结构体全部可用参数 goo ...

  3. Unity Shader——Writing Surface Shaders(1)——Surface Shader Examples

    这里有Surface Shader的一些例子.下面的这些例子关注使用内建的光照模型:关于如何使用自定义光照模型的例子参见Surface Shader Lighting Examples. 简单 我们将 ...

  4. 【Unity Shaders】初探Surface Shader背后的机制

    转载请注明出处:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的 ...

  5. unity, surface shader access world position and localposition

    一,surface shader中访问worldposition 在surface shader中访问世界坐标,只需在Input结构体中声明float3 worldPos即可,如下:  struct  ...

  6. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  7. unity surface shader 1

    Unity ShaderLib :  CGPROGRAM  ENDCG之间是CG代码,之外的代码功能都由ShaderLib提供,CG中的一些方法比如tex2D(...)也是ShaderLib对CG进行 ...

  8. Unity Shader (三)Surface Shader机制

    转自:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的机制一直是 ...

  9. Surface Shader简单向导

    Surface Shader 表面着色器 描述 当你的Material要处理光照,则一般使用Surface Shader.Surface Shader隐藏了光照的计算,你只需要在surf函数里设置好反 ...

随机推荐

  1. 【java基础】java集合之TreeMap

    转载文章转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3310928 第1部分 TreeMap介绍 T ...

  2. Apache Accumulo

    Apache Accumulo 是一个可靠的.可伸缩的.高性能的排序分布式的 Key-Value 存储解决方案, 基于单元访问控制以及可定制的服务器端处理.Accumulo使用 Google BigT ...

  3. http链接

    1,打开一个网页是多少个请求:如果是一个html页面就是一个,解析后面css,js就是很多个  一般都是多个http请求 浏览器先根据地址栏地址发送一个http请求获取html网页 然后浏览器解析ht ...

  4. python之面向对象(继承)

    类的继承 python之面向对象(继承) 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制.继承完全可以理解成类之间的类型和子类型关系. 需要注意的地方:继承语法 c ...

  5. ecmall页面空白解决方案(转)

    页面空白解决方案: ------------------------------------------------------------------------------------------ ...

  6. Regexper:牛逼的 JavaScript 正则可视化工具

    RequireJS Optimizer 是 RequireJS 自带的前端优化工具,可以对 RequireJS 项目中的 JavaScript & CSS 代码使用 UglifyJS 或者 C ...

  7. erlang的一些小技巧(不定期更新)

    在任意节点热更新代码 rpc:call(Node,c,l,[Mod]) c和l的指的是code,library Erlang Shell隐藏的小技巧 f(). %%把所有绑定变量释放掉 f(Val). ...

  8. 2dx 3.0环境配置(mac)

    安装ant brew install ant ant默认的目录在 /usr/local/bin mvim ~/.profile,添加 export ANT_ROOT=/usr/local/bin . ...

  9. 关于vim搜索/替换功能的两条配置

    之前是直接照着这篇的配置的强大的vim配置文件 自己也只是对vim新建文件修改文件的哪个函数SetTitle()做了点修改,毕竟用vim只写C/C++和python.shell. 没想到今天在用vim ...

  10. 1006 Sign In and Sign Out (25)(25 分)思路:普通的时间比较题。。。

    1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...