无题
地形编辑
houdini中使用heightfield来创建地形。
heightfield -> 创建 heightfield_noise创建了heighrfield_noise 可以通过noise type来修改生成地形的风格roughness可以改变地形的粗糙程度
height_noise -> 高度场扭曲 heightfield_distort可以使用噪波来进行偏移像素,扭曲感
heightfield_distort -> 高度场侵蚀erode可以开始给高度场添加颜色,可以用来更改渐变,在右下角视口的advanced里点击compute range可以生成完整的高度图可以检查你的最高值和最低值侵蚀是可以通过时间轴来进行调控的,随着时间推进,谁会堆积在底部,你可以悬着一帧来进行锁定freeze the frame在下面可以调节水文侵蚀和热力侵蚀
可以添加heightfield_visualize通过设置layer以更加显著地看出植被的分布
高度场滑落heightfield_slump可以用来模拟泥土滑落等等
heightfield_flow用来模拟水体流动渗透等等 ...
无题
Unity 黑暗之魂复刻笔记animator.gameObject下的sendmessage(委托消息机制)方法,性能亟待优化,其中sendmessageupwards方法可以检查对象的父对象中是否含有这个方法。
blend tree下的动画可以创建behaviour脚本,但是不是特别建议把太多的脚本创建到这个地方,因为这将会造成后续维护困难等等问题。
overlapCapsule可以用于快速检测两个物体是否已经相撞
在编辑动画的页面中选中某一个动画转换到下一个动画的箭头,在setting里面可以修改interrupt source使得人物在播放一个动画的途中可以被被打断。
你可以在project-setting里面更改所有物体的物理材质,但是你也可以修改你角色碰撞体身上携带的值来修改物理材质
可以通过在动画的edit页面修改curve来修改动画的移动弧度,于此同时,这个curve里面的数值可以通过curve的名字来进行调用,具体可以在animator里面对应动画挂载的脚本事件里面进行调用。比如,你可以通过anim.GetFloat(“”)这种方法来获取曲线值animator里面调动的 ...
无题
虚幻的实时渲染实时渲染在不渲染任何物体的时候可以达到其的最高性能。
rtr流程的本质就是管理性能损耗
虚幻引擎渲染有三个主要线程cpu , draw cpu , gpu
游戏引擎开发理论games104
游戏引擎的分层架构现代游戏引擎的五层架构
resource -> asset
texture streaming
tick
C#与面向对象编程
抽象类在C#中具有以下几个重要的意义:
定义通用的接口:抽象类可以定义一组通用的方法、属性和事件,作为其他相关类的接口或基础结构。通过继承抽象类,子类可以继承和实现这些通用成员,确保具有一致的行为和接口。
强制子类实现:抽象类可以包含抽象方法,这些方法没有具体的实现,只有方法的签名。子类必须继承抽象类并实现其中的抽象方法,以完成特定的功能。抽象类通过这种方式强制子类提供特定行为的实现,确保一定的一致性和可靠性。
实现代码复用:抽象类可以包含具体的方法、属性和字段,这些成员可以被子类继承和直接使用,从而实现代码的复用。子类可以重写父类的方法或扩展其功能,同时继承和复用父类的通用实现。
建立类层次结构:抽象类可以作为类层次结构的基础,用于组织和管理相关类的继承关系。通过抽象类,可以定义共享的行为和属性,并通过继承来创建更具体和特定的子类。
总之,抽象类在C#中具有定义接口、强制实现、实现代码复用和建立类层次结构等方面的重要意义。它为面向对象编程提供了一种有效的机制,用于模块化和组织相关的类,并促进代码的可维护性、可扩展性和可重用性。
opengl notes
你好三角形
顶点数组对象:Vertex Array Object,VAO
顶点缓冲对象:Vertex Buffer Object,VBO
元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。
顶点缓冲对象是我们在[OpenGL](https://learnopengl-cn.github.io/01 Getting started/01 OpenGL/)教程中第一个出现的OpenGL对象。就像OpenGL中的其它 ...
opengl
opengl是一种规范,而不是库或者引擎。
显卡驱动程序中会有自己的对opengl的实现,不同的显卡可能会有所不同。
opengl不是开源的。
使用现代的opengl我们需要在linker的input选项里添加opengl32.lib。我们最终用的头文件,特别是用于隐藏函数的头文件,事实上,我们用的一个是glfw,它提供了转动调整窗口的效果,另一个是现在的windows。
windows已经有了一个图像api,它叫DirectX或者是Direct3D。它是一个专用一点的,在windows上,windows也鼓励使用directx这个api,但是记住,这不是windows能够决定的事,这取决于我们的gpu的供应商和来自英伟达,amd,英特尔的gpu驱动程序,这是我们应该使用opengl的地方,它们都支持opengl作为一个渲染api。
windows的opengl头文件很古老,需要我们自己去获得opengl的新功能。于是我们获取opengl函数,但是他不是要你真正地去下载某样东西,它(opengl函数)事实上在你的图像驱动里。opengl函数在你的gpu驱动里,为了去用任意比opengl ...
c++与面向对象编程
前置全文使用使用visual studio 2022
为什么不建议使用using namespace std;因为这会造成命名空间的污染
比如你在你的一个文件当中引用了stl库和mystl库。你如果预处理声明这两个库的命名空间,之后便不用写std::和mystl::了,这好像很方便。但是有一种情况,比如说这两个库都恰好都包含有vector()这个函数,当你在文件中不加前缀直接使用vector的时候,你难以判断这个vector是对应哪个头文件下的function。而std::vector和mystd::vector就非常直观,这对于代码的可读性,尤其是到了大项目的时候是有很大影响的。所以这是为什么不建议使用using namespace std;
从0重新开始的c++学习之旅C++的基本工作原理以下面最简单的程序为例子。一开始你有一些源文件,上面有你写的文本,这些文本会通过编译器被转换成二进制文件,这个binary可以说某种库,或者是实际的可执行文件excutable。
#include <iostream>
int main()
{
std::cout <&l ...
基础数论
目录Link:有关质数问题有关约数问题同余与逆元高斯解线性方程组组合数学博弈论有关质数问题:试除法判断质数:
bool isprime(int x)
{
for(int i = 2; i <= x / i ; i++)
{
if(x % i == 0) return false;
}
return true;
}
筛质数的方法(线性筛法):
int primes[N] , cnt;
bool st[N];
void get_primes(int n)
{
for(int i = 2; i <= n; i++)
{
if(!st[i]) primes[cnt++] = i;
for(int j = 0; primes[j] <= n / i; j++)
{
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;//如果这个数是质因数的话,则直接就可以break了
}
}
} ...