How to create physical sky on C++code?

On 12/08/2018 at 18:19, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   19 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
How to create physical sky on C++code? I just have looked for a word(OSkyShader) but not working in my project. could you please give me some example about physical sky?

part of my code:

baseObject* PhysicalSky = baseObject::Alloc(OSkyShader);

On 13/08/2018 at 04:05, xxxxxxxx wrote:

Hi zhhm156156,

First of all welcome in the plugin cafe community!

Physical objects is a bit special. Here is what a basic object will look like.

BaseObject* PhysicalSky = BaseObject::Alloc(1011146);
if (PhysicalSky == nullptr)
	return;
	
doc->InsertObject(PhysicalSky);
EventAdd();

You can know such ID, by drag and drop a Physical sky you created from c4d to the console.

But, since a physical sky is a bit special (when you edit it you can see there are some materials), so in order to get them fully initialized you should call a command since you can't manually initialize them due to some classes not exposed in the SDK. So the correct way to do it is the following.

    CallCommand(1011145);
    BaseObject* PhysicalSky = doc->GetActiveObject();

You can know the command ID by looking at the script log while creating a Physical Sky object.

Hope it's helpful, if you have any question please let me know!

Cheers,
Maxime.

On 14/08/2018 at 18:41, xxxxxxxx wrote:

It works. Thanks:smile: