Unity中unity shader forgee 的镜子效果的链接方式!!!!

Unity shader教程-第三课:实践!同一个shader,多个material。 - Unity Shader - 98jy - 永不熄灯的课堂-从基础到实战 - Powered By EduSoho
Unity shader教程-第三课:实践!同一个shader,多个material。
这节课我们开始利用我们学到的Properties知识来改动代码,用一个shader实现如下图的几个不同的球体:
使用MonoDevelop打开shader文件
保证Properties里面是如下内容
_EmissiveColor ("Emissive Color", Color) = (1, 1, 1, 1)
_AmbientColor ("Ambient Color", Color) = (1, 1, 1, 1)
_SomeValue ("Coefficient", Range(0, 10)) = 2.5
找到代码中的#pragma&surface&surf&Lambert这一行,回车另起一行后加入下面的三行代码
float4 _EmissiveC
float4 _AmbientC
float _SomeV
清除原来在这个地方的
sampler2D _MainT
找到方法 void surf(Input IN, inout SurfaceOutput o),把里面的内容改成
float4 c = pow((_EmissiveColor + _AmbientColor), _SomeValue);
o.Albedo = c.
o.Alpha = c.a;
为保证你做成的最后内容跟我的一样,这里是最后的shader代码
Shader "myDiffuse"
Properties
_EmissiveColor ("Emissive Color", Color) = (1, 1, 1, 1)
_AmbientColor ("Ambient Color", Color) = (1, 1, 1, 1)
_SomeValue ("Coefficient", Range(0, 10)) = 2.5
Tags { "RenderType"="Opaque" }
#pragma surface surf Lambert
float4 _EmissiveC
float4 _AmbientC
float _SomeV
struct Input
float2 uv_MainT
void surf (Input IN, inout SurfaceOutput o)
float4 c = pow((_EmissiveColor + _AmbientColor), _SomeValue);
o.Albedo = c.
o.Alpha = c.a;
FallBack "Diffuse"
到这里,我们就可以保存shader。回到Unity中。
回到Unity后,选中名字为myDiffuse的material,然后按下键盘上的Ctrl+D,复制出material,把它改名为myDiffuse2。同样的方式,复制出myDiffuse3, myDiffuse4。这个方式,能让我们制作出使用同一个shader的不同的四个material出来。
在Scene面板中,如果你没有加满4个sphere,可以现在添加。然后分别给这四个球拖入我们的myDiffuse、myDiffuse2、myDiffuse3、myDiffuse4这几个material。
选中任意一个material,你可以在Inspector上选择Emissive Color或者Ambient Color,也可以通过拖动滑动条来改动数值,改动的过程中可以看到Scene中的物体会随你的改动而变化显示。同时,虽然我们只写了一个shader用到4个物体上,改动一个物体的material并不会影响到跟它使用不一样的material的物体。也就是说,我们属性里的值,其实是存在于material中。在我们改变相关的值的时候,unity会把值存到material对应的文件中,并在运行的时候,作为shader需要的参数送到shader中。由此,虽然我们只写了一个shader,但是因为送入的参数不同,因此物体的表现也就不同(为那些好奇的人,这节课的附录部分介绍了怎么打开material文件的方式,可以看到存储的内容)。
对于我们上面改动的代码的解释
当你在Properties块声明一个新的属性值的时候,你也就给shader提供了一种让用户通过Inspector面板调整内部值的方式。每个变量都会存储下最后用户修正的结果。但是,如果代码需要在SubShader{}这个块中用到这些值,必须在这个块中同时声明同样名字的变量,这个方式把我们在Inspector上的值和最后代码的值链接起来,形成一个整体。
一旦你在SubShader{}块中声明这些变量后,你就可以在surf()方法中使用到这些变量了。surf()方法中,我们用到的pow()方法是NVidia的cg语言提供的一个方法,unity shader可以用cg中的方法,这个方法跟其他语言中的pow类似,是“返回指定数字的指定次幂”。
Unity提供了把一些文件存成文本型的方式,我们可以利用这个方式来查看material文件的内容。
菜单 Edit | Project Settings | Editor,会打开如下的面板
该面板的Asset Serialization中,Mode点开,选择 Force Text
等进度条完成任务
硬盘上找到我们的myDiffuse材质(material)文件(以.mat)结尾,用可以打开文本文件的软件打开(写字本、Ultraedit、Notepad++都可以)
查看里面的内容,我这里的如下图
图中高亮的地方可以看到我们选择的颜色值。
98教育原创文章,转载请注明原文地址,否则视为侵权!
文章来源: 原创
后发表看法
我是管理员探索,分享你喜欢的。
后使用快捷导航没有帐号?
所属分类: &
shaderforge插件参数详细解释
查看: 2524|回复: 29
主题帖子精灵币
Ta的其他精品内容:
· · · · · · · · · ·
无意中找到的~感觉还挺不错的.
单击或另存可以查看大图片
a.jpg (275.85 KB, 下载次数: 111)
13:35 上传
b.jpg (123.54 KB, 下载次数: 109)
13:35 上传
c.jpg (185.13 KB, 下载次数: 105)
13:35 上传
d.jpg (186.96 KB, 下载次数: 105)
13:35 上传
e.jpg (202.19 KB, 下载次数: 104)
13:35 上传
f.jpg (296.11 KB, 下载次数: 102)
13:35 上传
g.jpg (240.73 KB, 下载次数: 101)
13:35 上传
h.jpg (185.31 KB, 下载次数: 113)
13:35 上传
i.jpg (173.58 KB, 下载次数: 106)
13:35 上传
j.jpg (262.35 KB, 下载次数: 97)
13:35 上传
贡献值排行榜:
精灵币 +25
非常实用,多劳费心,至纫公谊。.
CGwell感谢有你!~
主题帖子精灵币
主题帖子精灵币
主题帖子精灵币
谢谢楼主的分享,这么好的资源
主题帖子精灵币
表示看了还是不会啊:Q:Q:Q
主题帖子精灵币
咦,为啥我发的英文变成中文了,好神奇
主题帖子精灵币
感谢楼主 ,造福特效届。
.cn/u/5520661135
主题帖子精灵币
主题帖子精灵币
好资源~学习学习
主题帖子精灵币
太感谢啊!
CGwell游戏特效01期学员
CGwell游戏特效01期学员
一年相伴 感谢有你
陪伴CGwell一周年的会员
原Cgbuff活跃会员回归~
内测小伙伴
参加论坛第一次内内测的好伙伴
薇儿被上了100天
CGwell被你上了100天,你咋不上天呢
酷炫新功能贴图库使用测试,希望大家一起帮忙反馈问题哟~!
从此告别小盘盘,快来使用贴图库在线版吧!

我要回帖

更多关于 shader forge unity5 的文章

 

随机推荐