Unity中的自发光材料

时间:2017-10-06 06:25:45

标签: unity3d material light

我试图通过使用来自自己的统一的材料来使球体发光,但是没有光被创造或发射。有什么问题?

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以修改材质中的发射,而无需任何特殊着色器

enter image description here

然后您可以关闭场景中的所有灯光,您仍然可以看到此GameObject

您可以测试它添加一个脚本,使环境光变为深灰色

void Start () {
        Color myColor = new Color32( 0x0B, 0x0A, 0x0A, 0xFF );
        RenderSettings.ambientLight = myColor;
    }

结果会是这样的,一个发出黄光的立方体和一个几乎在黑暗中的立方体

enter image description here

现在,如果你想(我仍然不确定)在场景中照亮其他元素。您应该在右上角选择对象为静态。

enter image description here

结果将是:

enter image description here

如果此解决方案仍不适合您。您可以尝试使用着色器:

  1. 创建一个新的Shader,将其命名为Glow并将其替换为默认代码:
  2. 脚本

    Shader "Glow" {
        Properties {
            _MainTex ("Texture", 2D) = "white" {}
            _Color ("Color", Color) = (1,1,1,1)
            _Glow ("Intensity", Range(0, 3)) = 1
        }
        SubShader {
            Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
            LOD 100
            Cull Off
            ZWrite On
            Blend SrcAlpha OneMinusSrcAlpha
    
            Pass {
                CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
    
                    sampler2D _MainTex;
                    half4 _MainTex_ST;
                    fixed4 _Color;
                    half _Glow;
    
                    struct vertIn {
                        float4 pos : POSITION;
                        half2 tex : TEXCOORD0;
                    };
    
                    struct v2f {
                        float4 pos : SV_POSITION;
                        half2 tex : TEXCOORD0;
                    };
    
                    v2f vert (vertIn v) {
                        v2f o;
                        o.pos = mul(UNITY_MATRIX_MVP, v.pos);
                        o.tex = v.tex * _MainTex_ST.xy + _MainTex_ST.zw;
                        return o;
                    }
    
                    fixed4 frag (v2f f) : SV_Target {
                        fixed4 col = tex2D(_MainTex, f.tex);
                        col *= _Color;
                        col *= _Glow;
                        return col;
                    }
                ENDCG
            }
        }
    }
    
    1. 创建材料

    2. 将其颜色更改为您想要的颜色,并将着色器类型选择为Glow (你在第一步中创造的那个)。同时选择您喜欢的强度。

    3. enter image description here

      结果将是:

      enter image description here

      使用此版本,您无法照亮附近的物体。

      最后,为了获得更好的闪光效果,您可以为相机添加一些效果。

      1. 转到资产 - >导入包 - >效果
      2. 选择主摄像头和添加组件:图像效果 - >布卢姆和 发光 - > Bloom Optimized
      3. 相机中将包含以下组件:

        enter image description here

        将此效果添加到相机的结果将是:

        enter image description here

答案 1 :(得分:0)

问题解决了,只检查场景中的所有对象为静态!

enter image description here