?> ?> ?> TechTips – ENOZ https://enoz.zone The Secret Zone Sun, 15 Mar 2026 00:16:19 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.7.5 FBX模型转PMX的绑定流程记录 https://enoz.zone/2025/10/29/fbx%e6%a8%a1%e5%9e%8b%e8%bd%acpmx%e7%9a%84%e7%bb%91%e5%ae%9a%e6%b5%81%e7%a8%8b%e8%ae%b0%e5%bd%95/ https://enoz.zone/2025/10/29/fbx%e6%a8%a1%e5%9e%8b%e8%bd%acpmx%e7%9a%84%e7%bb%91%e5%ae%9a%e6%b5%81%e7%a8%8b%e8%ae%b0%e5%bd%95/#respond Wed, 29 Oct 2025 13:53:49 +0000 https://enoz.zone/?p=314 开一个新坑 到时候打算记录一下整个学习PMX绑定过程中遇到的问题和解决办法。

大纲

1.准备阶段

FBX的模型导入 etc.

2.PmxEditor的基本概念

各种骨骼(肩P,肩C,足D, 捩骨…)的作用,

轴限制,Local轴,简单设置骨骼末端指向,

IK骨的设置,权重修正骨骼的设置

https://www.nicovideo.jp/watch/sm20439024

3.形态键的制作

 

1.  骨骼绑定

https://www.bilibili.com/video/BV13ZbRzPEyZ/

]]>
https://enoz.zone/2025/10/29/fbx%e6%a8%a1%e5%9e%8b%e8%bd%acpmx%e7%9a%84%e7%bb%91%e5%ae%9a%e6%b5%81%e7%a8%8b%e8%ae%b0%e5%bd%95/feed/ 0
[Blender] 受副切线影响的头发各向异性高光 https://enoz.zone/2025/02/05/blender-%e5%90%84%e5%90%91%e5%bc%82%e6%80%a7%e5%a4%b4%e5%8f%91%e9%ab%98%e5%85%89-kajiya-kay%e6%a8%a1%e5%9e%8b/ https://enoz.zone/2025/02/05/blender-%e5%90%84%e5%90%91%e5%bc%82%e6%80%a7%e5%a4%b4%e5%8f%91%e9%ab%98%e5%85%89-kajiya-kay%e6%a8%a1%e5%9e%8b/#respond Wed, 05 Feb 2025 08:28:31 +0000 https://enoz.zone/?p=241 1.各向异性和Blinn-Phong高光 sophie raiin nude

当某一对象的性质或分布不依赖于方向时,称其为各向同性(isotropic);相反,如果其性质或分布依赖于方向,则称其为各向异性。

头发各向异性高光

头发的高光之所以被称为各向异性高光,主要是因为它的反射特性受到头发丝的方向影响,而不是均匀地向所有方向反射光线。

Blinn-Phong模型中计算高光的方法是,将视向量与光源方向的半程向量H,去与法线N做点积。

Blinn-Phong模型

其中:k→高光的强度 α→高光的聚焦程度

但是对于头发来说这种算法有一点点小问题:一根发丝某处的法线可以有无数条!

法线平面

当我们把头发看作非常细的细丝时,某点的垂直平面上所有的向量都可以看作此点的法向量。

没办法定义唯一法线的话,也就没办法计算高光了,那该怎么办呢(。•́︿•̀。)

]]>
https://enoz.zone/2025/02/05/blender-%e5%90%84%e5%90%91%e5%bc%82%e6%80%a7%e5%a4%b4%e5%8f%91%e9%ab%98%e5%85%89-kajiya-kay%e6%a8%a1%e5%9e%8b/feed/ 0
[Blender] 使用NexGiMa烘焙60帧物理并导入时的问题和解决办法 https://enoz.zone/2025/01/20/blender%e4%bd%bf%e7%94%a8nexgima%e7%83%98%e7%84%9960%e5%b8%a7%e7%89%a9%e7%90%86%e5%b9%b6%e5%af%bc%e5%85%a5%e6%97%b6%e7%9a%84%e9%97%ae%e9%a2%98%e5%92%8c%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/ https://enoz.zone/2025/01/20/blender%e4%bd%bf%e7%94%a8nexgima%e7%83%98%e7%84%9960%e5%b8%a7%e7%89%a9%e7%90%86%e5%b9%b6%e5%af%bc%e5%85%a5%e6%97%b6%e7%9a%84%e9%97%ae%e9%a2%98%e5%92%8c%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/#respond Mon, 20 Jan 2025 16:41:44 +0000 https://enoz.zone/?p=196 NexGiMa是一个可以对MMD动画进行物理烘焙的软件。其可以以每秒120次的精度进行物理计算,烘焙出的物理要比MMD, MMM要更加丝滑,而操作又比Blender的MMDTools插件更加简单。

但是NexGiMa烘焙物理导入Blender的流程也有一些问题,比如如何导出60帧数据,如何解决无法导出表情等等。

使用NexGiMa烘焙物理并导入Blender的基本流程

①将模型以及动作文件导入NexGiMa

注意:模型的骨骼命名不可以使用非日文常用汉字,长度不可以超过16个字符,否则物理无法烘焙。

②在ツール→オプション面板进行如下设置


物理演算设置为120FPS(最高精度),編集フレームレート(编辑帧率)在确保动作已经导入之后设置为目标帧率——如果是想做30帧视频就设置为30FPS,想做60帧视频就设置为60FPS,默认的编辑帧率是30FPS,设置为60之后时间线上的总关键帧数会翻倍。

③在模型模式下(非相机模式),按A选中所有骨骼。打开ツール→キー焼き込み(关键帧烧录),进行如下设置。

输入起始帧到最终帧,勾选物理焼き込み(物理烧录),ベイク用物理演算設定(烘焙用物理演算设置)选择MMD互換120FPS。据其他博主,这里只能选择MMD互換120FPS,选择其他选项会导致奇怪的物理。最后点击OK开始烘焙。

]]>
https://enoz.zone/2025/01/20/blender%e4%bd%bf%e7%94%a8nexgima%e7%83%98%e7%84%9960%e5%b8%a7%e7%89%a9%e7%90%86%e5%b9%b6%e5%af%bc%e5%85%a5%e6%97%b6%e7%9a%84%e9%97%ae%e9%a2%98%e5%92%8c%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/feed/ 0
[Blender] 绝区零 角色页面动态背景还原 https://enoz.zone/2025/01/10/blender-%e7%bb%9d%e5%8c%ba%e9%9b%b6-%e8%a7%92%e8%89%b2%e9%a1%b5%e9%9d%a2%e8%83%8c%e6%99%af%e8%bf%98%e5%8e%9f/ https://enoz.zone/2025/01/10/blender-%e7%bb%9d%e5%8c%ba%e9%9b%b6-%e8%a7%92%e8%89%b2%e9%a1%b5%e9%9d%a2%e8%83%8c%e6%99%af%e8%bf%98%e5%8e%9f/#respond Fri, 10 Jan 2025 17:39:14 +0000 https://enoz.zone/?p=172

配布地址:Download

]]>
https://enoz.zone/2025/01/10/blender-%e7%bb%9d%e5%8c%ba%e9%9b%b6-%e8%a7%92%e8%89%b2%e9%a1%b5%e9%9d%a2%e8%83%8c%e6%99%af%e8%bf%98%e5%8e%9f/feed/ 0
[Blender] 受灯光方向影响的卡通刘海阴影的简单实现 https://enoz.zone/2025/01/06/blender-%e5%8f%97%e7%81%af%e5%85%89%e6%96%b9%e5%90%91%e6%8e%a7%e5%88%b6%e7%9a%84%e5%8d%a1%e9%80%9a%e9%a3%8e%e6%a0%bc%e5%88%98%e6%b5%b7%e9%98%b4%e5%bd%b1%e7%9a%84%e7%ae%80%e5%8d%95%e5%ae%9e%e7%8e%b0/ https://enoz.zone/2025/01/06/blender-%e5%8f%97%e7%81%af%e5%85%89%e6%96%b9%e5%90%91%e6%8e%a7%e5%88%b6%e7%9a%84%e5%8d%a1%e9%80%9a%e9%a3%8e%e6%a0%bc%e5%88%98%e6%b5%b7%e9%98%b4%e5%bd%b1%e7%9a%84%e7%ae%80%e5%8d%95%e5%ae%9e%e7%8e%b0/#respond Mon, 06 Jan 2025 13:33:55 +0000 https://enoz.zone/?p=109 等有空了写。。。

基本思路就是,在屏幕空间中,沿着主光方向对刘海遮罩做一个偏移。

然后通过相机距离(视图距离)来控制偏移量近大远小,反正切函数或者平方反比都可以。最好再用min()卡一个上限 。

这边偏移量的衰减因子只使用了相机距离,还可以考虑到面部朝向和灯光的夹角,具体之后再想想怎么优化..)

BTW,在非NPR分支的Blender正式版本中可以使用AOV来输出向量到合成器中,AOV类型设置为颜色就行。

img

 

 

 

 

 

 

 

 

 

]]>
https://enoz.zone/2025/01/06/blender-%e5%8f%97%e7%81%af%e5%85%89%e6%96%b9%e5%90%91%e6%8e%a7%e5%88%b6%e7%9a%84%e5%8d%a1%e9%80%9a%e9%a3%8e%e6%a0%bc%e5%88%98%e6%b5%b7%e9%98%b4%e5%bd%b1%e7%9a%84%e7%ae%80%e5%8d%95%e5%ae%9e%e7%8e%b0/feed/ 0
[Blender] 为背面法描边创建平滑法线 并在几何节点中引用 https://enoz.zone/2024/12/25/blender%e4%b8%ba%e8%83%8c%e9%9d%a2%e6%b3%95%e6%8f%8f%e8%be%b9%e5%88%9b%e5%bb%ba%e5%b9%b3%e6%bb%91%e6%b3%95%e7%ba%bf-%e5%b9%b6%e5%9c%a8%e5%87%a0%e4%bd%95%e8%8a%82%e7%82%b9%e4%b8%ad%e5%bc%95%e7%94%a8/ https://enoz.zone/2024/12/25/blender%e4%b8%ba%e8%83%8c%e9%9d%a2%e6%b3%95%e6%8f%8f%e8%be%b9%e5%88%9b%e5%bb%ba%e5%b9%b3%e6%bb%91%e6%b3%95%e7%ba%bf-%e5%b9%b6%e5%9c%a8%e5%87%a0%e4%bd%95%e8%8a%82%e7%82%b9%e4%b8%ad%e5%bc%95%e7%94%a8/#respond Wed, 25 Dec 2024 01:14:20 +0000 https://enoz.zone/?p=72 在Blender中一般会使用实体化修改器来进行描边。
但是,如果模型法线在转角处没有平滑,就会导致描边出现断裂的问题。
使用焊接修改器虽然可以解决描边断裂问题,但是会破坏物体法线,使得原本就难看的阴影雪上加霜。

使用Python脚本创建平滑法线自定义属性,并在几何节点中引用。通过几何节点创建几何实例副本单独负责描边,不会影响原有网格法线。

import bpy
import bmesh
from mathutils import Vector

def store_average_normals_using_vertex_position(obj):
    if obj.type != 'MESH':
        print(f"Object {obj.name} is not a mesh. Skipping.")
        return

    # Switch to object mode if needed
    if bpy.context.mode != 'OBJECT':
        bpy.ops.object.mode_set(mode='OBJECT')

    # Create BMesh from object data
    mesh = obj.data
    bm = bmesh.new()
    bm.from_mesh(mesh)

    # Ensure normals are updated
    bm.normal_update()

    # Prepare a custom vertex attribute layer for average normals
    avg_normal_layer = bm.verts.layers.float_vector.new("average_normal")

    # Create a dictionary to store average normals by vertex position
    average_normal_hash = {}

    # Iterate over all vertices to calculate average normals based on position
    for vert in bm.verts:
        position = tuple(vert.co)
        if position not in average_normal_hash:
            average_normal_hash[position] = vert.normal.copy()
        else:
            average_normal_hash[position] += vert.normal

    # Normalize the accumulated normals
    for position in average_normal_hash:
        average_normal_hash[position].normalize()

    # Assign the averaged normals back to vertices
    for vert in bm.verts:
        position = tuple(vert.co)
        vert[avg_normal_layer] = average_normal_hash[position]

    # Write the modified BMesh back to the mesh
    bm.to_mesh(mesh)
    bm.free()

# Apply the function to the selected object
obj = bpy.context.object
if obj:
    store_average_normals_using_vertex_position(obj)
    print(f"Average normals stored in custom data layer for {obj.name}.")
else:
    print("No object selected.")

背面法描边是让顶点沿着法线移动一段距离,去做一个类似于鸡蛋壳的包裹来实现描边的。但是就拿一个正方体举例,一个角上其实有三个顶点。这三个顶点在不做处理的情况下,共享位置,但法线来自于各自属于的面。所以在扩张的时候就会沿着不同方向,导致三个点分离,从而产生描边断裂。
上面的代码的逻辑就是,将所有共享坐标的顶点的法线全部平均化再指定回去,这样就可以保证位置相同的顶点不会在向外扩展之后分离。

]]>
https://enoz.zone/2024/12/25/blender%e4%b8%ba%e8%83%8c%e9%9d%a2%e6%b3%95%e6%8f%8f%e8%be%b9%e5%88%9b%e5%bb%ba%e5%b9%b3%e6%bb%91%e6%b3%95%e7%ba%bf-%e5%b9%b6%e5%9c%a8%e5%87%a0%e4%bd%95%e8%8a%82%e7%82%b9%e4%b8%ad%e5%bc%95%e7%94%a8/feed/ 0