BSDF

BSDF全称是Bidirectional Scattering Distribution Function,即双向散射分布函数,它是一个统称,由Bartell, Dereniak在1980年提出,一般包括BRDF(反射)和BTDF(透射),反映了一个面上不同方向的散射强度。有些还有BDDF(衍射)。
引自维基百科

可以看到,光线经过一个物体面后,一般会分成5个部分,specular镜面反射、折射、BTDF、BRDF、还有Absorb吸收的部分。有些资料把BRDF和BTDF也称之为前向散射和背向散射。
图片来源与tracepro官方视频
只是镜面反射:
这里写图片描述
BRDF和镜面反射同时存在:
这里写图片描述
只是BTDF:
这里写图片描述
BSDF的定义:
首先,亮度(辉度)是对于发光面来说的,L=dφ/dw*dscosθ=I/dscosθ如图所示:
这里写图片描述
BSDF被定义为:
这里写图片描述
这里写图片描述
其中:dE为是面源dA的入射光照度(单位为w/m^2),ri是入射光方向,dL为面源dA的散射光的辉度(亮度,单位为w/sr*m^2),rs为散射光方向,所以BSDF单位为1/sr,由于既有ri方向,又有rs方向,因此称为双向。
其实Is/φi的单位为1/sr,所以BSDF可以理解为每单位的入射光通量,所引起某方向上散射强度的大小。
一般测量BSDF,是通过测量面源dAs上的入射光通量φi和散射光通量φs以及立体角dΩ来确定L和E值。所以,BSDF公式,把dL和dE用φ替代,可以在分子,分母同乘dAs的情况下,简化为下式:

这里写图片描述

Harvey_shark BSDF(哈维BSDF模型)
哈维在1976年的博士论文Light-Scattering Properties of Optical Surfaces提出该模型。
这里写图片描述
β0是镜面specular reflecting单位矢量的投影,β是散射单位方向的单位矢量的投影,β-β0的绝对值|β-β0|,来做为BSDF的变量,如果ri和r和ro在同一平面上,则
|β-β0|=|sinθ-sinθ0|,其中θ是表面法线与散射方向夹角、θ0是表面法线与散射方向法线,当光线垂直照射时,|β-β0|=|sinθ|。
这也进一步导出了ABg散射模型来表述BSDF。
ABg模型用3个参数A、B、g来表示:
这里写图片描述

### Blender 中 Hair BSDF 节点的使用方法 在 Blender 的材质编辑器中,`Hair BSDF` 是一种专门用于模拟毛发效果的材质节点。它能够提供更真实的渲染结果,尤其是在 Cycles 渲染引擎下表现尤为突出。以下是关于 `Hair BSDF` 使用的一些关键点: #### 1. **基础概念** `Hair BSDF` 节点主要用于处理毛发的光学特性,包括反射、吸收以及光线散射的效果[^1]。该节点可以单独使用,也可以与其他节点组合来实现复杂的毛发表面。 #### 2. **参数详解** - **Color**: 定义毛发的颜色属性。 - **Roughness**: 控制表面粗糙度,影响反射光的扩散程度。 - **Radial Roughness**: 额外控制径向方向上的粗糙度,增加细节层次感。 - **Tangent**: 提供切线方向的信息,通常通过其他节点(如 Tangent 或 Normal Map)输入以定义毛发的方向性[^3]。 #### 3. **典型连接方式** 为了更好地利用 `Hair BSDF`,可以通过以下方式进行节点链接: ```plaintext Texture Coordinate -> Mapping -> Separate XYZ -> Color Ramp -> Image Texture -> Hair BSDF -> Material Output ``` 具体来说: - 将 `Texture Coordinate` 连接到 `Mapping` 来调整 UV 坐标系。 - 利用 `Separate XYZ` 和 `Color Ramp` 实现颜色渐变过渡。 - 如果需要进一步增强真实感,则可引入法线贴图或其他高级功能[^2]。 #### 4. **示例代码** 下面是一个简单的 Python 脚本示例,展示如何程序化地创建带有 `Hair BSDF` 的材质并应用到对象上: ```python import bpy # 获取当前活动对象 obj = bpy.context.object # 新建材质 mat_name = "Custom_Hair_Material" material = bpy.data.materials.new(name=mat_name) material.use_nodes = True # 设置材质为透明混合模式 (仅适用于Cycles) if material.node_tree: nodes = material.node_tree.nodes # 移除默认 Principled BSDF bsdf_node = nodes.get('Principled BSDF') if bsdf_node is not None: nodes.remove(bsdf_node) output_node = nodes.get('Material Output') # 添加 Hair BSDF 节点 hair_bsdf = nodes.new(type='ShaderNodeBsdfHair') hair_bsdf.distribution = 'GGX' # 可选分布模型 ['PRINCIPLED', 'SHARP', 'MULTI_GGX'] # 设置初始参数 hair_bsdf.inputs['Color'].default_value = (0.8, 0.5, 0.2, 1) # 棕黄色 hair_bsdf.inputs['Roughness U'].default_value = 0.2 hair_bsdf.inputs['Roughness V'].default_value = 0.1 # 连接至输出节点 links = material.node_tree.links link = links.new(hair_bsdf.outputs["BSDF"], output_node.inputs["Surface"]) # 应用材质到对象 if obj.data.materials: obj.data.materials[0] = material else: obj.data.materials.append(material) ``` 此脚本实现了自动生成一个基于 `Hair BSDF` 的材质,并将其分配给选定的对象。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值