﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3ALevon%2Fcycles_standalone_format</id>
	<title>利用者:Levon/cycles standalone format - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3ALevon%2Fcycles_standalone_format"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Levon/cycles_standalone_format&amp;action=history"/>
	<updated>2026-09-05T18:27:50Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Levon/cycles_standalone_format&amp;diff=149973&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Levon/cycles_standalone_format&amp;diff=149973&amp;oldid=prev"/>
		<updated>2018-06-28T21:14:28Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 21:14時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Levon/cycles_standalone_format&amp;diff=149972&amp;oldid=prev</id>
		<title>wiki&gt;Levon: /* Moving Forward */</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Levon/cycles_standalone_format&amp;diff=149972&amp;oldid=prev"/>
		<updated>2015-07-21T12:37:53Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Moving Forward&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=WIP=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Cycles stand alone currently uses an XML format as an exchange format from other 3d software to load data. while there are no 3d software that currently has a full implementation of cycles, currently blender has an cycles XML exporter. &lt;br /&gt;
&lt;br /&gt;
The XML format was never ment to be a finished product and there have been a number of discussions about changing the format, however no progress has been made in changing the format to anything else.&lt;br /&gt;
&lt;br /&gt;
the current state of Cycles standalone can be seen in the following links.&lt;br /&gt;
&lt;br /&gt;
==Motivation==&lt;br /&gt;
&lt;br /&gt;
Cycles has tight integration with blender. its easy to set up your lights, textures and press render and cycles renders in a blender window. To allow this in other 3d software would need a clearly defined API in C to hook into the host Application. An alternative method which is commonly used is an exchange format.&lt;br /&gt;
&lt;br /&gt;
The host exports required data into the 3d softwares own format (rib, ass, vrscene etc) and the renderer can launch as a subprocess loading in the file. there are some overheads of exporting and loading data, but it seems to be quite acceptable in alot of cases.&lt;br /&gt;
&lt;br /&gt;
A clearly defined Cycles exchange format will allow for better exporters from Host software, easier addition of new cycles features into host exporter scripts, and tight integration between cycles and the exporters.&lt;br /&gt;
&lt;br /&gt;
An exchange format doesn't store everything about the scene, it only stores what the renderer needs to know, allowing for the culling of data on export from the host.&lt;br /&gt;
&lt;br /&gt;
===links===&lt;br /&gt;
&lt;br /&gt;
http://wiki.blender.org/index.php/Dev:2.6/Source/Render/Cycles/Standalone&lt;br /&gt;
&lt;br /&gt;
https://developer.blender.org/T38279&lt;br /&gt;
&lt;br /&gt;
https://github.com/fabiosantoscode/cycles-xml-exporter&lt;br /&gt;
&lt;br /&gt;
https://developer.blender.org/project/view/26/&lt;br /&gt;
&lt;br /&gt;
==Moving Forward==&lt;br /&gt;
&lt;br /&gt;
Before any work is started on a new format, we should define what the format requirements are. I have been looking at a number of other render exchange formats to see similarities between them. &lt;br /&gt;
&lt;br /&gt;
requirements:&lt;br /&gt;
*human readable&lt;br /&gt;
*ascii format&lt;br /&gt;
*referencing other exchange files ( materials/mesh can be stored in one file, and referenced in main file)&lt;br /&gt;
*binary mesh data&lt;br /&gt;
*compression of mesh data?&lt;br /&gt;
&lt;br /&gt;
==other render exchange formats==&lt;br /&gt;
&lt;br /&gt;
In the Apendix of this page are some examples of the different formats used by 4 render engines, Renderman, Arnold, Vray and Appleseed&lt;br /&gt;
== Methods==&lt;br /&gt;
&lt;br /&gt;
===Renderman===&lt;br /&gt;
Renderman uses a method of creating the object with one line, then setting attributes though nested attribute sets. IMHO its not very nice to read.&lt;br /&gt;
&lt;br /&gt;
===Vray===&lt;br /&gt;
&lt;br /&gt;
Vray is very similar in format to javascript.&lt;br /&gt;
All non standard types (non str, int, float, etc) have to be cast.&lt;br /&gt;
Line breaks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
object&lt;br /&gt;
{&lt;br /&gt;
	object_param_2DVector = Vector(1,3); &lt;br /&gt;
	object_param_float = 12.345;&lt;br /&gt;
	object_param_string = &amp;quot;string&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arnold===&lt;br /&gt;
Arnold is similar in structure to Vray, or  The Foundrys Nuke.&lt;br /&gt;
&lt;br /&gt;
no equal signs, no type casting. &lt;br /&gt;
&lt;br /&gt;
Arnold doesn't uses equal signs, just parameter name and value, No line breaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
object&lt;br /&gt;
{&lt;br /&gt;
	object_param_2Dvector 1 2&lt;br /&gt;
	object_param 12.345&lt;br /&gt;
	object_param &amp;quot;string&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Appleseed===&lt;br /&gt;
Appleseed uses an XML format, similar to the current Cycles XML, but more fleshed out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Cycles===&lt;br /&gt;
One thing to note is Cycles XML has a transform node as the parent of the lamp, mesh, camera node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
scene:&lt;br /&gt;
	transform:&lt;br /&gt;
		light:&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I quite like this way of thinking, and is inline with the ethos of blender, maya , Houdini.&lt;br /&gt;
&lt;br /&gt;
Appleseed on the other hand has the transform node as a child of the lamp, mesh, camera node. &lt;br /&gt;
&lt;br /&gt;
Arnold and Vray have the transform as an attribute of the lamp, mesh, camera node.&lt;br /&gt;
&lt;br /&gt;
==Options==&lt;br /&gt;
&lt;br /&gt;
Currently Cycles uses XML. which is a valid choice. ive outlined the possibilities of YAML and JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===YAML===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scene:&lt;br /&gt;
	Lamp:&lt;br /&gt;
		MIS: false&lt;br /&gt;
		color: [0.6079999804496765, 0.6079999804496765, 0.6079999804496765]&lt;br /&gt;
		location: [4.076245307922363, 1.0054539442062378, 5.903861999511719]&lt;br /&gt;
		max_bounces: 1024&lt;br /&gt;
		name: SunLamp&lt;br /&gt;
		shadow: true&lt;br /&gt;
		size: 0.10000000149011612&lt;br /&gt;
		type: SUN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===JSON===&lt;br /&gt;
&lt;br /&gt;
Following the same example as before, creating a light. note that by default JSON has no line breaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
{&amp;quot;Scene&amp;quot; :&lt;br /&gt;
	{&amp;quot;Lamp&amp;quot;: {&lt;br /&gt;
		&amp;quot;location&amp;quot;: [4.076245307922363, 1.0054539442062378,  5.903861999511719],&lt;br /&gt;
		&amp;quot;size&amp;quot;: 0.10000000149011612, &lt;br /&gt;
		&amp;quot;shadow&amp;quot;: true, &lt;br /&gt;
		&amp;quot;MIS&amp;quot;: 'false, &lt;br /&gt;
		&amp;quot;type&amp;quot;: &amp;quot;SUN&amp;quot;, &lt;br /&gt;
		&amp;quot;name&amp;quot;: &amp;quot;Lamp&amp;quot;, &lt;br /&gt;
		&amp;quot;max_bounces&amp;quot;: 1024, &lt;br /&gt;
		&amp;quot;color&amp;quot;: [0.6079999804496765, 0.6079999804496765, 0.6079999804496765]&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the same in Arnold:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
Lamp&lt;br /&gt;
{&lt;br /&gt;
	location 4.076245307922363 1.0054539442062378 5.903861999511719&lt;br /&gt;
	size 0.10000000149011612&lt;br /&gt;
	shadow true&lt;br /&gt;
	MIS false &lt;br /&gt;
	type SUN &lt;br /&gt;
	name &amp;quot;Lamp &lt;br /&gt;
	max_bounces 1024 &lt;br /&gt;
	color 0.6079999804496765, 0.6079999804496765, 0.6079999804496765&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pros/Cons==&lt;br /&gt;
&lt;br /&gt;
===JSON===&lt;br /&gt;
'''Pros'''&lt;br /&gt;
*Json comes with python.&lt;br /&gt;
&lt;br /&gt;
'''Cons'''&lt;br /&gt;
*Isnt exactly human readable by default (missing line breaks)&lt;br /&gt;
*No custom data types.&lt;br /&gt;
&lt;br /&gt;
===YAML===&lt;br /&gt;
&lt;br /&gt;
'''Pros'''&lt;br /&gt;
&lt;br /&gt;
*Very easy to read.&lt;br /&gt;
*Custom Data Types&lt;br /&gt;
&lt;br /&gt;
'''Cons'''&lt;br /&gt;
*pyYAML must be installed &lt;br /&gt;
*Correct indenting is essential.&lt;br /&gt;
&lt;br /&gt;
===XML===&lt;br /&gt;
&lt;br /&gt;
-Pros-&lt;br /&gt;
&lt;br /&gt;
-Cons-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Mesh Data==&lt;br /&gt;
&lt;br /&gt;
Using ascii floats and ints are fine for small amounts of data. but what about a mesh with 1 million quads?&lt;br /&gt;
&lt;br /&gt;
Vray and Arnold have binary encoding of data. i believe Vray also GZIP's the binary data.&lt;br /&gt;
&lt;br /&gt;
Arnold has the option to use Ascii b65 encoding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I personally like the idea of breaking the scene up.&lt;br /&gt;
&lt;br /&gt;
A main file with scene settings, and references all files in the scene, each mesh gets its own file, each material gets its own.&lt;br /&gt;
&lt;br /&gt;
This way the scene settings, or material settings can be updated with out having to export the meshes each time.&lt;br /&gt;
&lt;br /&gt;
Referenced files could be other exchange files, or meshes could be obj/alembic, smoke openVDB etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Python Wrapper==&lt;br /&gt;
&lt;br /&gt;
Regardless of which format is chosen, I think we should provide a python 2.6 comparable wrapper to create the exchange file, the host integration will be simpler and more consistent. &lt;br /&gt;
The wrapper can be a 'black box' implementation. The host integration provides the required data to the main python Class, the wrapper generates the file.&lt;br /&gt;
&lt;br /&gt;
Every 3D application i have used in recent years has python 2.6 or 2.7 but rarely 3.x, blender has 3.4 (as of july 2015, 2.75) so keeping 2.6 compatibility is essential.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cycles Material Format==&lt;br /&gt;
&lt;br /&gt;
If cycles is eventually integrated into a number of different host applications, a Cycles Material file format will need to be created, Allowing for Cycles Materials to be exchanged between hosts. You can create your Materials in Blender, and then open the exact same shader in Maya, 3dMax etc. this format should be identical to what Cycles reads, but only contain a material.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other Questions==&lt;br /&gt;
&lt;br /&gt;
*Cycles has no official release, should BF start releasing Cycles?&lt;br /&gt;
*Included in blender, or separate?&lt;br /&gt;
*Should Cycles release cycle be the same as blender, or have its own?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
I need feedback. i dont want to make any conclusions with out getting some ideas from developers and users.&lt;br /&gt;
&lt;br /&gt;
Join the bf-cycles mailing list at http://lists.blender.org/mailman/listinfo/bf-cycles&lt;br /&gt;
&lt;br /&gt;
=Appendix=&lt;br /&gt;
&lt;br /&gt;
==Formats==&lt;br /&gt;
&lt;br /&gt;
===Renderman .rib===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AttributeBegin &lt;br /&gt;
Attribute &amp;quot;identifier&amp;quot; &amp;quot;string name&amp;quot; [&amp;quot;VRayLightRect1&amp;quot;]&lt;br /&gt;
Attribute &amp;quot;identifier&amp;quot; &amp;quot;float id&amp;quot; [1]&lt;br /&gt;
ConcatTransform [ 1.11022e-16 0 -1 0  -0.707107 0.707107 -1.11022e-16 0  0.707107 0.707107 0 0  5 5 0 1 ]&lt;br /&gt;
AttributeBegin &lt;br /&gt;
AttributeBegin &lt;br /&gt;
Attribute &amp;quot;identifier&amp;quot; &amp;quot;string name&amp;quot; [&amp;quot;VRayLightRectShape1&amp;quot;]&lt;br /&gt;
Attribute &amp;quot;identifier&amp;quot; &amp;quot;float id&amp;quot; [10]&lt;br /&gt;
Sides 1&lt;br /&gt;
ShadingInterpolation &amp;quot;constant&amp;quot;&lt;br /&gt;
Attribute &amp;quot;user&amp;quot; &amp;quot;int receivesShadows&amp;quot; [1]&lt;br /&gt;
Attribute &amp;quot;visibility&amp;quot; &amp;quot;int camera&amp;quot; [1] &amp;quot;int indirect&amp;quot; [1] &amp;quot;int transmission&amp;quot; [1]&lt;br /&gt;
Attribute &amp;quot;shade&amp;quot; &amp;quot;string transmissionhitmode&amp;quot; [&amp;quot;shader&amp;quot;]&lt;br /&gt;
Attribute &amp;quot;grouping&amp;quot; &amp;quot;string membership&amp;quot; [&amp;quot;+reflection,refraction,shadow&amp;quot;]&lt;br /&gt;
AttributeEnd &lt;br /&gt;
AttributeEnd &lt;br /&gt;
AttributeEnd &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vray .vrscene===&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
LightOmni pointLightShape1 {&lt;br /&gt;
  enabled=1;&lt;br /&gt;
  transform=Transform(Matrix(Vector(1, 0, 0), Vector(0, 1, 0), Vector(0, 0, 1)), Vector(-5, 5, 5));&lt;br /&gt;
  color=Color(1, 1, 1);&lt;br /&gt;
  shadows=1;&lt;br /&gt;
  shadowColor=Color(0, 0, 0);&lt;br /&gt;
  shadowBias=0.02;&lt;br /&gt;
  photonSubdivs=500;&lt;br /&gt;
  causticSubdivs=1000;&lt;br /&gt;
  diffuseMult=1;&lt;br /&gt;
  causticMult=1;&lt;br /&gt;
  cutoffThreshold=0.005;&lt;br /&gt;
  affectDiffuse=1;&lt;br /&gt;
  affectSpecular=1;&lt;br /&gt;
  bumped_below_surface_check=1;&lt;br /&gt;
  nsamples=1;&lt;br /&gt;
  channels=List(&lt;br /&gt;
  );&lt;br /&gt;
  channels_raw=List(&lt;br /&gt;
  );&lt;br /&gt;
  channels_diffuse=List(&lt;br /&gt;
  );&lt;br /&gt;
  channels_specular=List(&lt;br /&gt;
  );&lt;br /&gt;
  shadowRadius=0;&lt;br /&gt;
  shadowSubdivs=1;&lt;br /&gt;
  storeWithIrradianceMap=0;&lt;br /&gt;
  decay=0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===arnold .ass===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
point_light&lt;br /&gt;
{&lt;br /&gt;
 name pointLightShape1&lt;br /&gt;
 radius 0&lt;br /&gt;
 decay_type &amp;quot;quadratic&amp;quot;&lt;br /&gt;
 matrix&lt;br /&gt;
 1 0 0 0&lt;br /&gt;
 0 1 0 0&lt;br /&gt;
 0 0 1 0&lt;br /&gt;
 -5 5 5 1&lt;br /&gt;
 color 1 1 1&lt;br /&gt;
 intensity 1&lt;br /&gt;
 exposure 0&lt;br /&gt;
 cast_shadows on&lt;br /&gt;
 cast_volumetric_shadows on&lt;br /&gt;
 shadow_density 1&lt;br /&gt;
 shadow_color 0 0 0&lt;br /&gt;
 samples 1&lt;br /&gt;
 normalize on&lt;br /&gt;
 affect_diffuse on&lt;br /&gt;
 affect_specular on&lt;br /&gt;
 affect_volumetrics on&lt;br /&gt;
 diffuse 1&lt;br /&gt;
 specular 1&lt;br /&gt;
 sss 1&lt;br /&gt;
 indirect 1&lt;br /&gt;
 max_bounces 999&lt;br /&gt;
 volume_samples 2&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appleseed .appleseed===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;souce lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;light name=&amp;quot;Lamp&amp;quot; model=&amp;quot;spot_light&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;radiance&amp;quot; value=&amp;quot;Lamp_radiance&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;radiance_multiplier&amp;quot; value=&amp;quot;1.0&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;inner_angle&amp;quot; value=&amp;quot;63.749998424140145&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;outer_angle&amp;quot; value=&amp;quot;74.99999867197056&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;cast_indirect_light&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;parameter name=&amp;quot;importance_multiplier&amp;quot; value=&amp;quot;1.0&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;transform&amp;gt;&lt;br /&gt;
                    &amp;lt;matrix&amp;gt;&lt;br /&gt;
                        -0.29086464643478394 -0.7711008191108704 0.5663931965827942 4.076245307922363&lt;br /&gt;
                        -0.05518905818462372 0.6045247316360474 0.7946722507476807 5.903861999511719&lt;br /&gt;
                        -0.9551711678504944 0.1998833566904068 -0.21839119493961334 -1.0054539442062378&lt;br /&gt;
                        0.0 0.0 0.0 1.0&lt;br /&gt;
                    &amp;lt;/matrix&amp;gt;&lt;br /&gt;
                &amp;lt;/transform&amp;gt;&lt;br /&gt;
            &amp;lt;/light&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>wiki&gt;Levon</name></author>
		
	</entry>
</feed>