Stencil

[Shader2D]漩涡效果

对着背影说爱祢 提交于 2020-11-26 03:56:42
1:效果图 2:源码 Shader "Custom/uiblood" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _CloudTex("噪声",2D) ="white"{} _Color ("Tint", Color) = (1,1,1,1) _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" }

游戏优化性能杂谈(十一)

烂漫一生 提交于 2020-11-08 09:16:50
VS之后,是光栅化阶段。这个阶段属于固定功能(不可编程)阶段,通常被认为是执行效率很高的,所以往往会被忽视。 其实就我所观察到的情况来言,这部分成为瓶颈的情况,并不罕见。比如《原神》在开发过程当中,就出现过这样的情况。 《原神》当时的情况是,游戏当中当人物爬树的时候,为了避免树冠遮挡人物,会有一个将树冠变成半透明的效果。普通的半透明渲染是已知的性能杀手,所以这里开发商采用了用stencil抠掉一些像素,也就是所谓的dither(抖动)的方法。如果不了解这种方法,可以想象一下报纸上的那些图片,都是一些点状的图案组成的。 按理说,这种镂空会减少需要渲染的像素,也就是PS的工作量。但是开发组发现,最终结果是不降反升。也就是渲染时间反而增加了。而且更加不可思议的是,通过对比开关此效果的GPU跟踪文件,可以观测到PS工作量的确是明显减少,但是渲染时间并没有变化甚至是略微变长了。 其实原因就在于光栅化。VS输出的三角形,在光栅化模块进行光栅化之后,形成PS工作量。在光栅化之前,会进行根据三角形级别的背面/正面剔除、视锥剔除/裁剪,以及零面积/小三角形剔除。但是,基于stencil测试级别的排除,并不是发生在三角形级别,而是发生在光栅化之后的fragment级别。也就是说,dither虽然减少了进入PS阶段的fragment数量,但是并不影响光栅化的工作量。 但是如果仅仅是如此

[译]Vulkan教程(15)图形管道基础之RenderPass

烂漫一生 提交于 2020-10-25 11:29:00
[译]Vulkan教程(15)图形管道基础之RenderPass Render passes Setup 设置 Before we can finish creating the pipeline, we need to tell Vulkan about the framebuffer attachments that will be used while rendering. We need to specify how many color and depth buffers there will be, how many samples to use for each of them and how their contents should be handled throughout the rendering operations. All of this information is wrapped in a render pass object, for which we'll create a new createRenderPass function. Call this function from initVulkan before createGraphicsPipeline . 在创建管道收工前,我们需要告诉Vulkan,渲染时要使用哪些帧缓存附件

不同角度看问题

不打扰是莪最后的温柔 提交于 2020-10-22 17:39:17
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者:王巍(onevcat),江湖人称 "喵神",他是 ObjC 中国组织的发起人和领导者,也是著名开源框架 Kingfisher 的作者。 起源 前几天看到同事的一个 P-R,里面有将一个类型转换为字典的方法。在我们所使用的 API 中,某些方法需要接受 JSON 兼容的字典 (也就是说,字典中键值对的 value 只能是数字,字符串,布尔值,以及包含它们的嵌套字典或者数组等),因为项目开始是在好几年前了,所以一直都是在需要的时候使用下面这样手写生成字典的方法: struct Cat { let name: String let age: Int func toDictionary() -> [String: Any] { return ["name": name, "age": age] } } let kitten = Cat(name: "kitten", age: 2) kitten.toDictionary() // ["name": "kitten", "age": 2] 显然这是很蠢的做法: 对于每一个需要处理的类型,我们都需要 toDictionary() 这样的模板代码; 每次进行属性的更改或增删

Springboot集成flowable modeler web流程设计器

六月ゝ 毕业季﹏ 提交于 2020-10-14 13:54:59
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <type>pom</type> <scope>import</scope> </dependency> <!--Spring Cloud-->

Velodyne Lidar利用Kaarta Cloud生成令人惊叹的3D地图

白昼怎懂夜的黑 提交于 2020-09-30 06:52:25
高质量激光雷达处理可实现针对各种应用的快速移动测绘 加州圣何塞--(美国商业资讯)-- Velodyne Lidar, Inc. 今日宣布, Kaarta Cloud ®将独家支持Velodyne的激光雷达传感器。Kaarta新的基于云的应用程序是处理、存储和共享3D空间的平台。与高质量激光雷达配合使用以3D形式捕获环境后,数据可上传到Kaarta Cloud中,以快速、轻松地将其处理为点云以供使用。即日起,高质量的3D移动测绘可用于更广泛的用户群。 此新闻稿包含多媒体内容。完整新闻稿可在以下网址查阅: https://www.businesswire.com/news/home/20200818005149/en/ Kaarta Cloud支持三款Velodyne传感器—— Ultra Puck™ 、 Puck™ 和 HDL-32E 。在使用Velodyne传感器扫描环境后,Kaarta专有的 Kaarta Engine 使用同时定位与地图构建(SLAM)算法将激光雷达数据即时处理为已注册的点云图。这使用户能够生成准确、可测量的3D模型以及复杂环境的生动视觉表示,这些复杂的环境包括建筑物、基础设施及危险区域和难以进入的区域。 移动扫描系统在不断进步,而这些系统的应用可能性也越来越大。人们对激光雷达成像用于震后评估、受损建筑物的调查、紧急情况下协助急救人员等方面的兴趣日益浓厚

Springboot集成flowable modeler web流程设计器

孤人 提交于 2020-08-16 23:48:14
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> < dependencyManagement > < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-dependencies </ artifactId > < type > pom </ type > < scope > import </ scope > </

22VulKan——内存管理

牧云@^-^@ 提交于 2020-08-15 15:24:49
1.内存 VulKan将内存分为两类: Host Memo ry 和 Device Memory. Host是运行应用程序的处理器,在PC端上就是指 CPU ;Device是执行VulKan命令的处理器,也就是 GPU. Host memory指的是对Host可见的内存,Device memory指的是对Device可见的内存。 在 使用Host Memory 时, 一定要注意内存对齐 。不允许简单的直接把malloc hook到Vulkan的内存分配函数上! 更详细的,Vulkan系统中的内存有四种类型: Host Local Memory ,只对Host可见的内存,通常称之为 普通内存 Device Local Memory, 只对Device可见的内存,通常称之为 显存 Host Local Device Memory ,由Host管理的,对Device看见的内存 Device Local Host Memory ,由Device管理的,对Host可见的内存 其中,不同内存类型适用不同场景: Device Local Memory 适合 优先级最高 的资源,通常是 纹理 等频繁被使用的渲染数据。当内存空间不够时我们才会考虑是否将这些内存数据放到CPU端。 Device Local Host Memory 适合 CPU 到 GPU的数据传递 , 一些顶点数据等

activiti modeler 任务节点自定义属性扩展

有些话、适合烂在心里 提交于 2020-08-15 07:46:34
  在工作中使用Activiti modeler时难免会遇到局限,如usertask中的属性,完全不够用,这时需要我们去扩展。   activiti modeler通过读取stencilset.json生成编辑器UI,在界面上的扩展需要了解stencilset.json配置文件,它定义元素的属性,规则的配置文件,页面的展示就是根据这个配置文件生成的。 配置文件说明: --属性的定义 "propertyPackages" : [ { "name" : "process_idpackage", "properties" : [ { "id" : "name", ---id "type" : "String", --类型,在赋值的时候会根据类型展示各种输入框,根据properties.js "title" : "名称", --显示的标题 "value" : "", --值 "description" : "BPMN元素的描述性名称.", --描述 "category":"property", --分类,空的话位popular "popular" : true, --是否显示 "refToView" : "text_name" --触发svg里面的效果 }] --节点的定义 "type" : "node", "id" : "MailTask", "title" : "邮件任务",--标题

activiti modeler 任务节点自定义属性扩展

[亡魂溺海] 提交于 2020-08-15 05:42:52
  在工作中使用Activiti modeler时难免会遇到局限,如usertask中的属性,完全不够用,这时需要我们去扩展。   activiti modeler通过读取stencilset.json生成编辑器UI,在界面上的扩展需要了解stencilset.json配置文件,它定义元素的属性,规则的配置文件,页面的展示就是根据这个配置文件生成的。 配置文件说明: --属性的定义 "propertyPackages" : [ { "name" : "process_idpackage", "properties" : [ { "id" : "name", ---id "type" : "String", --类型,在赋值的时候会根据类型展示各种输入框,根据properties.js "title" : "名称", --显示的标题 "value" : "", --值 "description" : "BPMN元素的描述性名称.", --描述 "category":"property", --分类,空的话位popular "popular" : true, --是否显示 "refToView" : "text_name" --触发svg里面的效果 }] --节点的定义 "type" : "node", "id" : "MailTask", "title" : "邮件任务",--标题