Shader 绘制特殊图形

绘制基础图形和特殊图形原理上并没有太多差异,特殊图形也只是基础图形的组合以及函数的应用,下面逐个列举:

一、十字形

二、多边形

我们在讲基础图形绘制的时候封装了多边形的绘制:

float polygon(vec2 _st, int num) {
    // Remap the space to -1. to 1.
	_st = _st *2.-1.;
    
	// Angle and radius from the current pixel
    float a = atan(_st.x, _st.y) + PI;
	float r = TWO_PI/float(num);
    
    // Shaping function that modulate the distance
	float d = cos(floor(.5+a/r)*r-a) * length(_st);

	return 1.0-smoothstep(.4,.41,d);
}
复制代码

三、Pattern 图案

绘制 Pattern 图案并不需要在 0~1 坐标系内重复绘制,我们可以利用 fract() 这个函数来把放大后的坐标系拆分成若干个0~1的坐标系。

当我们把图案和奇偶数运动结合在一起,可以制作出不一样的动画效果,首先判断奇偶数的方式有:

y = mod(x,2.0) < 1.0 ? 0. : 1. ;
y = step(1.0, mod(x,2.0));
y = fract(x * .5) > 0.5
复制代码

下面再看看如何制作一些瓷砖类的 pattern,与之前的 pattern 不一样的是,复杂的 pattern 并非单一图形的平铺,它包含了多种不一样的图形重复,而如何在同一个画布内绘制不一样的 pattern,仍然可以借助奇偶数来帮助我们:

首先我们创建一个 2x2 的网格,通过水平和垂直的奇偶数判断,得到了四个 index 不一样的方格:

在方格内我们就可以添加不一样的图案效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Shader outline是一种在渲染物体时给其轮廓添加特殊效果的技术。根据引用\[1\]中的说明,可以通过改进代码来实现轮廓外发光(光晕)效果。而根据引用\[2\]中的介绍,渲染物体轮廓需要多个Pass,其中包括找到轮廓、给边缘着色和非边缘正常纹理采样等步骤。此外,根据引用\[3\]中的原理,描边通道会将模型沿法线方向向外挤出一定的大小,并在膨胀后的模型的内表面贴上轮廓颜色的纹理。最后,可以在原来模型的基础上再绘制一次diffuse等其他通道的计算结果。因此,shader outline可以通过这些步骤和原理来实现。 #### 引用[.reference_title] - *1* *3* [【shaderforge学习笔记】 OutLine(外描边)通道](https://blog.csdn.net/v_xchen_v/article/details/79174987)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [(十)计算机图形学 之 Shader2.0 outline (轮廓 描边)](https://blog.csdn.net/u013774978/article/details/129828229)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值