天才的大三暑假修行之旅.表面着色器(二)
来源:互联网 发布:广州男装网络批发 编辑:程序博客网 时间:2024/04/30 05:27
天才的大三暑假修行之旅.表面着色器(二)
肯定很多人看了那么多人讲着色器的文章之后都有一个疑问,这Input结构体是干什么的,到底需不需要定义里面的参数。先后写了几个例子发现然并卵。后来看了这一篇文章:
http://unity3d.9tech.cn/news/2013/1202/39031.html
虽然没怎么讲Input,但是有一句顺带的讲了一下Input的作用。“Input其实是需要我们去定义的结构,这给我们提供了一个机会,可以把所需要参与计算的数据都放到这个Input结构中,传入surf 函数使用”。如果大家要是有什么好的对Input的理解也可以写下留言。
接着就是表面着色器实战了。这里分别是两个大神的uv部分的讲解。而且都是实现水纹。
http://blog.csdn.net/dbtxdxy/article/details/44737133
http://blog.csdn.net/candycat1992/article/details/17754427
先上一下我用的素材。
这个是暖羊羊头像的那篇博客里做完的效果。
Shader "Surface/SSeven" { Properties { _MainTex ("MainText", 2D) = "white" {} _BaseTex("BaseText",2D)="white"{} _XSpeedOne("XSpeedOne",float)=0 _YSpeedOne("YSpeedOne",float)=0 _XSpeedTwo("XSpeedTwo",float)=0 _YSpeedTwo("YSpeedTwo",float)=0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; sampler2D _BaseTex; float _XSpeedOne; float _YSpeedOne; float _XSpeedTwo; float _YSpeedTwo; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { float2 First=IN.uv_MainTex; float2 Sec=IN.uv_MainTex; First+=float2(_XSpeedOne*_Time.y,_YSpeedOne*_Time.y); Sec+=float2(_XSpeedTwo*_Time.y,_YSpeedTwo*_Time.y); half4 FResult=tex2D(_MainTex,First); half4 SResult=tex2D(_BaseTex,Sec); o.Albedo=FResult.rgb*0.5+SResult.rgb*0.5; o.Alpha=1.0; } ENDCG } FallBack "Diffuse"}
这里我把在哪里设置Shader的截图贴了出来,大家可能直接复制粘贴之后发现在Custom没有,因为我定义为Surface了,在Surface中找。
这个是那个头像是一个女孩吃西瓜的效果。
Shader "Surface/SEight" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _XSpeed("XSpeed",float)=0 _YSpeed("YSpeed",float)=0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; float _XSpeed; float _YSpeed; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { float2 Temp=IN.uv_MainTex; Temp+=float2(_XSpeed*_Time.y,_YSpeed*_Time.y); o.Albedo = tex2D (_MainTex, Temp).rgb; } ENDCG } FallBack "Diffuse"}
其实两个人的原理都是产不多的。只不过第一个人用了2张图片来做水的效果,所以显得更加逼真一些。但是效果都不是那么令人满意,为什么呢,因为水有水波,波纹会浮动变化,而两种方法只是进行平移而已。以后再看看有没有更好的实现方法。
再说说编程中遇见的困难,我学习Shader是从Unity5开始的。发现很多地方都有区别。而且上一篇也说了SurfaceOutputStandard与SurfaceOutput不通用。现在教大家一个在Unity5上使用之前Shader的方法。因为新版的支持物理光,这是官网的介绍。所以只要把物理光的定义给删了就变成旧的Shader编辑方式了。
http://docs.unity3d.com/Manual/SL-SurfaceShaders.html
而且UNITY5吧,默认没有标准包的,要去官网下载。本来有一个天空盒子的Shader练习也因此做不了了。所以大家要是学习基础,参考网上教程的话还是用4.X的unity来学习,毕竟那个版本的教程多而且也方便掌握。
- 天才的大三暑假修行之旅.表面着色器(二)
- 天才的大三暑假修行之旅.表面着色器(一)
- 天才的大三暑假修行之旅.表面着色器(总结)
- 天才的大三暑假修行之旅.塔防游戏(二)
- 天才的大三暑假修行之旅.初学Shader
- 天才的大三暑假修行之旅.捕鱼达人
- 天才的大三暑假修行之旅.Unity书籍介绍
- 天才的大三暑假修行之旅.再遇打飞机
- 天才的大三暑假修行之旅.塔防游戏(一)
- 天才的大三暑假修行之旅.塔防游戏(三)
- 天才的大三暑假修行之旅.塔防游戏(总结)
- Shader(表面着色器)
- [UnityShader2]表面着色器实例(二)
- Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)—— 自定义光照模式
- 表面着色器的顶点动画
- 边缘发光的表面着色器
- 表面着色器
- 表面着色器笔记
- UE4学习笔记3rd
- UE4学习笔记4th
- 2014款新宝来车引擎盖开关在哪里
- [Leetcode 124, Hard] Binary Tree Maximum Path Sum
- 爷爷去世了。
- 天才的大三暑假修行之旅.表面着色器(二)
- [Leetcode 44, Hard] Wildcard match
- html,js ,jsp工作学习
- Web服务器Nginx+PHP&DB服务器mysql主从(新手)-1.DB服务器配置
- 暑假习题 四
- java学习
- Twelves Monkeys (multiset解法 141 - ZOJ Monthly, July 2015 - H)
- 珍惜
- [Leetcode 68, Hard] Text Justification