游戏开发; 虚幻4Shader
魁梧的抠脚大汉
游戏开发小青年
展开
-
C++二进制文件读写,以及数据的拼合与还原
要把数据先合并到一个大的buffer里,然后把这个buffer写成二进制文件,然后重新读取这个二进制文件,然后把数据分配还原代码如下:#include <iostream>#include <fstream>#include <vector>using namespace std;int main(){ //Origin Objects vector<int> srcData_01 = { 0, 1, 2, 3, 4, 5 , 6原创 2020-10-01 16:24:05 · 1343 阅读 · 0 评论 -
通过FGenericRHIGPUFence来减少从GPU回读数据的阻塞
Unreal提供了一个小工具类来帮助GPU回读数据原创 2019-11-01 20:44:58 · 710 阅读 · 0 评论 -
【材质编辑器全解第三卷】超级CustomNode使用实例
先上效果吧:可以看到我的众多模型只使用一个CustomNode就实现了这个CustomNode是上次我们魔改的超级CustomNode,这个用来实现Ray Marching效果十分方便,上一节的传送门:点击打开链接CustomNode的代码如下:#define AA 1 // make this 1 is your machine is too slow//----------------...原创 2018-05-09 12:32:35 · 2767 阅读 · 0 评论 -
虚幻4渲染编程【第一卷:虚幻自身的延迟渲染管线】
因为虚幻的架构,我们美术做一个效果只能使用材质编辑器。这让我很不舒服,稍微想做点特别点的效果就没办法了。我又是天天在公司用自研引擎的人,这种限制让人很不舒服。所以我开始修改了虚幻的shadingmode之类的。但是感觉自己还是不满足,想调个多pass虚幻都不让我做,所以我打算加个pass什么的。但是虚幻加pass可不像unity那么简单,只有操刀去改源码了。然后我又反观了一下我前几篇博客,...原创 2018-04-23 00:38:06 · 5417 阅读 · 1 评论 -
3天学会MaxScript教程之(第二三天:编写一个高级Max顶点动画back到Texture的插件)
3天学会MaxScrip的第一天在这里:点击打开链接有了第一天的知识和初步认识,我们就来制作一个高级点的脚本插件吧。max脚本其实非常简单,主要知道语法就可以了,逻辑难度几乎为零。首先来看这个插件的效果做动画其实有很多种方式,除了骨骼,目标变形,物理解算外,还有BackToTextureAnimation。其实这个和GPUSkin原理类似。这个插件的原理是将所有顶点的位置数据拍成一列,然后再把每帧...原创 2018-03-31 13:00:05 · 9989 阅读 · 5 评论 -
【材质编辑器全解第二卷】UnrealEngine4的材质编辑器中实现函数调用
虚幻4的CustomNode允许我们再材质编辑器里直接进行shader代码的编写(它的原理可以看我之前的文章)但是它有一个缺陷,那就是无法进行函数调用。下面我们就来实现一个可以进行函数调用的CustomNode。先看一下我的实现效果吧:第一个为主函数,后面的为我们自己定义的可调用函数。那么现在就来一步一步修改引擎,来做出我们这个自定义的Cutom节点吧。首先建两个文件Engine/Classes/...原创 2018-03-15 14:40:12 · 3011 阅读 · 0 评论 -
技术美术图形交流群
如果你对虚幻4底层图形感兴趣,欢迎加入技术美术图形交流群大家一起交流技术。加入前我希望你是:【1】对渲染管线图形学有一定了解。【2】对虚幻4或者unity有一定了解。至少两年经验。如果您是初学者,可能这里不太适合您。群号是:192946459...原创 2018-03-15 10:06:10 · 3986 阅读 · 0 评论 -
【材质编辑器全解第一卷】Unity,UnrealEngine4等各大引擎材质编辑器原理详解
现在是2018年,材质编辑器现在在各大引擎,3D软件都非常普遍。那么它们是如何工作的呢。 其本质是,一个可视化节点就包含一段HLSL或者cg或者OpenGL代码,通过我们的“连线”将HLSL代码拼接出来。最后会出一张shader文件。对于早期的Unity和大部分3D软件的节点化材质编辑器来说,它们的shader代码比较简单,总共shader代码加起来可能也不会超过2千行,对于这一类的...原创 2018-03-14 22:20:03 · 2794 阅读 · 0 评论 -
虚幻4修改引擎渲染管线解析【第一卷】通过添加自定义ShadingModle实现卡通着色来熟悉渲染管线
读过我前面一些博客的朋友对虚幻4的渲染流程有了一些大致的了解之后,那么我们现在可以开始着手开始修改虚幻4引擎了·。我们有些时候需要实现某些效果,就需要动手自己改引擎了。这是customnode或者是纯material无法做到的。有些人可能就要反驳了,“我纯用材质编辑器也能实现卡通材质啊”。但是无法忽略的一点是:在材质编辑器里制作的卡通材质无法接受光影。这时候有些人就想出了骚操作,用蓝图自己实现一个...原创 2018-02-14 12:53:01 · 11541 阅读 · 10 评论 -
虚幻4渲染编程【第四卷:虚幻4C++层和Shader层的简单数据通讯】
本章将会在前几张的基础上进行讲解,如果你没看过前几章的话,这里是传送门:https://blog.csdn.net/qq_16756235/article/details/80045758先上效果图如下。我们在虚幻里实现了自己的shader的贴图映射。 经过前几卷的探索,我们现在已经可以通过自己的shader和Draw调用,在一个RenderTarget上绘制东西了。虽然最后还是通过材质编辑...原创 2018-04-25 18:58:18 · 2527 阅读 · 0 评论 -
虚幻4渲染编程【第五卷:虚幻4 高级数据传输UniformBuffer】
前面介绍了一般数据的传输方式,这一卷我们将一起来使用更高级的数据传输方式UniformBuffer。这个问题困扰了我两天,查了很多资料,翻了很多论坛也没找到解决办法。这里要特别感谢一位QQ昵称是“August”的朋友的指点帮助。 第四卷的传送门:https://blog.csdn.net/qq_16756235/article/details/80083722先看下效果吧可以看到这次...原创 2018-04-26 21:08:03 · 2811 阅读 · 0 评论 -
我要搬家啦!!!
感觉这里写专栏看的人比较少,所以我的专栏文章会在知乎上写,平时在这里会写一些随笔我的知乎传送门:虚幻4渲染编程知乎专栏我的知乎专栏目录:https://zhuanlan.zhihu.com/p/36675543我的UnrealShaderToy专栏:https://zhuanlan.zhihu.com/c_188321773...原创 2018-05-12 19:14:00 · 3345 阅读 · 0 评论 -
虚幻4渲染编程【第六卷:虚幻4FTexture ,UVA,RT,Resource这些资源的关系】
为了后续更进一步的研究探索,我们有必要先搞清楚虚幻4代码中的一些资源到底代表了什么。UMaterial:持有逻辑线程相关的材质信息,作为逻辑线程的访问接口,管理其余两个渲染线程的类。FMaterial:负责管理渲染资源的类,渲染资源主要是shadermap的编译等。FMaterialRenderProxy:渲染代理,负责处理渲染的相关操作类。这三个类再加上由FMaterial管理的FMateria...原创 2018-04-28 20:03:16 · 1436 阅读 · 0 评论 -
虚幻4渲染编程【第七卷:虚幻4中的ComputeShader】
Computeshader非常胜任大量的计算,下面我们就在虚幻4中使用ComputeShader。先上效果图吧这是一张纯由ComputeShader计算出来的一张图片,代码来自Shadertoy。我下面的代码是基于我前面章节所写的代码的,想要知道从零是如何开始的,请从第二卷开始看。传送门:虚幻4渲染编程【第二卷】下面我们就用虚幻4的computeshader来生成它首先我们要声明一个Compute...原创 2018-04-29 15:44:46 · 2120 阅读 · 0 评论 -
虚幻4渲染编程【第八卷:ComputeShader与其他Shader的数据通讯】
第七章探索了虚幻的computeshader ,传送门:第七卷,虚幻4中computeshader但是computeshader并不是声明完就完了,我们需要把它计算的结果拿出来使用。大概流程如下:我们可以把computeshader的计算结果在其他着色器中使用:我们把computeShader的计算结果保存在一个UAV中,然后把这个UAV作为一个Texture资源作为其他shader如Pixle的...原创 2018-05-07 20:19:57 · 3058 阅读 · 1 评论 -
Material Capture制作玉石效果
最后的效果:非常节省的算法。下面记录一下Unity的写法,unity版本搞了很久没搞出来,结果最后发现是矩阵顺序乘错了(对unity还是不太熟啊),最后请教了CG-bull大佬,赶快记下小笔记,别忘了!Shader "Unlit/S_MaterialCapture"{ Properties { _MatCapTexure ("MaterialCaptureT...原创 2018-08-04 13:23:38 · 3198 阅读 · 0 评论 -
虚幻4把模型拖入场景后,模型是怎么被渲染出来的流程分析
在我们把模型拖入虚幻4的视口后场景编辑器会调用RendererScene的AddPrimitive函数然后在这个函数种会调用Scene->AddPrimitiveSceneInfo_RenderThread(RHICmdList, PrimitiveSceneInfo);然后会调用FPrimitiveSceneInfo的AddToScene然后会调用Primi...原创 2018-08-14 17:07:15 · 5253 阅读 · 1 评论 -
打光小笔记
游戏里一般用3 point light来打光,分为三部分 full light,key light ,back light主光背光主反光副反光也可以把光源信息烘焙到SH里。补光的能量叠加总和不要超过主光最高亮部的能量的二分之一,上面就有个错误的效果主反光比较难调,下面是正确的主反光效果(请忽略粗糙度的不同):...原创 2018-08-28 20:27:35 · 646 阅读 · 0 评论 -
Unity Billboard shader
billboard在游戏里挺常用的,下面是个unity的billboard shader。在顶点着色器中把顶点旋转到合视角平行首先在tag中加上一句修饰防止billboard被batch掉,这里非常坑,其实billboard算法挺简单的Tags {"DisableBatching" = "True" }然后是顶点着色器的变换//billboard construct floa...原创 2018-11-23 16:29:46 · 2579 阅读 · 1 评论 -
在VSCode中添加自定义文件配色,编写虚幻4shader
VSCode作为脚本编程的神器,我们可以尝试在VSCode里编写shader。不管是unityshaderlab还是虚幻4的shader都很方便。首先去官网下周VScode,下面给哥传送门 https://code.visualstudio.com/,然后在VSCode的插件拓展商店里搜索HLSL安装HLSL高亮插件(呃呃呃感觉上面的都是大家都知道的废话)下面我们开始调整VSC原创 2017-12-29 10:02:43 · 4226 阅读 · 0 评论 -
虚幻4及国内部分引擎的shader架构梳理,虚幻4材质研究。
以下纯属个人经验总结,如有错误,还请斧正。现在的引擎对材质的概念越来越重视。那么材质在传统的shader管线中到底扮演怎样的一个角色呢。下面是我的一个简单梳理:总的来说,材质就是shader管线参数的辅管理者,它管理了shader管线的各个资源——贴图采样器,常量缓冲区数据等等。它会为shader各个管线提供资源支持。当你完成一个材质之后编译。最后出来的其实还是shader代码原创 2017-12-28 11:02:43 · 6235 阅读 · 1 评论 -
虚幻4 渲染探索【1】引擎渲染组件初探
欢迎大家加入虚幻4技术美术 ,图形渲染和各种游戏效果实现学习群。大家一起学习一起讨论。192946459最近在研究虚幻4的渲染组件,我会一一介绍以下几个组件:SceneComponentPrimitiveComponentMeshComponentCustomMeshComponentProcedureMeshComponentCableComponent我们一层一原创 2017-08-16 20:28:59 · 2847 阅读 · 0 评论 -
RenderTarget在虚幻4的应用【2】双RT缓冲制作颜色恢复
想要制作雪地脚印被雪慢慢覆盖的效果,或者想要制作草地被踩后草慢慢复原的效果,除了需要实时绘制路径之外,还需要恢复效果。可以用曲线更新变量的方式,但是如果想使用RT制作上述效果的话,就只能使用RT双缓冲或多缓冲的方式来制作恢复效果了。http://blog.csdn.net/qq_16756235/article/details/75758177 实时绘制路径的帖子我点原创 2017-07-23 19:45:07 · 1455 阅读 · 0 评论 -
虚幻4环境交互【草地扰动】
很多游戏里都有玩家踏上草地后,草地会被扰动的效果,这个效果做好了会增强带入感,国外的很多3A大作都有这些效果。我在虚幻4内做了这个效果的第一版。 因为不是动态的图所以没法展示草被拨开然后慢慢自然波动回去,这里只有一个被拨开的图。首先要明确一点的是,这个效果是在顶点着色器内完成的,虚幻4内从材质向顶点着色器穿值的方式是使用world offset首先草原创 2017-07-18 10:11:56 · 5495 阅读 · 0 评论 -
RenderTarget在虚幻4的应用【1】之用虚幻4表白
RenderTarget实在能做太多地方了。光影,实时绘制,投射,环境交互,流体模拟,在材质中模拟多pass行为(虚幻4.16的时候还无法进行多pass行为)等等。今天简单做了一下实时绘制,我的目标是做环境模拟,如雪地脚印,踩草丛后,草被踩下去然后慢慢恢复。不过做这些之前需要先做实时绘制。在directx或者opengl里面做RT简直就是噩梦,各种资源的绑定解绑,状态的更新十分麻烦原创 2017-07-22 16:46:18 · 7185 阅读 · 0 评论 -
虚幻4高度图转法线
高度图转法线贴图算法是经常需要使用到的。下面是在虚幻4中的实现。当然写成HLSL代码也更好。但是为了快速看到效果,我就用材质节点连了一下。首先这个方法的整体思路是:利用一个像素周围的四个像素保存的高度值来算法线。下面的一串算法是找到一个像素周围的像素,然后采样获取这些像素里面的高度值,然后获取那几个像素位置的向量方向,然后再乘以我们自己定义的高度值缩放获取周围高原创 2017-07-22 12:53:11 · 8235 阅读 · 0 评论 -
判断一个点是否在三角形内
定在右手坐标系中的三角形3点坐标为A,B,C,判断P是否在ABC之内方法1:三个Perplane的方法 设AB,BC,AC边上的垂直平面为Perplane[3],垂直朝向内侧的法向为n[3] 1)先根据任意两边叉出法向N N = AB.CrossProduct(AC);转载 2017-07-21 00:12:39 · 789 阅读 · 0 评论 -
虚幻4shader 初步研究
虚幻4的渲染管线相当复杂,涉及到多个线程。shader的编译上传等也十分特别,虚幻有自己的一套方法。在虚幻中编写shader,给人的第一印象就是那个材质编辑器。这个可视化编辑器是美术的福音,但是对于更想使用代码编写高级点儿的效果的人来说感觉并不是那么好。总感觉编写者和引擎shader之间有一个阻挡者,隔着一层,无法真正触碰到shader。首先我们在材质编辑器里编写的其实并不是shader,只是一片...原创 2017-07-16 11:22:20 · 5144 阅读 · 0 评论 -
虚幻4流体模拟
虚幻4shader上传原创 2017-07-16 10:55:39 · 6496 阅读 · 3 评论 -
RenderTarget在虚幻4的应用【3】路径消褪
把前面两个技术拼凑起来就能出现路径消褪效果了http://blog.csdn.net/qq_16756235/article/details/75758177http://blog.csdn.net/qq_16756235/article/details/75947693离积雪脚印和草丛踩踏波动只差一步之遥了。原创 2017-07-24 12:31:14 · 1675 阅读 · 0 评论 -
地形材质总结
我简单做了一下地形材质,我在这里混了12种不同的材质,才开始做,可能具体效果还需要调整。首先由于寄存器限制,一个材质里面最多使用16张不同的贴图,我们可以把信息集中化,比如专门拿一张贴图保存草,石头,泥土,沙子的高光或者光滑度什么的,分别把这些信息存在RGB几个通道里面。尽量复用,这样就可以给地形做很多个weight层。算法尽量节省干净,不然地形材质会无法显示。原创 2017-08-01 18:35:25 · 2262 阅读 · 0 评论 -
虚幻4多材质混合制作破损墙面
先上一个GIF吧:砖墙由两个材质层,用一个alpha控制,这个alpha是用顶点色和一张Mask贴图混合制作而成,顶点色作为墙面mask贴图的位置,mask贴图作为限制顶点色衰减的控制器。如果不做限定的话,定点色如下:如果不做限定根本无法做出自然稍微锐利的边缘mask。做好alpha之后剩下一步就是计算两个材质边缘的重叠厚度:把上一步计算得到的mask当成高原创 2017-11-02 18:54:18 · 4871 阅读 · 0 评论 -
两个重叠模型模拟双pass,顺便解决透明乱序问题
虚幻4除了能用rendertarget模拟双pass行为,还可以用两个模型来模拟双pass。用两个一模一样的模型,第一个模型渲染customdepth 然后disable rendering in main pass 并且enable dinamic shadow,这样就能有第一层深度和光照信息。然后将第二个模型使用第一个模型在prepass中遗留下来的一些渲染信息,就可以做到上图所示的效果。在卡原创 2017-08-03 12:43:09 · 19255 阅读 · 2 评论 -
水波折射
游戏里面常常用一个面片的方式来做水体,但是用面片做水体的话,由于游戏里面用的不是RayTracing的方式,所以,如果从水面上方看水面下方的物体,并不会随着水的起伏而发生折射。所以干脆换一种思路,让水体下面的物体跟着水的波动而抖动,玩家在从上往下看的时候就会误以为是发生了折射(虽然这种方式感觉有点不是“光明磊落”,但是为了游戏的运行效率,有时候也是没办法的事情)在离岸比较远的水中央原创 2017-09-30 13:43:14 · 1602 阅读 · 1 评论 -
HLSL 总结
先把表列出来,后面我再详细解释个别的NameSyntaxDescriptionabsabs(x)返回x的绝对值。对x的每个元素都会独立计算一次。Absolute value (per component).acosacos(x)返回x的反余弦值。对x的每个元素都会原创 2017-08-24 14:38:04 · 2275 阅读 · 0 评论 -
虚幻4中实现简单的raymarch
以前一直都是在Directx或者UnityShaderLab里做raymarch,最近在研究虚幻4的Shader所以在虚幻4里简单实现了一下这个。我的step数量调得很低。刚开始其实不好下手,虚幻的渲染架构过于复杂,高度封装,我们无法直接像unityshaderlab一样对shader进行直接编写,如果想直接自己上传shader而绕过虚幻的材质系统,那么成本将是高昂的。首先先简单捋一下原创 2017-07-16 10:16:14 · 4229 阅读 · 3 评论 -
虚幻4中的程序化生成【1】程序化生成河流。
给自己立了很多flag,由于时间原因很多系列都还在写,算是循序渐进的总结。在程序化生成系列里,将会有如下记述:【1】程序化生成河流主要内容有@1 shader的自动调整(如河流的深浅,河水的波涛程度) @2 河流形状的调整,我们只需要编辑一条样条线,河流根据这条样条线自适应形状。【2】程序化生成森林主要内容有:@1用随机种子随机生成森林。减少美原创 2017-09-18 15:02:49 · 7683 阅读 · 0 评论 -
虚幻4RenderTarget制作多pass效果
这是一个实时绘制污渍的多pass效果。虚幻里实现多pass的方式目前用得比较多的就rendertarget还有一个是多重叠模型。也许后期虚幻4会暴露出更多接口和特性。首先我们要准备一下几个资源第一个BP-DamageCHaracter,继承于ACharacter类,用于接收我们的鼠标输入和架一台摄像机,第二个BP_DamagePlayer,继承于Actor类,用于完成这次效果的主要功能原创 2017-08-05 10:20:48 · 6117 阅读 · 5 评论 -
RenderTarget在虚幻4的应用【4】杂草模型UV重映射
(受网站上传大小限制的原因,gif质量较差还请见谅)雪地水面在RenderTarget在虚幻4的应用【3】里就可以达到,直接把RT应用在平面本身上就可以了。但是如果要做草地,必须要将这个RT里保存的路径信息给草才行。这时候就需要用UV重映射的方式把UV信息给草材质才行下面是UV重定向的逻辑,十分简单。那个除以1000是因为要把草的顶点位置重新重定向到UV空间,这个值要和平面缩放大小相关。但原创 2017-07-26 21:20:21 · 2520 阅读 · 0 评论 -
虚幻4中模型勾边
虚幻勾边原创 2017-07-16 10:37:21 · 3800 阅读 · 0 评论