游戏开发笔记(五)

"开发笔记"

Posted by A-SHIN on December 28, 2017

“Yeah It’s on. ”

前言

接前篇早些年游戏开发工作中的笔记,放上来以防丢失。有些规则现在可能不适用了(如一些是U3D4早些版本的记录)。有些因为水平有限,有理解错误的地方,望指正!~
笔记比较乱,没整理

正文

Unity3D

ECS: convert to entity 需要下载安装hybrid renderer包,否则运行后game object不可见。

ECS; Job system; Burst; SRP LWRP HDRP; post-processing stack; asmdef (Assembly Definition Files); Timeline&Cinemachine; GPU Skin; GPU Instancing;

post-processing local volume blend distance 形成的包围盒需要包含进post-process layer中设置的trigger坐标。不然local volume不起作用。

OnPostRender函数中调用Graphics.Blit没效果,可能是由于hdr开启的原因。
Every Graphics.Blit causes RenderTexture.ResolveAA if MSAA enabled which is killing framerate.

Unity使用的是OpenGL标准,即-1是左和下,1是右和上, 0是远裁面,1是近裁面

GBuffer中储存当前像素的Albedo, Specular, AO, normal, Depth等

struct UnityStandardData
{
    half3   diffuseColor;
    half    occlusion;

    half3   specularColor;
    half    smoothness;

    float3  normalWorld;        // normal in world space
};

通过深度图反推世界坐标就需要viewProjection matrix的逆矩阵:

float4 worldPos = mul(_InvVP, float4(i.uv*2-1, depth, 1)); 

渲染管线在决定使用哪一个Pass来绘制物体的时候,正是识别Pass的Lightmode来决定的

Animation界面:单击列表中的各个属性,然后按键盘上的F以自动重新缩放视图以适合该曲线值的范围,按键盘上的A键以适合并重新缩放窗口,以显示剪辑中的所有关键帧

类似动作的实例可以是各种步行和运行动画。为了使混合良好地工作,clips中的运动必须在标准化时间内的相同点处进行。例如,可以对准步行和跑步动画,使得脚与地板接触的时刻发生在标准化时间内的相同点处(例如,左脚击中0.0,右脚击中0.5)。由于使用了标准化时间,因此剪辑的长度不同并不重要。

播放没有混合的单个动画片段,Mecanim比传统动画系统慢

动画比例曲线比动画平移和旋转曲线更昂贵。要提高性能,请避免使用缩放动画。

导入Humanoid动画时,如果不需要,则使用BodyMask删除IK目标或手指动画。使用Generic时,使用根运动比不使用它更昂贵。如果您的动画不使用根运动,请确保未选择根骨骼。

UnrealEngine4

PreInit-> LoadCoreModules-> UClassRegisterAllCompiledInClasses-> TClassCompiledInDefer::Register-> TClass::StaticClass-> GetPrivateStaticClass(TPackage)-> GetPrivateStaticClassBody-> InitializePrivateStaticClass->UObjectBase::Register

AppInit-> InitUObject-> StaticUObjectInit-> UObjectBaseInit-> UObjectProcessRegistrants-> UObjectForceRegistration-> UObjectBase::DeferredRegister-> AddObject

ProcessNewlyLoadedUObjects-> UObjectLoadAllCompiledInDefaultProperties-> Z_Construct_UClass_UMyClass

后记