北京seo顾问推推蛙网站建设方式优化

 我们前几篇已经完成了渲染部分,现在终于开始做动态绘制功能了
之前使用的是这样一个体积雾的切片图,那么现在要做的就是动态编辑它
 
 首先,让我们简单了解一下它是如何运作的:
 开始绘制画布以渲染目标,并将材质绘制到画布上。
 
 我们先不考虑其他参数,首先关注所需的资源。
 左侧:纹理目标,即画板。
 右侧:需要一个材质,它充当笔刷。
 显而易见,这个过程就是将笔刷的内容绘制到画板上。而这个“纹理目标”最终会被用作体积纹理的切片。
关键问题在于,如何在2D纹理目标上绘制出3D切片呢?之间如何转换?
我们开始一步步制作吧。
新建纹理目标
首先,我们创建一个渲染目标
新建一个渲染目标RT_VolTexture
 
调整细节
设置尺寸和目标格式
 因为是三维的信息量,所以可以比二维图相对大一些
 渲染目标选了单通道16位,其实我觉得8位也够
 
顺便把材质中的图替换为它
 
制作画笔
UVtoVol
新建材质函数 UVtoVol ,用来将UV转为体积
 
新建两个变量
 
将结果相乘,可以看到框内为0-1
 
使用Frac取小数部分,就得到了12个0-1循环的小UV
 
还需要给每个小UV一个编号,放在Z通道
 
使用Floor取整
 
将他除12,可以看到是这样的
 
要用它组成ID
 
将结果除以总数,可以看到从左上角的0开始,每一格都是一个ID
 
RG就相当于体积的XY平面,而ID则相当于Z轴。因此,你只需将结果放入Z通道即可。
别忘了,我们需要这个体积的轴心位于中心位置。
 对结果-0.5 *2 。完整如下:
 
M_VolPaint
新建材质M_VolPaint
 
 它负责把内容绘制到RT贴图,因此改为无关照
 
他作为一个画笔,当然也得是三维的。那么我们做一个最简单的球形画笔
放入刚制作好的函数
 
因为已经把轴居中了,因此直接使用Length(同计算distance0),就得到了一个点距离场切片
 
 
有些跳跃不理解?
以它为例,其意思就是每个像素的XY,距离0,0有多远
因为我们已经居中了,实际就是这样
Distance就是AB两点的距离公式,如果其中一点为0,就可以用Length长度代替
增加变量Radius,控制其半径
 
除以Radius半径,规格化到0-1,并使用Saturate(等同于Clamp0-1),丢弃小于0大于1的值
 
在增加一个Density控制笔刷浓度/密度,一个简单的球形画笔就做好了。
制作绘制蓝图
新建蓝图
新建蓝图 BP_VolPainter
 
新建函数Paint Sphere
 
 
 新建变量 VolTexture ,类型是 纹理渲染目标2D ,并把我们的RT_VolTexture设置为变量默认值
 
 
绘制功能
就像之前演示的一样,但现在我们已经准备好了这两样东西
 渲染目标的Size就是画板的Size,将其连接到ScreenSize
 
别忘了还需要结束:
 
测试
开启编辑器中调用
 
把BP_VolPainter放在场景里,点击PaintSphere执行函数
 
 
 就绘制出来了(我把笔刷的Density调到1,这样明显点)
 
检查渲染目标,已经绘制上了
 
 
基本的原理就是这样,但现在我们只在最中心规规整整画了一个球。
 下一篇继续,如何通过调整笔刷的空间位置和大小,自由的在体积里绘制体积图案



