イメージウィンドウでエフェクタをかける前の状態に戻す (スクリプト)


マルチパスの「エフェクタ処理前」を使用して、スクリプトでエフェクタ処理を行う前の状態に戻します。
この「エフェクタ処理前」は、イメージウィンドウの「効果」でエフェクタを指定している場合に「マルチレイヤ」で選択できます。

レンダリングを行うと、レンダリング画像のRGB/RGBAにエフェクタの効果がかかります。

これを「エフェクタ処理前」に戻す手段は用意されていませんが、
「エフェクタ処理前」レイヤとして保存されている情報よりスクリプトを使って戻します。

スクリプトを使用して「エフェクタ処理前」に戻す

レンダリング後に以下を実行すると、レンダリング画像を「エフェクタ処理前」に戻します。


scene = xshade.scene()

# イメージを上書きコピー.
def copyRenderingImage (srcImage, dstImage):
  if srcImage == None or dstImage == None: return
  if srcImage.has_image == False: return
  if dstImage.has_image == False: return
  if srcImage.size[0] != dstImage.size[0]: return
  if srcImage.size[1] != dstImage.size[1]: return
  
  width  = srcImage.size[0]
  height = srcImage.size[1]

  # ピクセルごとに色をコピー.
  for y in range(height):
    for x in range(width):
      col = srcImage.get_pixel_rgba(x, y)
      dstImage.set_pixel_rgba(x, y, col)
  dstImage.update()

  # レンダリング画像を更新.
  scene.rendering.update_image()

preEffectLayer = scene.rendering.image_layer('PreEffect')
if preEffectLayer != None:
  # コピー元のイメージ (エフェクタ処理前).
  srcImage = preEffectLayer.image

  # コピー先のイメージ.
  dstImage = scene.rendering.image

  # srcImageからdstImageにRGBAをコピー.
  copyRenderingImage(srcImage, dstImage)
Translate »