【Unity Shaders】学习笔记之为表面着色器添加属性(四)
来源:互联网 发布:花生壳壳域名怎么用 编辑:程序博客网 时间:2024/06/14 05:57
本章主要参考《Unity Shaders and Effects Cookbook》一书,感谢原书作者提供的学习资料
一、为表面着色器添加属性
着色器的属性在渲染管道过程中是很重要的,因为它们是一个接口可以让使用着色器的美工或用户指定纹理和调整着色器的值。属性可以作为GUI元素暴露在材质的Inspector面板上,而不是单独的编辑器,它提供了可视化的方法供你调整着色器。
二、如何操作
每个Unity着色器都拥有一个内置结构,这些Properties块也是Unity所希望带给你的功能之一。这样做的原因是希望给用户提供一种快捷方式来创建GUI元素并和着色器代码绑定。在Properties块中声明的属性可以在接下来的代码里用于调整值,颜色或者纹理
Unity提供了很多类型让我们在着色器里使用,下表描述了这些类型:
三、在表面着色器中使用属性
1.在Properties行下面添加以下几行代码
_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)_AmbientColor ("Ambient Color", Color) = (1,1,1,1)_MySliderValue ("This is a Slider", Range(0,10)) = 2.5
2.在CGPROGRAM里添加
float4 _EmissiveColor;float4 _AmbientColor;float _MySliderValue;3.完成第二步骤之后,你就可以在着色器里使用属性值了。我们把_EmissiveColor的属性值加到_AmbientColor上,然后把计算结果赋值给o.Albedo。将以下代码加如到surf函数
void surf (Input IN, inout SurfaceOutput o) {float4 c;c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);o.Albedo = c.rgb;<span style="white-space:pre"></span>o.Alpha = c.a;}
4.接下来你可以在材质里修改Emissive和Ambient的颜色值了
Shader "liulongling/BasicDiffuse" {Properties {_EmissiveColor ("Emissive Color", Color) = (1,1,1,1)_AmbientColor ("Ambient Color", Color) = (1,1,1,1)_MySliderValue ("This is a Slider", Range(0,10)) = 2.5}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM#pragma surface surf Lambertfloat4 _EmissiveColor;float4 _AmbientColor;float _MySliderValue;struct Input {float2 uv_MainTex;};void surf (Input IN, inout SurfaceOutput o) {float4 c;c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);o.Albedo = c.rgb;o.Alpha = c.a;}ENDCG} FallBack "Diffuse"}
pow(arg1,arg2)是自带的函数,相当于数学公式中的power(求冥),参数1代表底数,参数2代表指数
下面是材质在 Inspector面板中调整过颜色和饱和度之后的样子
作者:小毛驴,一个游戏人
梦想:世界和平
原文地址:http://blog.csdn.net/liulongling
本博客中未标明转载的文章归作者小毛驴所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
0 0
- 【Unity Shaders】学习笔记之为表面着色器添加属性(四)
- 【Unity Shaders】学习笔记之表面着色器(三)
- Unity Shaders表面着色器
- 【Unity Shaders】学习笔记之固定着色器命令(二)
- 【Unity Shaders】学习笔记之固定着色器命令(二)
- Unity Shaders and Effects Cookbook (1-1) 基本的表面着色器 (Surface Shader)
- Unity3d 表面着色器学习笔记
- 表面着色器笔记
- Unity着色器之: ShaderLab & Fixed Function shaders
- Unity Shader 学习笔记(十三)表面着色器的顶点动画
- 【Unity Shader学习笔记】(一)在表面着色器中控制顶点变换
- Unity Shader 学习笔记(29) 表面着色器(Surface Shader)
- 关于Unity的表面着色器的学习
- 【Unity Shaders】学习笔记之为创建自定义慢反射光照模型(五)
- 【Unity Shaders】学习笔记之为创建Half Lambert光照模型(六)
- Unity学习笔记一 Shaders
- Unity Shader 表面着色器(Surface Shader)
- 【Unity Shaders】学习笔记之Shader简介(一)
- Android中ListView子项margin失效解决办法
- getOutputStream和getWriter互斥问题
- c++
- 给小白的Expressjs4教程
- GEEK编程练习— —格雷码
- 【Unity Shaders】学习笔记之为表面着色器添加属性(四)
- maven dependency scope 含义作用
- Linux下出现error while loading shared libraries,...cannot open shared object file: No such file..
- DWZ整合Kindeditor应用于dialog弹出框
- 使用WakeLock使Android应用程序保持后台唤醒
- QT中QWS含义
- 算法漫谈-查找和排序及数据结构
- mvp模式在android中使用
- Java基础01——下载、安装JDK及配置环境变量