当前位置: 首页 > news >正文 怎么提高网站权重网站如何做品牌宣传 news 2025/11/1 16:00:51 怎么提高网站权重,网站如何做品牌宣传,装修室内效果图大全,wordpress缓存清除回顾昨天并计划今天 在这期节目中#xff0c;主要讲解了光照的概念#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分#xff1a; 光照的基础概述#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…回顾昨天并计划今天 在这期节目中主要讲解了光照的概念并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分 光照的基础概述讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到具体细节但重点是让观众理解光照的基础如何将其引入到图形渲染中。法线贴图光照的实现节目接下来的目标是实现法线贴图光照。首先会解释法线贴图的工作原理和如何进行计算。法线贴图的实现本身并不复杂重点是如何将其正确地计算并应用到渲染中。代码实现的计划虽然有很多可能让光照效果更加精准和复杂的方式但目标是首先实现基础的法线贴图光照。 黑板法线贴图 在这一期中讲解了法线贴图的基本概念及其在光照中的应用。以下是内容的详细总结 光照与表面的关系光照的基本原理是光源将光照射到表面上而当我们讨论光照如何与表面相互作用时需要知道光线的入射方向以及观察光线的方向。通过这些信息可以确定表面上某一点的光照效果。 表面特性的影响当光照照射到表面时表面看起来的效果如光亮、粗糙、湿润等取决于光线反射的形态。不同的表面会在不同的角度下反射不同的亮度这种反射亮度的分布决定了表面看起来的特性。 法线的重要性在图形学中法线的概念至关重要因为它决定了如何计算表面反射的亮度。法线是表面在三维空间中的方向决定了表面如何与光线发生交互。光线的入射角度和观察角度相对于表面的法线角度非常重要只有知道了表面的法线方向才能正确计算光照反射的亮度。 光照与法线的关系光照的反射强度取决于光线与表面法线之间的角度。如果表面发生变化法线的方向也会发生变化这会导致光照强度的变化。法线越接近光线的方向表面反射的亮度就越强反之则越暗。因此了解和控制表面的法线方向是实现真实光照效果的基础。 法线贴图的作用法线贴图的目的是通过为表面上的每个点指定一个法线方向来模拟细微的表面细节而不需要改变表面的几何形状。通过法线贴图可以实现更加丰富和细致的光照效果使得表面看起来更加真实。 总结来说本期的重点是讲解如何通过法线贴图来控制光照反射并解释了法线在光照计算中的重要性。法线的方向直接决定了光照的强度和分布从而影响到表面的视觉效果。 黑板法线的重要性 法线在光照计算中的重要性被详细解释以下是内容的总结 光照方程与法线的关系在光照计算中基本的单位是代表微小区域的点这些点可以视为屏幕上的像素或纹理元素。为了计算光照的反射我们需要确定每个点的表面朝向这个方向就是法线。法线是一个单位向量即它的长度总是为1并且指向垂直于表面的方向。 法线的定义法线向量是一个指向与表面相切的平面的垂直方向的向量。每个表面上的点都有一个法线表示该点表面上的“朝向”。例如如果一个表面处于某个方向法线就指向该表面垂直的方向。 法线的几何意义对于一个表面上的特定点法线就是该点上表面的切平面与表面垂直的方向。如果考虑一个平面与表面在该点接触那么法线就指向垂直于这个平面的方向。法线的方向会根据表面在不同位置的形态而变化即每个点的法线方向都会有所不同。 法线的重要性法线被用来确定表面如何与光线相互作用从而影响光照反射的强度。法线的方向直接影响计算光照反射时的角度进而影响最终的视觉效果。它是计算光照反射时不可或缺的一个因素。 综上所述法线是计算表面光照反射的重要组成部分。它通过指示表面在特定点的方向帮助确定光照的反射强度和视觉效果。 黑板我们需要什么来基于这个法线计算光照 为了能够基于法线计算光照需要进行两项工作。首先需要有一个表面描述这个描述告诉我们如何处理光线在法线周围的反射。其次需要有一个公式能够利用我们现有的输入表面的法线、观察方向和光线方向计算出最终的光照值。这些输入和表面描述将被用来输出一个光照值通常是 RGB 色彩值表示在该点的颜色。 除此之外光照的描述可能也需要包括其他信息比如光源的特性。光源可能具有不同的属性因此除了法线、视角和光线方向还可能需要考虑光源的具体描述以准确计算最终的光照效果。这就是计算法线贴图光照的基本步骤。 黑板法线贴图在这个方程中的位置 为了计算光照需要引入法线贴图的概念。在这一过程中法线贴图作为一种存储每个像素法线的方式帮助解决了如何在没有直接描述表面形状的情况下进行光照计算的问题。每个法线是一个单位长度的向量指向表面外部。为了减少存储空间法线贴图只需要存储法线的两个分量因为根据法线的单位长度性质第三个分量可以通过数学公式推算出来。 法线贴图中的每个纹理单元Texel将存储法线向量的x、y和z分量。这些值通过RGB颜色编码方式存储其中RGB的0到255的范围对应法线向量的0到1的范围。这样在绘制精灵时除了RGB值之外还能提取出法线信息从而计算出反射的光照。 虽然在计算上相对简单但法线贴图需要额外的资产加载过程即需要有人制作这些法线贴图或者从其他地方获取它们。尽管如此一旦拥有法线贴图计算过程就能高效地进行。 黑板表面的描述 接下来的内容涉及到如何处理不同类型的表面。为了增加视觉上的趣味性可能需要能够模拟不同的表面类型比如一些表面是光滑的而另一些则是哑光的。为了实现这一点首先需要计算出表面的法线信息并结合其他因素来计算光照。 在这个过程中光照计算会使用到法线贴图来确定每个表面的朝向。通过结合光源方向和视角方向可以计算出相应的光照值。由于没有3D场景的完整描述因此无法进行完全真实的光照模拟但是可以构造一个“虚拟世界”通过这种方式生成合成的光照效果。这是为了弥补缺少3D描述的问题。 表面的描述除了法线外还需要考虑一些其他参数比如表面的光滑度或光泽度。可以使用一个从0到1的值来表示表面的光泽度其中0代表完全哑光1代表非常光滑或非常反射。这些值将决定表面如何与光源交互从而影响最终的光照效果。在初步实现中控制表面光泽度将是一个主要的调控手段。 黑板光源的描述 在处理光照描述时遇到了一个问题即如何设计光源。最简单的做法是将光源直接放置在场景中但为了实现更丰富的效果可以考虑一些更复杂的方案。例如如果我们考虑将光线指向地面可以查看地面区域的颜色这样就能够模拟从地面反射的光。类似地当光线指向上方时可以想象天空纹理或者室内天花板作为光源。 对于水平指向的光线它可能会照射到场景中的其他物体从而产生反射光。由此可以提出一个想法使用一个三平面方案来处理光照计算地面、天空以及其他物体的反射区域。初步考虑时可以简化处理暂时忽略水平方向的光照专注于地面和天空两个方向的光照。 这种方案的核心是通过向上天空和向下地面这两个方向来获取光照值以此来推测场景中的光照情况。这个方法仍然是一个假设目的是为了探索如何为游戏中的物体计算光照值并尝试找到一种有效的实现方式。 黑板提案 在处理法线值时可以通过Z轴的值来决定采样方向。假设我们用Z值来表示光线指向的上下方向Z值的不同会影响我们从上方和下方的光源进行采样的方式。具体来说当光线指向向上时采样天空纹理而指向向下时采样地面纹理。随着光线从向上指向转变为向下指向我们会改变采样的区域。 为了实现这一点可以使用一个三平面方案上方、中央和下方平面。初步假设如果我们进行均匀光照处理Z值会影响我们在这三者之间的采样。例如当Z值为-1时完全采样下方Z值为1时完全采样上方而Z值为0.5时意味着我们在中央平面进行采样。这样通过在这三者之间进行线性混合可以实现不同方向的光照贡献。 法线的其他参数将决定我们在这三个平面之间如何进行采样。假设我们将这些平面视作图片并向这些平面投射光线基于光线的方向和当前位置我们可以计算出光线在哪个平面上交点从而获取对应的颜色值。 尽管中间平面还不确定如何处理但上方和下方的处理是相对简单的。我们可以通过计算这些投射值得出最终的光照结果。重要的是光线的方向会影响最终的采样结果比如当光线指向上方时永远不会与下方平面交集同样当光线指向下方时也不会与上方平面交集。 这个方法本质上是一种简化的技巧因为我们无法计算出真实的三维光照效果但它的目的是尽量实现接近真实的光照效果通过合理的假设和采样来达到预期的视觉效果。 黑板基于表面描述的模糊处理 在描述表面光泽度时提出了一种方法将零到一的光泽度值与模糊处理结合起来。对于非常光滑的表面反射的光线非常精确几乎能够清晰地看到光源的细节如窗户的轮廓或阳光的反射而对于较为暗淡的表面光线反射则比较模糊只能看到光的颜色和一些轻微的光晕。为了模拟这种效果可以通过对上方和下方的图像进行模糊处理来实现。 具体做法是对于每一个光源上方和下方先对其图像进行多次模糊处理。例如可以从一个256x256的图像开始然后逐渐下采样到128x128、64x64等最终获得多个不同模糊级别的图像。使用这个模糊图像时利用零到一的光泽度值来决定选择哪两个模糊图像进行插值。例如光泽度为0时选择最模糊的图像光泽度为1时选择最清晰的图像在中间时则根据需要进行插值。 为了简化计算可以将光泽度值离散化仅通过几个二进制位来表示选择的模糊图像这样就不需要进行复杂的插值运算可以显著提高效率。通过这种方式尽管并不进行精确的动态变化如光泽度在渲染过程中变化但仍然可以在不增加大量计算负担的情况下实现较为理想的效果。 这种方案虽然可能不完美但作为一种实验性的光照近似方法可以用于2D游戏的开发中尤其是在没有复杂光照模型的情况下尝试找到一种有效的解决方案。 介绍法线贴图的概念 首先需要在管道中引入法线贴图的概念因为目前还没有这个功能。当系统处理中有纹理时需要在纹理之外引入一个法线贴图并指向该法线贴图。在整个流程中法线贴图需要被传递并在渲染器中提取以便在绘制三角形时使用。 在处理时可以将法线贴图作为参数传递并在后续的绘制过程中加载该贴图。此时可以利用之前处理的工作来采样法线贴图。理论上法线贴图也应该使用双线性插值进行混合这将引入一些问题因为插值过程中需要考虑法线贴图的每个采样点确保法线的平滑过渡和准确性。 黑板法线必须是正常的 在处理法线贴图时需要注意一个问题法线必须是单位向量。如果直接将法线进行线性插值可能会导致结果不符合规范因为插值后的法线向量长度可能会不正常变得过短。这意味着如果我们直接进行线性插值结果的法线将不再是标准法线可能无法正确地反映表面的方向。 假设有两个法线一个指向某个方向另一个指向不同的方向若对它们进行50%的线性插值得到的法线向量会显得比预期的要短偏离了单位向量的标准长度。如果不对法线进行规范化处理这样的插值结果会导致计算错误因为法线必须保持单位长度。 因此处理法线时需要特别小心。通常线性插值用于颜色时效果较好但对法线进行插值时必须在插值后进行法线的重新规范化确保最终的法线向量是单位长度这样才能正确反映表面法线的方向。因此插值法线时需要考虑将结果重新投影到单位球面上以保持法线的正确性。 介绍 Unpack4x8 并解包 Texels 为了提高代码的复用性可以将纹理采样的操作封装成一个内联函数这样就不需要每次都重复相同的解包过程。具体做法是创建一个内联函数 unpack4x8它接受一个打包值packed value然后进行解包操作返回解包后的结果。 通过这种方式可以将解包的逻辑集中到一个地方避免在代码中多次编写相同的解包代码。这种做法不仅让代码更简洁还提高了可维护性。函数定义如下 inline v4 Unpack4x8(uint32 Packed) {v4 Result {// 获取源像素的红色通道值(real32)((Packed 16) 0xFF),// 获取源像素的绿色通道值(real32)((Packed 8) 0xFF),// 获取源像素的蓝色通道值(real32)((Packed 0) 0xFF),// 获取源像素的Alpha通道值范围0-255((real32)((Packed 24) 0xFF))};// 返回解包后的结果return Result; }之后可以在代码中替换所有的解包操作使用 unpack4x8 函数进行调用例如 v4 TexelA Unpack4x8(TexelPtrA);这样每次需要进行纹理采样时都可以调用 unpack4x8 函数而不需要重复写解包的具体实现。这种封装方式使得代码更加简洁和易于维护。 类似地解包法线 在处理法线贴图时解包的过程与纹理贴图类似可以创建一个与纹理贴图相同的解包函数只不过将 Texel 类型替换为 Normal 类型。通过这种方式可以将法线贴图的解包过程封装成一个通用的函数简化代码。 然而使用32位值解包时会得到四个值而实际上我们只需要最多三个值甚至可能只需要两个值。那么剩下的第四个值该怎么处理呢这个问题需要考虑如何处理这个多余的值。一般来说解包后的数据通常会存储成三个分量X、Y、Z而第四个分量可能是冗余的除非它有特定的用途比如用于其他计算。 因此在实现解包函数时可以考虑只返回需要的三个分量忽略多余的第四个分量或者根据具体需求对其进行处理。这样可以确保解包后的数据更加精确并减少不必要的数据浪费。 黑板我们常常将表面描述烘焙进法线贴图中 在图形处理中遇到这种情况时通常会将表面描述信息与法线贴图一起存储。如果有一个四通道的法线贴图可以将 X 和 Y 分量存储在前两个通道中Z 分量存储在第三个通道而将最后一个通道即 Alpha 通道用来存储表面的光泽度信息。这样即使法线贴图的第四个分量是冗余的也能有效地利用它存储光泽度表示表面在该点的光滑程度。 通过这种方式可以绘制一个既具有反射部分又具有非反射部分的单一精灵这样的做法为图形设计带来更多的灵活性。例如可以在一个图像中同时处理光滑和粗糙表面提升图形效果的多样性和表现力。 线性插值法线 在这里首先可以进行一个线性插值lerp操作将 Texel 值进行插值处理然后对法线值进行同样的插值。这样插值后的法线可以直接用于后续的处理。接下来可以决定是否需要对法线进行更复杂的操作例如重新归一化renormalize或其他处理但此时已经得到了可以使用的法线。 在进行光照计算时可以使用法线与其他输入颜色进行哈达玛积Hadamard product运算用于计算表面的光照效果。通过这样的方式法线在整个渲染管线中可以用于进一步的光照查找和其他相关的图形处理。 介绍环境贴图 为了计算光照效果需要引入更多的位图并且这将导致我们需要处理不同模糊级别的多种位图。为了处理这些位图一个简单的 loaded_bitmap 类型可能并不合适因为我们需要处理不同的模糊程度因此需要一种结构化的系统来管理这些位图。 这个系统可能包含多个不同模糊程度的位图。举例来说我们可以为环境贴图evironment_map引入一个结构其中包含不同的细节层级levels of detailLOD。例如假设我们有四个不同的模糊层级每个层级代表不同的模糊程度。这个系统将包含多个贴图并为每个贴图提供不同模糊级别的内容。 在实现时首先我们需要处理位图的宽度和高度。考虑到这些位图的大小需要是2的幂次方powers of 2可以采用这种方式来简化对位图的包裹wrapping和裁剪clamping操作。每个贴图的宽度和高度将采用2的幂次方例如256x256或512x512等确保可以高效地进行处理。 此外支持矩形贴图也是可能的尽管这可能会增加复杂性。为了简化暂时可以将宽度和高度都设为2的幂次方并允许矩形尺寸。每个贴图的细节层级如第0层细节图可以是一个特定的2的幂次方大小之后其他层级的大小会逐渐缩小。 这一过程中需要处理的环境贴图包括上面、下面和中间等不同方向的位图这样可以为不同的方向提供不同的环境效果。然而需要注意的是这种方式可能会导致非常高的计算开销尤其是在没有优化的情况下性能会非常差即使引入了优化计算开销依然很大。因此尽管这种方法很灵活但实际应用时需要考虑到性能问题。 从法线的 Z 轴设置 tEnvMap 在处理环境贴图时首先需要根据法线向量来确定采样的方向。法线向量的Z分量决定了是否朝上或朝下因此可以利用Z分量来帮助决定选择哪个环境贴图层级。 为了进行这种采样首先需要定义一个名为 tEnvMap 的变量用于表示环境贴图的混合方式。这个变量基于法线的Z值来确定混合的方式。具体来说如果法线的Z分量大于或小于0.5就会选择不同的环境贴图层级。通过这种方式可以根据法线的方向灵活地从环境贴图中选择合适的部分进行混合。 然而在处理某些特定情况下Z值恰好等于0.5时可能会遇到一些问题因为这种情况的计算结果并不明确可能导致混合计算变得有些不确定。因此这种方式虽然简单直接但在实际应用中仍然需要考虑这些边界情况。 黑板我们可能需要将其切换到接近 0.25 在选择环境贴图时可以考虑通过调整法线的Z分量来决定使用哪一层环境贴图。为了更精确地控制混合方式可能会将Z值的阈值设置为小于0.5的值比如0.25意味着只有那些指向较低方向的法线才会选择底部的贴图。这样如果法线的Z值小于0.5就选择底部环境贴图如果大于0.5则选择顶部环境贴图而中间区域的法线则只使用中间的环境贴图。 这种方法灵活地根据法线的方向来选择合适的环境贴图层级但具体的阈值和实现方式仍然需要在实际开发过程中进行微调。 设置环境贴图查找 在处理环境贴图时首先根据法线的Z值决定使用哪个贴图。如果Z值小于0.25就会选择底部的贴图如果大于0.75则选择顶部的贴图在其他情况下使用中间的贴图。为了平滑过渡使用法线值tFarColor来计算混合比例。对于低于0.25的情况使用tFarMap 1.0f - (tEnvMap / 0.25f)值来确定底部贴图的贡献比例对于大于0.75的情况则用tFarMap (1.0f - tEnvMap) / 0.25f值来确定顶部贴图的贡献比例。 通过这些步骤可以计算出从每个贴图中获取的颜色值并根据混合比例将它们融合。最后主要的挑战是如何正确地从这些环境贴图中进行采样特别是如何结合法线和表面描述值来决定应该采样哪个贴图。需要传递的参数包括表面描述值、法线的XYZ值和要采样的环境贴图。 创建屏幕空间 UV 在进行环境贴图采样时还需要知道屏幕上的位置以便计算出正确的采样区域。这就需要一个屏幕空间中的位置值也就是像素在屏幕上的位置通常称为PixelP。为了进行后续计算需要将这个位置值归一化。 归一化的方法是通过屏幕的宽度和高度最大值来进行。具体做法是将像素的X坐标除以宽度最大值将Y坐标除以高度最大值从而得到一个归一化后的屏幕空间坐标ScreenSpaceUV。为了提高效率可以提前计算出这些最大值的倒数然后直接用它们来计算归一化的坐标。 通过这种方法能够准确地将屏幕空间的坐标转换为归一化的坐标值进而为后续的环境贴图采样和其他图形操作提供必要的信息。 将这个屏幕空间 UV 传递给 SampleEnvironmentMap 通过计算得到屏幕空间的归一化坐标ScreenSpaceUV后可以将其用于采样函数中了解当前的采样方向、表面描述、光泽度等信息并据此从环境贴图中进行采样。这个过程可以通过一个函数比如SampleEnvironmentMap来实现利用归一化的屏幕坐标、法线信息以及表面描述进行采样。 此时采样函数能够根据提供的参数和坐标位置从对应的环境贴图中获取所需的信息从而完成环境映射的计算。 检查是否有法线贴图 如果存在法线贴图则无需执行上述步骤。将来可以为着色器编写两个版本分别评估不同的选项。假设已经有了这些步骤接下来可以编写SampleEnvironmentMap函数最终得到光照颜色。为了简化处理当前可以通过这些步骤来验证和调试。 预计算 Texel 的光照 为了简化处理可以使用Hadamard积将每个像素值与光照贡献进行相乘。基本思路是假设像素的初始颜色代表最大亮度然后根据从环境中接收到的光线来调节它。简单来说像素值告诉我们反射了多少光而通过将它与接收到的光颜色相乘可以计算出实际反射的光量。这是为了确定最终的光照效果。 我们还没有讨论过如何计算光照方程 目前并没有详细讨论如何计算光照方程部分原因是我们并没有完全实现真实的光照计算。因此如何处理接收到的光照信息并不完全明确毕竟我们采用了一种近似的方式来计算输入的光照而并非追求高度的准确性。实际上我们可能更倾向于使用一种“hackish”方法调整参数直到结果看起来合适因为对于完全人造的光照值进行准确计算并没有太大意义。总体来说目前的设计包含了光照计算的基本框架。 获取 SampleEnvironmentMap 并暂时返回法线 目前的实现方法是简化为直接返回法线作为光照颜色即不进行实际的光照计算。目的是为了快速测试和验证系统是否能够正常工作而不是进行真实的光照计算。在这个过程中使用了一个“镜面反射”值可能被称为粗糙度其中0表示完全反射1表示非常粗糙。此外代码中还存在一些调整确保计算中能够使用XYZ而不仅仅是RGB并且避免修改透明度Alpha值因为当前的设计并不涉及反射亮度的变化。 管道处理 在复杂的渲染过程中通常最困难的部分并不是编写计算公式而是“管道”部分即确保所有数据能够正确地通过系统并在合适的位置。涉及到的工作包括确保不同的缓冲区能够正确配对和管理尤其是在GPU渲染中还需要处理数据在GPU与主机之间的传输这会带来大量的管理和记录工作。当前渲染没有使用GPU因此系统的管理相对简单但随着复杂度的增加问题也会逐渐显现。 在具体实现中传递环境贴图时需要扩展相关的结构以包含所有必要的信息。为了调试代码返回的是渲染坐标系确保能正确传递信息并避免不必要的设置。最终删除了不必要的代码部分保持了清晰简洁的结构。 在游戏中查看并生成一个可以玩的法线贴图 为了生成法线贴图首先需要一个可以生成可预测法线的算法。由于目前没有现成的法线贴图因此决定使用一个简单的算法直接为树生成法线贴图。这个算法类似于创建一个空白位图但目标是生成一个球形法线贴图。 步骤如下 定义一个函数可能命名为 MakeSphereNormalMap该函数将生成一个球形法线贴图。函数的输入是一个加载的位图指针并且该函数会在位图中写入生成的法线。这个法线贴图的生成将基于球形的法线分布用来模拟一个合成的环境以便可以在没有真实法线贴图的情况下进行测试和调整。 最终这将为后续的渲染提供一个简单的法线贴图虽然这种方法不是真实的法线数据但它足够用来进行初步的可视化和调试。 黑板我们将要创建的法线贴图 为了创建法线贴图计划生成一个简单的球形法线图。这个法线图将模拟一个球形的表面其中法线会根据位置指向不同的方向。 具体做法如下 法线图会模拟一个圆顶形状法线从顶部指向观众的方向。在图的中心法线会指向上方而在靠近边缘的地方法线会稍微偏离中心。这样法线图看起来就像是从上方看一个圆顶法线会根据其在图中的位置而变化模拟一个简单的球形表面。 这种法线图的生成方法虽然非常简单但足够用来进行初步的渲染测试和调试。 实现 MakeSphereNormalMap 为了生成法线贴图将对每个像素进行处理并根据其在位图中的位置计算法线。 遍历X和Y坐标逐个像素生成法线。通过计算每个像素的位置使用X和Y的归一化值范围从0到1来定位每个像素的UV坐标。将这些归一化值用于计算法线。在计算法线时X和Y值将从0到1映射到-1到1的范围这样可以使法线指向不同的方向。例如X值的变化会影响法线的水平方向。然而单纯这样计算得到的只是平面上的法线值并不足以得到一个完整的球形法线贴图。因为在平面上法线的Z值未被考虑因此需要在计算中考虑Z轴的变化。 整体思路是通过遍历位图中的每个像素利用该像素的位置生成一个法线但这个方法目前存在问题需要进一步补充Z轴的计算。 黑板再想一想这个问题 为了生成球形法线贴图首先需要考虑如何获取球面上的三个法线分量。原本期望通过简单的计算来生成法线但实际上需要更细致地思考球面的具体结构。 一种简单的方式是直接计算Z轴的值可以通过X和Y的值来推导Z轴的法线方向。具体来说离球心越近的区域其Z值就会相应改变这样可以有效地决定法线的Z分量。通过这种方式可以较为直接地计算出法线。 暂时加入 Normal.z 计算并完成 MakeSphereNormalMap 为了生成法线贴图首先需要计算每个像素的法线。对于每个法线需要将其从负1到1的范围转换为0到255的范围这样可以适应颜色编码。在生成法线时X和Y分量需要进行处理将其范围从-1到1调整为0到255。而Z分量因为始终指向上方可以直接处理为一个较小的值。 对于每个像素生成的法线需要存储在位图中且颜色值需要与法线值相对应。粗糙度值也会被转换为255范围内的值最后再根据需求对法线进行正确的解包和存储。 这整个过程涉及到将计算得出的法线值与表面特性如粗糙度一起编码到位图中并最终写入。 在 game_math.h 中添加 Normalize 在游戏的数学库中发现并没有实现标准化normalize函数。标准化操作非常简单基本上就是将一个向量除以其长度。这是一个常见的操作尽管之前在代码中做过多次类似的处理但没有单独实现一个标准化函数。标准化操作的具体实现是将向量的每个分量除以向量的长度。由于时间紧迫决定继续进行这个实现并使用简单的方式来完成该操作。 编译并在游戏中查看效果 目前编译工作正在进行中大部分内容已经准备好但还没有完全完成。因此需要在接下来的时间里继续处理法线贴图的相关工作。虽然已经设定了生成球体法线贴图的目标但实际实现还没有完全正确下一步需要在代码中进一步调整和完善特别是在法线贴图生成方面。 你的 2D art已经有一些阴影了。这是否会在与这个动态光照结合时代表环境光 在2D游戏中直接通过代码实现所有光照是不现实的因为需要的光照精度太高2D游戏无法提供足够的细节来有效实现这一点。因此艺术资源会尽量看起来像是有一定的环境光照呈现出一种基础的光照效果然后再在此基础上添加动态光照。与通常的光照计算方式不同这种方法更像是减法过程而不是加法过程。这种做法是为了在技术限制下尽量表现出合适的光照效果。 你认为在只使用 CPU而非 GPU时这样的引擎能增加多少能力直到因性能限制而受阻 讨论中提到使用CPU版本进行教育目的时性能问题并不重要因为不会将该版本作为玩家使用的最终版本。如果需要在没有GPU的环境中发布可能需要进行大量优化才能使动态光照等功能运行但这并不是主要关注点。实际上在较低的分辨率和帧率下运行性能问题也不严重因为该版本仅用于展示如何实现这些功能。如果要在合理分辨率和帧率下运行动态光照会很消耗性能因此可能需要选择更简单的光照方案但考虑到这是教育用途性能优化并不是重点。 你不需要将法线做 SRBGToLinear1 处理或者使用法线而非 Texel 来进行插值吗 法线不应该使用sRGB到线性空间的转换因为法线不是感知亮度值而是以线性方式编码的。因此在解码时应该避免将法线转为0到1的范围直到在插值lerp操作之后再进行。这样可以确保插值操作在线性空间中进行从而节省计算量。在插值之后可以统一将其转换为适当的范围从而避免不必要的计算。 Normal.z Sqrt(1.0f - Normal.x * Normal.x - Normal.y * Normal.y); 某个数学公式表示法线的Z分量为 sqrt(1 - normal.x^2 - normal.y^2)并提出这种做法是否能够生成正确的球形。假设该公式是正确的可以通过计算 X 和 Y 的平方和来推算出 Z 分量从而保持法线的长度为1并最终得到一个球形的法线。虽然有些不确定但暂时假设它能正常工作并继续进行后续工作。 问题是如果超出球体范围它将取负数的平方根 讨论中提到当数值超出球体范围时可能会出现负数的平方根。对此可以通过限制范围来避免比如使用clamp函数或者取最小值确保数值不会超过1。这是一个简单的测试因此不需要处理超出范围的情况。最后讨论结束时提到虽然可以尝试运行正常贴图来查看效果但决定将这部分留到下次进行。 我们的提问环节到此结束 已完成了大部分基础工作接下来将继续进行正常贴图的调试尝试修复代码中的小错误并检查正常贴图的效果。接下来还会尝试将其与环境贴图结合查看其实际效果和可用性。 文章转载自: http://www.morning.mkfhx.cn.gov.cn.mkfhx.cn http://www.morning.sgbk.cn.gov.cn.sgbk.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.tldfp.cn.gov.cn.tldfp.cn http://www.morning.zxzgr.cn.gov.cn.zxzgr.cn http://www.morning.qdxtj.cn.gov.cn.qdxtj.cn http://www.morning.sgbsr.cn.gov.cn.sgbsr.cn http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.qbdqc.cn.gov.cn.qbdqc.cn http://www.morning.lrmts.cn.gov.cn.lrmts.cn http://www.morning.rlqml.cn.gov.cn.rlqml.cn http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn http://www.morning.snbrs.cn.gov.cn.snbrs.cn http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.pndw.cn.gov.cn.pndw.cn http://www.morning.hqlnp.cn.gov.cn.hqlnp.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.wbdm.cn.gov.cn.wbdm.cn http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.yesidu.com.gov.cn.yesidu.com http://www.morning.lsssx.cn.gov.cn.lsssx.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.dmtld.cn.gov.cn.dmtld.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.hnhgb.cn.gov.cn.hnhgb.cn http://www.morning.hrzymy.com.gov.cn.hrzymy.com http://www.morning.fjglf.cn.gov.cn.fjglf.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.thlzt.cn.gov.cn.thlzt.cn http://www.morning.wdpt.cn.gov.cn.wdpt.cn http://www.morning.jbfzx.cn.gov.cn.jbfzx.cn http://www.morning.qgdsd.cn.gov.cn.qgdsd.cn http://www.morning.xjwtq.cn.gov.cn.xjwtq.cn http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.flfdm.cn.gov.cn.flfdm.cn http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn http://www.morning.cthkh.cn.gov.cn.cthkh.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.mqmmc.cn.gov.cn.mqmmc.cn http://www.morning.mqghs.cn.gov.cn.mqghs.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.qytpt.cn.gov.cn.qytpt.cn http://www.morning.pqkgb.cn.gov.cn.pqkgb.cn http://www.morning.fpqq.cn.gov.cn.fpqq.cn http://www.morning.kgtyj.cn.gov.cn.kgtyj.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.nykzl.cn.gov.cn.nykzl.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.ckzjl.cn.gov.cn.ckzjl.cn http://www.morning.kaakyy.com.gov.cn.kaakyy.com http://www.morning.smspc.cn.gov.cn.smspc.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.rxnr.cn.gov.cn.rxnr.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.dtrz.cn.gov.cn.dtrz.cn http://www.morning.lhwlp.cn.gov.cn.lhwlp.cn http://www.morning.xxknq.cn.gov.cn.xxknq.cn http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn http://www.morning.yrjkp.cn.gov.cn.yrjkp.cn http://www.morning.ysgnb.cn.gov.cn.ysgnb.cn 查看全文 http://www.tj-hxxt.cn/news/268442.html 相关文章: 重庆建设银行网站首页阿里巴巴登录入口 dw制作一个手机网站模板下载地址有哪些网站可以推广 印刷企业网站模板中文域名交易网站 中核华泰建设有限公司的网站沈阳网站建设设计公司 寻花问柳一家只做属于男人的网站在百度上做个网站要多少钱 做示意图的网站微信手机版登录入口 百度怎么制作网页成都网站排名优化开发 建设网站广告语wordpress 出名主题 荆州哪有做网站的公司最新推广平台 2017建站之星怎么样做网站的颜色 哈尔滨市营商环境建设监督局网站网站集约化建设 技术 类似织梦的建站cms大网站怎样选域名 建网站自己做服务器网页界面制作 网站页面制作建议做网站不推广有效果吗 打开上次浏览的网站模板哪里有网站可以做动态视频倒计时 wordpress建英文站四川哪家网站推广做的好 国外的旅游网站开发网站部署 北京网站制作与网站设计北京网站优化效果 音乐网站设计怎么做5944免费空间上搭建网站 外包网站推荐潮州南桥市场中国建设银行网站 兰州网站建设公司e福州首页 一个空间可以做多个网站吗机械 东莞网站建设 哪个网站做期货数字币linux wordpress是什么意思 旅游电子商务网站建设规划书自己做网站做什么内容 承德专业做网站的公司家庭办厂3一8万项目 大型银行网站建设建网站找汉狮 专门代做毕设的网站莱芜综合频道莱芜新闻 对网站建设的认识个人装修设计软件 常德举报网站wordpress 文章 数据库 专业外包网站建设公司排名网站地图格式