今天跟大家唠唠我最近在研究的“星之彩”。一开始我对这玩意儿也没啥概念,就觉得名字挺酷炫。结果一头扎进去,发现这玩意儿是真有点意思,也真有点邪门。
我得承认,我是个俗人,对克苏鲁神话了解不深。但我知道洛夫克拉夫特,也知道他笔下的那些奇奇怪怪、不可名状的东西。当我看到“星之彩”这三个字的时候,第一反应就是:这肯定不是什么好玩意儿。
然后我就开始各种搜资料,翻书,看视频,反正能找到的都找了。这才慢慢了解到,“星之彩”这玩意儿,大概就是一种来自宇宙深空的、有知觉的“颜色”。它不是气体,也不是实体,但它会移动,而且会影响周围的环境。听起来是不是很玄乎?
我琢磨着,光看理论不行,得自己动手试试。正好我最近在学一些图像处理的东西,就想着能不能用代码模拟一下“星之彩”的效果。
说干就干!
我用Python和Pillow库生成了一张纯黑色的图片。这算是我的画布了。
python
from PIL import Image
width = 500
height = 500
image = *("RGB", (width, height), "black")
pixels = *()
然后,我就开始往这张黑色的画布上“涂颜色”。我用的方法很简单,就是随机生成一些颜色值,然后在图片的中心区域,慢慢地扩散开来。为了模拟那种“不可名状”的感觉,我特意让这些颜色的变化非常微妙,而且带有一点点的扭曲。
python
import random
center_x = width // 2
center_y = height // 2
radius = 100
for x in range(width):
for y in range(height):
distance = ((x - center_x) 2 + (y - center_y) 2) 0.5
if distance <= radius:
# 随机生成颜色,并根据距离中心点的远近进行调整
red = int(*() 255 (1 - distance / radius))
green = int(*() 255 (1 - distance / radius))
blue = int(*() 255 (1 - distance / radius))
pixels[x, y] = (red, green, blue)
这个过程挺枯燥的,就是不停地调整参数,看看效果。我搞出来的东西,要么就是一团乱麻,要么就是平淡无奇。后来我试着加入了一些噪声,让颜色更加丰富,也更加诡异。
为了增加扭曲感,我还用了一些简单的数学公式,对像素的位置进行了一些扰动。
python
import math
for x in range(width):
for y in range(height):
distance = ((x - center_x) 2 + (y - center_y) 2) 0.5
if distance <= radius:
# 加入一些扰动
new_x = int(x + *(distance / 10) 5)
new_y = int(y + *(distance / 10) 5)
# 确保像素位置不超出边界
new_x = max(0, min(new_x, width - 1))
new_y = max(0, min(new_y, height - 1))
red, green, blue = pixels[x, y]
pixels[new_x, new_y] = (red, green, blue)
就这样,折腾了好几天,终于搞出来一张我自己觉得还算满意的“星之彩”图片。虽然跟真正的“星之彩”肯定没法比,但至少看起来有点那种诡异、神秘的感觉了。
这只是个开始。我还打算尝试用更复杂的方法,比如用神经网络来生成“星之彩”的效果。甚至,我还想把“星之彩”跟音乐结合起来,搞一个视听作品。
“星之彩”这个坑,我是越陷越深了。不过我觉得这挺有意思的。毕竟探索未知的东西,才是最令人兴奋的。
- 经验
- 图像处理是个很有意思的领域,可以创造出各种各样的视觉效果。
- 克苏鲁神话是个很深奥的坑,一旦跳进去就很难出来。
- 实践是检验真理的唯一标准,光看理论是不行的,一定要动手试试。
这回的分享就到这里,下次再跟大家聊聊我用神经网络生成“星之彩”的进展。
还没有评论,来说两句吧...