Bubbles Shader in Houdini泡泡泡泡泡泡泡泡泡泡

20 篇文章 0 订阅

在尝试做一个泡泡的shader,现在已经初步做好alpha,下一步做shading,泡泡的形态全部以一种procedure的方式实现,给一个粒子或者点云,就可以渲染出一堆泡泡,泡泡的半径用pscale指定。这样粒子用flip什么的动起来的时候,就能看到一堆泡泡在流动了。

目前的实现是纯节点连出来的,不得不说节点虽然连的快但是实在蛋疼…… 稍微复杂点的不但要注意怎么连,还特娘的要注意在2D空间怎么摆放,而代码堆放的复杂度基本是1D的,一块一块顺着写就行了。



原理还算简单,把泡泡的膜分为两部分,一种是泡泡和泡泡之间的隔膜,是平面,一种是泡泡和外界之间的薄膜,是球形的。

平面的中间隔膜,可以根据ray的当前sample P和下一step之后的P判断两个位置最近的点(点云或者粒子)是不是同一个,如果是同一个就处在同一个泡泡的空间中,就没有隔膜。如果是两个不同的点,就说明这step之间穿过了这两个点之间的隔膜,通过求两点之间的中间平分的平面得到隔膜的shading。法线也好求,Normalize(近点-远点)。

和外界之间的薄膜,可以对ray当前和sample P和下一step之后的P和最近的点<这个点的pscale做个xor,结果为true则穿过了薄膜,位置就近似在pscale*normalize(p-p0)+p0,法线normalize(p-p0)。

目前用fresnel做的alpha。shading可以用各种specular model来做了。

等看看能不能用这方法做个啤酒泡沫。

泡泡龙是一款非常经典的游戏,也是很多Python初学者喜欢尝试编写的一个小游戏。下面是一个简单的Python泡泡龙游戏代码示例: ``` import pygame from random import randrange as rnd # 初始化pygame pygame.init() # 定义一些常量 WIDTH, HEIGHT = 800, 600 FPS = 50 # 创建游戏窗口 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Bubble Shooter") # 加载图片 bg = pygame.image.load("background.jpg") bubble_img = pygame.image.load("bubble.png") # 设置字体 font = pygame.font.SysFont("Arial", 36) # 定义颜色常量 BLACK = (0, 0, 0) WHITE = (255, 255, 255) # 定义泡泡类 class Bubble: def __init__(self, x, y, color): self.x = x self.y = y self.color = color def draw(self): screen.blit(bubble_img, (self.x, self.y)) def move(self): self.y -= 5 # 定义一些变量 bubbles = [] score = 0 # 添加泡泡函数 def add_bubbles(): for i in range(5): x = rnd(100, WIDTH-100) y = rnd(100, HEIGHT-100) color = (rnd(0, 255), rnd(0, 255), rnd(0, 255)) bubble = Bubble(x, y, color) bubbles.append(bubble) # 游戏循环 running = True while running: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: add_bubbles() # 绘制背景 screen.blit(bg, (0, 0)) # 绘制泡泡并移动 for bubble in bubbles: bubble.draw() bubble.move() # 绘制得分 score_text = font.render("Score: " + str(score), True, WHITE) screen.blit(score_text, (20, 20)) # 更新屏幕 pygame.display.update() # 设置帧率 pygame.time.Clock().tick(FPS) # 退出pygame pygame.quit() ``` 这个泡泡龙游戏代码示例使用了Python的pygame库来实现游戏窗口、图片加载、事件处理等功能,通过添加Bubble类来实现泡泡的绘制和移动,并在游戏循环中不断调用add_bubbles()函数来添加新的泡泡。同时,在游戏循环中也绘制了得分,并在按下空格键时调用add_bubbles()函数来添加新的泡泡
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值