自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 收藏
  • 关注

原创 我要搬家啦!!!

 感觉这里写专栏看的人比较少,所以我的专栏文章会在知乎上写,平时在这里会写一些随笔我的知乎传送门:虚幻4渲染编程知乎专栏我的知乎专栏目录:https://zhuanlan.zhihu.com/p/36675543我的UnrealShaderToy专栏:https://zhuanlan.zhihu.com/c_188321773...

2018-05-12 19:14:00 3182

原创 技术美术图形交流群

如果你对虚幻4底层图形感兴趣,欢迎加入技术美术图形交流群大家一起交流技术。加入前我希望你是:【1】对渲染管线图形学有一定了解。【2】对虚幻4或者unity有一定了解。至少两年经验。如果您是初学者,可能这里不太适合您。群号是:192946459...

2018-03-15 10:06:10 3907

原创 Houdini学习笔记(根据材质名称分组)

直接用一个attribute wrangle,切为primitivesetprimgroup(0, s@shop_materialpath, @primnum, 1);

2021-12-27 17:50:56 1001

原创 Houdini学习笔记《点云操作》

点云在Houdini里非常有用,我们需要找出cornerpoint,centerpoint等首先我建了一个Box如下图所示然后我建了一个AttributeWrangle代码如下:int pcloud = pcopen(0, "P", @P, 2.1, 10);if(pcnumfound(pcloud) == 3){ removepoint(0, @ptnum);}int pcloud = pcopen(0, "P", @P, 2.1, 10);pcope..

2021-11-26 11:13:37 1522 1

原创 Houdini学习笔记《For each》

点击CreateMetaInportNode就可以把Loop的Index生成使用下列表达式即可获取循环的indexdetail("../foreach_begin1_metadata1/", "iteration", 0)

2021-11-25 11:21:54 1017

原创 Houdini学习笔记《获取相邻顶点》

通过neighbours函数可以获取一个顶点相邻的顶点int PointNum = chi("PointNum");setpointattrib(geoself(), "Cd", PointNum, {0, 1, 0});int Neighs[] = neighbours(0, PointNum);for(int i = 0; i < len(Neighs); i++){ setpointattrib(geoself(), "Cd", Neighs[i], {1, 0, ...

2021-11-24 15:47:34 1171

原创 Houdini学习笔记《随机拷贝》

(1)首先建一个Grid然后撒一些点(2)用Vex生成一个随机ID给这些点float seed = 0.8;int ObjectCount = 3;i@ObjectID = fit01(rand(@ptnum * seed), 0, ObjectCount);(3)做一个switch(4)使用copy to stamp(5)设置copy to stamp节点,把@ObjectID属性传递给CopytoStamp节点的ObjectIndex(6)...

2021-11-24 11:40:22 902

原创 Houdini学习笔记《RayCasting射线检测》

执行前执行后这里就是调用intersect函数我们还可以为碰撞后的点增加法线属性给原来的平面增加Normal节点然后把原来的代码改一下即可vector hitDir = chv("HitDir");vector hitPoint;vector uvw;int primNum = intersect(1, @P, hitDir, hitPoint, uvw);if(primNum >=0){ @P = hitPoint; @...

2021-11-24 10:44:05 707

原创 Houdini学习笔记《Point and lines》

(1)创建分段线段创建一个分段的线段,我们可以使用Vex,还可以使用自带的节点这里节点设置为detailint pointCount = chi("PointCount");int points[];resize(points, pointCount);for(int i = 0; i < pointCount; i++){ vector curPos = set(0, i, 0); int curPointId = addpoint(geosel..

2021-11-24 10:25:39 624

原创 Houdini学习笔记《Create group by VEX》

(1)使用setprimgroup函数创建组if(@primnum<10){ setprimgroup(0, "mg", @primnum, 1, "set");}(2)通过i@group_XXX创建组i@group_XXX变量会直接创建组,例如i@group_AABB会创建AABB组,i@group_后面跟组的名字即可。下面的代码就创建了一个名为odd的组if(@primnum%2){ i@group_odd = 1;}(3)获取这个组里.

2021-11-24 10:00:53 1190

原创 UnrealEngine Character Jump Twice

Unreal的角色类已经封装好Jump函数了,只需要调用一下即可如果想要Jump两次,制作二连跳也非常简单,只需要在角色类里吧JumpMaxCount设置为2即可Enjoy it

2021-10-29 09:35:15 233

原创 Compile the UE4 engine every time you start the project每次启动项目都要编译UE4引擎源码的解决方案

以前我也没遇到过这种问题,也挺郁闷的,我做了如下操作解决了这个问题。(1)更新引擎,把项目Cleanup干净,可以手动删除掉Binary下的文件然后再重新把引擎的原生文件revert回来。(2)调用Setup.bat一定把依赖项更新到最新。(3)gen一下项目重编译引擎即可。...

2021-01-05 19:36:38 1429

原创 虚幻4C++小轮子

一些常用的虚幻c++轮子的用法和总结,方便以后查找使用。这篇文章将是一个小例子集合。以供未来翻阅免得又搜索半天或者是自己造,为以后省一些功夫吧。 文件读写 FString拓展 TArray Sort排序 【1】文件读写头文件:#pragma once#include "CoreMinimal.h"#include "Kismet/BlueprintFunctionLibrary.h"#include "MyFileHelper...

2020-12-16 20:20:14 579

原创 虚幻4文件读写

头文件// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "Kismet/BlueprintFunctionLibrary.h"#include "MyFileHelper.generated.h"/** * */UCLASS()class NEWVERSION_API UMyFile

2020-12-11 21:45:24 586 1

原创 求余的图形化理解

不知道为什么我一直无法理解求余运算,我也不知道为什么,可能是小学数学太差的原因。之前一直纠结 5 % 4 为什么等于 1,直到有一天我在做模型UV的重新编排,重新思考了一下。现在计算 3 % 2等于多少所以 3 % 2 = 1现在有一个2X N的一个格子,三个球,把三个球从左往右从下到上填入盒子,最后一个球的X坐标就是求余的值现在计算 5 % 4 等于多少所以 5 % 4 = 1现在计算 7 % 4 等于多少,同理所以 7 % 4 = 3哎!丢脸之文章。.

2020-12-03 16:50:18 251 1

原创 VC++编程Lib和Dll文件的生成和使用

Lib文件的生成和使用lib是静态链接库,生成和使用方法都比较简单。首先建一个空工程然后打开项目属性,把它设置为StaticLibary然后就可以向里面加入代码了,我创建一个LIBTest类.h文件.cpp文件然后右键Build它就可以了,在输出路径下会生成对应的lib文件这个路径当然也是可以修改的。不过对于静态库来说关系不是很大。现在有了这个lib以后就可以使用它了。新建一个c++空项目,把刚才生成的Lib复制到新工程下,同时也要把.h文件一

2020-11-07 16:28:37 728

原创 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 1238

原创 通过FGenericRHIGPUFence来减少从GPU回读数据的阻塞

Unreal提供了一个小工具类来帮助GPU回读数据

2019-11-01 20:44:58 674

原创 Unity shader flow mapping

Shader "Custom/Flow Map" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _FlowMap ("Flow Map", 2D) = "grey" {} _Speed ("Speed", Range(-1, 1)) = 0.2 } Sub...

2019-09-02 17:26:37 1539

原创 Maya python scripting(1)

我最近在重新学习Maya动画,在学习的时候我发现绑定需要脚本,所以我又重新开始复习maya脚本。总得来说maya的脚本完全没有难度,就是那些接口要记忆一下。我非常讨厌记代码,所以我把学习到的代码样本记在博客里,以后要用的时候直接copy【1】Create window in mayaimport maya.cmds as cmdsdef create_window(): ...

2019-08-07 09:47:38 724

原创 Unreal Engine4 使用c++创建贴图

一般我们将贴图资源导入引擎的时候,引擎会自己抽取贴图文件的数据然后创建一个UTexture的Object合一个Uasset。但是有时候我们想自己写工具的话需要自己实现这套创建机制。可以在引擎的UTextureFactory找到我们导入引擎时的逻辑代码。可以看到不同的图片格式,不同的像素深度创建的像素格式合贴图格式都不一样。要使用代码创建贴图资源我们第一部是先指定一个创建贴图的地方...

2019-02-16 18:03:11 2638 1

原创 虚幻4 源码版LightMass Build Failed

最近用源码版引擎烘焙光照,发现不管怎么设置都会出Swarm failed to Kick off的报错,所以查阅了下资料发现,引擎Build的时候不会帮我Build LightMass,所以需要重新用VS把LightMass在DevelopmentEditor模式下重新Build一下就好了 ...

2019-01-21 01:12:34 1547

原创 在虚幻4项目种建立多个模块

模块化编程有一定好处,是否给自己的项目分模块,具体还是看个人怎么设计。虚幻4使用多模块,可以加快编译速度,减少耦合。UE种我们需要创建模块分两种,一种是项目模块,一种是插件模块。一:【项目模块】当我们创建一个项目后,可以在source下看到如下三个文件项目里只有一个模块如果想新建一个模块,我们需要:【1】新建一个模块的文件夹【2】新建对应模块的.Build.cs...

2018-11-27 08:44:39 1331 1

原创 Unity Billboard shader

billboard在游戏里挺常用的,下面是个unity的billboard shader。在顶点着色器中把顶点旋转到合视角平行首先在tag中加上一句修饰防止billboard被batch掉,这里非常坑,其实billboard算法挺简单的Tags {"DisableBatching" = "True" }然后是顶点着色器的变换//billboard construct floa...

2018-11-23 16:29:46 2468 1

转载 C++ Class和typename的区别

先来上段代码这是啥,为啥前面会有个typename。于是去谷歌了一下http://feihu.me/blog/2014/the-origin-and-usage-of-typename/对于用于模板定义的依赖于模板参数的名称,只有在实例化的参数中存在这个类型名,或者这个名称前使用了typename关键字来修饰,编译器才会将该名称当成是类型。除了以上这两种情况,绝不会被当成是类型。因...

2018-10-21 16:24:01 633

原创 虚幻4的Shader宏

虚幻4的shader宏简直丧心病狂,上图感受一下如何正确理解它们是怎么嵌套的呢,下面我敲了个极短的控制台示例#include &lt;iostream&gt;#include &lt;string&gt;using namespace std;class Shader{public: void ShowShader() { cout &lt;&lt; shader...

2018-10-19 15:02:01 1204

原创 虚幻4程序动态创建package资源并且导出资源

直接上代码吧。void UTestShaderBlueprintLibrary::ExportTexture(UTexture2D* TextureToBeExpot){ //TextureToBeExpot-&gt;CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap; //Textur...

2018-10-10 22:05:12 4116

原创 虚幻4资源批量导出

我们自己写点程序就可以了先写个UI然后加个按钮,按钮来调用下面这个函数。然后调用下面这个接口即可

2018-10-10 21:59:02 3629

原创 UnityShader 模板

有时候写shader经常忘记unity的各种矩阵的名字。我这里记录了一下一个比较全的shader,unityshaderlab各种名字都齐全了。Shader "S_MyShaderTemplate"{ Properties { _BaseColorMap ("BaseColor", 2D) = "white" {} //_NormalMap ("Normal", 2D) = "...

2018-09-30 21:32:02 755

原创 基于GPU的图像处理输出bmp格式的图再转换为tga精度损失问题。

我最近在搞图像处理,我的步骤是(1)先把要处理的图片读进GPU然后用CS处理(2)把CS的输出存到磁盘,此时数据是未压缩的BMP格式(3)美术同事可能想要其他格式的图片如tga,所以用ps的批处理把图片转为tga或者其他格式。下面就来看看这个过程的精度损失原始输出值是0.54输出之后到bmp中可以看到值是对的然后再转成tga可以看到值是在0.54之间浮动...

2018-09-28 01:26:26 735

原创 像素读写进一个uint32中

这是computeshader中的写入下面是c++的读写第一张截图是写入,第二张是读取。Enjoy it

2018-09-22 17:44:41 339

原创 虚幻4 DynamicTexture Write Array data to Texture2D

在游戏运行时将数组数据写入Texture中。我的环境是4.19使用下面的代码就可以直接把数组写入Texture2D然后显示出来了效果如下:Runtime的时候就动态写数据到Texture2D里了,需要注意的是,执行只后,对应的Texture资源是无法还原的了,永久被修改掉了Enjoy It对于渲染线程,使用Lock和Unlock也能轻松读写Texture的数据...

2018-09-22 16:17:43 1180

原创 虚幻通过程序跳转到资源在资源浏览器中的位置

按下按钮后,ContentBrower将自动跳转到资源所在位置Enjoy It

2018-09-17 20:57:52 592

原创 虚幻4批量加载资源,加载指定目录或指定类的资源

虚幻4加载大批资源的方式有几个ObjectLibray和AssetRegistry。下面的代码直接粘贴进代码,包含好头文件就能起效(引擎版本4.19)https://docs.unrealengine.com/en-us/Programming/Assets/Registry FAssetRegistryModule&amp; AssetRegistryModule = FMod...

2018-09-15 15:43:12 3371 1

原创 为虚幻4配置vitual studio编辑器界面

工欲善其事必先利其器难道就没人觉得这个配置显示框太小了么,根本不知道后面是啥这么多配置万一弄错了咋办!在工具栏的这个空白位置右键打开Customize然后找到如下设置把宽度设置为200终于解决了长久以来的显示不全问题Enjoy it!!!...

2018-09-03 22:28:54 943

原创 打光小笔记

游戏里一般用3 point light来打光,分为三部分 full light,key light  ,back light主光背光主反光副反光也可以把光源信息烘焙到SH里。补光的能量叠加总和不要超过主光最高亮部的能量的二分之一,上面就有个错误的效果主反光比较难调,下面是正确的主反光效果(请忽略粗糙度的不同):...

2018-08-28 20:27:35 614

原创 常见图形问题迷惑解答

(1)什么是Gamma space 和 Linear spacehttp://www.kinematicsoup.com/news/2016/6/15/gamma-and-linear-space-what-they-are-how-they-differ(2)sRGB,Adobe RGB,LAB,CMYK颜色的区别https://www.zhihu.com/question/2060...

2018-08-15 17:54:00 626

原创 虚幻4把模型拖入场景后,模型是怎么被渲染出来的流程分析

在我们把模型拖入虚幻4的视口后场景编辑器会调用RendererScene的AddPrimitive函数然后在这个函数种会调用Scene-&gt;AddPrimitiveSceneInfo_RenderThread(RHICmdList, PrimitiveSceneInfo);然后会调用FPrimitiveSceneInfo的AddToScene然后会调用Primi...

2018-08-14 17:07:15 5150 1

原创 Material Capture制作玉石效果

最后的效果:非常节省的算法。下面记录一下Unity的写法,unity版本搞了很久没搞出来,结果最后发现是矩阵顺序乘错了(对unity还是不太熟啊),最后请教了CG-bull大佬,赶快记下小笔记,别忘了!Shader "Unlit/S_MaterialCapture"{ Properties { _MatCapTexure ("MaterialCaptureT...

2018-08-04 13:23:38 3144

原创 C++控制台写光线追踪渲染器

最近在跟着朋友学光线追踪,看着纯控制台居然能写出光线追踪渲染器,感觉非常神奇。先上效果吧:下面是代码:vec3.h#pragma once#include &lt;math.h&gt;#include &lt;stdlib.h&gt;#include &lt;iostream&gt;class vec3{public: vec3() {} vec3(double e0, doub...

2018-06-20 20:48:05 3693 7

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除