# FaceSDF
**Repository Path**: KARSKOW/faceSDF
## Basic Information
- **Project Name**: FaceSDF
- **Description**: 以着色器研究为目的建立的Godot动漫阴影着色器。
- **Primary Language**: Unknown
- **License**: CC0-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2025-07-12
- **Last Updated**: 2026-04-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FACE-SDF

## 介绍
动漫脸部阴影着色器,使用参考案例/教程翻译至Godot着色器。
尝试将Unity的着色器代码/可视化着色器翻译至Godot着色器。
参考了一些示例,并且将可能遇到的问题进行改进。
1. [Youtube LINK 1 ->](https://youtu.be/WR_SP4LmOlw?si=lfh9Zi-sJM4t0VjC)
2. [Youtube LINK 2 ->](https://youtu.be/LKR1ITdOeKM?si=Nh6wvRhcAA4_7p6M)
## 问题
1.点光的阴影方向可能不太准确,但某些场景下也有可能是准确的。需要反馈。
2.阴影的过渡速度稍快。
3.目前没有应用于生产开发的案例,请谨慎使用。
4.目前仅可视化着色器为最新修改,目前的着色器代码还无法使用。
## 修改
1.转换了3D空间使其兼容。
2.颜色着色器方面进行了细微修改。
3.新增可平滑阴影边缘的功能。
## 使用提示
1.需要一个SDF图片和模型的颜色图片。
2.需要一个专门处理脸部的材质槽,并且带UV。
3.为了消除阴影边缘的锯齿感,可以在导入时设置以下选项:
```
压缩 --> 模式 = lossless
Mipmap --> 生成 = false(关闭)
检测3D --> 压缩至 = Disabled
```
4.为了阴影精准投射,需要加入以下代码:
```gdscript
func physics_process(delta):
#"body_mesh"是人体的网格,即"MeshInstance3D"
#"self"用于获取本身局部的坐标,即"CharactorBody3D"
# get_surface_override_material(脸部着色器材质槽位置编号: int)
body_mesh.get_surface_override_material(0).set("shader_parameter/forward", abs(Vector3.FORWARD * self.transform.origin.normalized()))
body_mesh.get_surface_override_material(0).set("shader_parameter/right", -abs(Vector3.RIGHT * self.transform.origin.normalized()))
# 建议添加Marker3D以辅助对准向量。
```
5.如果出现阴影从相反的方向投射,请直接用减法反转,例如:
```
-abs(Vector3.RIGHT * self.transform.origin.normalized())
```
## 着色器参数
`Base Texture` 彩色底图,即模型原来绘画的颜色
`Color` 颜色,混合彩色底图
`Shadow` 阴影颜色
`Forward` 向前向量,用于对准向前坐标,通常是 z = 1.0。
`Right` 向右向量,用于对准向右坐标,通常是 x = 1.0。
`SDF` SDF贴图,必须由自己在模型绘画并生成。
`Shadow Smooth` 平滑脸部阴影边缘。
提示:`Forward` 和 `Right`通常无需手动设置,导出这两者的变量是为了可以在脚本上设置向前和向右的坐标,参见 “使用提示” 第四条。