
    O}j                        d Z ddlmZ ddlZddlZddlmZ ddlZddl	Z
d
dZ	 	 	 	 	 	 	 	 	 	 ddZddZddZed	k(  r e        yy)zGCreate conservative custom vertex normals without moving mesh geometry.    )annotationsN)Pathc                     t        j                         } | j                  dd       | j                  dd       | j                         S )Nz--inputT)requiredz--outdir)argparseArgumentParseradd_argument
parse_args)parsers    2.runtime/model-denoise-research/shading_normals.pyr
   r
      sE    $$&F
	D1

T2    c                   ||d d d f   z  }t        j                  |dft         j                        }t        d      D ]f  }| d d |f   }t        d      D ]M  }|d d |fxx   t        j                  ||d d |f   |      j                  t         j                        z  cc<   O h t        j                  |      j                  t         j                        S )N   dtype)weights	minlength)npzerosfloat32rangebincountastypedmnormalize_rows)	faces
face_areasfiltered_face_normalsvertex_countweightednormalscornerindicesaxiss	            r   target_vertex_normalsr%      s     %z!T''::Hhha(

;G( !6	"!H 	!DAtG D)&! fRZZ 	!	!! W%,,RZZ88r   c                   |d d df   |d d df   }}t        j                  dt         j                        }g }|D ]  }| |z  }d|d d d f   z  | z  |d d d f   z
  }||   ||   z
  }	|j                  t	        t        j
                  t        j                  t        j                  d|	|	                                t	        t        j                  |            S )Nr      ))        r(         ?)r(   g(%g(%?)g!nk?g!nkۿg!nk?r   g       @ij,ij->i)r   asarrayr   appendfloatsqrtmeaneinsum)
r!   edgesleftrightviewsresultviewdots	reflecteddeltas
             r   reflection_vertex_rmsr:   )   s    1+uQT{%DJJ[jjE F T~$q$w-''1DqMA	$)E"22eBGGBGGBIIj%,O$PQRS	T
 !!r   c                 &   t               } t        | j                        j                         }t        | j                        j                         }|j                  dd       t        j                  |      }t        j                  |d   t        j                        }t        j                  |d   t        j                        }t        j                  |t        |            }|d   }|d   }|d   }	|d	   }
t        j                  ||      \  }}}t        j                  ||||      }t!        |      t        |      t        |      t#        ||
      i d
}dddd}|j%                         D ]  \  }\  }}}}t        j&                  ||||dd      }t        j(                  ||||	t        |            \  }}t        j&                  ||||||d      }t+        |||t        |            }t        j                  |      dd|z  z
  z  }t        j,                  d|d d d f   z
  |z  |d d d f   |z  z         j/                  t        j                        }|| dz  }t        j0                  ||||       t        j2                  t        j4                  t        j6                  t        j8                  d||      dd                  }t#        ||
      }t!        |      ||||t;        |j=                               t;        t        j>                  |d            |t;        dd||d   z  z
  z        d	|d   |<   tA        |tC        jD                  |d   |   d               |d!z  jG                  tC        jD                  |d       d"#       y )$NT)parentsexist_okverticesr   r   adjacent_facesadjacent_edgesboundary_verticesunique_edges)inputr>   	trianglesbaseline_reflection_vertex_rmsvariants)   
   g(\?gQ?)      g)\(?gp=
ף?)   $   gQ?g
ףp=
?)znormal-softznormal-balancedznormal-glossg(\?g=
ףp=?)blendg)\(?)fixed_guidancerM   r)   gGz?z.npz)r>   r   r!   r*   g      gffffff?g      Y@rE   )	outputguide_iterationsnormal_iterationsnormal_sigmarM   normal_change_mean_degreesnormal_change_p95_degreesr:   reflection_improvement_pctrF      )indentzshading-normal-metrics.jsonzutf-8)encoding)$r
   r   rC   resolveoutdirmkdirr   loadr+   r   int32r   build_topologylenface_geometryvertex_normalsstrr:   itemsdiffuse_normalsfeature_protectionr%   r   r   savezdegreesarccosclipr0   r-   r/   quantileprintjsondumps
write_text)argssourcerZ   datar>   r   topologyr?   r@   rA   r1   face_normalsr   _base_vertex_normalsreportrF   namerP   
iterationssigmarM   guidance
protectionfiltered_facestargetblend_per_vertexcustomrO   angular_change
reflections                                  r   mainr   8   ss   <D$**%%'F$++&&(F
LLL-776?Dzz$z*"**=HJJtG}BHH5E  H6H./N./N !45^$E"$"2"28U"CL*a++HeZV VMZ*?@SUZ*[!F +.,H
 ?Gnn>N )D::UE%%*n6FTX
 --nn6GX

A ++#
 'uj.#h-X::e,dZ6G0GH""#AtG,,0CCq$w'&01
 &
 	 TF$-'
(%HIIbggbii
4GPRVX[\]
 +659
&k 0!+!*/0C0C0E*F).r{{>4/P)Q%/*/zF3S,TTTU+$
z4  	dDJJvj1$7BCS)DT ++77

6!$w 8 r   __main__)returnzargparse.Namespace)
r   
np.ndarrayr   r   r   r   r   intr   r   )r!   r   r1   r   r   r-   )r   None)__doc__
__future__r   r   rl   pathlibr   numpyr   denoise_meshr   r
   r%   r:   r   __name__ r   r   <module>r      sr    M "     999 &9 	9
 9&"HV zF r   