bnpr / Malt

Render framework for NPR.
https://malt3d.com
Other
981 stars 75 forks source link

Input/Output sockets on Screen Pass fail to generate when directly using GLSL files as a shader source. #486

Closed dibli-goost closed 1 year ago

dibli-goost commented 1 year ago

Malt version

Node Groups

Blender version

Blender 3.4.1

OS

Windows 10

Hardware info

AMD Ryzen Threadripper 1920x 12-Core Processor, 3950 Mhz, 24 Logical Processors | 32GB RAM | Radeon RX 570 Series

Issue description and reproduction steps

When using a GLSL file instead of a node tree on the Screen Pass node, Malt fails to generate Input and Output sockets for the node. It is still generating the parameters on the node however.

I've tried using the auto generated GLSL file for the background screen pass, and an altered version of it with some cleaner looking code. But neither work.

Attachments

GLSL Files Bug.zip

pragma37 commented 1 year ago

This is a known limitation. There's no good way to retrieve shader outputs information from a compiled shader, and there would be no way to differentiate between texture inputs that are meant to be input sockets and those that are meant to be regular material parameters.

Pipelines can choose between a node-based workflow and a code-based workflow, but they are not 100% interchangeable.

When using nodes you can always write a custom function and use it as a single node in the tree. The other option is to implement a custom render node and specify the IO manually, which is what many of the built-in render nodes do: https://github.com/bnpr/Malt/blob/Development/Malt/Nodes/LineRender.py