PISCOnoob

导航

Detailed Texture/Splatting Texture

写在前面:

本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。

由于本人水平有限难免出现错误,还请评论区指出,多多指教。

部分图元和素材来源于网络,如有侵权请联系本人删除。

参考资料与链接会在文章末尾贴出。

=======================================================================

之前有介绍过我们可以用lerp混合两张纹理,考虑如果混合地形纹理会怎么样?

这里我混合了草地和石头的两种纹理,显然边缘太实太假。我们换一张渐变的权重纹理:

过渡变虚了比之前好一丢丢。现在我们试下去cover整个terrain:

假如这是一个简单的贴图感觉还好,但是假如贴在了4km x 4km之类的大地形上会感觉很不协调很重复,那我们调整tilling和offset试试

这样比例比较正常但远看仍然比较重复。

有同学会问,那我用大一点的纹理去cover比如4096x4096纹理去cover 4km x 4km地形,算下来1个像素的颜色cover一平方米的地形,也就是一种颜色代表一平方米的地形,仍然是不理想且占用很大的memory。

为了看上去不重复我们需要混合多种地形纹理,且最好每种地形有不同的tilling和offset,也就是我们开头所示范的lerp方法,但有个问题就是只能混合两种,太少了,有没有办法多一点呢?

我们知道一张纹理有RGBA四个通道,假如我们用一张RGBA纹理四个通道分别带别四种纹理的分布位置,不就可以混合四种不同地形纹理了吗?

R + G + B + A = 1

四个通道加起来应该不超过1,由于这张mask是手工画的实际上可能会有超过1,结果会比预想的要亮:

因此我们

那么实际上我们加多一个x(可正可负)

R + G + B + A + x = 1

x = 1-(R + G + B + A )则为负,加到最终结果可压暗回正常。其次,可以看成是第五个通道,也就是说可以有第五种地形纹理。

       float4 DetailedTexture(sampler2D tex,float4 st,float2 uv)
            {
                uv = uv * st.xy + st.zw;
                float4 o = tex2D(tex,uv);
                return o;
            }

            float4 frag (v2f i) : SV_Target
            {              
                float2 uv = i.uv;
                float4 t0 =DetailedTexture(_tex0,_tex0_ST,uv);
                float4 t1 =DetailedTexture(_tex1,_tex1_ST,uv); 
                float4 t2 =DetailedTexture(_tex2,_tex2_ST,uv);
                float4 t3 =DetailedTexture(_tex3,_tex3_ST,uv);
                float4 t4 =DetailedTexture(_tex4,_tex4_ST,uv);

                float4 mask = tex2D(_texMask,uv);
                float parity = 1 - mask.r - mask.g - mask.b - mask.a;

                float4 finalCol = t0 * mask.r 
                                + t1 * mask.g
                                + t2 * mask.b
                                + t3 * mask.a;
                                + t4 * parity;
                
                return finalCol;
            }

 

 

而且我们可以每一种纹理设置不同的tilling offset,这样重复度便会大大减小。

这种方法被叫做detailed texture或splatting texture。

当然这只是一个简单的texture technique,距离做出漂亮的地形还是有很长的距离的。

 

参考资料:

1.

posted on 2022-11-01 14:15  PISCOnoob  阅读(22)  评论(0编辑  收藏  举报