Pages

Showing posts with label and. Show all posts
Showing posts with label and. Show all posts

Saturday, April 12, 2014

Alarm Monitoring Services San Jose Essential To Residential And Commercial Buildings

By Roy van Rivero


Being one of the largest cities in California (as well as its thriving economy) makes San Jose as one of the important locations in this particular state - both in residential and business aspects. Having said that, it is imperative that an effective alarm monitoring system such as fire alarm system is put in place as an added security measure whether a building is residential or built for business purposes. This can help is saving lives and properties for cities as populous as San Jose should unprecedented security threats arise.

There are a number of alarm monitoring systems that could be integrated to any building system in San Jose and this includes the following:

Video monitoring system -- one of the highly-recommended system most especially for commercial facilities where burglary and other crime-related incidents are common. The visuals/graphics feature of video system eliminates false alarms and helps to ensure a high priority response. Furthermore, it can also provide solution to distance problem through remote video monitoring. There are a number of business alarm monitoring service providers that one can turn to for system integration.

Water detection -- this is particularly relevant in this time of climate change wherein unpredictable weather is prevalent. Water detection system helps a facility to get early warning in case of floods. In addition, it can also help when it comes to detecting water system leaks inside a facility, which could result to damage to properties and lives of people inside when not attended properly.

Fire alarm monitoring -- When you shop for fire alarm monitoring services today, you will find that San Jose alarm monitoring companies offer various measures to control or prevent fire accidents, which are necessary to both commercial and residential facilities. Fire alarm monitoring system could include features like fire suppression system, sprinkler monitoring, carbon monoxide detection system, and some more specialized protection applications.

GPS Alarm monitoring -- considered to be one of the most effective systems when it comes to security issues that involve distance; it works by tracking or tracing distress or emergency calls from particular locations. Alarm monitoring service providers in California offer this service, which is recommended for automobile tracking, speed monitoring, as well as geo-fencing (virtual barrier).

Alarm monitoring services have been proven to have helped many residential and commercial facilities in the past. Is saves lives and properties from both man-made and natural calamities through early detection and prevention.




About the Author:



Read More..

Thursday, April 10, 2014

SHOWING DATE AND TIME OF YOUR LOCAL PC TIME USING C PROGRAM

#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
textcolor(6);
cprintf("Showing date and time
");

printf("
");

textcolor(2);
cprintf("Date:%s",DATE);
printf("
");

textcolor(4);
cprintf("Time:%s",TIME);
getch();
}

cprintf() function you can see color formatted output.
textcolor() function gives the specific color.
By executing this program you can see the current date and time of your local PC time.
Read More..

Wednesday, March 26, 2014

How to Access and Internet Connection FREE

How to Access and Internet Connection FREE Either way ato is still not fit but did not try yesterday there are some who still have a road and oyi. If one wants to try, mango atuh! Sorry if the language SMS language JYes it was counted for the theory-who knows you are lucky enough to step on the gas ngenet ampe Kill ampe are confused about browsing. Even yesterday there are friends who browse from 7 Malem ampe at 7 am (which is obviously yes see website bokep, bugil ria, and aunt naked round ...) Just abis 1000 silver ...Free StarOneparameters used for connection with chip StarOne,dial number = # 777username / login = wappassword = wapif you use mozilla select Tools => option => advanced => network => settings => select manual proxy configuration, then enter the following proxy:http proxy: 66.29.36.95 port: 554 or 1745live list http://pps.nntime.com/then check use this proxy for all protocols.is a good proxy because it can open halaman2 with SSL 128 bit like yahoomail, e-gold, gmail, internet banking, and all of them, of course could open a myspace page which is your favoriteDial your cdma do, then start browsing ....good luck. Free EsiaYou can use the operator of Foreign Affairs. Fill in your proxy 129.82.12.187 / 216.165.109.82 and Port 3128/3124/3127 (select one)or200.63.213.2 / 66.29.36.95 (username search in http://pps.nntime.com/)with port 554What you need to do is change the proxy settings in your browser.Esia free (alternative)Buy a package Esia card fortunately, continues to use internetan aja, so nah nah definitely reduced my pulse was normal, pulse until later klove USD. 0 hell be able to continue, but better the first abisin aja klo dah pulse created telponan USD. 0 new this internetan pake deh.so do with the setting:log dial upusername: esia / Wifone / Wimodepass: esia / Wifone / Wimodeusername ama paswordnya yes select one wrote, everything can be, well after the entry into the internet we have to use a proxy, enter proxy through firefox click tools, then options, then advanced, network, and then the contents of the manual proxy settings by 200.63.213.2 to port 554 uda deh website and can stay open, weaknesses like the dashed connection and a bit longer, if you want a bit cepet ya got to find another proxy on google a lot, or if you use mozilla select Tools => option => advanced => network => settings => select manual proxy configuration, then enter the following proxy:http proxy: 66.29.36.95 port: 554then check use this proxy for all protocols.at the start browsing you will be asked for your username and password,you can create their own username hereor if you want the full can buy your ownFree Esia (Alternative 2)Buy prime esia whistleDownload here http://rapidshare.com/files/66124802/Proxifier.zip proxifierpass: xteamweb.comUser and pass the standard user and pass aja okay Wimode can also Riang Riang Riang RiangIf it proxifier settingsOption ->> proxy settings ->> add -> enter proxy xteam port 554 ->> check the HTTPS ->> enter your username and password on each of the same love Mimixteam proxy: 72.55.165.86 port 554, user name: Internet untuksemua, pass: changing the hell, it can be seen in http://internetuntuksemua.blogspot.c...ate-proxy.html update.There is always updateable password if there is a change from the X-Team.Options ->> Name Of Resolution ->> select a Remotely are checkedFree SmartSetting MyEnTunnel:====================SSH Server: 68.178.172.19 SSH Server: 72.55.165.86SSH Port: 80 (this has been fixed) SSH Port: 8080Username: dog Username: internetuntuksemuaPass: dirty Pass: free4uCheck: - Reconnect on Failure- Use Private Key- Verbose Logging- Enable Slow Polling- Infinite Retry Attempts- Enable Dyanamic SOCKS Port 80 (this can we foxes to 20, etc.)- Hide Port Connections- Enable Compression- Retry Delay 1- Disable NotificationsAnother Port Options: 20, 443,554,3124,3127, 7999,8000,8088,8888 and 9201Browser Settings:==================filled only with localhost port 80 SOCKSDial Up Settings:==================best suited for SMART (last ESIA) ...SMART username pass cdma cdma # 777ESIA username pass esia esia # 777 Free Smart (alternative)Use proxy 10.17.27.250 port 8080username: cdmapassword: cdmaDial: # 777smart use port 8080,80,8000.Free Smart (Alternative)Although free internet esia is no road, but for cdma users still have other options to be able to use free internet access. One is the free Internet by using proxy 10.17.27.250:8080 smart. Actually, to be able to get the maximum connection, we not need to bother, just modifying a bit of free internet tricks esia who have already been discussed, could ngacir freeway.First, dial your smartSecond, open PuTTY and then set proxy 10.17.27.250:8080 Proxy tab. then on the ssh select the tunnel and enter the desired source port and tick the "dynamic" her.Third, enter the IP free ssh account which has previously shared in the hostname, and enter its ports ssh with port 80.Fourth, run ssh tunnel via PuTTY and open proxifier and set socks proxy ssh tunnel results from there.fifth, restart proxifier and done!FYI, until the time I post, this trick can walk. ga tau later, tomorrow, day after tomorrow .. ato heuheuheue .. ajah pokoe ... good luck ...Free with FlexiTotal cost Flexi (half free lho, who mbayar just uploaded it)Jump Aja our free internet settings ....!1. Make sure the signal in your area bagusss Flexi ....2. Your-Freedom install programs on your computer.3. After install, do not run before Your-Freedomnya.4. Connect your computer to the Internet (# 777, telkomnet @ flexi, telecoms).5. If it is Connect, run Your-Freedom.6. Click the Ports tab and click the checkbox Shock 4 / 5 Port 1080 and click the checkbox Web Proxy Port 8080.7. Back click the Status tab, and then click Configure.8. On the Server Connection with ems09.your-freedom.de contents and the bottom box with udp instead of http port will automatically be replaced with 53.9. Fill Proxy Settings with the IP 203.26.206.132. Fill port with port 554Proxy type HTTP / HTTPS proxy.10. In the Account Information section, fill in his username and password with which you can at the time of listing on the Your-Freedom.11. Check the Messages tab should appear writingsClient Version: 20070511-01 Server Version: 20070510-11 Auth-ok: Port Authentication Accepted Starting Current RTT: xxxx ms ...Furthermore, your browser settings ...., For which use Mozilla, nih settinganya ...1. Click Tools, Options, Advanced, Network, Settings ...2. Select Manual Proxy Configurations3. Empty all the parts except the HTTP, SSL and FTP filled localhost 8080, whileHost Sock fill in localhost port 1080.Then in the No Proxy for fill in localhost, 127.0.0.1,92.168.0.0 / 16Three freeMaybe someone already knows, so it created a blom tau aja ya ... First Tosinet setting free threeusername 3mms3mms passwordapn 3mmsits up to how many clients wanted to ip 10.21.xx.xx or how kek, guns problem. Coolonce connected into the network, please open UltraSurf content with manual proxy 10.4.0.10 port 8080, wait until there is a successful status.to change the proxy settings firefox browser to 127.0.0.1 port 9666 ok.if youve survived just browsing is still often dc, please dioprek further. Tos first.XL GprsNi da Gret dr XL, I try to share, maybe teman2 there who do not know, more or less teman2 Ntar lengkapin yes ...Setting with:IP: 217.27.32.188Port: 9201Add URL to wap.xl.co.id @ as an example:http://wap.xl.co.id @ wap.test.comTo be able to use a full-add as well to:http://wap.xl.co.id @ mobile.aolsearch.com/lnk000 /If you use a PC,winwap try using a browser and can also use Openwave browsers.This trick can only be used if you are in a period of active xl.After active gprs xl make sure your credit has been exhausted or under Rp.2000, -.Now to enter the wap page kesebuahchange http:// to Http: / /Hopefully Helpful ...
Read More..

Sunday, March 23, 2014

The perception of games and why it needs to change

Hello, just a quick post. I just posted on my sister blog, Botworks, a article on the public perception of games and why I think it needs to change. It is a topic that means a lot to me and I would really appreciate you guys to have a read and let me know what you think.

(Normal posting to return soon hopefully with a review of Forza 3, which I am still digging)
Read More..

Wednesday, March 19, 2014

Structure and Interpretation of Computer Programs

Structure and Interpretation of Computer Programs (Adelson/Sussman)
Read More..

Monday, March 17, 2014

PYTHON Additional Examples and Usages of XML

In previous post, I talked a lot about XML and probably some of you got confused on how we can really use this XML writing and reading knowledge to do export import of data.

This is fine because with the XML Read and Write, you really have a lot of concepts to digest:
  • Using Element Tree XML built in module
  • Concept of XML: tag, element
  • Using File function of Python to write out to file
  • Using and constructing data that is like Dictionary: keys, items, values
  • Data type conversions
  • Understanding of Path Location of XML file in your Operating Systems
This XML concept is also still fairly new to me and I only understand the basic to write out the XML style format and read it back in.

Take it easy and slowly with this XML. See the pattern.

However as we know, even the basic knowledge can be really useful. I will further expand the idea from previous post. Feel free to ask me questions if you dont have clue what I am talking about.

DIY Write & Read of XML

For this, I will start by copying and pasting the template construct from previous post on XML and modify it slightly each time for each example below. It would be better to understand the xml.etree module, but we could also simply use the construct as long you know what it does in the background.

We will definitely use some simple BPY to collect information and data we needed to export about the 3D scenes. Our focus is on how the data can flow out of Blender and bring it in back into Blender or to other 3D packages.

Remember that Python scripting, like any other programming language, is something you learn and master by actually practicing it and making mistake and fixing it.

If you understand my style of blog writing, I actually improvise while writing. Often I do not actually plan the topic. This blog is more like Journal. I explore certain feature, I am testing and documenting each steps and then I will write it down. I guess you could do the same thing.

Hopefully with this examples, you can start to get curious and try your own XML export import.

It will get easier every time you try it yourself. My examples are there to assist you. Try doing the same thing without looking at my examples and you will start to understand.

Keep digging the Python language and Python in Blender, it will be worth it.

EXAMPLE 1: XML Transform Information (Position, Rotation, Scale) of objects

The idea is to get the Name, Translations, Rotations and Scales data of every selected objects and writing it out as XML. Below is such example of code. It can be optimized, but below should work and the code is pretty easy to read.

Maybe I have bunch of Boxes in random Position, Rotation, Scale in Blender that I want to export out as XML data.



WRITE OUT:



Taken from: Blender Sushi Blog
Code by: Jimmy Gunawan
Last update: 20130420





import bpy
from xml.etree import cElementTree as ElementTree

# PRETTY PRINT
# function to pretty print the XML code
def prettyPrint(element, level=0):

Printing in elementTree requires a little massaging
Function taken from elementTree site:
http://effbot.org/zone/element-lib.htm#prettyprint


indent =
+ level *
if len(element):
if not element.text or not element.text.strip():
element.text = indent +

if not element.tail or not element.tail.strip():
element.tail = indent

for element in element:
prettyPrint(element, level + 1)

if not element.tail or not element.tail.strip():
element.tail = indent

else:
if level and (not element.tail or not element.tail.strip()):
element.tail = indent

return element

### Collecting some information data about the scene ###

# In this example we collect the selected object Transforms
# aka Position (Translation/Location), Rotation, and Scale XYZ
# and writing out the data as XML format

# Create ROOT node
rootNode = ElementTree.Element(world)

# Get Selected Objects
selected_objects = bpy.context.selected_objects

for object in selected_objects:
myLocs = object.location
myRots = object.rotation_euler
myScales = object.scale

# Create node = CHILD element
elementNode = ElementTree.Element({object}.format(object=object.name))

# Parent CHILD node to ROOT
rootNode.append(elementNode)

# Adding attribute translations
elementNode.attrib[TX] = str(myLocs[0])
elementNode.attrib[TY] = str(myLocs[1])
elementNode.attrib[TZ] = str(myLocs[2])

# Adding attribute rotations
elementNode.attrib[RX] = str(myRots[0])
elementNode.attrib[RY] = str(myRots[1])
elementNode.attrib[RZ] = str(myRots[2])

# Adding attribute scales
elementNode.attrib[SX] = str(myScales[0])
elementNode.attrib[SY] = str(myScales[1])
elementNode.attrib[SZ] = str(myScales[2])

# Adding text
elementNode.text = {object}.format(object=object.name)


### WRITING OUT IN A CLEAN WAY IS A BIT COMPLEX... WE USE THE PRETTY PRINT

# Pretty print the rootNode
prettyPrint(element=rootNode)

# We need to convert to STRING before we can see the whole thing
xmlText = ElementTree.tostring(rootNode)

# FINAL RESULT, we need to append the HEADER
print ( <?xml version="1.0" ?>
{xmlText}.format(xmlText=xmlText) )

### NOW WE LIKE TO WRITE OUT THE XML TO FILE
outputPath = rC:pythonInBlender ransOut.xml

fileObject = open(outputPath, w)
fileObject.write(<?xml version="1.0" ?>
+ xmlText.decode(utf8))
fileObject.close()

print(XML file has been written in here: {outputPath}.format(outputPath=outputPath))









THE XML:



READ IN:



Taken from: Blender Sushi Blog
Code by: Jimmy Gunawan
Last update: 20130420





import bpy

from xml.etree import cElementTree as ElementTree

xmlPath = C:/pythonInBlender/transOut.xml

xmlRoot = ElementTree.parse(xmlPath).getroot()


def applyTransform():

for element in xmlRoot:

# Get the NAME of objects
objectName = element.tag
print(objectName)

# Tell Blender to get the current object data by its name
object = bpy.data.objects[{objectName}.format(objectName=objectName)]
print(object)

# Get all element keys
myKeys = element.keys()
# print(myKeys)

# Get Position, Rotation and Scale data
posX, posY, posZ = float(element.get(TX)), float(element.get(TY)), float(element.get(TZ))
rotX, rotY, rotZ = float(element.get(RX)), float(element.get(RY)), float(element.get(RZ))
scaleX, scaleY, scaleZ = float(element.get(SX)), float(element.get(SY)), float(element.get(SZ))

# Apply Position, Rotation and Scale data to corresponding object by its name
object.location = posX, posY, posZ
object.rotation_euler = rotX, rotY, rotZ
object.scale = scaleX, scaleY, scaleZ

applyTransform()









The code above is very specific about Object Name and that is just one way we can do this. If for the same objects we reset their position, we can then run the script and magically put them back into positions specified from XML.

The above example is not particularly amazing example because we can achieve the same thing using DAE Collada Export Import, for example. Although with DAE, we usually have limited options and flexibility.

We could bring the XML data to other 3D package and actually do ANYTHING with it. Keep in mind that the World XYZ Orientation might be different in other package.

This kind of code is probably good for saving out "Presets"or maybe "Character Poses". I have not looked at it deeply. It has potential for Assembly script. Although Blender File System and Referencing are actually already pretty cool and we can probably do the script based on that system. But if we want to bring it outside and inside other package, then XML seems to be nice.

From the above basic example, we can take the concept to place some Monkeys in the 3D scene, if we can think of every Cubes as Bounding Box:


READ IN, BUT CAST AS MONKEYS:



Taken from: Blender Sushi Blog
Code by: Jimmy Gunawan
Last update: 20130420





import bpy

from xml.etree import cElementTree as ElementTree

xmlPath = C:/pythonInBlender/transOut.xml

xmlRoot = ElementTree.parse(xmlPath).getroot()


def createMonkeyFromData():

for element in xmlRoot:

objectName = element.tag

if TX in element.keys():

# Get Position Data
posX, posY, posZ = float(element.get(TX)), float(element.get(TY)), float(element.get(TZ))

# Create Suzanne based at position XYZ
bpy.ops.mesh.primitive_monkey_add( location=(posX, posY, posZ) )

monkey = bpy.context.selected_objects[0]
print (monkey)

# Get Rotation and Scale data
rotX, rotY, rotZ = float(element.get(RX)), float(element.get(RY)), float(element.get(RZ))
scaleX, scaleY, scaleZ = float(element.get(SX)), float(element.get(SY)), float(element.get(SZ))

# Rotate and Scale monkey accordingly from data
monkey.rotation_euler = rotX, rotY, rotZ
monkey.scale = scaleX, scaleY, scaleZ


createMonkeyFromData()










NOT EXACT DIMENSION SIZE
We apply the Transform data from the Cubes into the Monkeys, although is not really the accurate Bounding Box or Dimension data. Because some parts of the monkey is poking out.

If you are questioning about it.We could export out the Dimension data as XML from the first place and apply it to the monkeys to get more accurate result.

Example on how to get dimension data of object to pass on:
bpy.data.objects[{object_name}].dimensions
bpy.data.objects[Cube].dimensions

EXAMPLE 2: Reading In Custom Attribute Data

Let say we have XML data with arbitrary Custom Attribute and values. We did not create the date from Blender. Someone else did it. Maybe we grab the data from the Internet.


The XML data can be anything:
1. Yahoo! Weather XML data
  • City Location
  • Temperature High
  • Temperature Low
  • Todays Date
2. Facebook XML data
  • Persons Name
  • Persons Photo
  • Persons Age
  • Persons Likes
3. Google Map data
  • Latitude
  • Longitude
  • Name of State
  • etc
What we can do is simply READING those data and then visualizing it in Blender. 

A simple example, XML like below:

<world>

<Object1 COLOR="red" SIZE="5.0"/>

<Object2 COLOR="green" SIZE="2.0"/>

<Object3 COLOR="blue" SIZE="0.5"/>
</world>

OR MORE PROPERLY:

<?xml version="1.0" ?>
<world>
  <Object1 COLOR="red" SIZE="5.0"></Object1>
  <Object2 COLOR="green" SIZE="2.0"></Object2>
  <Object3 COLOR="blue" SIZE="0.5"></Object3>
</world>

(Save the bottom one as customData.xml.)

Ok, let say from those data, I will apply it to the Monkey.001, Monkey.002, and Monkey.003 objects in the 3D scene that I have prepared.

The Suzanne Three Sisters
What I am trying to do is to tell Blender:
Object1 --> Monkey.001 --> apply SIZE, apply MATERIAL with Diffuse Color = COLOR
Object2 --> Monkey.002 --> apply SIZE, apply MATERIAL with Diffuse Color = COLOR
Object3 --> Monkey.003 --> apply SIZE, apply MATERIAL with Diffuse Color = COLOR

The script can be as below:


READ IN CUSTOM XML




Taken from: Blender Sushi Blog


Code by: Jimmy Gunawan


Last update: 20130420







import bpy

from xml.etree import cElementTree as ElementTree

xmlPath = C:/pythonInBlender/customData.xml

xmlRoot = ElementTree.parse(xmlPath).getroot()


def applyColorToMonkey():

for element in xmlRoot:

# Create Materials with Color based on the NAME
colorname = element.get(COLOR)
mat = bpy.data.materials.new(name={colorname}.format(colorname=colorname))

# Create our own custom dictionary of color
colorDict = {red:[1.0,0.0,0.0], green:[0.0,1.0,0.0], blue:[0.0,0.0,1.0]}

# Assign specified Diffuse Color into Material
myColor = colorDict.get(colorname)
bpy.data.materials[colorname].diffuse_color = myColor

# Get the NAME of objects
objectName = element.tag
objectNumber = int(objectName.strip(Object))
monkeyName = Monkey.{objectNumber:03}.format(objectNumber=objectNumber)

print (monkeyName)

# Tell Blender to get the monkey data by its name
object = bpy.data.objects[{monkeyName}.format(monkeyName=monkeyName)]

# Assign our Material to corresponding Monkey
object.data.materials.append(mat)

def applyScaleToMonkey():

for element in xmlRoot:

# Get the NAME of objects
objectName = element.tag
objectNumber = int(objectName.strip(Object))
monkeyName = Monkey.{objectNumber:03}.format(objectNumber=objectNumber)

print (monkeyName)

# Tell Blender to get the monkey data by its name
object = bpy.data.objects[{monkeyName}.format(monkeyName=monkeyName)]

print(object)

# Get SIZE data and assign it to Scale Variables
scaleX, scaleY, scaleZ = float(element.get(SIZE)), float(element.get(SIZE)), float(element.get(SIZE))

# Apple Scale to Monkeys
object.scale = scaleX, scaleY, scaleZ


applyColorToMonkey()
applyScaleToMonkey()







If the above code run as planned, we are getting something like below. This is the power of XML and Python and Python in Blender.

We should be able to:
  • Write XML data (free the data to the ouside)
  • Read XML data (from any source)
  • Process the data
  • Apply the data

The code above can be further cleaned up and probably expanded
  • Error Checking
  • Check if object exist
  • Making sure Blender does not keep generating same Material Name when we run the script multiple times.

FURTHER ON WITH XML

See if you can play with the idea further more:
  • Assigning "specific Texture Name" for each Material to be assigned into "specific" objects
  • Procedurally generate XML data 
  • Can we perhaps use other tool like Processing to generate XML and then bring it into Blender?
  • Turn it into Animation, let say if we have XML data in corresponding to Frame Number.
  • Find some XML data from Internet and bring it into Blender and visualize it.
  • Almost "Real time" XML data with refresh?

OTHER VIDEO TUTORIAL RELATED TO XML

Luiz Kruel @Eat3D

Based from his video tutorial, below is the converted Blender Script that does the XML export using MINIDOM.

from xml.dom.minidom import Document
import bpy

doc = Document()

root_node = doc.createElement("Blender Scene Info")
doc.appendChild(root_node)

# Get selected objects
selection = bpy.context.selected_objects

# Just print out selected objects name
for num, item in enumerate(selection):
    print (num, item.name)

# Add into XML tree:

for object in selection:
    object_node = doc.createElement(str(object.name))
    root_node.appendChild(object_node)

    object_locX = object.location.x
    object_locY = object.location.y
    object_locZ = object.location.z
    object_node.setAttribute("locationX", str(object_locX))
    object_node.setAttribute("locationY", str(object_locY))
    object_node.setAttribute("locationZ", str(object_locZ))
    
print()
print()
print()

xml_file = open("C:/test.xml", "w")
xml_file.write(doc.toprettyxml())
xml_file.close()

print ( doc.toprettyxml() )


Read More..

Friday, March 14, 2014

Apple iPhone 5c and iPhone 5s Available on ALL Smart Stores on November 15 2013


As announced a week ago, Smart iPhone 5c and 5s units will be available on ALL Smart stores across the country starting tomorrow, November 15, 2013. They are quietly launching this newest iPhone because of what happened recently in the central part of the Philippines. They also announced in the media briefing earlier that they have fired up the LTE service again in Tacloban to aid the organizations and other people needing high speed data in that area.
Read more »
Read More..

Tuesday, March 11, 2014

RENDER Blender Renderman and 3Delight


Thousands of Mario rendered 3Delight from inside Blender. The scene is using RIB Archive from Maya (contains animation and Maya shaders) that is instanced with Blender Particles, and rendered with very little memory usage and under 1 minute.
WARNING: This is one of those "wordy" blog post!

AS ONE MANS BAND
Working with multiple 3D tools is like playing multiple ensemble of instruments. It is quite a privilege to be able to do so from your own computer. Nowadays anyone with access to decent computer and Internet, can start playing and working with these powerful ensembles right away.

I am maybe one of those "One Mans Band" people, most of the time. Perhaps some of you, readers of this blog, are too. Surely it is nice to work in a big or small team, where each plays part of  musical piece and can play together an epic musical. But sometimes in a low tide situation, one needs to be able to survive alone. Not just that, I am sure each artist has self-desire to make own personal project.

Remember, the thing is: You are not really alone because there are many artists out there sharing their knowledge and brain online. You just need to find it and create your own party.

If for musicians the aim is to play a beautiful music to inspire many. For us CG artists, hopefully we are always aiming to create beautiful visuals and creative imagery to inspire many.

For that reason, we use all kind of tools to do so. From choosing your modeling tool, animation tool, all the ways ... to finally to choosing your rendering and compositing tool.

If you came to this blog, you are more likely to have chosen Blender to be your 3D tool. Blender actually provides almost all of those functionality you ever need to create 3D animation and with a high standard. This comes to my surprise, as someone who was originally using other commercial 3D packages (Maya), Blender still amazes me. There must have been a lot of efforts put into Blender by programmers, developers and artists out there to improve this 3D package to the current stage.

Saying that, I think Blender is just "too ideal" for the actual 3D industry at this moment, and it is actually a good idea to also learn 3D Commercial package. Almost all of them actually give you the "Student Learning Edition", you can install 3DSMax, Maya, Softimage, and Houdini for your study. Not for commercial though, for that you need license. Unlike Blender.

Its good to think both  "Inside The Box" and also "Outside The Box".

EXTERNAL CG RENDERERS
Lets focus on actual topic I want to talk about: 3D rendering and its renderer.

Based on my little knowledge, we can probably categorizing CG renderer like this:
1. Real Time Renderer (like for games): Blender Game Engine
2. Non Real Time Renderer
   - Non physically based renderer and physically based renderer
   - Raster and Raytrace
   - Non photorealistic renderer: Blender Freestyle

Famous 3D renderers (commercial) out there that I knew of or I heard a lot lately:
  • VRay -> has nice Global Illumination
  • Mental Ray (like in Maya and Max)
  • Maxwell Render
  • Octane Render -> similar concept to Blender Cycles, it is really fast GPU renderer. Octane takes OBJ as input.
  • Pixar Renderman PRMan ->  Renderman Complient Renderer
  • 3Delight -> Renderman Complient Renderer
BLENDER RENDERER
Recent version of Blender comes with its built-in Blender Internal and Cycles as we already know. Those are really powerful renderer if one really knows how to use it well.

Although Blender Internal seems to be quiet in development, it is still powerful as currently is and have plenty to explore.

Cycles renderer is actively and continuously being developed. As a real time GPU renderer (utilizing OpenGL), Cycles has a real edge in itself. It is actually a huge leaps in term of 3D rendering that CG artist today can take for granted. 

Custom node-based building of Cycles Materials is an open ended area to explore and I would love to have time to look into this more in near future.

Blender itself being an open source 3D package with great organizing capability (able to reference and link objects from outside), has a capability to act as unlimited renderer engine for other 3D packages, can render on any computer with Blender installed.

But the thing is Blender needs a better FBX support (I believe they are working on it) in order to work together with other 3D packages. Until then, it could be a little tricky to put things together works from outside the box.

3DELIGHT FOR BLENDER
http://mattebb.com/3delightblender/


I was recently looking at this 3Delight add-on by Matt Ebb. I dont know how many Blender users out there is actually using this amazing Add-On. One of the best 3Delight Renderer Interface for Blender, it is probably the only one.

I looked at Matts add-on few times and recently got upgraded for Blender version 2.63. I believe Matt worked on the add-on on his own spare time, which is certainly impressive.

Matt Ebbs example render using Blender and 3Delight:
https://vimeo.com/29014574

This 3Delight Blender Add-On allows you to translate Blender scene into Renderman language, into beautiful pictures rendered with Renderman compliant renderer, such as 3Delight and PRMan (Pixar Photorealistic Renderman), high end renderer used in so many major movies.

3Delight first license is actually free with CPU limitation (2 CPU Processor max) PRMan is not free (it has cost), but PRMan has the most complete feature and other advantages.

I will not be writing much about in depth history of PRMan or 3Delight, I just feel to write and express my actual curiosity of this 3Delight Add-On and also Renderman in general. Hopefully can also motivate you to look into Renderman and how you can use Blender to help you learning Renderman.

What you need to get started:
1. Blender version 2.63
2. Matt Ebbs 3Delight/Blender Add-On
3. 3Delight installed on your computer.
http://www.3delight.com/

The Add-On itself is like "Work In Progress (WIP)", meaning it is not totally complete and it does not serve a complete feature of Renderman. However, this is still a good looking add-on and usable when you wanted to learn Renderman and the art of 3D rendering, Renderman way.

NOTE: 
I have little knowledge about Renderman, 3Delight, and PRMan, so probably not all what I wrote is correct, please be kind and correct me in the comments.

INTERFACE FOR RENDERER
You see, the INTERFACE is everything nowadays.

All good 3D packages these days can already do pretty much what all 3D packages supposed to do and it all comes back to the INTERFACE (aka User Interface)

First, you have the interface of your 3D tool of choice, to work on your 3D project. Then you might have all kinds of other modeling tools with each own interface: ZBrush, MudBox, Sculptris or Blender Sculpt brush for sculpting. The 3D data being passed on from one package to another package. If it is just your model, OBJ is usually fine.

If I take another analogy, it is like you can take photograph and do photography using DSLR camera or using good compact camera or mobile phone camera. For mobile camera, the interface is even taken to another level of complexity (or simplicity) where you could literally have hundreds of apps to take photo and process it in an instant.

Now, back to actual topic of 3D Renderer, why do we need to care about it? Isnt it enough just to use whatever renderer available in your 3D package and hit the render button? Yes, that is true for most cases. You typically would render out your 3D scene, inside your 3D package as something like EXR, which is like RAW format in photography, which contains extra information to be used and processed further during compositing. Why do we then need for external renderer with yet ANOTHER INTERFACE (if using Renderman workflow)?

Well, I guess the full list of answers are like below (the reason on why we need additional interface before actual rendering):
  • Quality: able to create high quality result renders
  • Usability: ease of use and smoother pipeline for more complex setup
  • Customability: able to create custom shaders and be really specific on how it should look
  • Speed, Memory and Stability: able to render complex scene without crashing
  • Expandability and ability to handle Complexity: able to work in a large massive scene in a large scale way (cloud and server render)
  • Flexibility, Modularity and Interoperability: can be passed on from one renderer to another within the same rendering languages. If I am not wrong, RIB is also can be passed to compositing software like Nuke. It involves Renderman AOV, etc, whic I dont really quite understand yet.
TO WATCH FOR: Pixel Samples, Shading Rate, Pixel Filter, Depth Of Field, Motion Blur, and Renderman Output.
Separating 3D package from its 3D render, and having a human readable text is really powerful.

RENDERMAN = THE HIGH END RENDERER
With Renderman workflow, we sort of have ways to separate 3D Packages and actual 3D scene object geometry to render (with all the shaders, lighting, etc). You can render without actual 3D software Interface, yet still manageable and controllable.

It is kind of having a RAW file for your render, but still in 3D format that you can tweak.
[any 3D Scene] --> RIB (Renderman Interface ByteStream) --> [any Renderman Renderer]

RIB
In short, this is your 3D scene description. This is the bare minimum input you can pass on to Renderman to give you image output. You specify a series of commands or calls to render.

Everything that is shown on your 3D view, can be translated into RIB packages, to be passed on any Renderman renderer. Matt Ebbs Add-On 3Delight provide you easy way to set the RIB automatically, translating Blender scene as RIB.

Imagine "HTML" for "web pages", this RIB is just like "HTML" but for CG and you specify to the renderer what to do, where the Shader is, how the object should be transformed, etc. Well, if you think about it, it is kind of like "CSS" too. RIB works in hierarchy and you can add anything into stack to change certain attribute and be very specific.

RIB is easily editable and can be modified with text program.


Maya Paint Effects (PFX) and SOuP instancing Blender Monkey Primitive, exported out as RIB. RIB modified slightly to override the original RIB Shader.
Quick render inside Blender as RIB Archive.

C Binding, Programming and Compiling
When learning Renderman language, you will eventually get to this terminology. The way I look at it, C programming is like a way to procedurally script your 3D scene geometry. Dont even want to go there.

The point of having 3D softwares is the reason artists can avoid all those complexity. Leave the codes to the developers and geniuses. Unless you are genius.

NOTE: You could learn RIB binding using Python though. Python RIB Binding is kind of more for human!

At a quick glance, my understanding is that you could write script outside RIB that you can call to procedurally generate some values, instead of typing each lines manually.

RSL/Renderman Shading Language
Not the best example of renders, but this is just few basic Surface and Displacement Shaders that usually come by default with Renderman renderer. Watch out for Displacement Bound when you use Displacement.
RSL or Renderman Shading Language is probably something you want to get into. Generally, RSL is more accessible to artists brain, you can basically write your own Shaders for Surface, Displacement, Light, etc. instead of relying of the common set of Materials made available inside 3D package.

You write RSL as *.SL using any notepad text (I use NotePad++) and then you compile it into a Renderman Shading Language that you can attach into 3D geometry.

With 3Delight, all you need to do to compile is to go to Command and then run the command like below:
shaderdl mySurface.sl
shaderdl myDisplacement.sl

It will then produce a compiled version:
  • For 3Delight: (shaderdl.exe)SL > SDL
  • For Pixar PRMan: (shader.exe)SL > SLO
Some default Renderman Shaders and more. Plenty more. Renderman is about shaders that give you that perfect look.
Each Shader comes with defined parameters. And you can make your own.

USING RIB ARCHIVE
This is Renderman feature that I like a lot:
Being able to export and import RIB archive (including animation sequences) from outside, just like if you are referencing 3D objects from outside the scene into the current scene.

Using RIB Archive can save memory for rendering, supposedly really efficient, especially with DelayedLoadArchive feature which allow Renderman to render only what is seen via camera. The workflow is quite specific, I suggest you to read the documentation.

All you need to do to render the RIB archive is to attach RIB Archive Path into some kind of placeholder in 3D scene (can be Empty, or any geometry). Ideally the placeholder is about the same size bounding box of the RIB Archive so we could have a better reference.

RIB Archive output may have geometry, light, shaders, all in a single package, which ideally can be overridden via Renderman specific Attribute inside your current 3D package. Not sure if this is implemented with the Add-On. You could always edit the RIB Archive by text editor.


RIB Archive From Maya > to Blender to 3Delight





RIB Archive From Houdini > to Blender to 3Delight



I supposed with RIB we can easily bring all kinds of scene elements together and can be rendered inside or outside any 3D package. Well... providing we completely understand Renderman workflow.

So far, the most smooth workflow is via Maya (because 3Delight provides a full on Maya plugins). Scene and animation from Blender is exported out as RIB archive, and then brought into Maya for further adjustment and final render.

Ideally, I want to do the Final Layout and Render in Blender + 3Delight and then Compositing.

THE FUTURE OF FUTURE OF RENDERING
Who would know what "3D rendering" is going to be in few years to come. Game engine has become so powerful that Real Time Rendering and Game Cinematic will also be a more common everyday accessible tool to create an actual cinematic experience.

Still thought.... Renderman legacy in Computer Graphics is something that is dear to CG Artists. I dare to say: One does not know Computer Graphics fully, until he/she learns Renderman. Who knows where Renderman is heading in the future?

I heard also about OSL (Open Shading Language) for Blender Cycles, which I dont know exactly what this is, but it is probably something like RSL of Renderman.

BOOKS TO READ
WEB RESOURCES
UPDATE 20120909
Blender Open Shading Language (OSL) for Cycles: (brilliant implementation, similar to Renderman Code Node)
http://www.youtube.com/watch?v=F9zxJr9_5Vk

Now officially available with Blender 2.65!

UPDATE 20121129
See also this great video tutorial from Thomas Dinges:
http://www.youtube.com/watch?v=4LQXjIDWtz0&feature=plcp


Shader writing is always kind of interesting for me. I dont know much about it though, still reading here and there. Anyways, there are geniuses out there sharing OSL knowledge and shaders, so I will list any links related to OSL below, so we can all learn together:

OSL RELATED LINKS

Read More..