Customise Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorised as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.

No cookies to display.

[ad_1]

Properly,

I am a beginner with shaders, I am simply making an attempt to color a mesh relying on the vertex attribute handed with one or one other texture.

The thought is to realize this, for instance:

...

For this, I’ve been studying some documentation.

So, if I perceive high-quality, I want a vertex subshader with the next construction:

        struct Enter
        {
            float2 uv_MainTex;
            float arrayIndex;
        };

Then go its info from the vert out parameter of sort Enter, for use within the surf shader as an Enter IN param:

        void vert(inout appdata_full v, out Enter o)
        {
            o.uv_MainTex = v.texcoord.xy;
            o.arrayIndex = v.texcoord.z;
        }

        void surf(Enter IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = UNITY_SAMPLE_TEX2DARRAY(_Top, float3(IN.uv_MainTex, IN.arrayIndex)) * _Color;
            o.Albedo = c.rgb;

            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }

The complete code of the shader:

Shader "Customized/z3nth10n/MultiTriplanar"
{
    Properties
    {
        _Top("Prime Foremost Texture", 2DArray) = "" { }
        _Color("Colour", Colour) = (1,1,1,1)
        _Glossiness("Smoothness", Vary(0,1)) = 0.5
        _Metallic("Metallic", Vary(0,1)) = 0.0
        _ZOffset("Z Buffer Offset", Float) = 0
    }
    
    SubShader
    {
        Tags { "RenderType" = "Opaque" }
        LOD 200
        Offset[_ZOffset],[_ZOffset]

            CGPROGRAM
        #pragma floor surf Commonplace fullforwardshadows vertex:vert
        #pragma vertex vert
        #pragma require 2darray

        struct Enter
        {
            float2 uv_MainTex;
            float arrayIndex;
        };

        UNITY_DECLARE_TEX2DARRAY(_Top);

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        void vert(inout appdata_full v, out Enter o)
        {
            o.uv_MainTex = v.texcoord.xy;
            o.arrayIndex = v.texcoord.z;
        }

        void surf(Enter IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = UNITY_SAMPLE_TEX2DARRAY(_Top, float3(IN.uv_MainTex, IN.arrayIndex)) * _Color;
            o.Albedo = c.rgb;

            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
        FallBack "Diffuse"
}

That is the total challenge: https://drive.google.com/file/d/1wJ9QyvkSA_rBAXfN1rFowDpWY5EhqEDV/view?usp=sharing

When you open the Customized/z3nth10n/MultiTriplanar shader you’ll discover that there’s extra code, I wish to obtain tri-planar implementation with NativeArrays and VertexAttributes later, however now I am specializing in this half.

As you may see the mesh is exhibiting like this:

...

It has no tiling and any info has handed by the VertexAttribute Mesh Knowledge Buffers.

Additionally, there may be my implementation in C# to point out you ways I go the vertex information to the mesh buffers:

utilizing System.Linq;
utilizing System.Runtime.InteropServices;
utilizing UnityEngine;
utilizing UnityEngine.Rendering;

public class PlaneVerticesTest : MonoBehaviour
{
    [StructLayout(LayoutKind.Sequential)]
    non-public struct BiomeVertexLayout
    {
        public Vector3 texcoord;
    }

    public Texture2DArray texArray;

    // Begin is named earlier than the primary body replace
    non-public void Begin()
    {
        //var texArray = Sources.Load<Texture2DArray>("TextureArrays/Biome1DiffuseTextureArray");
        var textureCount = texArray.depth;

        var mesh = GetComponent<MeshFilter>().mesh;

        Debug.Log(SystemInfo.SupportsVertexAttributeFormat(VertexAttributeFormat.Float32, 4));

        var format = new[]
        {
            new VertexAttributeDescriptor(VertexAttribute.TexCoord0) //, VertexAttributeFormat.Float32, 4)
        };
        mesh.SetVertexBufferParams(mesh.vertexCount, format);

        var information = Enumerable.Vary(0, mesh.vertexCount).Choose(i => new Vector3(mesh.uv[i].x, mesh.uv[i].y, i % textureCount)).ToArray();
        mesh.SetVertexBufferData(information, 0, 0, mesh.vertexCount);
    }

    // Replace is named as soon as per body
    non-public void Replace()
    {
    }
}

As you may see I am utilizing var information = Enumerable.Vary(0, mesh.vertexCount).Choose(i => new Vector3(mesh.uv[i].x, mesh.uv[i].y, i % textureCount)).ToArray();

That implies that per every vertex index, I am simply passing the identical arrayIndex to the shader Enter object (treating the textureCount half with a modulus operator).

Can anybody give me some steerage on this?

[ad_2]

Leave a Reply

Your email address will not be published. Required fields are marked *