码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D ShaderLab Use Properties

时间:2015-01-05 21:45:27      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

在上一篇,学会了怎么使用ShaderLab 语法:Properties,这一次,我们将会使用属性值点亮材质球。

1Delete>sampler2D _MainTex;

21行位置Add>

float4 _EmissiveColor;

float4 _AmbientColor;

float _MySliderValue;

以上3个变量都要和Properties中申明的书写一致,保证值得正确引用匹配,此处一定要用复制。

接下来,在surf中使用这些变量传递过来的值。

3surf方法稍作修改

void surf (Input IN, inout SurfaceOutput o) {

float4 c;

c=pow((_EmissiveColor+_AmbientColor),_MySliderValue);

o.Albedo = c.rgb;

o.Alpha = c.a;

}

接下来,就可以在gui上直接调整参数

 技术分享

技术分享

此处用到的pow(arg1,arg2)是自带的函数,相当于数学中的求幂power

完成的shader代码应该如下:

 

 

//code start----------------------------------------------------------------------------------

Shader "91YGame/BasicMyDiffuse" {

Properties {

_EmissiveColor("Emissive Color",Color) = (1,1,1,1)

_AmbientColor("Ambient Color",Color)=(1,1,1,1)

_MySliderValue("Slider Value",Range(0,10))=1.3

}

SubShader {

Tags { "RenderType"="Opaque" }

LOD 200

 

CGPROGRAM

#pragma surface surf Lambert

 

float4 _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"

}

 

//code end----------------------------------------------------------------------------------

通过以上的学习,我们可以更深刻的理解到,在Properties中申明一个属性后,就为着色器提供了一种从gui获得属性值的方法。

这些值会传递给SubShader 中的同名变量中,所以我们也就可以在surf中直接使用设置的值,通过上面的步骤,我们完成了最基础的漫反射组件。

Unity3D ShaderLab Use Properties

标签:

原文地址:http://www.cnblogs.com/2Yous/p/4204585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!