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