查看: 935|回复: 0
打印 上一主题 下一主题

Surface Shader的表面结构能不能修改?

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52352
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-5-27 03:11:18 |只看该作者 |倒序浏览
表面着色器(Surface Shader)的标准输出结构是这样的:

struct SurfaceOutput {
    half3 Albedo;       //反射率
    half3 Normal;       //法线
    half3 Emission;     //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光
    half Specular;      //镜面
    half Gloss;         //光泽
    half Alpha;         //透明
};


请问,这个表面结构能不能修改?

比如我现在要用的材质不需要去计算Gloss,Alpha,Specular等等,我只需要Albedo,Normal。



我直接删掉的话编译器会报错。

代码如下:




Shader "xindiban" {

     Properties {
          _Color ("Main Color", Color) = (1,1,1,1)
          _MainTex ("Diffuse (RGB) Alpha (A)", 2D) = "white" {}
          _SpecularTex ("Specular (R) Gloss (G) Anisotropic Mask (B)", 2D) = "gray" {}
      }

      SubShader{

          Tags { "RenderType" = "transparent" }

          CGPROGRAM

              struct SurfaceOutputAniso {
                  fixed3 Albedo;
                  fixed3 Normal;
                 fixed4 AnisoDir;
                  fixed3 Emission;
                  half Specular;
                  fixed Gloss;
                  fixed Alpha;
              };


              inline fixed4 LightingAniso (SurfaceOutputAniso s, fixed3 lightDir, fixed3 viewDir, fixed atten)
              {
                 fixed4 c;
                 c.rgb = _LightColor0.rgb;
                 c.a = 1;
                 return c;
              }
              #pragma surface surf Aniso
              #pragma target 3.0

              struct Input
              {
                  float2 uv_MainTex;
              };

              sampler2D _MainTex, _SpecularTex;
              void surf (Input IN, inout SurfaceOutputAniso o)
              {
                 fixed4 albedo = tex2D(_MainTex, IN.uv_MainTex);
                  o.Albedo = albedo.rgb;
                  o.Alpha  = albedo.a;
                  o.Normal.z = 0;
                  o.Normal.x = 0;
                  o.Normal.y = 0;
              }
          ENDCG
      }

      FallBack "Transparent/Cutout/VertexLit"

}




红色部分我如果加上去,那么着色器可以通过编译,如果删掉,就会报错。


问题是我的这个shader不需要去对红色部分的数据进行什么计算。



还是说我如果不去管它的话就跟没加一样的?  它跟内置的lambert光照模式有区别么? 我不去计算的话。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-24 00:09 , Processed in 0.087177 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部