Q100517: லீஃப்-லெவல் (இன்ஸ்டன்ஸ் ஐடி) இன்ஸ்டான்சிங் மூலம் காட்சி வரைபட சமையல் செயல்திறனை அதிகரித்தல்

சுருக்கம்

மீண்டும் மீண்டும் வரும் வடிவியல் உள்ள எந்தக் காட்சியிலும், நினைவகத் தடம் குறைப்பு மற்றும் காட்சி வரைபட சமையல் செயல்திறன் அதிகரிப்பின் நன்மைக்காக இன்ஸ்டான்சிங்கைப் பயன்படுத்தலாம். பொதுவாக, பல பிரதிகளில் வடிவியல் ஒரே மாதிரியாக இருக்கும்போது இன்ஸ்டான்சிங் நன்றாக வேலை செய்கிறது மற்றும் மாற்றங்கள் மட்டுமே தேவைப்படும். இந்தக் கட்டுரை இலை-நிலை இன்ஸ்டான்சிங் எனப்படும் நிகழ்வு ஐடி பண்புக்கூறைப் பயன்படுத்தி இன்ஸ்டான்சிங் செய்யும் முறையை விவரிக்கிறது, இது ஒரு புள்ளி மேகத்தின் புள்ளிகளுக்கு வடிவவியலை எவ்வாறு பயன்படுத்துவது என்பதற்கான எடுத்துக்காட்டை வழங்குகிறது.

கிடைக்கக்கூடிய பிற இன்ஸ்டான்சிங் அணுகுமுறைகள் பற்றிய கண்ணோட்டத்திற்கு, Katana டெவலப்பர் வழிகாட்டியில் பின்வரும் பகுதியைப் படிக்கவும்: இன்ஸ்டான்சிங் .

கீழே உள்ள புள்ளி மேக நிறுவல் பிரிவுகளை விளக்கும் ஒரு எடுத்துக்காட்டு திட்டத்திற்கு, கட்டானா திட்டக் கோப்பை “ PointcloudInstancingAndMaterialAssign_Arnold.katana ” ஐப் பார்க்கவும்.

இலை-நிலை நிறுவல்

பின்வரும் பகுதி இலை-நிலை இன்ஸ்டான்சிங்கின் சுருக்கமான கண்ணோட்டமாகும். இன்ஸ்டான்சிங் பற்றிய ஆழமான விவாதத்திற்கு, ரெண்டர்மேன் ஆவணம்: ரெண்டர்மேன் 26 ஆவணங்கள் - Katana இன்ஸ்டான்சிங், இன்ஸ்டான்சிங்கிற்கு அறிமுகமாக மூன்று இன்ஸ்டான்சிங் முறைகளையும் எவ்வாறு அமைப்பது என்பதை நிரூபிக்கிறது.

இலை-நிலை நிறுவலில், முன்பே இருக்கும் மீண்டும் மீண்டும் வரும் வடிவவியலை எடுத்துக்காட்டு செய்யலாம், அதாவது காட்சியில் ஏற்கனவே பல முறை இருக்கும் வடிவியல் ஒரு முறை மட்டுமே ஏற்றப்படும், மேலும் வடிவவியலின் ஏதேனும் கூடுதல் நிகழ்வுகள் நினைவகத்தில் உள்ள அதே வடிவியல் தரவைக் குறிக்கும். நிறுவலில் இருந்து பயனடையக்கூடிய மீண்டும் மீண்டும் வரும் வடிவவியலுடன் இருக்கும் Katana திட்டங்களை காட்சி வரைபடத்தில் மீண்டும் மீண்டும் வரும் வடிவியல் இருப்பிடங்களுக்கு ஒரு instance.ID பண்புக்கூறைச் சேர்ப்பதன் மூலம் எளிதாக மாற்றியமைக்கலாம். இருப்பினும், ஒரு குறைபாடு என்னவென்றால், குழந்தைகள் இல்லாத இடங்களை மட்டுமே எடுத்துக்காட்டு செய்ய முடியும்.

இதை அடைய, ஒரே மாதிரியான அனைத்து இடங்களுக்கும் பொருந்தக்கூடிய instance.ID பண்புக்கூறு இருக்க வேண்டும். ஒரு இடம், வழங்குநரால் நிகழ்வு மூலமாகத் தேர்ந்தெடுக்கப்படும், பின்னர் மற்ற எல்லா இடங்களும் அந்த இடத்தின் நிகழ்வுகளாகக் கருதப்படும்.

குறிப்பு: அனைத்து இடங்களிலும் வடிவியல் இருக்க வேண்டுமா அல்லது காட்சி வரைபடத்தில் மிக உயர்ந்த இடத்திற்கு மட்டுமே வடிவியல் தேவையா என்பதை தீர்மானிக்க, நிகழ்வு மூலமாக வடிவியல் எவ்வாறு தேர்ந்தெடுக்கப்படுகிறது என்பதைப் புரிந்துகொள்வது மிக முக்கியம். நிகழ்வு மூலம் எவ்வாறு தேர்ந்தெடுக்கப்படுகிறது என்பதைப் புரிந்துகொள்ள ரெண்டரர் ஆவணங்களைப் பார்க்கவும்.

ஒரு புள்ளி மேகத்திற்கு இலை-நிலை நிறுவுதல்

ஒரு புள்ளி மேகத்திற்கு இன்ஸ்டன்ஸ் செய்வதற்கு இன்ஸ்டன்ஸ் ஐடிகளைப் பயன்படுத்துவதற்கு, ஒரு புள்ளி மேகத்தின் ஒவ்வொரு புள்ளிக்கும் ஒரு நிகழ்வு மூலத்தை நகலெடுக்க ஒரு ஆப்ஸ்கிரிப்ட் தேவைப்படுகிறது. ஒரு எளிய தீர்வு, ஒரு ஆப்ஸ்கிரிப்ட்டின் தேவை இல்லாமல் படிநிலை இன்ஸ்டன்ஸ் ஆகும் ( Q100508 ஐப் பார்க்கவும்: படிநிலை (இன்ஸ்டன்ஸ் மூல) இன்ஸ்டன்ஸ் மூலம் காட்சி வரைபட சமையல் செயல்திறனை அதிகரிப்பது ). இருப்பினும், எந்தவொரு இன்ஸ்டன்ஸ் முறைக்கும் ஒரு ஆப்ஸ்கிரிப்டைப் பயன்படுத்துவதன் நன்மை என்னவென்றால், தனிப்பட்ட நிகழ்வு இருப்பிடங்கள் பார்வையாளரில் தெரியும் மற்றும் ஒவ்வொரு நிகழ்வுக்கும் தனித்தனியாக பொருட்களை ஒதுக்க முடியும் . ஒரு சாத்தியமான குறைபாடு என்னவென்றால், சற்று அதிக சிரமமான காட்சி வரைபடம், குறிப்பாக ஆயிரக்கணக்கான நிகழ்வுகள் இருந்தால்.

OpScript ஒரு நிகழ்வு இருப்பிடத்தை உருவாக்கி, புள்ளி மேகத்தில் உள்ள ஒவ்வொரு புள்ளிக்கும் instance.ID பண்புக்கூறை நகலெடுக்கிறது. OpScript ஆல் இருப்பிடங்கள் உருவாக்கப்பட்டவுடன், ரெண்டரர் ஒரு இடத்தை வடிவியல் மூலமாகத் தேர்ந்தெடுக்கிறார், பின்னர் மற்ற அனைத்து இடங்களும் அந்த இடத்தின் நிகழ்வுகளாகக் கருதப்படுகின்றன . ஒரு புள்ளி மேகத்திற்கு இலை-நிலை நிலைத்தன்மையை அடைவதற்கான படிகள் பின்வருமாறு.

1. Alembic_In ஐப் பயன்படுத்தி ஒரு புள்ளி மேகத்தையும் நிகழ்வு மூலத்தையும் இறக்குமதி செய்யவும். பின்னர் புள்ளி மேக இடத்தில் instance.ID எனப்படும் பண்புக்கூறை ஒரு தன்னிச்சையான சர மதிப்புக்கு அமைக்கவும். இந்த எடுத்துக்காட்டில், instance.ID bob ஆக அமைக்கப்பட்டுள்ளது.

2. ஒரு OpScript முனையை உருவாக்கி அதன் இருப்பிட அளவுருவை ஒரு காட்சி வரைபட இடத்திற்கு அமைக்கவும், அதன் கீழ் நிகழ்வுகள் உருவாக்கப்படும், f அல்லது எடுத்துக்காட்டு: /root/world/geo/derivedassets

3. OpScript முனையில், ஒரு user.instanceSourceLocation அளவுருவை உருவாக்கி, அதை நிகழ்வு மூலத்தின் காட்சி வரைபட இடத்திற்கு அமைக்கவும். பின்னர் புள்ளி மேகத்தின் காட்சி வரைபட இடத்திற்கு ஒரு user.pointCloudLocation அளவுருவை உருவாக்கவும். பயனர் அளவுருக்களை உருவாக்குவதற்கான படிகளுக்கு, Katana பயனர் வழிகாட்டியைப் பார்க்கவும்: பயனர் அளவுருக்களைச் சேர்த்தல் . லீஃப்-லெவல் இன்ஸ்டான்சிங்கில், நிகழ்வு மூல இருப்பிடம் குழந்தைகளைக் கொண்டிருக்க முடியாது, இல்லையெனில் இன்ஸ்டான்சிங் வேலை செய்யாது என்பதை நினைவில் கொள்ளவும்.

4. பின்னர் புள்ளி மேகத்தில் உள்ள ஒவ்வொரு புள்ளிக்கும் நிகழ்வு இருப்பிடங்களை உருவாக்க பின்வரும் குறியீட்டை OpScript முனையின் ஸ்கிரிப்ட் அளவுருவில் நகலெடுக்கவும்.

 -- Read op arguments
local instanceSourceLocation = Interface.GetOpArg( "user.instanceSourceLocation" ):getValue()
local pointCloudLocation = Interface.GetOpArg( "user.pointCloudLocation" ):getValue()

if Interface.AtRoot() then
 
-- Read the point cloud
 
local points = Interface.GetAttr( "geometry.point.P" , pointCloudLocation):getNearestSample(Interface.GetCurrentTime())

 
-- Read the instanceID
 
local instanceID = Interface.GetAttr( "instance.ID" , pointCloudLocation):getNearestSample(Interface.GetCurrentTime())

 
-- Loop over points
 
local x, y, z
 
local gb = GroupBuilder()
 
for i= 0 , #points/ 3 - 1 do
      x = points[
3 *i+ 1 ]
      y = points[
3 *i+ 2 ]
      z = points[
3 *i+ 3 ]

     
-- Build op arguments for the child location
      gb:update(Interface.GetOpArg())
      gb:set(
"childAttrs" , Interface.GetAttr( "" , instanceSourceLocation))
      gb:set(
"childAttrs.geometry.instanceSource" , StringAttribute(instanceSourceLocation))
      gb:set(
"childAttrs.xform.interactive.translate" , DoubleAttribute({x, y, z}))
      gb:set(
"childAttrs.instance.ID" , StringAttribute(instanceID))

     
-- Create the child
      Interface.CreateChild(
         
string . format ( "child%04d" , i),
          Interface.GetOpType(),
          gb:build())
 
end
else
 
local childAttrs = Interface.GetOpArg( "childAttrs" )
 
for i= 0 , childAttrs:getNumberOfChildren() -1 do
      Interface.SetAttr(childAttrs:getChildName(i), childAttrs:getChildByIndex(i))
 
end
end

மேலே உள்ள OpScript, instance.ID பண்புக்கூறு உட்பட, ஒரு புள்ளி மேகத்தில் உள்ள ஒவ்வொரு புள்ளிக்கும் நிகழ்வு மூலத்தை நகலெடுக்கிறது.

5. கடைசியாக, காட்சி வரைபடத்திலிருந்து புள்ளி மேகத்தை அகற்ற ப்ரூன் முனையைப் பயன்படுத்தி அதை ரெண்டரரில் இருந்து தவிர்க்கவும். புள்ளி மேகம் ரெண்டரரால் ஒரு நிகழ்வு மூலமாகத் தேர்ந்தெடுக்கப்படாமல் இருக்க இந்தப் படி அவசியம்.

பொருள் ஒதுக்கீட்டைப் பயன்படுத்தி பொருள் மாறுபாடு

ஒவ்வொரு நிகழ்விற்கும் பொருளை மாற்றியமைப்பது சில கூடுதல் வேலைகளை ஏற்படுத்தும், ஏனெனில் எல்லா நிகழ்வுகளும் பொருள் போன்ற நிகழ்வு மூலத்தின் பண்புகளைப் பெறுகின்றன. இந்த பிரிவு, உடனடி செயல்திறன் நன்மைகளைப் பராமரிக்கும் அதே வேளையில், ஒரு நிகழ்விற்கு பொருள் மற்றும் ஷேடரை மாற்றுவதற்கான ஒரு முறையை விளக்கும்.

புள்ளி மேகங்களில் ஒவ்வொரு புள்ளிக்கும் நிகழ்வு இருப்பிடங்களை உருவாக்க, இலை-நிலை மற்றும் படிநிலை நிறுவல் முறையை ஆப்ஸ்கிரிப்டுடன் பயன்படுத்துவது, ஒவ்வொரு நிகழ்வு இருப்பிடத்திற்கும் பொருட்களை ஒதுக்க முடியும் என்ற நன்மையைக் கொண்டுள்ளது.

நிகழ்வு இருப்பிடங்களை உருவாக்கிய பிறகு, ஒவ்வொரு நிகழ்வின் இருப்பிடத்திற்கும் பொருட்களை மாற்றலாம். குறிப்பிட்ட நிகழ்வுகளை அடையாளம் காண்பது, காட்சி வரைபடத்தில் நிகழ்வு இருப்பிடங்களை விரிவுபடுத்துவது மற்றும் பார்வையாளரில் விரும்பிய நிகழ்வைத் தேர்ந்தெடுப்பது போன்றது. வழங்கப்பட்ட எடுத்துக்காட்டு திட்டத்தில், நிகழ்வு இருப்பிடங்களை /root/world/geo/derivedassets இருப்பிடத்தின் கீழ் காணலாம்.

பின்னர் ஒரு பொருளை MaterialAssign முனையைப் பயன்படுத்தி அல்லது நிகழ்வு இடத்தில் ஒரு materialAssign பண்புக்கூறை அமைத்து, பொருள் இருப்பிடத்தைச் சுட்டிக்காட்டி விரும்பிய இடங்களுக்கு ஒதுக்கலாம்.

மேலும் படிக்க
இன்ஸ்டான்சிங் கண்ணோட்டத்திற்கு, கீழே உள்ள முதல் ஆதார இணைப்பைப் பார்க்கவும். கீழே உள்ள பிற ஆதாரங்கள் ஒவ்வொரு இன்ஸ்டான்சிங் முறையிலும் உள்ள பிற மேம்பட்ட இன்ஸ்டான்சிங் தலைப்புகளைப் பற்றி ஆழமாகப் பேசுகின்றன.

இணைப்புகள்

We're sorry to hear that

Please tell us why