图形开发misc

图形方面的东西开发流程根据自己经验可以分成这样一些情况:


1,成熟技术,随处可见的例子

像普通的shadow map,相对来讲可以说是和美术交流少的。

基本上是程序自己搞定的事情,因为不需要太多美术参与,那么也不必考虑大家工作并行的因素,属于可以后面来实现,然后自己慢慢搞就好。

当然这个也是非常影响效率和效果的feature,所以也可以根据项目组需要实现。


2,简单技术,没见过的feature

很多小效果,实现起来很简单,但是没有可以参考的例子,完全是大家想象。

这种情况下,关键点在”未知“,因为是图形,是关乎感觉的东西,这种没法完全靠凭空想象来提出明确的需求,甚至说没法以简单的方式描述出来想要什么,其对应方式是慎重思考,快速实现。

快速的prototype,程序这边不用管结构云云,效果快速出来,可以调节的参数做出来,然后回避缓慢的pipeline,

比如说有些东西需要走material editor,然后cook,load才能进runtime game的东西,就要弄一个更加快捷的方式,可以让美术直接load一些material参数,迅捷的在游戏中实时的调节。

这个过程中肯定有反复,要求开发者耐心,体谅彼此的工作,作出牛逼效果的欲望和决心,然后快速的把效果定下来。

至此需求就明晰了,那么程序端就写出高效稳定结构好的程序,美术把参数填进去,gpp把接口使用好。

 

3,复杂技术,没见过的feature

这个是项目很头疼的地方,因为缺少参考点,所以里面在实现效率和效果上均存在风险,而且投资比较大。

一般说来仅在某些情况下会做这样的投资:

  • 核心竞争力:bioshock描述的是水下世界,ue3做的水根本不行,就得亲自上阵砸锅卖铁的开发出惊人的水;farcry2描述非洲大陆,那么野外植被一定要好;GTA和assasin's creed的人物动画和行为。。。简而言之,核心所在不惜重兵。
  • 百尺竿头更进一步:insomniac用spu做大量的gpu工作这种,因为在uncharted1中已经做好了大量的基础工作,那些成熟技术,随处可见的例子之类也已经高效完成了,那么在uncharted2中也没有那么多的高性价比的东西来做了,这个时候就是百尺竿头更进一步,挑战高端和上流实属水到渠成。
  • 人力富裕:比如render组在前期搭建gameplay阶段没有太多重要事情可做,那就不如做这样后期没有时间做,但能帮助项目取得亮点的R&D工作。

这种情况下,项目要:

  • 找对人
  • 给予空间,时间和信任
  • 给予客观的反馈
  • 前途暗淡的情况下,果断停止投资

开发者要:

  • 核心和效果方面的开发对理论和算法方面的探求一清二楚是第一位的,不要因为暂时的困难而退缩,采取其他轻量级不适合的方法,而犯方向性错误
  • 方法确定了,则快速prototype效果,和前面一样,这是投石问路阶段,代码结构优雅等自然写就好,不用刻意看,先prototype出来,诚实的给项目组看,获得认可之后再进入production阶段,不行则立刻清仓,把损失减到最小
  • production:紧凑优雅的结构,深入骨髓的优化,清晰的文档。。。

平时来看项目组在时机不对的时候要避免这样的投资,时机对的时候则毫不吝啬果断投资。


开发过程中一些要考量的点:

  • 并行性:graphics programming上承GPP,下接美术,把效果调试和曝调用接口分离,可以让gpp和美术同时开工,可以有效的缩短feature的开发周期。
  • 区分prototype和production----prototype做的慢和production质量低都是不合理的。
  • 沟通:美术不理解技术这是正常的大多数的,美术懂很多技术这是很难得的少数的,所以每做完个东西一定要和artist把这个技术沟通清楚,在理解的基础上才能把技术的华丽发挥到极致。技术做的好,但是没发挥好,artist和coder都是有责任的。
  • 互相体谅工作,有些东西是你也可以做我也可以做,积极点争着做则大家干着开心,最后反而更快。彼此推托则满肚子火。多做点对于年轻人来说不算什么还能减肥,真正会对人造成伤害的是感觉自己的付出不被珍惜和尊重。
### 杂项标志(Misc Flag)的目的与用途 杂项标志(`misc flag`)通常用于编程和系统配置中,表示一组额外的选项或状态标记。它的主要目的是提供一种灵活的方式来扩展功能或调整行为,而无需修改核心逻辑。以下是关于 `misc flag` 的一些关键点: #### 1. **目的** `misc flag` 是用来传递附加信息的一种方式,在某些情况下可以控制特定的行为或启用/禁用某些特性。它可能被设计成位掩码的形式,允许通过按位操作来设置多个独立的状态。 例如,在 Linux 系统调用或其他低级 API 中,`misc flag` 可能会被用来指定文件打开模式中的特殊选项[^1]: ```c int flags = O_RDONLY | O_NONBLOCK; fd = open("/path/to/file", flags); ``` 在这里,`O_RDONLY` 和 `O_NONBLOCK` 都是不同的标志位,它们可以通过按位 OR 运算组合在一起,形成最终的 `flags` 参数。 #### 2. **常见场景** - **文件 I/O**: 如上例所示,Linux 文件系统的 `open()` 函数支持多种标志,其中许多都可以视为 `misc flag`。 - **网络通信**: 在套接字编程中,`setsockopt()` 或其他函数可能会接受一个标志参数,用于更改连接的行为。 - **图形界面开发**: Android 开发中的一些主题样式定义也涉及类似的机制。如果未正确声明命名空间,则可能导致解析错误[^3]。 #### 3. **实现细节** 在 Python 中,类似于 C 的位运算也可以通过整数完成。例如,假设有一个类库提供了如下常量: ```python READ_ONLY_FLAG = 0b0001 WRITE_ONLY_FLAG = 0b0010 APPEND_MODE_FLAG = 0b0100 NON_BLOCKING_FLAG = 0b1000 ``` 那么用户可以根据需求自由组合这些标志: ```python mode_flags = READ_ONLY_FLAG | NON_BLOCKING_FLAG if mode_flags & READ_ONLY_FLAG: print("Read-only mode enabled.") if mode_flags & NON_BLOCKING_FLAG: print("Non-blocking mode enabled.") ``` 这种技术不仅限于底层语言;即使是在高层次框架中,比如 Spacemacs 的自定义编辑器集成,也可能依赖某种形式的标志变量来决定加载哪些模块或执行何种初始化脚本[^2]。 #### 4. **注意事项** 当处理来自不同源的数据结构时,务必确认字段解释的一致性。特别是在跨平台环境中使用第三方库(如 psutil),开发者应查阅官方文档以理解各版本间潜在差异。 --- ### 示例代码片段 下面是一个简单的例子展示如何利用 Python 实现基于标志的功能切换: ```python class FileHandler: MODE_READ = 0b0001 MODE_WRITE = 0b0010 MODE_APPEND = 0b0100 def __init__(self, path, mode=MODE_READ): self.path = path self.mode = mode def operate(self): if self.mode & self.MODE_READ: with open(self.path, 'r') as f: print(f.read()) elif self.mode & self.MODE_WRITE: with open(self.path, 'w') as f: f.write('Test content') fh = FileHandler('./example.txt', FileHandler.MODE_READ | FileHandler.MODE_WRITE) fh.operate() ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值