void  split_bsdf(bsdf &lobes[], bsdf source, float &weights[])
                    
                    
                
            
                
                    
                    
                    
                        void  split_bsdf(bsdf &lobes[], bsdf source, float &weights[], int mask)
                    
                    
                
            
                
                    
                    
                    
                        void  split_bsdf(bsdf &lobes[], bsdf source, float &weights[], int mask, int type)
                    
                    
                
            
                
                    
                    
                    
                        void  split_bsdf(bsdf &lobes[], bsdf source, float &weights[], int mask, int type, float u)
                    
                    
                
            
                
                    
                    
                    
                        void  split_bsdf(bsdf &lobes[], bsdf source, float &weights[], int mask, int type, float u, float cdf[])
                    
                    
                
            
            
                &lobes
            
            
        
この関数は、コンポーネントローブ別にBSDFでこの配列を上書きします。
            
                source
            
            
        
分割するBSDF。
            
                weights
            
            
        
この関数は、分割されたローブのウェイトでこの配列(戻り値のbsdf配列と同じ長さ)を埋めます。
    戻り値のローブを使ってサンプリングされた照明は、これらのウェイトでスケールする必要があります。
            
                mask
            
            
        
評価するバウンスタイプを示したビットマスク。
コンポーネントラベルビットマスクの詳細は、bouncemaskを参照してください。
            
                type
            
            
        
ローブの分割方法。#import "pbr.h"によって、異なる分割タイプを意味した定数値を取得することができます:
- 
        
        PBR_SPLIT_FULL = 0
- 
        
        PBR_SPLIT_RANDOM = 1
- 
        
        PBR_SPLIT_ALBEDO = 2
- 
        
        PBR_SPLIT_COMPONENT = 3
- 
        
        PBR_SPLIT_DEFAULT = PBR_SPLIT_ALBEDO
            
                u
            
            
        
CDFをサンプリングするランダム値。
            
                cdf
            
            
        
BSDFのコンポーネント間でサンプリングを制御するために使用するCDF。
Returns
ローブを表現したbsdfオブジェクトの配列。
Examples ¶
// BSDFをコンポーネントローブ(分布領域)に分割します。 bsdf lobes[]; split_bsdf(lobes, hitF, weights); // ローブのアルベドを取得します。 float albedos[]; resize(albedos, len(lobes)); for (int i = 0; i < len(lobes); i++) { albedos[i] = luminance(albedo(lobes[i], -hitnI)) * weights[i]; } // CDFを計算します。 float cdf[] = compute_cdf(albedos); // アルベド分布に基づいてBSDFをランダムに選択します。 int index = 0; sample_cdf(cdf, s.x, index); // 選択したBSDFを使って何かをします。 // lobes[index] ...
| See also | |
| bsdf |  | 
| pbr |  | 
| sampling |