-
利用反射读写message记录
一、前言最近有个需求,需要在运行时去读写message。查阅资料之后,发现proto是支持反射的。可以利用反射完成这个需求。二、Protobuf中的反射原理反射原理的部分可以参考这篇文章:深入 ProtoBuf - 反射原理解析反射使用的部分可以参考这篇文章:巧用 Protobuf 反射来优化代码,拒做 PB Boy和google protobuf 反射机制学习笔记三、各种类型的反射实践记录3.1 反射元信息来源反射是需要元信息的,protobuf里面正常的元信息来源是proto文件,转化...…
-
利用反射读写UProperty记录
一、前言之前有个需求是要做Proto与UObject的一个对等的相互转化。其中UObject侧的核心就是利用反射机制对UObject和UProperty的获取和修改,虽然不是什么难点,不过部分较为复杂的UProperty(例如TArray和TMap的获取与修改)还是让我踩了一些坑的,在此记录一下。二、所有的UProperty三、部分UProperty值的读写3.1 FIntProperty读取:FIntProperty* Int32Property = Cast<FIntProper...…
-
proto与UObject相互转化的实现
一、痛点游戏运行开始,有大量的UObject需要转化为message对象,如果程序手动一个个去适配接口填充message,工作量比较大,变动起来维护成本高。所以需要一个工具能自动在运行开始转为message。必要的时候再将message对象自动转为UObject对象。后来在此基础上又加了一个需求:不要依赖于proto生成的C++文件。二、需要解决的技术点要完成这个需求,需要用到以下4个技术: 动态编译proto文件,从而不依赖于生成的C++文件。 利用metadata标签将UObjec...…
-
pbr实战
前言用到的技术:approximated ACES tone-mapping,PrefilteredDFG_Karis函数,伽马校正代码详解#define saturate(x) clamp(x, 0.0, 1.0)#define PI 3.14159265359//------------------------------------------------------------------------------// Distance field functions//------...…
-
多项式平滑polynomial smooth.md
前言参考资料 Function Smoothing Explained!:作者说实现上面这个效果,就是各种 min smoothing和max smoothing的效果。这个视频就是介绍这些的。 Smooth Min Explained:这篇文章对iq的文章进一步说明,里面的smooth min的推理过程很好,要看明白。 smooth minimum:这篇文章是smooth min的最原始的文章,其他文章都是根据这个写的。我们用到的是多项式插值(polynomial smooth m...…
-
玩转Shadertoy系列——恐怖的snake
前言看到一个恐怖的snake,记录一下。效果代码// "Danger Noodle" by Martijn Steinrucken aka BigWings/CountFrolic - 2020// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.// // Email: countfrolic@gmail.com// Twitter: @The_ArtOfCode// Y...…
-
玩转Shadertoy系列——将矩形空间映射到正方形空间
前言在shadertoy里编写各种效果的时候,最开始经常会需要把800*450的矩形屏幕空间映射到正方形屏幕空间中。这篇文章记录一下这个过程。效果和代码矩形屏幕空间的效果void mainImage( out vec4 fragColor, in vec2 fragCoord ){ // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord/iResolution.xy; // Output ...…
-
玩转Shadertoy系列——可爱的笑脸
前言看到一个笑脸,记录一下。用到数学函数中的数学知识remap函数:将a-b范围的t重新映射到c-d范围。数学公式如下。\(\frac{t-a}{b-a}=\frac{x-c}{d-c}\)\[x=\frac{t-a}{b-a}\times\left(d-c\right)+c\]remap01函数:将a-b范围的t重新映射到0-1范围。原理同remap函数。smoothstep函数:这个函数作用是用来确定待渲染特征的范围,然后再作为mix函数的第三个参数,与原颜色进行混合。这两个函数经常搭...…
-
玩转Shadertoy系列——简单但有趣的效果记录
前言记录一下平时玩的一些简单效果。效果和代码4个色块void mainImage( out vec4 fragColor, in vec2 fragCoord ){ // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord.xy; vec2 center = iResolution.xy * 0.5; center = uv - center; // Output to ...…
-
玩转Shadertoy系列——太阳
前言从这篇开始,不定期记录一下在Shadertoy上做的一些效果。效果太阳代码void mainImage( out vec4 fragColor, in vec2 fragCoord ){ // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord /iResolution.xy; uv -= .5; // 将坐标原点移到屏幕中央,屏幕范围(-0.5,0.5) uv.x *= iRes...…
-
URP——对Unlit Shader的深入理解.md
前言这篇是对URP自带的Unlit Shader的深入学习。扩展阅读资料 [Universal RP]Unity通用渲染管线的Lit.shader:这篇讲的非常详细。 Lit Shader:官方文档里的介绍。…
-
URP——对Lit Shader的深入理解
前言这篇是对URP自带的Lit Shader的深入学习。扩展阅读资料 [Universal RP]Unity通用渲染管线的Lit.shader:这篇讲的非常详细。 Lit Shader:官方文档里的介绍。…
-
URP——关于Dither效果的整理
前言知乎上的一个问题,说明了Dither在游戏里的应用。效果Dither PatternDither效果的核心就是Dither Pattern。这个Dither Pattern就是一张平铺在屏幕空间上的透明度阈值纹理。每一个屏幕空间上的片元在这个纹理上获取对应的透明度阈值,如果片元的透明度小于这个阈值,则遗弃;如果片元的透明度大于等于这个阈值,则保留。如此就得到了dither的效果。shadergraph里面有专门的Dither节点,里面有具体的Dither Pattern,采用的是Ord...…
-
URP-BoatAttack项目研究
前言BoatAttack 示例地址,这个项目是unity官方用来展示URP功能的开源项目。山崖的渲染分析 山崖上方的草(Grass Mask):用一个Grass Height Blend属性,来控制长草的最低高度和最大高度,从而对草生长的高度进行了限制;然后前面的高度结果与岩石法线在世界空间中的Y坐标相乘,然后引入一个Grass Angle属性,来控制长草的最小角度和最大角度;这样就能得到需要长草的范围和不需要长草的范围。(草的覆盖跟雪的覆盖差不多?)植被的渲染分析 植被的动画和着色,...…
-
tex2Dlod函数记录
前言 我们都知道tex2D函数可以对纹理进行采样,不过它只能在片元着色器中使用,在顶点着色器中使用时无效的,因为顶点着色器不存在UV导数。所以如果我们需要在顶点着色器里面对纹理进行采样,则可以使用tex2Dlod函数。例如,文章在渲染草的时候,需要在顶点着色器中对noise纹理进行采样,从而对顶点世界坐标进行偏移。参考链接官方文档里有提到。…
-
URP——最长的一帧
前言 这篇文章用于剖析URP的一帧有哪些秘密。Frame Debug里面有多少个pass,跟代码里面EnqueuePass方法执行多少次有关系。下次可以验证一下。看看ForwardRenderer.cs里面有多少个EnqueuePass执行了。源码调试环境相关文章:https://blog.csdn.net/q568360447/article/details/104253312https://zhuanlan.zhihu.com/p/97949167…
-
URP——官方示例学习
前言这是对Unity URP官方示例的学习,代码地址。效果分析 FPSSetup里面有三个render features,这是直接通过创建render objects得到的。 每个render object里面是可以设置filters相关部分的,根据需求设置,比如示例中设置为First Person Objects。设置之后所有作用于这个层级上的材质都受到这个render object的影响。 TODO:研究render object,把整个URP流程弄清楚。shader是如何起作用...…
-
URP——2D Metaballs
主要是对这个博客里面的效果进行分析。效果图如下。关于Metaballs的基本介绍可以看这个。这个效果主要是通过对ScriptableRenderFeature和ScriptableRenderPass扩展实现的。核心的shader是Metaballs2D.shader,核心原理是:在屏幕空间后处理之后执行这个shader,这个shader主要做的事情是将这么多个球(没有mesh,有rigidbody和collider)在屏幕空间绘制出来,绘制的过程主要有三种情况,第一种是球内,用蓝色填充;...…
-
URP——CelShader
主要是对这个博客里面的效果进行分析。里面用到的技术都比较常规,主要可以看怎么用shader graph来实现的。比如里面用到了custom function,hlsl文件等。这也算是入门篇。简单记录一下。…
-
URP——入门篇
前言打算花点时间来学习一下URP,毕竟是未来。Universal Render Pipeline Asset可以通过官网链接了解。Rendering in the Universal Render Pipeline可以通过官网链接了解URP源码阅读[Universal RP]Unity通用渲染管线学习 ,跟着这篇文章可以看源码。LitShader[Universal RP]Unity通用渲染管线的Lit.shaderURP 自定义Shader新规则可以通过官网链接了解扩展URP可以通过官网...…