Unity3d 在着色器中定义可在代码中使用的变量
我正在自定义着色器中定义一些变量:Unity3d 在着色器中定义可在代码中使用的变量,unity3d,Unity3d,我正在自定义着色器中定义一些变量: _Emiss("emission", Float) = .5 _Albed("albedo", Float) = .9 在这之前一切都很好,但当我尝试在代码中使用变量时: void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Albed; o.Emission = texCUBE
_Emiss("emission", Float) = .5
_Albed("albedo", Float) = .9
在这之前一切都很好,但当我尝试在代码中使用变量时:
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Albed;
o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * _Emiss;
}
我收到一些错误,告诉我没有声明Albed和emis
我做错了什么
以下是完整的着色器:
Shader "Custom/cubemapReflShader" {
Properties {
_MainTex ("Texture", 2D) = "red" {}
_Cube ("Cubemap", CUBE) = "" {}
_Emiss("emission", Float) = .5
_Albed("albedo", Float) = .9
// _RefrColor ("Refraction color", Color) = (.34, .85, .92, 1) // color
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
float3 worldRefl;
};
sampler2D _MainTex;
samplerCUBE _Cube;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * .9;
o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * .5;
}
ENDCG
}
Fallback "Diffuse"
}
你有没有离开酒店
Properties
{
_Emiss("emission", Float) = .5
_Albed("albedo", Float) = .9
}
float _Emiss;
float _Albed;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Albed;
o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * _Emiss;
}
更新
修改OP的完整脚本:
Shader "Custom/cubemapReflShader" {
Properties {
_MainTex ("Texture", 2D) = "red" {}
_Cube ("Cubemap", CUBE) = "" {}
_Emiss("emission", Float) = .5
_Albed("albedo", Float) = .9
}
SubShader {
Tags { "RenderType" = "Opaque" }
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
float3 worldRefl;
};
sampler2D _MainTex;
samplerCUBE _Cube;
// PUT THESE HERE <----------
float _Albed;
float _Emiss;
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb * _Albed;
o.Emission = texCUBE (_Cube, IN.worldRefl).rgb * _Emiss;
}
ENDCG
}
Fallback "Diffuse"
}
Shader“自定义/cubemapReflShader”{
性质{
_MainTex(“纹理”,2D)=“红色”{}
_立方体(“立方体映射”,立方体)=“{}”
_排放量(“排放量”,浮动)=.5
_反照率(“反照率”,浮动)=.9
}
子阴影{
标记{“RenderType”=“不透明”}
CGP程序
#布拉格面浪朗伯
结构输入{
浮动2 uv_MainTex;
浮动3世界refl;
};
取样器2D_MainTex;
取样器立方体_立方体;
//把这些放在这里,我已经在post@BadescuAlexandru?根据您在帖子中添加的着色器,您没有添加我在示例中包含的浮动。请参阅我的更新。我尝试了变量声明(我没有将包含声明变量的着色器的代码放入,因为它不起作用).现在可以了。我在subshader之外添加了变量。虽然它是全局性的,但是你的代码非常好用!