一个渲染需求

  用unity3d做游戏也有一段时间了,这周有一个渲染的需求,用到的技术不算很深,但确实也比较繁琐,值得记录一下。

  需求大概是这样的,有四层图,我们称为A,B,C,D四层。他们的Blend顺序是A->B->C->D,其中C对D的Blend算法使用的是PS中的叠加算法,B->C,D是替换,A->B,C,D也是PS的叠加。这个问题的难点在于两部分:第一,有部分层的Blend算法是使用的PS的叠加,而叠加公式为(B < 128) ? (2 * A * B / 255):(255 - 2 * (255 - A) * (255 - B) / 255),由于存在条件判断,那么这个Blend必然不能使用普通的两个Pass之间Blend算式。第二,如果使用多个pass相互叠加,那屏幕的FillRate也会有较大开销。由于要使用叠加算法,那么需要使用叠加Blend的层必须在一个pass内,因此唯一的出路应该是使用多重纹理采样,在pixel shader中实现叠加公式。那么剩下的问题就是如何来划分多重纹理采样的pass了。

  通过分析,由于B->C,D是替换关系,那么B可以作为一个独立的pass存在。那么底层就划分为B和D,A和C最为叠加层。我们先绘制D,由于D受到A和C的叠加影响,那么这个Pass就有3层纹理,分别是A,C,D。接着绘制B,而B只收到A的叠加影响。B和D之间的Pass使用基本的alpha blend混合。(由于是2D,3D可以考虑直接replace)。

  剩下还有一些问题需要解决,比如说<1>A和C作为叠加层只会影响屏幕的部分像素,<2>叠加公式有条件判断,而shader只支持sm2.0。虽然sm2.0支持静态分支,但之前有一个问题就是因为使用了条件分支,造成了部分andriod手机显示异常,所以尽量还是不要使用条件分支。第一个问题只是在ps阶段使用clip空间的坐标判断即可,第二个则是自己手动计算两条分支的结果,最后通过判断条件,选取某一个分支作为最终的结果。

一个渲染需求

时间: 2024-12-15 19:45:05

一个渲染需求的相关文章

如何做一个软件需求分析师(转来的)

这篇不想再去重复一个软件需求分析员的知识体系结构,而是挑重点来谈下成为一个合格的软件需求分析人员的关键点. 我原来对软件需求的定义或描述更多是偏于对现实世界的定义,而对软件架构的描述为现实到实现之间的第一层抽象.在这里纠正 一下即:用户需求是对现实世界的定义,而 软件系统需求是现实到实现的第一层抽象,即业务建模和软件系统用例建模.在原来的软件工程里面我们更多谈到的一个词是系统分析员,我现在将其拆分为了软件 需求BA和系统架构SA两个角色.而实际上一个真正优秀的软件需求人员必须具备两方面的能力.

需求输出---一个创业团队需求卡壳的故事

需求分析也称为软件需求分析.系统需求分析或需求分析工程等,是开发人员经过深入细致的调研和分析,准确理解用户和项目的功能.性能.可靠性等具体要求,将用户非形式的需求表述转化为完整的需求定义,从而确定系统必须做什么的过程. 以上摘自百度<需求分析>词条,软件开发中,需求分析师(或称为产品经理)承担着将用户需求转化为实际的产品理念与原型的责任,如果这一环出问题,整个团队开发进度将停滞. 以下是忠哥真实经历: 16年9月,为某农业产业链公司任职,担当技术重责,搭建农业产业化平台,后精细化为供应链金融平

由一个简单需求到Linux环境下的syslog、unix domain socket

本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参考rsyslog官网.另外,本文实验的环境实在debian8,如果是其他linux发行版本或者debian的其他版本,可能会稍微有些差异. 需求: 工作中有一个在Linux(debian8)环境下运行的服务器程序,用python语言实现,代码中有不同优先级的日志需要记录,开发的时候都是使用pytho

一个特殊需求的环形Buffer设计

最近有一个特别坑人的需求,厂家平板提供了一个回声消除接口,但每次只能读固定大小的字节数,但我们的编码器每次读取的自己数和这个大小不一样,于是就萌生了一种做一个buffer来临时存储声音数据,然后编码器再去读取,这样不管厂家每次读多少个自己,codec这边也可以控制读取的字节数了. 首先映入眼帘的肯定首选环形buffer 我先定义一个writeIndex 一个 readIndex,和一个当前buffer已经放入数据的大小 size,重点就在于判断何时可写入数据,何时又可以读出数据. 可写入必须要b

一个电子围栏需求的脚本记录

需求:系统对接了厂家的GPS数据,基于这些GPS数据,过滤出指定区域的数据 从网上找到了一个电子围栏的python脚本,现在需要的是循环取数据判断是否在指定区域,在指定区域就把这部分数据拿出来放到另外一个库表 碰到的其中一个问题是脚本的效率问题,以5W条数据来测试 脚本1:使用cur.fetchone(),逐条读取数据,逐条判断,逐条插入列表,批量入库,批量commit #!/usr/bin/env python # -*- coding: utf-8 -*- import json impor

从一个小需求感受Redis的独特魅力

分享一个简单的小需求应该怎么设计实现以及有关Redis的使用 Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的. 需求 设定,现在我们有一个APP,产品新提出一个叫"程序员树洞"的功能,具体功能就不说了,其中这个功能有一点需要做的是在使用该功能时,如果是首次进入会展示一个协议页面,用户需要勾选后点确定才能进入功能,此后再进该功能,不再显示协议页直接进入该功能.如下图所示, 原型图 需求分析 需求就是这么的

其中一个案例需求:异常流量

引出的问题 备选流,也被称为另类事件流,英语是Alternative Flow.于RUP和UML中.备选流的解释例如以下:备选事件流包含与正常行为相关的可选或异常特征的行为,同一时候也包含正常行为的各种变形.您能够将备选事件流看作是基本事件流的"绕行道".有些备选事件流将返回到基本事件流,而有些将结束此用例的运行. 分析RUP对于备选流的定义,能够看到备选流能够分成两类: 1.不同做法但仍然达成用例目标: 2.异常情况.无法达成用例目标. 在实际用例分析中.因为备选流可能存在两种情况,

公司来了一个奇葩需求pppoe client+server+EOIP+vlan

1.PPPOE SERVER在上海,有多根ADSL,不同的ADSL有不同的vlan对应不同的帐号 2.北京的ROS和上海的ROS用EOIP,在IP基础上创建桥接隧道 3.北京的ROS上同时建立PPPOE SERVER 4.北京ROS和PC机器在一个二层网络里,PC机器可以通过PPPOE拨号到北京的ROS,我们设定PPPOE的帐号密码跟上海的PPPOE帐号密码一样,一一对应. 5.北京ROS上面,eoip创建好以后,在eoip上创建不同的vlan编号,在北京的ROS上通过不同的vlan,不同的帐号

一个有意思的需求——中文匹配度

引言 最近LZ带头在做一个互联网项目,互联网的东西总是那么新鲜,这也难怪大部分猿友都喜欢互联网.这个互联网项目不仅让LZ开发了一个HBase大数据应用,近期的一次需求讨论会上,又出来一个小需求,蛮有意思的.这些需求在之前枯燥的企业内部应用开发中,还是很难见到的,毕竟内部应用更多的是业务流程的体现. 具体的需求这里不方便透露,但简单的描述一下需求,就是如何判断两个公司名是一个.这其实就是Java当中字符串的相等判断,最简单的当然是用equals来判断.但是由于实际情况是,公司名是由客户手动输出的,