非常犀利的几个技术视频

http://software.intel.com/en-us/videos/occlusion-booster-gdc/

 

偶尔看见的一个中间件开发商,umbrasoftware,专门开发occlusion boost,做occlusion方向的优化,3平台支持。

提出号称很牛的occlusion解决方案,可以提高场景的效率%20--%100,估计是要针对occlusion不太好的场景,然后在数据creation方面可以帮助开发者省略掉portal,occlusion mesh这些东西的定制,提高了开发效率。

不知道他们怎么做的,但是从他们网站上弄了些比较有启发性的句子:

 

  • OB needs to know the bounding volumes and transformation matrices of objects, and the viewing camera parameters.
  • occlusion queries less than 1ms of GPU time.
  • Performance is gained on both CPU and GPU when only visible objects are rendered.
  • about 300bytes per object on memory usage

 

我乱猜想下可能的方法是:

  • frustum的visibility test,
  • object的occlusion query结果在下一帧使用,如果不可见就直接cancel掉drawcall(所以才会cpu,gpu都节省)
  • object的occlusion query应该是用bounding volume(所以才会小于1ms的gpu time)

bioware在用,ccp的eveonline和age of connan在用。那估计应该是比我想的要强力得多。

 

http://software.intel.com/en-us/videos/havok-cloth-demo-at-gdc-2010/

 

介绍cloth和softbody,这个,嗯嗯,效果很好,很强力,更新可以在多线程做,效率也不错。

 

不过上面两个就是给下面这个做绿叶的,看看enlighten的这个,too sexy:

http://software.intel.com/en-us/videos/geomerics-enlighten-demo-at-gdc-2010/

 

可以做到针对静态场景动态光源做GI,动的物体可以受到间接光照,但是不能cast indirect lighting。

而且我个人更喜欢这个胜过crytek的light propagation volume,这个的效果真tmd赞。

 

上图的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个简单的宠物大作战的Java代码片段,它包括了分支、数组、循环、多态继承和异常处理。 ```java import java.util.Random; public class PetBattle { public static void main(String[] args) { Pet[] pets = new Pet[5]; pets[0] = new Dog("旺财", 100, 20); pets[1] = new Cat("咪咪", 80, 30); pets[2] = new Bird("小鸟", 60, 40); pets[3] = new Dog("小黑", 120, 15); pets[4] = new Cat("花花", 90, 25); Random random = new Random(); int round = 1; while (true) { System.out.println("第" + round + "回合开始!"); for (int i = 0; i < pets.length; i++) { if (pets[i].isAlive()) { int targetIndex = random.nextInt(pets.length); while (!pets[targetIndex].isAlive()) { targetIndex = random.nextInt(pets.length); } pets[i].attack(pets[targetIndex]); } } boolean allDead = true; for (Pet pet : pets) { if (pet.isAlive()) { allDead = false; break; } } if (allDead) { System.out.println("所有宠物都已经死亡,游戏结束!"); break; } round++; } } } abstract class Pet { protected String name; protected int health; protected int attackPower; public Pet(String name, int health, int attackPower) { this.name = name; this.health = health; this.attackPower = attackPower; } public boolean isAlive() { return health > 0; } public void attack(Pet target) { System.out.println(name + "攻击了" + target.name + "!"); target.defend(attackPower); } public void defend(int attackPower) { if (attackPower >= health) { health = 0; System.out.println(name + "受到了致命一击,已经死亡!"); } else { health -= attackPower; System.out.println(name + "受到了" + attackPower + "点伤害,剩余生命值为" + health + "。"); } } } class Dog extends Pet { public Dog(String name, int health, int attackPower) { super(name, health, attackPower); } @Override public void attack(Pet target) { System.out.println(name + "狂吠着扑向了" + target.name + "!"); super.attack(target); } } class Cat extends Pet { public Cat(String name, int health, int attackPower) { super(name, health, attackPower); } @Override public void attack(Pet target) { System.out.println(name + "眼神犀利地扑向了" + target.name + "!"); super.attack(target); } } class Bird extends Pet { public Bird(String name, int health, int attackPower) { super(name, health, attackPower); } @Override public void attack(Pet target) { System.out.println(name + "飞身向" + target.name + "扑去!"); super.attack(target); } } ``` 上述代码中,我们使用了多态和继承来创建不同种类的宠物。我们使用了数组来存储所有的宠物对象,并使用了循环来遍历宠物数组。在每个回合中,每个宠物都会对随机选择的一个其他宠物发起攻击。我们也使用了异常处理来处理可能的异常情况,例如攻击力超过生命值等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值