
对于单个 pattern 模型,如果想要在 layer 内以随机的角度或大小填充来实现更加自然的效果可以使用 script 脚本方便的实现。
我们从如何定一个 pattern 开始,下面是一张 1 美元图片:
使用 object selection tool 快速将主体选出来:
选区边沿如果有多余的或者缺失的部分,通过 按住 shift 和 alt 键来增加/减去选区:
点击添加图层蒙版,边沿如果需要调整,可以使用画笔工具来进一步修整蒙版。如果蒙版边沿有锯齿,可以双击蒙版打开属性框,调整 smooth 和 contract 来优化蒙版:
使用选区工具框出一个矩形框包含我们的主体:
选择 edit - define pattern:
定义一个名称,点击 ok:
新建图层,快捷键 shift backspace/shift delete 调出填充框:
content 选择 pattern:
custom pattern 里选中我们刚才新建的模型:
script 前打勾,然后右侧菜单里选择 random fill:
点击 ok 后进入调整菜单,首先将 下面的 color randomness 设为 0 避免图形的染色改变,brightness randomness 设置为 0.02 左右使亮度轻微可以随机改变,形成层次感:
将 density 设置为最大 10,将 minimum/maximum scale factor 设置为 1,这样 pattern 会以 1:1 比例显示:
将 rotate pattern 打勾,这样模型会随机旋转:
设置完成后点击 ok,可以看到效果:
还可以做一些优化来使层叠效果更加真实,过程就是降低 density 和 scale,添加图层阴影效果。
新建图层,使用上面的方法填充 pattern,在设置中将 density 设置为 9,scale 设置为 0.25:
确认后可以看到效果,单个图形变小,填充密度变小:
我们给图层添加阴影效果,双击图层打开 layer style,下方点击添加阴影:
再次新建图层,使用上面图层的填充设置填充 pattern,可以将空缺的部分进一步补充完整:
按住 alt 键拖拽刚才的阴影特效到新图层,可以快速复制效果:
可以看到还是有空白的区域没有填充完整,继续重复上面的步骤,建立多个图层,直到完全充满整个区域为止,最终效果如下:
以上就是使用 script 来实现 pattern 自由填充的过程。
]]>
下图是我们的原图:
放大眼睛细节:
原图已经很好了,很清晰。下面我们进行调整。
需要提亮的部分是光源点的对面,再此图中就是眼睛光斑的下方,新建图层,画笔工具画圆:
擦除多余部分,笔刷选择软笔刷,可以先降低不透明度来看到背景:
高斯模糊使过度自然:

混合模式改为 overlay 实现提亮:
blend option 去掉影响阴影部分:
如果想要加强效果可以再次复制图层,调整不透明度。
新建曲线图层,拉高曲线:
ctrl I 反转图层蒙版,白色画笔工具软笔刷在瞳孔下方点击一下:
可以看到效果太强了,调低不透明度到合适:
新建曲线图层,提高曲线,反转图层蒙版:
白色画笔工具使用软笔刷沿着瞳孔在亮部区域画出射线,这一步注意如果有数位板来画的话会更好:
降低不透明度到合适:
下面增加暗部细节,再次新建曲线,然后降低曲线,反转蒙版:
同样的方法画出射线:
降低不透明度:
首先清理红血丝,新建图层,选择修复画笔工具混合模式设置为 screen,这样可以只处理暗部血丝:

按 alt 键采样眼白,涂抹血丝区域:
然后进行 dogding and burning 明暗调节,首先建立 soild color 观察图层,混合模式改为 color 来只显示亮度情况:
新建图层,混合模式改为 soft light,选择笔刷工具软笔刷流量改为 1,快捷键 D 恢复颜色为黑/白,根据实际用白色笔刷涂抹暗部,黑色笔刷涂抹过亮部分:
然后修复亮度调整后的颜色变化,新建图层,混合模式改为 color,快捷键 I 拾取眼白正常部分的颜色,然后在新图层上涂抹出需要修复的区域:
将亮部细节处理/高光点/明暗细节处理部分建立分组然后复制一份,安住 ctrl 拖动分组到另一只眼睛部分,可以配合蒙版清理多余部分:
可以使用同样的方法清理另一只眼睛的眼白部分最终效果如下:
>>> 'foo'.encode('utf_8')
b'foo'
To transform a byte string to a unicode string:
>>> b'foo'.decode('utf_8')
'foo'
To convert a string to bytes.
data = "" #string
data = "".encode() #bytes
data = b"" #bytesTo convert bytes to a String.
data = b"" #bytes
data = b"".decode() #string
data = str(b"") #stringimport winreg
REG_PATH = r"Control Panel\Mouse"
def set_reg(name, value):
try:
winreg.CreateKey(winreg.HKEY_CURRENT_USER, REG_PATH)
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0,
winreg.KEY_WRITE)
winreg.SetValueEx(registry_key, name, 0, winreg.REG_SZ, value)
winreg.CloseKey(registry_key)
return True
except WindowsError:
return False
def get_reg(name):
try:
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0,
winreg.KEY_READ)
value, regtype = winreg.QueryValueEx(registry_key, name)
winreg.CloseKey(registry_key)
return value
except WindowsError:
return None
#Example MouseSensitivity
#Read value
print (get_reg('MouseSensitivity'))
#Set Value 1/20 (will just write the value to reg, the changed mouse val requires a win re-log to apply*)
set_reg('MouseSensitivity', str(10))
#*For instant apply of SystemParameters like the mouse speed on-write, you can use win32gui/SPI
#http://docs.activestate.com/activepython/3.4/pywin32/win32gui__SystemParametersInfo_meth.html
]]>