首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

compose--附带效应、传统项目集成、导航

该文章将是compose基础系列中最后一篇,附带效应是这篇文章的重点,其余补充内容为如何在传统xml中集成compose、compose导航的使用 一、附带效应 有了前面的了解,我们知道compose...rememberUpdatedState rememberUpdatedState可以始终保持最新的值,从而改变LaunchedEffect运行时的引用的值 @Preview @Composable...state }) { Text(text) } } 效果,在3s内点击了两次,导致重组时移除DisposableEffect触发onDispose: 5.SideEffect...在实际开发中,灵活运用key是否唯一来使得是否需要重启效应 二、传统项目集成 官方推荐一次性替换整个布局,也可以替换部分布局,本身compose就兼容传统xml的方式,所以在传统的项目上集成compose...("home") { inclusive = true } } 只有当我们还不在“search”时,才能导航到“search”目标地,避免在后堆栈的顶部有多个副本 navController.navigate

2.2K40

基础渲染系列(十四)——雾

雾效果可调整正向渲染对象的片段颜色。因此,它仅影响这些对象,不影响天空盒。 1.3 指数雾 Unity支持的第二种雾模式是指数模式,这是雾的更逼真的近似。...(平面深度与距离) 使用深度不是距离的优点是你不必计算平方根,因此速度更快。同样,虽然不太现实,但在某些情况下(例如,横向滚动游戏)可能需要基于深度的雾。...但是,除了为其提供单独的插值器外,我们还可以将其作为第四部分搭载在世界坐标上。 ? 为确保我们的代码正确无误,请将i.worldPos的所有用法替换为i.worldPos.xyz。...之后,在需要时将片段空间深度值分配给片段程序中的i.worldPos.w。它只是同质剪辑空间位置的Z坐标,因此在将其转换为0–1范围内的值之前。 ?...最后,我们可以在片段程序中将基于深度的距离替换为实际距离。 ? ? (基于距离的雾) 除了深度缓冲区的精度限制外,前向和延迟方法都会产生相同的基于距离的雾。

2.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

进阶渲染系列(一)——平坦和线框着色(导数和几何体)

1.2 几何着色 除了使用导数指令之外,还有另一种方法可以确定三角形的法线。使用实际的三角形顶点来计算法线向量。这需要使用每个三角形不是每个单独的顶点或片段来完成工作。这就是几何着色器的领域。...用该三角形法线替换顶点法线。 ? ? (第二种方式实现 平坦着色) 虽然最终得到与以前相同的结果,但是现在使用的是几何着色器阶段,不是依赖于屏幕空间导数指令。 哪种方法更好?...在函数内部定义此类型的变量,将输入数据分配给它们,然后将其附加到流中,不是直接将输入传递给它们。 ? 现在,我们可以向InterpolatorsGeometry添加其他数据。...如果不是,请将其定义为GetAlbedo函数,使其成为默认值。 ? 在MyFragmentProgram函数中,用宏替换GetAlbedo的调用。 ?...让我们直接将其用作反照率。 ? ? (最小重心坐标) 看起来有点像白色网格顶部的黑色线框,但是太模糊了。这是因为到最近的边的距离从边的零到三角形中心的⅓。

2.4K21

进阶渲染系列(七)——三向贴图(任意表面纹理化)【进阶篇完结】

在确定片段的颜色时,现在依靠表面不是再次调用getter函数。 ? 并且在填充G缓冲区以进行延迟渲染时。 ?...将三个高度值的参数添加到GetTriplanarWeights。让我们从求幂前直接使用高度开始,替换法线向量。 ? 然后在调用函数时将高度作为参数添加。 ? ?...(其他设置GUI) 6 分离顶部贴图 大部分时候,你不希望外观完全统一。一个很明显的情况是地形,其中水平表面(指的是向上不是向下)可以是草,而其他所有表面都可以是岩石。...将其支持添加到除阴影通道之外的所有通道中。 ? 将这些额外的映射添加到我们的着色器GUI。使用顶部反照率贴图需要确定是否设置了关键字。 ?...(只有大理石) 6.3 启用顶部贴图 将所需的采样器变量添加到MyTriplanarMapping。

2.2K30

基础渲染系列(十一)——透明度

除非你选择将其用作平滑度的源,否则它会忽略Alpha通道。但是,当你使用这种材质选择一个四边形时,你会看到一个大致为圆形的选择轮廓。 ? (在不透明四边形上展示选中的轮廓) 如何得到选中的轮廓?...因此,我们将使用UI设置自定义渲染队列,不是使用标记,它会取代着色器的队列。通过在检查器处于调试模式下进行选择,可以找出材质的自定义渲染队列是什么。...Unity的标准着色器将此模式命名为Fade,因此我们将使用相同的名称。将其添加到我们的RenderingMode枚举中。 ? 在此模式下,我们将使用_RENDERING_FADE关键字。...它需要片段的alpha值来执行此操作,因此我们需要输出它,不是输出我们到目前为止一直使用的常量值1. ? 要创建半透明效果,必须使用不同于用于不透明和cut off 材质的混合模式。...如果不使用自定义UI,则可以使用HideInInspector属性将其隐藏。无论如何,我都会添加这些属性。 ? 使用这些float属性代替必须可变的blend关键字。你需要将它们放在方括号内。

3.6K20

基础渲染系列(十二)——半透明阴影

通过丢弃片段来在阴影中切出洞,就像在其他渲染过程中对Cutout渲染模式所做的那样。为此,我们需要材质的色调,反照率纹理和Alpha Cut设置。将它们的变量添加到“My Shadow”的顶部。 ?...因此,请检查该内容,不是是否定义了_SMOOTHNESS_ALBEDO。下面代码中我标记了差异。 ? 现在,我们可以在片段程序中检索alpha值,并在Cutout渲染模式下使用它进行Clip。 ?...注意我们如何使用UnityObjectToClipPos转换“My Shadows”中的顶点位置。我们也可以在“My Lighting”中使用此功能,不用自己执行矩阵乘法。...UnityObjectToClipPos函数也执行此乘法,但是使用常数1作为第四个位置坐标,不是依赖于网格数据。 ? 通过网格提供的数据始终为1,但着色器编译器不知道这一点。...通过在片段程序中添加带有VPOS语义的参数,可以访问片段的屏幕空间位置。这些坐标不是由顶点程序显式输出的,但是GPU可以使它们可供我们使用

3.2K40

Android入门教程 | Fragment 基础概念

当执行此类片段事务时,也可将其添加到由 Activity 管理的返回栈 — Activity 中的每个返回栈条目都是一条已发生片段事务的记录。借助返回栈,用户可以通过按返回按钮撤消片段事务(后退)。...(在本例中,此值为 false,因为系统已将扩展布局插入 container,传递 true 值会在最终布局中创建一个多余的视图组。) 接下来,需将该片段添加到您的 Activity 中。...注意:每个片段都需要唯一标识符,重启 Activity 时,系统可使用该标识符来恢复片段(也可以使用该标识符来捕获片段,从而执行某些事务,如将其移除)。...执行Fragment事务 在 Activity 中使用片段的一大优点是,可以通过片段执行添加、移除、替换以及其他操作,从而响应用户交互。...例如,以下示例说明如何将一个片段替换为另一个片段,以及如何在返回栈中保留先前的状态: // Create new fragment and transaction Fragment newFragment

3.5K40

基础渲染系列(三)多样化的表现——组合纹理

实际上,它在返回最终结果之前,会丢弃所有未使用的东西。 当然,我们不是替换原始采样,而是要合并两个采样,将它们相乘即可。但在此之前,我们先再加一个小插曲,先使用完全相同的UV坐标对纹理采样两次。...因此,有意义的是将更多数字位用于较暗的值不是较亮的值。指数运算可以通过在较大范围内拉伸较低的值,同时压缩较高的值来实现此目的。 sRGB是使用最广泛的图像颜色格式。...然后,着色器将使用这些线性颜色进行操作。之后,片段程序的输出会被转换回伽玛空间。 使用线性颜色的优点之一是它可以实现更逼真的照明计算。那是因为光的相互作用在现实生活中是线性的,不是指数的。...将此属性添加到额外的纹理中,并保留主纹理的平铺和偏移输入。 ? 这个想法是,平铺和偏移控件显示在我们的着色器检查器的顶部。当它们位于splat贴图旁边时,我们实际上会将它们应用于其他纹理。...当然,我们现在仅使用了R通道,那么我们如何同时添加G和B通道呢?然后(1,0,0)代表第一纹理,(0,1,0)代表第二纹理,(0,0,1)代表第三纹理。

2.6K10

Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination)

因此,将其添加到LitPass中的“Attributes”中。 ? 照明是按每个片段计算的,因此我们也必须将法向矢量添加到Varyings中。...这也能让我们更加轻松的通过替换带有相同函数的文件来修改着色器的功能修改。 现在,我们可以在LitPassFragment中获取光照并将其用于片段的RGB部分了。 ? ?...我们可以依靠这些信息不是全局的光参数。为此,Lighting需要访问剔除结果,为Setup添加一个参数,并将其存储在字段中以方便使用。...2.5 多方向光 使用可见光数据可以支持多个定向光,但是我们必须将所有这些光的数据发送到GPU。因此,我们将使用两个Vector4数组,不是两个Vector,并为光计数加上一个整数。...我们将视角方向视为表面数据的一部分,因此将其添加到Surface。 ? 在LitPassFragment中分配它。它等于相机位置减去片段位置(归一化)。 ?

5.6K40

基础渲染系列(二)——着色器

将其添加到着色器的顶部。 ? 在新块内放置一个名为_Tint的属性。可以给它起任何名字,但是习惯上是用下划线开头,后跟一个大写字母,后跟小写字母。这并不是规定,而是约定俗成,可以防止意外的重复名称。...但是,转换后的位置不是很有用。因此,让我们改为使用网格中的局部位置作为颜色。但如何将多余的数据从顶点程序传递到片段程序呢? GPU通过栅格化三角形来创建图像。...还有一些特殊的颜色语义,但是很少使用,并且并非在所有平台上都可用。 现在,已编译的片段着色器将使用插值数据不是统一色调了。 ? ? 当然,顶点程序必须输出本地位置才能起作用。...再一次,我们可以使用一个结构对其进行分组。 ? 让我们直接将UV坐标传递给片段程序,替换本地位置。 ? 通过将UV坐标解释为颜色通道,可以使它们像局部位置一样可见。...要使用它,只需将其与UV坐标相乘即可。这可以在顶点着色器或片段着色器中完成。在顶点着色器中执行此操作很有意义,因此我们仅对每个顶点执行乘法,不是对每个片段执行乘法。 ? ?

3.8K20

基础渲染系列(二十)——视差(基础篇完结)

因为我们将使用此贴图创建视差效果,所以通常称为视差贴图,不是高度贴图。 ? (视差的高度贴图) 请确保在导入时禁用sRGB(彩色纹理),以便在使用线性渲染时不会弄乱数据。...当定位模型3时,我们可以使用TEXCOORD8。不支持此功能的硬件通常功能不是很强大,因此无论如何你都不希望使用视差贴图。...使用原始顶点切线和网格数据中的法线向量在顶点程序中创建对象到切线的空间转换矩阵。由于我们仅将其用于转换矢量(不是位置),因此3×3矩阵就足够了。 ?...现在,通过使用PARALLAX_FUNCTION宏替换对ParallaxOffset的硬编码调用,可以使视差方法更加灵活。如果尚未定义,我们将其设置为使用偏移方法。 ?...这意味着我们将对高度图进行十次采样,不是一次,因此这并不是一个便宜的效果。 因为我们使用十个样本,所以步长为0.1。这就是我们沿着视线移动的因素,即我们的UV增量。 ?

2.9K20

Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders and Batches)

顶点的Position不是float4吗? 通常,在3D空间中的点是使用4D矢量定义的,其第四分量设置为1,方向矢量则将其设置为零。这使得可以使用相同的变换矩阵正确地变换位置和方向。...还将SRP批处理程序的bool参数添加到构造函数中,不是始终启用它。 ?...可以将渲染队列设置为Transparent,但这只是在对象被绘制时,提供应该按什么顺序,不是如何去绘制时。 ? (减少alpha值,并且使用透明渲染队列) 不需要编写单独的着色器来支持透明材质。...alpha值低于此阈值的片段将被丢弃,所有其他片段将保留。添加一个_Cutoff属性,默认情况下将其设置为0.5。...(把Alpha 裁切设置为0.2) 材质通常在透明混合或Alpha裁剪中二选一,不是同时使用。除了丢弃的片段外,典型的clip 材质是完全不透明的,并且确实会写入深度缓冲区。

5.9K51

基础渲染系列(六)——凹凸

如果我们将此高程数据存储在纹理中,则可以使用它来生成每个片段不是每个顶点的法向矢量。这个想法被称为凹凸贴图,最初由James Blinn提出。 这是一张曾经伴随我们的大理石纹理的高度图。...使用默认导入设置将其导入到你的项目中。 ? (大理石的高度图) 将_HeightMap纹理属性添加到“My First Lighting Shader”。...由于当前正在使用XZ平面中的四边形,因此其法向矢量始终为(0,1,0)。因此我们可以使用常量法线,忽略顶点数据。现在暂时这样试试,稍后再考虑不同的方向。 ? 如何在其中包括高度数据?...现在,当我们需要主UV时,应该使用i.uv.xy不是i.uv。 ? 将细节纹理分解为反照率。 ? ? ?...由于对所有pass使用相同的设置是有意义的,因此我们必须在基本pass和附加pass中都定义它。但是我们也可以将其放在着色器顶部的CGINCLUDE块中。该块的内容包含在所有CGPROGRAM块内。

3.5K40

基础渲染系列(五)——多灯光

Unity将使用此通道来渲染其他光源。 ? 但现在,我们看到的是辅助光,不是主光。Unity会同时渲染这两者,但是附加通道最终会覆盖基本通道的结果。...这显然是错的, 附加通道必须将其结果添加到基本通道中,不是替换它。我们可以通过更改附加通道的混合模式来指示GPU执行此操作。 新和旧像素数据的组合方式由两个因素决定。...这样通过的结果将替换帧缓冲区中以前的任何内容。要添加到帧缓冲区,我们必须指示它使用“ One One”混合模式。这称为additive blending。 ? ?...你可以使用各种纹理格式来创建点光源cookie,Unity会将其转换为立方体贴图。你必须指定Mapping,以便Unity知道如何解释你的图像。...不过也不是没有办法,还有另一种方法可以使灯光便宜得多,而且无需完全关闭它们。我们可以逐顶点不是片段渲染它们。 每个顶点渲染一个光源意味着你可以在顶点程序中执行光照计算。

2.4K20

Unity通用渲染管线(URP)系列(四)——方向阴影(Cascaded Shadow Maps)

请求渲染纹理后,Shadows.Render还必须指示GPU渲染到该纹理不是相机的目标。这是通过在缓冲区上调用SetRenderTarget,标识渲染纹理以及如何加载和存储其数据来完成的。...3.4 采样级联 将级联计数和球形剔除数组添加到Shadows中。 ? 级联指数是根据每个片段不是每个光确定的。因此,让我们介绍一个包含它的全局ShadowData结构。...(距离渐变) 3.8 级联渐变 我们也可以使用相同的方法在最后一个层叠的边缘处淡化阴影,不是将其切除。为此添加一个层叠渐变阴影设置滑块。 ?...唯一的区别是我们使用级联的距离和半径的平方,不是线性深度和最大值。这意味着过渡变为非线性: ,其中r 为剔除球半径。差别不是很大,但是要保持配置的淡入淡出率不变,我们必须将f 替换为 。...(斜率比偏差) 斜率比偏差是有效的,但不是直观的。实验是需要达成一个可接受的结果,不是用Peter-Panning来替换粉刺。因此,让我们暂时禁用它,并寻找一种更直观和可预测的方法。 ?

6.4K40

创建Android库的方法及Android .aar文件用法小结

不过,Android 库将编译到您可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,不是在设备上运行的 APK。...模块的整个结构仍然相同,但是现在它将作为 Android 库运行,构建也将创建一个 AAR 文件,不是 APK。...新建的Library与正常的Application最大区别是module build.gradle中是apply plugin: ‘com.android.library’ 不是 apply plugin...如果在两个模块中均定义了给定资源 ID,将使用应用中的资源。 如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies块顶部)的库中的资源。...要指定您的库的配置文件名称,请将其添加到 consumerProguardFiles方法中,此方法位于您的库的 build.gradle文件的 defaultConfig块内。

2.9K10

如何在Ubuntu 14.04上安装Graylog 1.x.

介绍 在本教程中,我们将介绍如何在Ubuntu 14.04上安装Graylog v1.3.x(有时称为Graylog2),并将其配置为在集中位置收集系统的syslog。...找到指定的network.host行,取消注释,并将其替换为“localhost”,使其如下所示: network.host: localhost 保存并退出elasticsearch.yml。...-repository-ubuntu14.04_latest.deb 然后使用以下命令将包添加到包管理器: sudo dpkg -i graylog-1.3-repository-ubuntu14.04...使用以下命令创建所需密码的shasum,用您自己的密码替换突出显示的“密码”。...graylog-development”(与Elasticsearchcluster.name相同): elasticsearch_cluster_name = graylog-development 取消注释这两行以使用单播不是多播来发现

1.2K20

安卓 topic-菜单 Menu

要提供熟悉一致的用户体验,您应使用 Menu API 呈现 Activity 中的用户操作和其他选项。...使用 XML 定义菜单 对于所有菜单类型,Android 提供了标准的 XML 格式来定义菜单项。您应在 XML 菜单资源中定义菜单及其所有项,不是在 Activity 的代码中构建菜单。...定义后,您可以在 Activity 或片段中扩充菜单资源(将其作为 Menu 对象加载)。...如果您的 Activity 和片段均为选项菜单声明项目,则这些项目将合并到 UI 中。 系统将首先显示 Activity 的项目,随后按每个片段添加到 Activity 中的顺序显示各片段的项目。...在下一步中,您将了解如何初始化该变量,以及保存 Activity 或片段中的成员变量有何作用。

2.6K20
领券