can't update specular
in principled bsdf
using pytorch optimization.
#463
Answered
by
njroussel
anewusername77
asked this question in
Q&A
-
Hi there again. import mitsuba as mi
import drjit as dr
mi.set_variant("llvm_ad_rgb")
envmap = mi.Bitmap()
light = mi.load_dict({
'type': 'envmap',
'bitmap': envmap
})
scene = mi.load_dict({
"type": "scene",
"integrator": {
"type": "path",
'max_depth': 8,
'hide_emitters':True},
"light": light,
"face": {
'filename': 'face.ply',
'type': 'ply',
'bsdf': {
'type': 'principled',
'base_color': {
'filename': 'diff2.png',
'type': 'bitmap',
},
'specular':0.0,
'roughness': 0.0,
},
}
})
origin = T.rotate([0, 0, 1], 90).rotate([0, 1, 0], 180) @ mi.ScalarPoint3f([0, 0, 500])
cam = mi.load_dict({
'type': 'perspective',
'to_world': T.look_at(
origin=origin,
target=[0, 0, 0],
up=[0, 0, 1]
),
'fov': 10.,
'sampler': {
'type': 'independent',
'sample_count': 16
},
'film': {
'type': 'hdrfilm',
'width': 512,
'height': 512,
'rfilter': {
'type': 'tent',
},
'pixel_format': 'rgba',
},
})
@dr.wrap_ad(source='torch', target='drjit')
def renderimg(scene, vertices:torch.Tensor, faces:torch.Tensor, normals:torch.Tensor,
uvmap:torch.Tensor, albedo_tex:torch.Tensor, specular:torch.Tensor,
roughness:torch.Tensor, envmap:torch.Tensor, fov, sensor, samples):
params_scene = mi.traverse(scene)
params_scene['light.data'] = mi.TensorXf(envmap)
params_scene.update()
# mesh
vertex_texcoords = mi.Point2f(mi.Float(uvmap[:,0].numpy()),
mi.Float(uvmap[:,1].numpy()))
params_scene['bfm.vertex_positions'] = dr.ravel(mi.TensorXf(vertices))
params_scene['bfm.vertex_normals'] = dr.ravel(mi.TensorXf(normals))
params_scene['bfm.faces'] = dr.ravel(mi.TensorXf(faces))
params_scene['bfm.vertex_texcoords'] = dr.ravel(vertex_texcoords)
## bsdf
params_scene['bfm.bsdf.base_color.data'] = albedo_tex
params_scene['bfm.bsdf.roughness.value'] = dr.ravel(roughness)
params_scene['bfm.bsdf.specular'] = dr.ravel(specular)
params_scene.update()
params_sensor = mi.traverse(sensor)
params_sensor['x_fov'] = dr.ravel(fov)
return mi.render(scene, sensor=sensor, spp=samples, seed=1)
...
optimizer = torch.optim.Adam([
{'params': vShCoeffs, 'lr': 0.005},
{'params': specular, 'lr': 0.001}
....
])
loss = l1loss(img_gt, rendered_img) although the |
Beta Was this translation helpful? Give feedback.
Answered by
njroussel
Dec 27, 2022
Replies: 1 comment 2 replies
-
I think this another case where you're not passing |
Beta Was this translation helpful? Give feedback.
2 replies
Answer selected by
njroussel
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I think this another case where you're not passing
params
tomi.render
, or am I missing something?