CG——blender程序纹理

CG——blender程序纹理,第1张

blender的纹理节点就那么几个

noise / voronior / wave / Musgrave / magic...以及我个人很少用的 brick checker~

what??blender你逗我呢???人家 C4D 光是 noise 那么多种变化都超过你的纹理数量了~你让我们怎么用???

事实上

blender 看似寥寥几个纹理,其实可以组合出无穷无尽的变化。

第一个,我们首先要了解的是

颜色无穷尽,纹理无穷尽

blender 的 cycles 渲染器中,

我们有一个 texture coordinate 节点

可以用于控制纹理的映射方式。

如果把这个节点的各个出口链接上 emission 节点,再 链接 output(此处强烈推荐开启 “node wrangler” 插件)

就会看到一些很丑的渐变色。

就是纹理无穷尽的秘密 —— cycles(事实上,是绝大多数渲染器) 把所有的映射信息都以颜色的方式,储存在节点当中。

所以当我们改变颜色,就可以改变纹理的映射。

OK~自然知道了这个 “秘密” 那就来试试看吧。

把一个 noise 链接到 noise 上 会怎么样?

嘶~(黑人问号脸~)似乎跟提高 noise 的 distortion 没什么区别啊???

别灰心,再试试看~把作为控制映射的 noise 节点(就是第一个noise)节点的 detail 提到最大试试看?

同样是扭曲~我这里可以提供更丰富的细节是吧?除此以外,我还能通过 scale distortion 等来控制扭曲的大小,以及双重扭曲。

ok,开始制作程序纹理木桌。

我希望这一张木桌有很紧密细腻的竖纹。

一开始我试着用这个 wave 解决。加点 distortion 加点 detail 。。。

结果就是丑到没法看~

接下来我试着用一个拉伸的 noise 作为映射坐标链接到 wave 上

效果不错~

可是单纯这样的纹理也太过单调。

我想加一点年轮木纹在里面。如下图

利用一个拉伸的 voronoi 链接到 wave 即可得到拉伸的木纹(这里为了大家能够看得清楚,我减小了拉伸数值,事实上,我的拉伸更强)

什么?你问我中间的一个 colorramp 有什么用????

记住 颜色无穷尽,纹理无穷尽

在调节中间的 colorramp 。可以在不影响 voronoi 数量的情况下,控制每一个 voronoi 的大小

在不影响年轮数量的情况下,控制每一个年轮的大小。

但是。。。。这个年轮怎么这么干净啊哈???人家真实的年轮可是张酱紫的啊?

想想~我们刚刚试一下什么纹理作为坐标进行映射会造成扭曲?

noise 对不对 ??

在 voronoi 的基础上,mix 一个 noise

对不对?这就是一个扭曲的木纹了~

抱歉,我想再重申一遍

颜色无穷尽,纹理无穷尽~~!!

不要被 “一个纹理链接另一个纹理” 这种思路限制死了。

我只要它的年轮木纹,

我们所有的木纹位置都是基于前面的 voronoi 生成的

所以

我们可以用前面的 voronoi 作为遮罩提取年轮。

回头这个年轮叠在刚刚做出来的木纹上就ok了~

接下来做木桌的划痕污渍~

先来几个

高强度拉伸

不同旋转角度

高密度的

noise

然后给他们分别加上 colorramp 修剪掉大部分的黑色

只留下寥寥几条黑色

然后把他们 multi 在一起

然后分别用一点点noise 和一点点 wave 做污渍,

也是 multi 在一起

再把污渍划痕 multi 再一起

叠在刚刚做好的纹理上,

你的桌子就做好~~~

场景中其他事物,我也是以这样的方法

做一下纹理污渍上去,如下图

顺便说一下。

在金属材质中

最影响质感的 其实是 roughness

其次才是 bump(如果你有bump 的话)

2018-04-19

运行效果:

测试图像:

颜色,文理形状特征比较后的结果,从最相似的往下排,第一个与测试图像最相似:

纹理特征提取程序:

function T =coocurrence(Image)

Color= imread(Image)

Gray=rgb2gray(Color)

[M,N] = size(Gray)

%为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级

for i = 1:M

  for j = 1:N

      for n = 1:256/16

          if (n-1)*16<=Gray(i,j)&Gray(i,j)<=(n-1)*16+15

              Gray(i,j) = n-1

          end

      end

  end

end

%计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135

P = zeros(16,16,4)

for m = 1:16

  for n = 1:16

      for i = 1:M

          for j = 1:N

              if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1

                  P(m,n,1) = P(m,n,1)+1

                  P(n,m,1) = P(m,n,1)

              end

              if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1

                  P(m,n,2) = P(m,n,2)+1

                  P(n,m,2) = P(m,n,2)

              end

              if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1

                  P(m,n,3) = P(m,n,3)+1

                  P(n,m,3) = P(m,n,3)

              end

              if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1

                  P(m,n,4) = P(m,n,4)+1

                  P(n,m,4) = P(m,n,4)

              end

          end

      end

      if m==n

          P(m,n,:) = P(m,n,:)*2

      end

  end

end

% 对共生矩阵归一化

for n = 1:4

  P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)))

end

%对共生矩阵计算能量、熵、惯性矩、相关性4个纹理参数

H = zeros(1,4)

I = H

Ux = H     Uy = H

deltaX= H deltaY = H

C =H

for n = 1:4

  E(n) = sum(sum(P(:,:,n).^2))%%能量

  for i = 1:16

      for j = 1:16

          if P(i,j,n)~=0

              H(n) = -P(i,j,n)*log(P(i,j,n))+H(n)%%熵

          end

          I(n) = (i-j)^2*P(i,j,n)+I(n) %%惯性矩

       

          Ux(n) = i*P(i,j,n)+Ux(n)%相关性中μx

          Uy(n) = j*P(i,j,n)+Uy(n)%相关性中μy

      end

  end

end

for n = 1:4

  for i = 1:16

      for j = 1:16

          deltaX(n) = (i-Ux(n))^2*P(i,j,n)+deltaX(n)%相关性中σx

          deltaY(n) = (j-Uy(n))^2*P(i,j,n)+deltaY(n)%相关性中σy

          C(n) = i*j*P(i,j,n)+C(n)         

      end

  end

  C(n) = (C(n)-Ux(n)*Uy(n))/deltaX(n)/deltaY(n)%相关性

end

%求能量、熵、惯性矩、相关性的均值和标准差作为最终8维纹理特征

a1 = mean(E)

b1 = sqrt(cov(E))

a2 = mean(H)

b2 = sqrt(cov(H))

a3 = mean(I)

b3 = sqrt(cov(I))

a4 = mean(C)

b4 = sqrt(cov(C))

T=[a1,a2,a3,a4,b1,b2,b3,b4]

T=T/sum(T)

图像匹配检索程序:

function [Sorted, ISorted,nResults,files]=searchImage(imageName, modelName)

% 找到最相近的图像

[Sorted, ISorted] = sort(Similarity)

Sorted=Sorted/sum(Sorted)

switch similaritymesure>Sorted(Nfiles)

  case 1

      nResults=Nfiles

      msgbox(['调节相似度过大,请重新定值,最大值为' num2str(Sorted(Nfiles))])

   

  case 0

for i=1:Nfiles

 if Sorted(i)>=similaritymesure

      nResults=i

      break

  end

end

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11209134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存