§
    ÖÞ¾jÀ  ã                  ó4   — d Z ddlmZ ddlZddlmZ ddd„ZdS )z—
PBR Tangent-Space Normal Map Synthesis Utility for M4 Assets.
Provides vectorized Sobel filter computation with guaranteed Blue channel mean > 128.0.
é    )ÚannotationsN)ÚImageçš™™™™™@Ú
albedo_imgúImage.ImageÚstrengthÚfloatÚreturnc           	     óè  — |                       d¦  «        }t          j        |t          j        ¬¦  «        dz  }t          j        |dd¬¦  «        }d|dd	…dd	…f         z  d
|dd	…dd…f         z  z   d|dd…dd	…f         z  z
  d|dd…dd…f         z  z   d
|dd…dd	…f         z  z
  d
|dd…dd…f         z  z   |z  }d|dd	…dd	…f         z  d|dd	…dd…f         z  z
  d
|dd	…dd…f         z  z
  d
|dd…dd	…f         z  z   d|dd…dd…f         z  z   d
|dd…dd…f         z  z   |z  }t          j        |¦  «        }t          j        |dz  |dz  z   |dz  z   ¦  «        }d
||dk    <   ||z  }	||z  }
||z  }|	dz  dz   dz                       t          j        ¦  «        }|
dz  dz   dz                       t          j        ¦  «        }|dz  dz   dz                       t          j        ¦  «        }| j	        dk    r¨t          j        |  
                    ¦   «         d         ¦  «        }d||dk    <   d||dk    <   d||dk    <   t          j        dt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        f¦  «        S t          j        dt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        f¦  «        S )zWComputes tangent-space normal map using 3x3 Sobel operator with B mean > 128 guarantee.ÚL)Údtypeg     ào@é   Úedge)Úmodeg      ð¿r   éþÿÿÿg      ð?é   Ng       @éÿÿÿÿg      à?éÿ   ÚRGBAé€   ÚRGB)ÚconvertÚnpÚarrayÚfloat32ÚpadÚ	ones_likeÚsqrtÚastypeÚuint8r   Úsplitr   ÚmergeÚ	fromarray)r   r   ÚgrayÚarrÚpaddedÚdxÚdyÚdzÚlengthÚnxÚnyÚnzÚrÚgÚbÚalphas                   ú=C:\Projects\FreeExile\tools\asset_pipeline\m4_normal_utils.pyÚcompute_tangent_normal_mapr3      sL  € à×Ò˜cÑ"Ô"€DÝ
Œ(�4�rœzÐ
*Ñ
*Ô
*¨UÑ
2€CåŒV�C˜ Ð(Ñ(Ô(€Fàˆv�a˜�d˜A˜b˜D�jÔ!Ñ! C¨&°°2°°q°r°r°Ô*:Ñ$:Ñ:Ø
��q˜�t˜Q˜r˜T�zÔ"Ñ
"ñ	#Ø%(¨6°!°B°$¸¸¸°(Ô+;Ñ%;ñ	<à
��q�r�r˜1˜R˜4�xÔ Ñ
 ñ	!à#&¨°°°°A°B°B°¬Ñ#7ñ	8ð 	ñ	
€Bð 	ˆv�a˜�d˜A˜b˜D�jÔ!Ñ! C¨&°°2°°q¸°t°Ô*<Ñ$<Ñ<¸sÀVÈAÈbÈDÐRSÐRTÐRTÈHÔEUÑ?UÑUØ
��q�r�r˜1˜R˜4�xÔ Ñ
 ñ	!Ø#&¨°°°°A°b°D°Ô)9Ñ#9ñ	:Ø<?À&ÈÈÈÈQÈRÈRÈÄ.Ñ<Pñ	Qàñ
€Bõ
 
Œ�cÑ	Ô	€BÝŒW�R˜‘U˜R ™U‘] R¨¡UÑ*Ñ+Ô+€FØ€Fˆ6�QŠ;Ñà	ˆf‰€BØ	ˆf‰€BØ	ˆf‰€Bà
ˆs‰(�S‰.˜CÑ	×'Ò'­¬Ñ1Ô1€AØ
ˆs‰(�S‰.˜CÑ	×'Ò'­¬Ñ1Ô1€AØ
ˆs‰(�S‰.˜CÑ	×'Ò'­¬Ñ1Ô1€Aà„˜&Ò Ð Ý”˜×)Ò)Ñ+Ô+¨BÔ/Ñ0Ô0ˆàˆˆ%�1Š*‰Øˆˆ%�1Š*‰Øˆˆ%�1Š*‰ÝŒ{˜6¥E¤O°AÑ$6Ô$6½¼ÈÑ8JÔ8JÍEÌOÐ\]ÑL^ÔL^Õ`eÔ`oÐpuÑ`vÔ`vÐ#wÑxÔxÐxåŒ;�u�uœ¨qÑ1Ô1µ5´?À1Ñ3EÔ3EÅuÄÐWXÑGYÔGYÐZÑ[Ô[Ð[ó    )r   )r   r   r   r	   r
   r   )Ú__doc__Ú
__future__r   Únumpyr   ÚPILr   r3   © r4   r2   ú<module>r:      sk   ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð%\ð %\ð %\ð %\ð %\ð %\ð %\r4   