For non-branched path tracing with a GTX 960 and CUDA 7.5, this gives a small reduction
in stack usage but mainly: 8% faster render on BMW, 5% on pabellon, 13% on classroom.
This is an initial commit for half texture support in Cycles.
It adds the basic infrastructure inside of the ImageManager and support for these textures on CPU.
Supported:
* Half Float OpenEXR images (can be used for e.g HDRs or Normalmaps) now use 1/2 the memory, when loaded via disk (OIIO).
ToDo:
Various things like support for inbuilt half textures, GPU... will come later, step by step.
Part of my GSoC 2016.
Some area were still not in sync with readfile.c, now should be better.
Note that readfile.c has been used as référence here re us refcounting,
not sure how accurate it is, time will say :|
Optimization in binary search could lead to equality instead of expected strictly greater than value.
Harmless but noisy, and better be strict here.
reported by sergey on irc (with koro cycles benchmark file), thanks.
In some cases when:
* the viewport was in the camera mode
* the camera was ortho
* the view was not fitting (as oppose to use HOME)
region_2d_to_origin_3d would misbehave (and consequently region_2d_to_location_3d).
Sample addon to test it:
```
import bpy
from bpy_extras.view3d_utils import (
region_2d_to_location_3d,
)
from mathutils import (
Vector,
)
class MoveXYOperator(bpy.types.Operator):
"""Translate the view using mouse events"""
bl_idname = "view3d.move_xy"
bl_label = "Move XY"
@classmethod
def poll(cls, context):
return context.object
def modal(self, context, event):
if event.type == 'MOUSEMOVE':
self.move(context, event)
elif event.type in {'LEFTMOUSE', 'RIGHTMOUSE', 'ESC'}:
return {'FINISHED'}
return {'RUNNING_MODAL'}
def invoke(self, context, event):
if context.space_data.type == 'VIEW_3D':
self.ob = context.object
context.window_manager.modal_handler_add(self)
return {'RUNNING_MODAL'}
else:
self.report({'WARNING'}, "Active space must be a View3d")
return {'CANCELLED'}
def move(self, context, event):
xy = region_2d_to_location_3d(
context.region,
context.space_data.region_3d,
(event.mouse_region_x, event.mouse_region_y),
Vector(),
).xy
self.ob.location.xy = xy
def register():
bpy.utils.register_class(MoveXYOperator)
def unregister():
bpy.utils.unregister_class(MoveXYOperator)
if __name__ == "__main__":
register()
```
Factorized writing of ID block's data (so far, only IDProps) into own helper func.
This also fixes missing IDProp (aka custom data) saving from GreasePencil and Library
datablocks (and add comment about why we do not save WM IDProps).
Finaly, it ensures all ID-related data are written immediately after the ID itself
(was not the case for all data types previously, some were writting their own data
before IDProps). This is not a fix (.blend file format does not enforce any order
on sub-data of datablocks, they only have to be after datablock struct itself in file),
but makes things more consistent.
Before the intervall was set to 0.125 which effectively resulted in 8 positions across the UV space (per axis).
I halved that value, holding shift enables an even finer movement.
This change was ported over from my soc-2016-uv_tools branch after talking with howardt, ideasman42 and hackerman-
When this flag is set - even when the curve error is under the threshold,
keep attempting a better fit.
Enable this for freehand drawing, since it gives nicer results and isn't noticeably slower.
Also, can use numeric input to set segments and profile when
in those respective value-adjusting modes (as per S or P toggle).
Finally, fixed problem with previous bevel commit: when changing
value-adjusting mode, would like to start off resumed value adjustment
where it was before.
Unsigned int is not supported by OSL as far as i concerned, so should not
really matter here. However, might be wrong and perhaps more proper idea
would be so set it as regular int?