Displacement Map

Displacement Map能够提升模型的表面细节,通过将顶点沿着法线方向反向偏移实现。它结合细分技术能显著增强视觉效果。在顶点着色器中,将法线、切线和顶点坐标转换到世界空间,并根据距离确定细分因子。 hull shader确定细分因子,domain shader和pixel shader进一步处理,利用D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST进行图元细分,根据距离动态调整mipmap等级,以实现更细致的渲染效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Normal Map仅仅提升了光照细节,并没有提升图元细节,Normal Map仅仅只是一种光照技巧。
Displacement Map可以用于提升图元的细节。位移贴图配合细分可以极大的提升效果。
Displacement Map通过将顶点沿着法线方向的反方向进行偏移。
p=p+s(h1)

``` def __init__(self, template_path): super(Model, self).__init__() # 初始化父类 # 加载模板网格 self.template_mesh = jr.Mesh.from_obj(template_path, dr_type='n3mr') # 缩放网格顶点坐标,并设置为不可求导 self.vertices = (self.template_mesh.vertices * 0.5).stop_grad() # 设置网格面和纹理,并设置为不可求导 self.faces = self.template_mesh.faces.stop_grad() self.textures = self.template_mesh.textures.stop_grad() # 初始化位移和中心 self.displace = jt.zeros(self.template_mesh.vertices.shape) # 位移 self.center = jt.zeros((1, 1, 3)) # 中心点 # 定义 Laplacian 和 flatten 约束损失 self.laplacian_loss = LaplacianLoss(self.vertices[0], self.faces[0]) # Laplacian 约束损失 self.flatten_loss = FlattenLoss(self.faces[0]) # flatten 约束损失 ``` 注释解释如下: - `super(Model, self).__init__()`:调用父类的构造函数进行初始化。 - `self.template_mesh = jr.Mesh.from_obj(template_path, dr_type='n3mr')`:从 OBJ 文件中加载模板网格。 - `self.vertices = (self.template_mesh.vertices * 0.5).stop_grad()`:将模板网格的顶点坐标缩放为原来的一半,并将其设置为不可求导。 - `self.faces = self.template_mesh.faces.stop_grad()`:将模板网格的面索引设置为不可求导。 - `self.textures = self.template_mesh.textures.stop_grad()`:将模板网格的纹理设置为不可求导。 - `self.displace = jt.zeros(self.template_mesh.vertices.shape)`:初始化位移变量,并将其设置为可求导的 0 张量。 - `self.center = jt.zeros((1, 1, 3))`:初始化中心点,并将其设置为可求导的 0 张量。 - `self.laplacian_loss = LaplacianLoss(self.vertices[0], self.faces[0])`:初始化 Laplacian 约束损失。 - `self.flatten_loss = FlattenLoss(self.faces[0])`:初始化 flatten 约束损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值