[着色器] 求教shader大佬,或者用过GPU Instancer插件的
未解决
30
楼主悬赏蛮牛币
本帖最后由 稻米熟了吗 于 2019-6-20 21:41 编辑

我想用自己的shader代替它自带的shader,然后实现类似案例里的效果 这是他的shader
[mw_shl_code=csharp,true]Shader "GPUInstancer/ColorVariationShader" {
        Properties {
                _Color ("Color", Color) = (1,1,1,1)
                _MainTex ("Albedo (RGB)", 2D) = "white" {}
                _Glossiness ("Smoothness", Range(0,1)) = 0.5
                _Metallic ("Metallic", Range(0,1)) = 0.0
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200

                CGPROGRAM
#include "UnityCG.cginc"
#include "./../../../Shaders/Include/GPUInstancerInclude.cginc"
#pragma instancing_options procedural:setupGPUI
#pragma multi_compile_instancing
                #pragma surface surf Standard addshadow fullforwardshadows

                #pragma target 3.0

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                };

                half _Glossiness;
                half _Metallic;
                fixed4 _Color;

                #if SHADER_API_D3D11
                #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
                        StructuredBuffer<float4> colorBuffer;
                #endif
                #endif
               
                void surf (Input IN, inout SurfaceOutputStandard o) {
                        float4 col = _Color;

                        #if SHADER_API_D3D11
                        #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
                                        uint index = gpuiTransformationMatrix[unity_InstanceID];
                                        col = colorBuffer[index];
                        #endif
                        #endif

                        // Albedo comes from a texture tinted by color
                        fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * saturate(col);
                        o.Albedo = c.rgb;
                        // Metallic and smoothness come from slider variables
                        o.Metallic = _Metallic;
                        o.Smoothness = _Glossiness;
                        o.Alpha = c.a;
                }

                ENDCG
        }
        FallBack "Standard"
}
[/mw_shl_code]



然后我照着改了一下自己用shaderforge连的一个高亮的shader,想实现每个颜色不同的效果,但是全部实例的颜色始终是一样的然后不停的闪烁,这是我改的shader
[mw_shl_code=csharp,true]Shader "Custom/ligthing" {
    Properties {
        _Color ("Color", Color) = (0.07843138,0.3921569,0.7843137,1)
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
                        #include "UnityCG.cginc"
            #include "./../../../Shaders/Include/GPUInstancerInclude.cginc"
            #pragma multi_compile_instancing
            #pragma instancing_options procedural:setupGPUI
                        //#pragma surface surf Standard fullforwardshadows
            #pragma vertex vert
            #pragma fragment frag
                        //#pragma surface surf Standard fullforwardshadows
            // #define UNITY_PASS_FORWARDBASE
            #pragma multi_compile_fwdbase_fullshadows
            #pragma only_renderers d3d9 d3d11 glcore gles
            #pragma target 3.0
            uniform float4 _Color;

                        #if SHADER_API_D3D11
                     #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
                        StructuredBuffer<float4> colorBuffer;
                    #endif
                    #endif
                        
            struct VertexInput {
                float4 vertex : POSITION;
                                UNITY_VERTEX_INPUT_INSTANCE_ID
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
            };
            VertexOutput vert (VertexInput v) {                           
                VertexOutput o = (VertexOutput)0;        
                                UNITY_SETUP_INSTANCE_ID(v);
                o.pos = UnityObjectToClipPos( v.vertex );
                return o;
            }                        
            float4 frag(VertexOutput i) : COLOR {
////// Lighting:
////// Emissive:
            float4 col = _Color;

                        #if SHADER_API_D3D11
                        #ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
                                        uint index = gpuiTransformationMatrix[unity_InstanceID];
                                        col = colorBuffer[index];
                        #endif
                        #endif
                //float3 emissive = _Color.rgb;
                                float3 emissive = saturate(col).rgb;
                float3 finalColor = emissive;
                return fixed4(finalColor,1);
            }
            ENDCG
        }
    }
    FallBack "Diffuse"

}
[/mw_shl_code]

有没有大佬知道要怎么更改
  • 我来回答
    本帖最后由 稻米熟了吗 于 2019-4-25 18:11 编辑

    有没有大佬呀
    深度不对?