Книга: Написание скриптов для Blender 2.49

Хранение   дорогостоящих   результатов   для многократного использования

Хранение   дорогостоящих   результатов   для многократного использования

Единственная капля - это, конечно, не дождь, так что мы хотели бы видеть сложенные эффекты от множества случайных капель. Следовательно, мы должны выбирать произвольные позиции и время ударов для стольких капелек, сколько мы хотели бы сымитировать.

Мы должны были бы делать это каждый раз при вызове метода __call__() (то есть, для каждого видимого пикселя в нашей текстуре). Тем не менее, это было бы огромными тратами процессорных сил, поскольку вычисление множества случайных чисел и получение и возврат памяти для, возможно, многих капель дорого.

К счастью, мы можем сохранить эти результаты в качестве экземпляров переменных нашего Pynode. Конечно, мы должны быть достаточно осторожными, чтобы проверять, что никакие входные параметры не были изменены между вызовами __call__ () и предпринять соответствующие меры, если они изменились. Общая картина будет выглядеть следующим образом:

class MyNode(Node.Scripted):
   def __init__(self, sockets):
      sockets.input   = [Node.Socket('InputParam',
                         val = 1.0)]
      sockets.output  = [Node.Socket('OutputVal' ,
                         val = 1.0)]
      self.InputParam = None
      self.Result     = None
   def __call__(self):
      if self.InputParam == None or
         self.InputParam != self.input.InputParam :
         self.InputParam = self.input.InputParam
         self.Result     = интенсивные_вычисления ...
      self.output.OutputVal = другие_вычисления …

Этот образец работает, только если входной параметр изменяется редко, например, только если его изменяет пользователь. Если вход изменяется с каждым пикселем, поскольку входной сокет подключен к выходу другого нода - схема с запоминанием, наоборот, будет дороже по времени вместо какой-либо экономии.

Оглавление книги


Генерация: 1.088. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз