首页 > 代码库 > Unity3D ShaderLab Use Properties

Unity3D ShaderLab Use Properties

在上一篇,学会了怎么使用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