Unity -Shader精讲(二)创建第一个Unity Shader并编写完成基本的结构

转载自:https://blog.csdn.net/qq_33537945/article/details/79242512

我使用Unity版本是 2017.3.0

1. 创建工程什么的就不说了

2. 创建一个3D游戏物体(我创建的是Capsule) 和 一个材质球

3. 创建材质球添加到游戏物体  这时可以在 材质的Shader上进行进行Shader选择 Standard(标准的)FX(特效)GUI(GUI上的渲染) Moblie (适用于移动端的)

4. 创建一个自己的Shader 使用材质和Shader控制游戏物体渲染 

创建一个标准的表面着色器如图(通常都是创建这个) 相当于材质球Shader选项里面的Standard 我起的名字叫做FirstShader-01


创建的这个Shader在如图位置可以看见 (根据代码修改) 默认就是这个位置

选择自己创建Shader后的后的样子 (现在创建的这个Shader里面是有自己的默认代码的 可以实现一些基本的功能等下 把这些代码删除 编写自己的Shader)


5.打双击开自己创建的Shader(VC2015以上版本对Shader进行了支持 但是不会自动填充什么的 只有个别关键字高亮 我用的是2017)

6.删除Shader里面的所以代码 随后自己编写

7.编写自己的Shader代码 如图

// 这里指定shader的名字,不要求跟文件名保持一致  /后面 代表shader的显示等级
// 语法:  Shader"这里写名字"   固定写法  
Shader"myshader/myshader01"{ 

}

 

 

 
 

8. 继续编写自己的Shader代码(此时运行会报红 因为现在编写的shader代码结构 还不完整)

// Properties里写属性 (固定写法)
	Properties{
}
<span class="hljs-comment">// SubShader 可以有很多个  里面编写的是渲染的代码 利用属性编写一些 控制 渲染出来的效果</span>
<span class="hljs-comment">// 为什么创建多个SubShader  因为不同的SubShader可以实现不同的效果 在不同的显卡上运行时需要</span>
<span class="hljs-comment">// 比如不同的显卡对应不同的SubShader 好一点的对应 一个SubShader 差一点的对应一个SubShader</span>
<span class="hljs-comment">// 1. 显卡运行效果时,从第一个SubShader开始,如果里面的效果都可以实现,那么就使用第一个SubShader</span>
<span class="hljs-comment">// 2. 如果这个SubShader满足不了这个显卡的需求,它会自动跳到下一个 如果没有可以实现的会</span>
<span class="hljs-comment">// 3. 调用 Fallback"VertexLit" 默认的</span>
<span class="hljs-comment">// 一般第一个SubShader是显示效果最好的  第二个比第一个次一点 <a href="https://www.baidu.com/s?wd=%E4%BB%A5%E6%AD%A4%E7%B1%BB%E6%8E%A8&amp;tn=24004469_oem_dg&amp;rsv_dl=gh_pl_sl_csd" target="_blank">以此类推</a> 这样会增加shader的适应能力</span>
SubShader{

}
<span class="hljs-comment">// 上面的SubShader都不执行的时候 执行Fallback</span>
<span class="hljs-comment">// Fallback用来指定一个已经存在了的Shader </span>
Fallback<span class="hljs-string">"VertexLit"</span></code></pre><img src="https://img-blog.csdn.net/20180202203220919?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM1Mzc5NDU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt=""><br>

这里的VertexLit 图(这里直接写名字就可以)


9. 补充完Shader代码结构 让它可以运行

编写属性

// 第一个 _color 代表属性的名字 是自定义的
	// ("_color",Color) 里面的字符串是在Inspector面板显示的名字 是自定义的
	// ("_color",Color)   , 后面的Color代表定义的属性 是固定的
	// =(1,1,1,1) 这个()里面设置默认值 R G B A 
	_color("_color",Color)=(1,1,1,1)

在SubShader里面编写Pass块

// SubShader 里面必须有一个 Pass块 也可以有多个
    // 一个Pass块代表一个方法 
<span>	</span>Pass{
<span>	</span>// 在这里编写Shader代码
<span>		</span>CGPROGRAM
<span>		</span>// 使用CG语言编写shader代码
<span>		</span>ENDCG
<span>	</span>}

此时代码可以通过了 效果如图


完整代码如下

// 这里指定shader的名字,不要求跟文件名保持一致  /后面 代表shader的显示等级
// 语法 Shader"这里写名字"   固定写法  
Shader"myshader/myshader01"{ 
	// Properties里写属性 (固定写法)
	Properties{
	// 第一个 _color 代表属性的名字 是自定义的
	// ("_color",Color) 里面的字符串是在Inspector面板显示的名字 是自定义的
	// ("_color",Color)   , 后面的Color代表定义的属性 是固定的
	// =(1,1,1,1) 这个()里面设置默认值 R G B A 
	_color("_color",Color)=(1,1,1,1)
	}
	// SubShader 可以有很多个  里面编写的是渲染的代码 利用属性编写一些 控制 渲染出来的效果
	// 为什么创建多个SubShader  因为不同的SubShader可以实现不同的效果 在不同的显卡上运行时需要
	// 比如不同的显卡对应不同的SubShader 好一点的对应 一个SubShader 差一点的对应一个SubShader
	// 1. 显卡运行效果时,从第一个SubShader开始,如果里面的效果都可以实现,那么就使用第一个SubShader
	// 2. 如果这个SubShader满足不了这个显卡的需求,它会自动跳到下一个 如果没有可以实现的会
	// 3. 调用 Fallback"VertexLit" 默认的
	// 一般第一个SubShader是显示效果最好的  第二个比第一个次一点 以此类推 这样会增加shader的适应能力
	SubShader{
    // SubShader 里面必须有一个 Pass块 也可以有多个
    // 一个Pass块代表一个方法 
	Pass{
	// 在这里编写Shader代码
		CGPROGRAM
		// 使用CG语言编写shader代码
		ENDCG
	}
	}
	// 上面的SubShader都不执行的时候 执行Fallback
	// Fallback用来指定一个已经存在了的Shader 
	Fallback"VertexLit"
}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值