Color Lesson

研究色彩在HSV空间中分布规律的可视化工具

2024/1/8 by DKZ

color lesson

这是一个用于研究颜色在 HSV 空间分布的可视化工具,可以将一张图片每个像素的颜色提取出来映射在 HSV 色彩空间中。

点这里可以尝试这个软件。里面内置了一些取色器,采样,色板等小功能可以用作板绘时的参考。

用法是

1.选择文件
2.load图片,可点击图片吸色
3.设置色板大小,边框,是否下采样(使用高斯卷积),缩放比,偏移等参数
4.点击采样可查看采样后的图片和生成的色板
5.点击 color lesson 可生成一个 json 文件,包含 HSV 空间位置信息

接下来可以用这个脚本将 json 导入到 blender 中

import bpy
import bmesh
import json

# 假设verts是一个包含点位置的列表
verts =[[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 0]]
with open('C:/Users/DKZ/Desktop/color_lesson.json','r') as f:
    j=json.load(f)
    verts=j.get('d',[])
    
mesh = bpy.data.meshes.new(name="ColorLessonMesh")  # 创建一个新的mesh
obj = bpy.data.objects.new("ColorLessonObj", mesh)  # 创建一个新的object

scene = bpy.context.scene
scene.collection.objects.link(obj)

bm = bmesh.new()
for v in verts:
    bm.verts.new(v)  # 添加一个顶点

#bm.faces.new(bm.verts)  # 通过所有顶点创建一个面

bm.to_mesh(mesh)  # 将bmesh写入到mesh
bm.free()  # 清理bmesh

mat = bpy.data.materials["ColorLessonMaterial"]
if len(obj.data.materials):
    obj.data.materials[0] = mat
else:
    obj.data.materials.append(mat)
    
node = bpy.data.node_groups["GNColorLesson"]

if obj.modifiers.get('GeometryNodes'):
    obj.modifiers['GeometryNodes'].node_group = node
else:
    obj.modifiers.new('GeometryNodes', 'NODES')
    obj.modifiers['GeometryNodes'].node_group = node

使用这个几何节点,生成 HSV 空间的分布

gn

由于位置信息在 HSV 圆柱体中就代表了颜色信息,所以只要用 xyz 直角坐标转化为极坐标得到的值就是 HSV 表示的颜色

所以直接只用 shader 把颜色渲染出来就可以看到最终这张图片的色彩分布情况了

shader

最后效果如下

gif

接下来会找一些艺术家的画研究一下他们所使用的颜色