ShichenLiu / SoftRas

Project page of paper "Soft Rasterizer: A Differentiable Renderer for Image-based 3D Reasoning"
MIT License
1.24k stars 156 forks source link

Questions on texturing #21

Open ttaa9 opened 5 years ago

ttaa9 commented 5 years ago
  1. Does texture_res do anything when texture_type is vertex? If so, why is it set via self.texture_res = int(np.sqrt(self._textures.shape[2])) in mesh.py?

  2. Could you add code showing how to learn/optimize the texture (vertex and/or surface), as in your paper?

Thanks!

nikhilaravi commented 5 years ago

I am also interested in the code to learn/optimize the texture!

ShichenLiu commented 5 years ago

Hi there,

Yes, so the parametrization of texture in a single triangle could be a little bit tricky but I will try my best to explain it for you. Please feel free to ask me if you have any further questions.

So imagine the triangle barycentric coordinate system as x-axis and y-axis (e.g. V0->V1 is x-axis and V0->V2 is y-axis), then the texture space is a triangle whose vertices are (0, 1), (0, 0) and (1, 0). In order to fully utilize all of the parameters, we parametrize a single triangle as following scheme (we take texture_res == 3 as an example).

demo

This is why a mesh with (texture.shape[2] == 9) is considered as (texture_res == 3)

shubham-goel commented 5 years ago

Hi @ShichenLiu. Thanks for the explanation!

I have another question regarding the texture. Can you explain the mapping between the texture of NMR and Softras? I have texture_map available in NMR format but need to render it using SoftRas.

In NMR, the texture map is of size (batch_size, num_faces, texture_size, texture_size, texture_size, 3). For softras, I use textures_Softras = textures_NMR[:,:,:,:,0,:].view(b,f,t*t,3) to flatten NMR's texture map. However, the texture of the resulting rendered image seems to be different from NMR.

Can you explain how to compute Softras's texture map from NMR's texture map?

Thanks!

ShichenLiu commented 5 years ago

Hi,

It is not straightforward to convert the texture between our's and NMR's. I am afraid the most practical way is to dump them to image and reload?