如何使用着色器使我的砖墙看起来更真实并具有一些颜色变化?

问题描述 投票:0回答:1

我正在做的一个项目中有这堵砖墙。我在 Blender 中对墙本身进行了建模:它是一整堆砖块,从一个立方体中伸出一点,这个立方体本来就是“砂浆”。砖块本身有自己的材质,附加了着色器,砂浆也有自己的材质,没有着色器。我附上了一张图片:当前的砖墙

我希望砖块有更多的生命力,并且让砖块不都是一种颜色,这样的东西会很棒:关于我希望墙看起来如何的想法

我只是想要相同的颜色随机变化,但仍然保持它看起来正常(不是超现实,只是正常)。我正在考虑为此使用某种类型的噪音,但老实说,我不知道这是否可行以及如何做到这一点,所以我想我应该来这里寻求一些想法。

我对着色器也非常陌生,有点无知,所以任何和所有的帮助/建议/反馈将不胜感激!预先感谢

这是迄今为止的着色器代码:

Shader "Custom/BrickShader"
{
    Properties
    {
        _BaseColor ("Base Color", Color) = (1,1,1,1)
        _BrickSize ("Brick Size", float) = 0.1
        _BrickSpacing ("Brick Spacing", float) = 0.02
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 sv_Position : SV_POSITION;
                float2 uv : TEXCOORD0;
            };

            float _BrickSize;
            float _BrickSpacing;

            v2f vert (appdata v)
            {
                v2f o;
                o.sv_Position = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // Calculate brick coordinates
                float brickX = floor(i.uv.x / (_BrickSize + _BrickSpacing));
                float brickY = floor(i.uv.y / (_BrickSize + _BrickSpacing));

                // Calculate brick offset within the brick
                float brickOffsetX = frac(i.uv.x / (_BrickSize + _BrickSpacing)) * _BrickSize;
                float brickOffsetY = frac(i.uv.y / (_BrickSize + _BrickSpacing)) * _BrickSize;

                // Simulate brick color using a simple pattern
                fixed4 brickColor = fixed4(0.568, 0.25, 0.21, 1); // Red brick color
                // if (brickOffsetX < _BrickSize * 0.2 || brickOffsetY < _BrickSize * 0.2)
                // {
                //         brickColor *= 0.8; // Darker color for edges
                // }

                return brickColor;
            }
            ENDHLSL
        }
    }
    FallBack "Diffuse"
}
unity-game-engine shader hlsl
1个回答
0
投票

也不精通着色器,但如果你想要简单的东西,你可以摆脱凹凸贴图。找到瓷砖砖墙纹理及其法线贴图,然后检查here了解其余内容。这里还有很多关于凹凸贴图的信息。您可以将具有反照率和法线贴图的材质扔到立方体上,它看起来会很逼真,直到您仔细或从侧面观察它时,您会发现它是伪造的。

© www.soinside.com 2019 - 2024. All rights reserved.