0

カスタムシェーダーでいくつかの変数を定義しています:

 _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と_Emissが宣言されていないというエラーが表示されます。

私は何が間違っているのですか?

これが完全なシェーダーです:

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"
}
4

1 に答える 1

1

プロパティの外でシェーダーに宣言しましたか?

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"
}
于 2013-01-24T19:11:21.603 に答える