虚幻4渲染编程(程序化纹理篇)【第二卷:UnrealSubstance工具节点搭建---图元】...

我的专栏目录:

小IVan:专题概述及目录​zhuanlan.zhihu.com图标

我们在做程序化纹理的时候,还需要基础图元作为支撑,三角形,圆形等等。Substance在这方面有几大图元生成器节点

v2-52dfc10ed68bc0b7a5fe0c410ef20ff2_b.jpg

第一个节点比较好实现,直接采现成的图即可。后面那两个应该就是实时算的。做后两个那种节点的图形构造有几种思路。(1)构造动态模型,直接draw到RT上 。(2)在PS或者CS中用SDF构造。在这里我先实现后者。前者需要写材质编辑器节点。

SDF的构造可以看我之前的文章,不过下面用的是二维的。

Begin ray marching in unreal engine 4【第三卷:更多图形更复杂的光照】


【1】圆形

圆形比较简单,直接比较距离和半径的值就可以了

v2-187572c84d8bb314daf1d268138670b7_b.jpg
float shape_circle(float2 uv, float r, float2 center)
{
    if(distance(uv, center) <= r)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

【2】矩形

我们在空间中直接定义最大顶点和最小顶点的坐标即可定义一个矩形

v2-4ba9aca6c10aef0530bdf5bddad2fb66_b.jpg
float shape_box(float2 uv, float2 maxpos, float2 minpos)
{
    float2 a = uv - minpos;
    float2 b = uv - maxpos;
    if(a.x >= 0 && a.y >=0 && b.x <= 0 && b.y <=0 )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

调整minpos和maxpos可以改变矩形的形状


【3】三角形

v2-e6bbd3987ce3c9529103b9e2c1b38bc3_b.jpg
float sdTriangle( in float2 p0, in float2 p1, in float2 p2, in float2 p )
{
	float2 e0 = p1 - p0;
	float2 e1 = p2 - p1;
	float2 e2 = p0 - p2;

	float2 v0 = p - p0;
	float2 v1 = p - p1;
	float2 v2 = p - p2;

	float2 pq0 = v0 - e0*clamp( dot(v0,e0)/dot(e0,e0), 0.0, 1.0 );
	float2 pq1 = v1 - e1*clamp( dot(v1,e1)/dot(e1,e1), 0.0, 1.0 );
	float2 pq2 = v2 - e2*clamp( dot(v2,e2)/dot(e2,e2), 0.0, 1.0 );
    
    float s = sign( e0.x*e2.y - e0.y*e2.x );
    float2 d = min( min( float2( dot( pq0, pq0 ), s*(v0.x*e0.y-v0.y*e0.x)),float2( dot( pq1, pq1 ), s*(v1.x*e1.y-v1.y*e1.x) )),float2(dot(pq2, pq2 ), s*(v2.x*e2.y-v2.y*e2.x)));

	if(-sqrt(d.x)*sign(d.y) > 0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

p就是uv,p0,p1,p2是三角形的三个顶点。我们现在有了基本图元就能组合出很多形状了。

v2-d37a5a0265c0bc1b6f35d904d963ad86_b.jpg

Enjoy it !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值