Dasar warna kustom
Menggunakan Pipa Render Universal

Visualizing vertex data

Contoh ini shadersProgram yang berjalan di GPU. More info
Lihat di Glossary
untuk Built-in Render PipelineRangkaian operasi yang mengambil isi dari Adegan, dan menampilkannya di layar. Unity memungkinkan Anda memilih dari pipa render yang dibangun sebelumnya, atau menulis sendiri. More info
Lihat di Glossary
menunjukkan berbagai cara visualisasi data vertex.

Untuk informasi tentang naungan menulis, lihat Menu Menu.

Visualisasi UV

Contoh berikut naungan memvisualisasikan set pertama UV dari meshGrafik utama primitif Unity. Mesh membuat sebagian besar dunia 3D Anda. Unity mendukung mesh poligon triangulat atau Quadrangulasi. Nurbs, Nurms, permukaan Subdiv harus dikonversi ke poligon. More info
Lihat di Glossary
. Naungan ini berguna untuk debugging koordinat.

Kode mendefinisikan sebuah struct yang disebut appdata sebagai input vertex shaderProgram yang berjalan pada setiap simpul model 3D ketika model sedang diberikan. More info
Lihat di Glossary
. Struktur ini mengambil posisi simpul dan koordinat tekstur pertama sebagai inputnya.

Shader "Debug/UV 1" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
            #include "UnityCG.cginc"

        // vertex input: position, UV
        struct appdata {
            float4 vertex : POSITION;
            float4 texcoord : TEXCOORD0;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 uv : TEXCOORD0;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex);
            o.uv = float4( v.texcoord.xy, 0, 0 );
            return o;
        }
        
        half4 frag( v2f i ) : SV_Target {
            half4 c = frac( i.uv );
            if (any(saturate(i.uv) - i.uv))
                c.b = 0.5;
            return c;
        }
        ENDCG
    }
}
}

Di sini, koordinat UV divisualisasikan sebagai warna merah dan hijau, sementara warna biru tambahan telah diterapkan untuk mengkoordinasikan di luar kisaran 0 hingga 1:

Debug UV1 shader applied to a torus knot model
Debug UV1 naungan diterapkan untuk model simpul torus

Variasi ini pada naungan yang sama memvisualisasikan set UV kedua:

Shader "Debug/UV 2" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
            #include "UnityCG.cginc"

        // vertex input: position, second UV
        struct appdata {
            float4 vertex : POSITION;
            float4 texcoord1 : TEXCOORD1;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 uv : TEXCOORD0;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.uv = float4( v.texcoord1.xy, 0, 0 );
            return o;
        }
        
        half4 frag( v2f i ) : SV_Target {
            half4 c = frac( i.uv );
            if (any(saturate(i.uv) - i.uv))
                c.b = 0.5;
            return c;
        }
        ENDCG
    }
}
}

Visualisasi warna simpul

Naungan berikut menggunakan posisi simpul dan warna per-vertex sebagai input naungan simpul (didefinisikan dalam struktur appdata).

Shader "Debug/Vertex color" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, color
        struct appdata {
            float4 vertex : POSITION;
            fixed4 color : COLOR;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color = v.color;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Colors shader applied to a torus knot model that has illumination baked into colors
Warna Debug warna naungan diterapkan untuk model simpul torus yang memiliki pencahayaan dipanggang menjadi warna

Mengvisualisasikan normal

Naungan berikut menggunakan posisi simpul dan normal sebagai input naungan simpul (didefinisikan dalam struktur appdata). Komponen XY & Z normal divisualisasikan sebagai warna RGB. Karena komponen normal berada di kisaran 1 hingga 1, kami mengukur dan membimbing mereka sehingga warna output dapat ditampilkan dalam kisaran 0 hingga 1.

Shader "Debug/Normals" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, normal
        struct appdata {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color.xyz = v.normal * 0.5 + 0.5;
            o.color.w = 1.0;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Normals shader applied to a torus knot model. You can see that the model has hard shading edges.
Debug Normals shader diterapkan pada model simpul torus. Anda dapat melihat bahwa model memiliki tepi bercukur keras.

Visualisasi tangents dan binormal

Tangent dan binormal vektor digunakan untuk pemetaan normal. Dalam Unity hanya vektor tangen disimpan dalam simpul, dan binormal berasal dari nilai normal dan tangen.

Naungan berikut menggunakan posisi simpul dan tangent sebagai input naungan simpul (didefinisikan dalam struktur appdata). Komponen x,y dan z Tangent divisualkan sebagai warna RGB. Karena komponen normal berada di kisaran -1 hingga 1, kami meningkatkan dan membimbing mereka sehingga warna output berada dalam kisaran 0 hingga 1.

Shader "Debug/Tangents" {
SubShader {
    Pass {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, tangent
        struct appdata {
            float4 vertex : POSITION;
            float4 tangent : TANGENT;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            fixed4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            o.color = v.tangent * 0.5 + 0.5;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Tangents shader applied to a torus knot model.
Debug Tangents shader diterapkan pada model simpul torus.

Naungan berikut memvisualisasikan gigitan. Ini menggunakan posisi simpul, nilai normal dan tangen sebagai input simpul. Bitangent (kadang kali disebut binormal) dihitung dari nilai normal dan tangen. Perlu ditingkatkan dan bias ke dalam kisaran 0 hingga 1.

Shader "Debug/Bitangents" {
SubShader {
    Pass {
        Fog { Mode Off }
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        // vertex input: position, normal, tangent
        struct appdata {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
            float4 tangent : TANGENT;
        };

        struct v2f {
            float4 pos : SV_POSITION;
            float4 color : COLOR;
        };
        
        v2f vert (appdata v) {
            v2f o;
            o.pos = UnityObjectToClipPos(v.vertex );
            // calculate bitangent
            float3 bitangent = cross( v.normal, v.tangent.xyz ) * v.tangent.w;
            o.color.xyz = bitangent * 0.5 + 0.5;
            o.color.w = 1.0;
            return o;
        }
        
        fixed4 frag (v2f i) : SV_Target { return i.color; }
        ENDCG
    }
}
}
Debug Bitangents shader applied to a torus knot model.
Debug Bitangents shader diterapkan pada model simpul torus.
Dasar warna kustom
Menggunakan Pipa Render Universal